pax_global_header00006660000000000000000000000064150044425440014514gustar00rootroot0000000000000052 comment=c4fc655170b534478a6b131292b987630c7c0865 systemtap-5.3/000077500000000000000000000000001500444254400134145ustar00rootroot00000000000000systemtap-5.3/.gitignore000066400000000000000000000010141500444254400154000ustar00rootroot00000000000000*~ #* *# .#* 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 language-server/clients/vscode/out node_modules package-lock.json language-server/clients/eclipse/binsystemtap-5.3/.mailmap000066400000000000000000000044141500444254400150400ustar00rootroot00000000000000# 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 Tony Jones Yichun Zhang (agentzh) systemtap-5.3/ABOUT-NLS000066400000000000000000002671331500444254400146570ustar00rootroot000000000000001 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-5.3/AUTHORS000066400000000000000000000070531500444254400144710ustar00rootroot00000000000000Aaron Merey Aaron Tomlin Abegail Jakop Adrien Kunysz Alexander Lochmann Alexander Y. Fomichev Alexandra Hájková Alfred Landrum Aliaksandr Valialkin 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 Carl Shapiro 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 Denis Pronin 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 Gioele Barabucci 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 Housam Alamour 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 Jonathan Wakely 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 Lumir Balhar Lumír Balhar Mahesh J Salgaonkar Malte Nuhn Maran Pakkirisamy Marc Milgram Marcin Nowakowski Marco Benatto Mark McLoughlin Mark Wielaard Martin Cermak Martin Garton 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 Noah Sanci 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 Ryan Goldberg Rüdiger Sonderfeld Sagar Patel Sam James 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 Haines 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 Xinhua Li Yaakov Selkowitz Yang Wen Yichun Zhang (agentzh) Yoshihide Sonoda Zbigniew Jędrzejewski-Szmek Zexuan Luo Zhaolei Zhou Wenjian Zifei Tong ch huang dann frazier lijunlong yaowenbin systemtap-5.3/AUTHORS.sh000077500000000000000000000004651500444254400151050ustar00rootroot00000000000000#! /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-5.3/COPYING000066400000000000000000000432541500444254400144570ustar00rootroot00000000000000 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-5.3/EXAMPLES000077700000000000000000000000001500444254400223722testsuite/systemtap.examplesustar00rootroot00000000000000systemtap-5.3/HACKING000066400000000000000000000201351500444254400144040ustar00rootroot00000000000000This 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-5.3/INSTALL000066400000000000000000000224501500444254400144500ustar00rootroot00000000000000Installation 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-5.3/INTERNALS000066400000000000000000000135271500444254400147060ustar00rootroot00000000000000The 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-5.3/Makefile.am000066400000000000000000000400471500444254400154550ustar00rootroot00000000000000# 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 subdir-objects 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 -Wunused -Wformat=2 -W AM_CXXFLAGS = -Wall -Wextra if Werror AM_CFLAGS += -Werror AM_CXXFLAGS += -Werror endif bin_SCRIPTS = stap-report stap-profile-annotate stap-prep 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 staputil.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-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 \ tapset-debuginfod.cxx analysis.cxx noinst_HEADERS = sdt_types.h stap_LDADD = @stap_LIBS@ @sqlite3_LIBS@ @LIBINTL@ -lpthread @debuginfod_LDFLAGS@ @debuginfod_LIBS@ @DYNINST_LDFLAGS@ @DYNINST_LIBS@ stap_DEPENDENCIES = if HAVE_LANGUAGE_SERVER_SUPPORT stap_SOURCES += language-server/stap-language-server.cxx \ language-server/stap-code-completion.cxx language-server/jsonrpc.cxx endif if HAVE_LIBREADLINE stap_SOURCES += interactive.cxx stap_LDADD += @READLINE_LIBS@ endif if HAVE_JSON_C stap_LDADD += $(jsonc_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@ @debuginfod_CFLAGS@ stap_CPPFLAGS = $(AM_CPPFLAGS) -DSTAP_SDT_V2 stap_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BOOST_SYSTEM_LIB@ if HAVE_DYNINST stap_CXXFLAGS += $(DYNINST_CXXFLAGS) endif 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 staputil.cxx stap_sign_module_CPPFLAGS = $(AM_CPPFLAGS) stap_sign_module_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_sign_module_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_sign_module_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ $(debuginfod_LDFLAGS) 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 staputil.cxx stap_authorize_cert_CPPFLAGS = $(AM_CPPFLAGS) stap_authorize_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_authorize_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_authorize_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ $(debuginfod_LDFLAGS) 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 staputil.cxx privilege.cxx nsscommon.cxx cmdline.cxx stap_serverd_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_serverd_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_serverd_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ $(debuginfod_LDFLAGS) 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 staputil.cxx nsscommon.cxx stap_gen_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_gen_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_gen_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ $(debuginfod_LDFLAGS) 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)/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 \ | grep -E -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 interactive-notebook # 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 -E 'working.(tree|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-5.3/Makefile.in000066400000000000000000006566151500444254400155040ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 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@ @Werror_TRUE@am__append_1 = -Werror @Werror_TRUE@am__append_2 = -Werror bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) @BUILD_TRANSLATOR_TRUE@am__append_3 = stap @BUILD_TRANSLATOR_TRUE@am__append_4 = dtrace @BUILD_TRANSLATOR_TRUE@pkglibexec_PROGRAMS = $(am__EXEEXT_3) \ @BUILD_TRANSLATOR_TRUE@ $(am__EXEEXT_4) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_5 = stap-sign-module stap-authorize-cert @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_6 = stap-serverd stap-gen-cert @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_7 = stap-server @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_8 = stap-start-server stap-stop-server @BUILD_TRANSLATOR_TRUE@@HAVE_LANGUAGE_SERVER_SUPPORT_TRUE@am__append_9 = language-server/stap-language-server.cxx \ @BUILD_TRANSLATOR_TRUE@@HAVE_LANGUAGE_SERVER_SUPPORT_TRUE@ language-server/stap-code-completion.cxx language-server/jsonrpc.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_LIBREADLINE_TRUE@am__append_10 = interactive.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_LIBREADLINE_TRUE@am__append_11 = @READLINE_LIBS@ @BUILD_TRANSLATOR_TRUE@@HAVE_JSON_C_TRUE@am__append_12 = $(jsonc_LIBS) @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@am__append_13 = bpf-base.cxx bpf-bitset.cxx bpf-translate.cxx bpf-opt.cxx @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@am__append_14 = stapvirt @BUILD_TRANSLATOR_TRUE@@HAVE_DYNINST_TRUE@am__append_15 = $(DYNINST_CXXFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__append_16 = $(avahi_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__append_17 = $(avahi_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__append_18 = $(avahi_LIBS) @BUILD_TRANSLATOR_TRUE@@NEED_BASE_CLIENT_CODE_TRUE@am__append_19 = csclient.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_20 = nsscommon.cxx client-nss.cxx cscommon.cxx nss-server-info.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_21 = $(nss_CFLAGS) -DSTAP @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_22 = $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_23 = $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_24 = $(nss_LIBS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_25 = install-scripts @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__append_26 = client-http.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__append_27 = $(libcurl_LIBS) $(jsonc_LIBS) $(openssl_LIBS) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_28 = $(openssl_LIBS) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_29 = $(openssl_LIBS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__append_30 = $(avahi_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__append_31 = $(avahi_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__append_32 = $(avahi_LIBS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_33 = $(openssl_LIBS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_34 = $(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 stap-profile-annotate 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) am__dirstamp = $(am__leading_dot)dirstamp @BUILD_TRANSLATOR_TRUE@@HAVE_LANGUAGE_SERVER_SUPPORT_TRUE@am__objects_1 = language-server/stap-stap-language-server.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_LANGUAGE_SERVER_SUPPORT_TRUE@ language-server/stap-stap-code-completion.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_LANGUAGE_SERVER_SUPPORT_TRUE@ language-server/stap-jsonrpc.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@HAVE_LIBREADLINE_TRUE@am__objects_2 = stap-interactive.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@am__objects_3 = 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_4 = stap-csclient.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__objects_5 = 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_6 = 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-staputil.$(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-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-tapset-debuginfod.$(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) $(am__objects_6) stap_OBJECTS = $(am_stap_OBJECTS) am__DEPENDENCIES_1 = @BUILD_TRANSLATOR_TRUE@@HAVE_JSON_C_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__DEPENDENCIES_3 = \ @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@ $(am__DEPENDENCIES_1) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_4 = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__DEPENDENCIES_5 = $(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-staputil.$(OBJEXT) stap_authorize_cert_OBJECTS = $(am_stap_authorize_cert_OBJECTS) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_6 = $(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_6) 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-staputil.$(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_7 = $(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_7) 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-staputil.$(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_8 = $(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_8) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_7) 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-staputil.$(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_6) 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-staputil.Po ./$(DEPDIR)/stap-stringtable.Po \ ./$(DEPDIR)/stap-tapset-been.Po \ ./$(DEPDIR)/stap-tapset-debuginfod.Po \ ./$(DEPDIR)/stap-tapset-dynprobe.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_authorize_cert-nsscommon.Po \ ./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po \ ./$(DEPDIR)/stap_authorize_cert-staputil.Po \ ./$(DEPDIR)/stap_gen_cert-nsscommon.Po \ ./$(DEPDIR)/stap_gen_cert-stap-gen-cert.Po \ ./$(DEPDIR)/stap_gen_cert-staputil.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-staputil.Po \ ./$(DEPDIR)/stap_sign_module-nsscommon.Po \ ./$(DEPDIR)/stap_sign_module-stap-sign-module.Po \ ./$(DEPDIR)/stap_sign_module-staputil.Po \ ./$(DEPDIR)/stapvirt-stapvirt.Po \ language-server/$(DEPDIR)/stap-jsonrpc.Po \ language-server/$(DEPDIR)/stap-stap-code-completion.Po \ language-server/$(DEPDIR)/stap-stap-language-server.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)` 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@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ 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@ ENABLE_NLS = @ENABLE_NLS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ 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_LDFLAGS = @debuginfod_LDFLAGS@ 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 subdir-objects 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 -Wunused \ -Wformat=2 -W $(am__append_1) AM_CXXFLAGS = -Wall -Wextra $(am__append_2) bin_SCRIPTS = stap-report stap-profile-annotate stap-prep \ $(am__append_4) $(am__append_7) pkglibexec_SCRIPTS = stap-env $(am__append_8) 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 staputil.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-utrace.cxx \ @BUILD_TRANSLATOR_TRUE@ task_finder.cxx dwflpp.cxx \ @BUILD_TRANSLATOR_TRUE@ rpm_finder.cxx setupdwfl.cxx remote.cxx \ @BUILD_TRANSLATOR_TRUE@ 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 tapset-debuginfod.cxx \ @BUILD_TRANSLATOR_TRUE@ analysis.cxx $(am__append_9) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_10) $(am__append_13) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_19) $(am__append_20) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_26) @BUILD_TRANSLATOR_TRUE@noinst_HEADERS = sdt_types.h @BUILD_TRANSLATOR_TRUE@stap_LDADD = @stap_LIBS@ @sqlite3_LIBS@ \ @BUILD_TRANSLATOR_TRUE@ @LIBINTL@ -lpthread \ @BUILD_TRANSLATOR_TRUE@ @debuginfod_LDFLAGS@ @debuginfod_LIBS@ \ @BUILD_TRANSLATOR_TRUE@ @DYNINST_LDFLAGS@ @DYNINST_LIBS@ \ @BUILD_TRANSLATOR_TRUE@ $(am__append_11) $(am__append_12) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_18) $(am__append_24) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_27) @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_25) runcheck update-po dist-gzip rpm srpm \ uprobes install-uprobes @BUILD_TRANSLATOR_TRUE@stap_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ \ @BUILD_TRANSLATOR_TRUE@ $(am__append_21) @BUILD_TRANSLATOR_TRUE@stap_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ \ @BUILD_TRANSLATOR_TRUE@ @ALIGNEDNEW@ @debuginfod_CFLAGS@ \ @BUILD_TRANSLATOR_TRUE@ $(am__append_15) $(am__append_16) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_22) @BUILD_TRANSLATOR_TRUE@stap_CPPFLAGS = $(AM_CPPFLAGS) -DSTAP_SDT_V2 \ @BUILD_TRANSLATOR_TRUE@ $(am__append_17) $(am__append_23) @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 staputil.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) $(debuginfod_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@ $(debuginfod_LDFLAGS) @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_28) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_SOURCES = stap-authorize-cert.cxx nsscommon.cxx staputil.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) $(debuginfod_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@ $(debuginfod_LDFLAGS) @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_29) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_SOURCES = stap-serverd.cxx cscommon.cxx staputil.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@ $(debuginfod_CFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_31) @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_30) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ $(debuginfod_LDFLAGS) @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_32) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_33) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_SOURCES = stap-gen-cert.cxx staputil.cxx nsscommon.cxx @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) $(debuginfod_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@ $(debuginfod_LDFLAGS) @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_34) # 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 interactive-notebook # 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 $@ stap-profile-annotate: $(top_builddir)/config.status $(srcdir)/stap-profile-annotate.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) language-server/$(am__dirstamp): @$(MKDIR_P) language-server @: > language-server/$(am__dirstamp) language-server/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) language-server/$(DEPDIR) @: > language-server/$(DEPDIR)/$(am__dirstamp) language-server/stap-stap-language-server.$(OBJEXT): \ language-server/$(am__dirstamp) \ language-server/$(DEPDIR)/$(am__dirstamp) language-server/stap-stap-code-completion.$(OBJEXT): \ language-server/$(am__dirstamp) \ language-server/$(DEPDIR)/$(am__dirstamp) language-server/stap-jsonrpc.$(OBJEXT): \ language-server/$(am__dirstamp) \ language-server/$(DEPDIR)/$(am__dirstamp) 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) -rm -f language-server/*.$(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-staputil.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-debuginfod.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-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_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-staputil.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-staputil.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-staputil.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-staputil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stapvirt-stapvirt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@language-server/$(DEPDIR)/stap-jsonrpc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@language-server/$(DEPDIR)/stap-stap-code-completion.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@language-server/$(DEPDIR)/stap-stap-language-server.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-staputil.o: staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-staputil.o -MD -MP -MF $(DEPDIR)/stap-staputil.Tpo -c -o stap-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-staputil.Tpo $(DEPDIR)/stap-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap-staputil.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-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx stap-staputil.obj: staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-staputil.obj -MD -MP -MF $(DEPDIR)/stap-staputil.Tpo -c -o stap-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-staputil.Tpo $(DEPDIR)/stap-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap-staputil.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-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.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-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-tapset-debuginfod.o: tapset-debuginfod.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-debuginfod.o -MD -MP -MF $(DEPDIR)/stap-tapset-debuginfod.Tpo -c -o stap-tapset-debuginfod.o `test -f 'tapset-debuginfod.cxx' || echo '$(srcdir)/'`tapset-debuginfod.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-debuginfod.Tpo $(DEPDIR)/stap-tapset-debuginfod.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-debuginfod.cxx' object='stap-tapset-debuginfod.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-debuginfod.o `test -f 'tapset-debuginfod.cxx' || echo '$(srcdir)/'`tapset-debuginfod.cxx stap-tapset-debuginfod.obj: tapset-debuginfod.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-debuginfod.obj -MD -MP -MF $(DEPDIR)/stap-tapset-debuginfod.Tpo -c -o stap-tapset-debuginfod.obj `if test -f 'tapset-debuginfod.cxx'; then $(CYGPATH_W) 'tapset-debuginfod.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-debuginfod.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-debuginfod.Tpo $(DEPDIR)/stap-tapset-debuginfod.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-debuginfod.cxx' object='stap-tapset-debuginfod.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-debuginfod.obj `if test -f 'tapset-debuginfod.cxx'; then $(CYGPATH_W) 'tapset-debuginfod.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-debuginfod.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` language-server/stap-stap-language-server.o: language-server/stap-language-server.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT language-server/stap-stap-language-server.o -MD -MP -MF language-server/$(DEPDIR)/stap-stap-language-server.Tpo -c -o language-server/stap-stap-language-server.o `test -f 'language-server/stap-language-server.cxx' || echo '$(srcdir)/'`language-server/stap-language-server.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) language-server/$(DEPDIR)/stap-stap-language-server.Tpo language-server/$(DEPDIR)/stap-stap-language-server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='language-server/stap-language-server.cxx' object='language-server/stap-stap-language-server.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 language-server/stap-stap-language-server.o `test -f 'language-server/stap-language-server.cxx' || echo '$(srcdir)/'`language-server/stap-language-server.cxx language-server/stap-stap-language-server.obj: language-server/stap-language-server.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT language-server/stap-stap-language-server.obj -MD -MP -MF language-server/$(DEPDIR)/stap-stap-language-server.Tpo -c -o language-server/stap-stap-language-server.obj `if test -f 'language-server/stap-language-server.cxx'; then $(CYGPATH_W) 'language-server/stap-language-server.cxx'; else $(CYGPATH_W) '$(srcdir)/language-server/stap-language-server.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) language-server/$(DEPDIR)/stap-stap-language-server.Tpo language-server/$(DEPDIR)/stap-stap-language-server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='language-server/stap-language-server.cxx' object='language-server/stap-stap-language-server.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 language-server/stap-stap-language-server.obj `if test -f 'language-server/stap-language-server.cxx'; then $(CYGPATH_W) 'language-server/stap-language-server.cxx'; else $(CYGPATH_W) '$(srcdir)/language-server/stap-language-server.cxx'; fi` language-server/stap-stap-code-completion.o: language-server/stap-code-completion.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT language-server/stap-stap-code-completion.o -MD -MP -MF language-server/$(DEPDIR)/stap-stap-code-completion.Tpo -c -o language-server/stap-stap-code-completion.o `test -f 'language-server/stap-code-completion.cxx' || echo '$(srcdir)/'`language-server/stap-code-completion.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) language-server/$(DEPDIR)/stap-stap-code-completion.Tpo language-server/$(DEPDIR)/stap-stap-code-completion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='language-server/stap-code-completion.cxx' object='language-server/stap-stap-code-completion.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 language-server/stap-stap-code-completion.o `test -f 'language-server/stap-code-completion.cxx' || echo '$(srcdir)/'`language-server/stap-code-completion.cxx language-server/stap-stap-code-completion.obj: language-server/stap-code-completion.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT language-server/stap-stap-code-completion.obj -MD -MP -MF language-server/$(DEPDIR)/stap-stap-code-completion.Tpo -c -o language-server/stap-stap-code-completion.obj `if test -f 'language-server/stap-code-completion.cxx'; then $(CYGPATH_W) 'language-server/stap-code-completion.cxx'; else $(CYGPATH_W) '$(srcdir)/language-server/stap-code-completion.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) language-server/$(DEPDIR)/stap-stap-code-completion.Tpo language-server/$(DEPDIR)/stap-stap-code-completion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='language-server/stap-code-completion.cxx' object='language-server/stap-stap-code-completion.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 language-server/stap-stap-code-completion.obj `if test -f 'language-server/stap-code-completion.cxx'; then $(CYGPATH_W) 'language-server/stap-code-completion.cxx'; else $(CYGPATH_W) '$(srcdir)/language-server/stap-code-completion.cxx'; fi` language-server/stap-jsonrpc.o: language-server/jsonrpc.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT language-server/stap-jsonrpc.o -MD -MP -MF language-server/$(DEPDIR)/stap-jsonrpc.Tpo -c -o language-server/stap-jsonrpc.o `test -f 'language-server/jsonrpc.cxx' || echo '$(srcdir)/'`language-server/jsonrpc.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) language-server/$(DEPDIR)/stap-jsonrpc.Tpo language-server/$(DEPDIR)/stap-jsonrpc.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='language-server/jsonrpc.cxx' object='language-server/stap-jsonrpc.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 language-server/stap-jsonrpc.o `test -f 'language-server/jsonrpc.cxx' || echo '$(srcdir)/'`language-server/jsonrpc.cxx language-server/stap-jsonrpc.obj: language-server/jsonrpc.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT language-server/stap-jsonrpc.obj -MD -MP -MF language-server/$(DEPDIR)/stap-jsonrpc.Tpo -c -o language-server/stap-jsonrpc.obj `if test -f 'language-server/jsonrpc.cxx'; then $(CYGPATH_W) 'language-server/jsonrpc.cxx'; else $(CYGPATH_W) '$(srcdir)/language-server/jsonrpc.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) language-server/$(DEPDIR)/stap-jsonrpc.Tpo language-server/$(DEPDIR)/stap-jsonrpc.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='language-server/jsonrpc.cxx' object='language-server/stap-jsonrpc.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 language-server/stap-jsonrpc.obj `if test -f 'language-server/jsonrpc.cxx'; then $(CYGPATH_W) 'language-server/jsonrpc.cxx'; else $(CYGPATH_W) '$(srcdir)/language-server/jsonrpc.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-staputil.o: staputil.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-staputil.o -MD -MP -MF $(DEPDIR)/stap_authorize_cert-staputil.Tpo -c -o stap_authorize_cert-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-staputil.Tpo $(DEPDIR)/stap_authorize_cert-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap_authorize_cert-staputil.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-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx stap_authorize_cert-staputil.obj: staputil.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-staputil.obj -MD -MP -MF $(DEPDIR)/stap_authorize_cert-staputil.Tpo -c -o stap_authorize_cert-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-staputil.Tpo $(DEPDIR)/stap_authorize_cert-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap_authorize_cert-staputil.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-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.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-staputil.o: staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-staputil.o -MD -MP -MF $(DEPDIR)/stap_gen_cert-staputil.Tpo -c -o stap_gen_cert-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-staputil.Tpo $(DEPDIR)/stap_gen_cert-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap_gen_cert-staputil.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-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx stap_gen_cert-staputil.obj: staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-staputil.obj -MD -MP -MF $(DEPDIR)/stap_gen_cert-staputil.Tpo -c -o stap_gen_cert-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-staputil.Tpo $(DEPDIR)/stap_gen_cert-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap_gen_cert-staputil.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-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.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-staputil.o: staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-staputil.o -MD -MP -MF $(DEPDIR)/stap_serverd-staputil.Tpo -c -o stap_serverd-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-staputil.Tpo $(DEPDIR)/stap_serverd-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap_serverd-staputil.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-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx stap_serverd-staputil.obj: staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-staputil.obj -MD -MP -MF $(DEPDIR)/stap_serverd-staputil.Tpo -c -o stap_serverd-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-staputil.Tpo $(DEPDIR)/stap_serverd-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap_serverd-staputil.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-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.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-staputil.o: staputil.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-staputil.o -MD -MP -MF $(DEPDIR)/stap_sign_module-staputil.Tpo -c -o stap_sign_module-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-staputil.Tpo $(DEPDIR)/stap_sign_module-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap_sign_module-staputil.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-staputil.o `test -f 'staputil.cxx' || echo '$(srcdir)/'`staputil.cxx stap_sign_module-staputil.obj: staputil.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-staputil.obj -MD -MP -MF $(DEPDIR)/stap_sign_module-staputil.Tpo -c -o stap_sign_module-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-staputil.Tpo $(DEPDIR)/stap_sign_module-staputil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staputil.cxx' object='stap_sign_module-staputil.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-staputil.obj `if test -f 'staputil.cxx'; then $(CYGPATH_W) 'staputil.cxx'; else $(CYGPATH_W) '$(srcdir)/staputil.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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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) -rm -f language-server/$(DEPDIR)/$(am__dirstamp) -rm -f language-server/$(am__dirstamp) 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-staputil.Po -rm -f ./$(DEPDIR)/stap-stringtable.Po -rm -f ./$(DEPDIR)/stap-tapset-been.Po -rm -f ./$(DEPDIR)/stap-tapset-debuginfod.Po -rm -f ./$(DEPDIR)/stap-tapset-dynprobe.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_authorize_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-staputil.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-staputil.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-staputil.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-staputil.Po -rm -f ./$(DEPDIR)/stapvirt-stapvirt.Po -rm -f language-server/$(DEPDIR)/stap-jsonrpc.Po -rm -f language-server/$(DEPDIR)/stap-stap-code-completion.Po -rm -f language-server/$(DEPDIR)/stap-stap-language-server.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-staputil.Po -rm -f ./$(DEPDIR)/stap-stringtable.Po -rm -f ./$(DEPDIR)/stap-tapset-been.Po -rm -f ./$(DEPDIR)/stap-tapset-debuginfod.Po -rm -f ./$(DEPDIR)/stap-tapset-dynprobe.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_authorize_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-staputil.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-staputil.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-staputil.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-staputil.Po -rm -f ./$(DEPDIR)/stapvirt-stapvirt.Po -rm -f language-server/$(DEPDIR)/stap-jsonrpc.Po -rm -f language-server/$(DEPDIR)/stap-stap-code-completion.Po -rm -f language-server/$(DEPDIR)/stap-stap-language-server.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-exec 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)/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 \ | grep -E -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 -E 'working.(tree|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-5.3/NEWS000066400000000000000000004141751500444254400141270ustar00rootroot00000000000000* What's new in version 5.3, 2025-05-02 - Updated to support drastic linux 6.13 kbuild changes, numerous other 6.14/6.15 linux API changes. - The first pass (-p1) now runs parse operations concurrently over of the hundreds of tapset .stp files, potentially saving seconds of time at startup. - The systemtap rpm package now invokes a few basic tests during %check, intended to confirm compatibility with the kernel. * What's new in version 5.2, 2024-11-08 - New /* pragma:suffix */ for file-level embedded C code blocks to be placed near the end of the emitted kernel module C file. - The systemtap-sdt-devel subrpm has been split into -dtrace and -devel subpackages. * What's new in version 5.1, 2024-04-26 - An experimental "--build-as=USER" flag to reduce privilege during script compilation. - Support DWARF "DW_OP_bra" location construct. - Dynamic namespace switching for processes targeted via "-x PID". - New probe-points for userland hardware breakpoints/watchpoints targeting processes (PR31180): probe process.data(ADDRESS).write probe process.data(ADDRESS).rw probe process.data(ADDRESS).length(LEN).write probe process.data(ADDRESS).length(LEN).rw - Support for stap --remote=bpf. - Improved searching heuristics for probing symbol names with/without symbol-version suffixes. - Improved message transport robustness for heavy traffic and for short runs. * What's new in version 5.0, 2023-11-04 - Performance improvements in uprobe registration and module startup. - More probe point process details are printed in "-L" list mode with more "-v". - For the case where newer kernels may break systemtap runtime APIs, better pass-4 failure diagnostics are printed. - Tapset function print_ubacktrace_fileline() now understands DWARF5. - The target(s) of process probes may be specified by path name globs, as located selected debuginfod servers. This requires the debuginfod servers to support "metadata" queries. The following probes all of the binaries matching /usr/*/curl known to the debuginfod servers, regardless of what's currently installed as the system /usr/bin/curl: # export DEBUGINFOD_URLS="URL1 URL2 ..." # stap -e 'probe debuginfod.process("/usr/*/curl").begin { log("hi") }' The archive glob may be given as an optional component to filter further: # stap -e 'probe debuginfod.archive("*.fc38*") .process("/usr/*/c*").function("main") { log("Hello World") }' - The kernel-user message transport system added framing codes, making the transport more reliable, but becoming incompatible across pre-5.0 versions. Use matching versions of stap and staprun. - RHEL6, kernel 2.6.32* as well as older releases have been deprecated from the codebase. RHEL7 and kernel version 3.10 are now the oldest supported versions for Systemtap. - The testsuite Makefile has been simplified to remove concurrency, so "parallel" and "resume" modes are gone. - New runtime macro STP_TIMING_NSECS is now supported for reporting probe timing stats in nsecs instead of cycles. This may become default later. - Add new runtime macro STP_FORCE_STDOUT_TTY to override STP_STDOUT_NOT_ATTY. * What's new in version 4.9, 2023-04-28 - ISystemtap: the new interactive systemtap jupyter kernel. This provides a simple GUI for writing/running Systemtap scripts in an easy, incremental way within Jupyterlab. Added 2 news scripts, stap-jupyter-install and stap-jupyter-container. See stap-jupyter(1). - The new "language-server" mode, specified by "stap --language-server", starts a LSP server which will communicate with the client via stdio. This server currently supports code completion suggestions. See language-server/README.md for more details and usage instructions. - Safety/liveness checking for $context variable assignments in probes of retpoline-compiled kernels is temporarily disabled. * What's new in version 4.8, 2022-11-03 - DWARF-related probes (.function, .statement) now merge DWARF and non-DWARF symbol-table based matches, rather than being either-or. - The python3 tapset was extended to support python3 3.9, 3.10, and 3.11. See stapprobes(3stap) for further details on probing python functions. - A template cve band-aid script is now included, which demonstrates how to use a new 'livepatch.stp' tapset to standardize activation, interactive control, and monitoring of systemtap cve band-aids. - The kernel runtime now uses much less memory when the number of "possible CPUs" are way more than the online ones. For example, VMWare guests usually have 128 "possible CPUs" while fewer CPUs are actually present or online in the guest system. - The memory allocation size is now irrelevant to the value of NR_CPUS of the current kernel. It is only subject to the number of "possible CPUs" or "online CPUs". - CPU hotplug is supported to the extent that there won't be any kernel panics or memory corruptions. - The bpf backend's embedded-code assembler has been improved to support more conventional assembly syntax with named opcodes. The opcode names are based on the iovisor bpf-docs documentation at https://github.com/iovisor/bpf-docs/blob/master/eBPF.md * What's new in version 4.7, 2022-05-02 - SystemTap now supports an additional method to sign modules on UEFI/SecureBoot systems. In addition to the existing method of using a trusted stap-server, the module can also be signed without using a server by specifying the "stap --sign-module" option. (Key enrollment still requires a one-time reboot and BIOS conversation.) https://sourceware.org/systemtap/wiki/SecureBoot - Includes new tool stap-profile-annotate, combining systemtap & debuginfod to collect system-wide profiling statistics, and produce annotated source files for all relevant programs/libraries. - target processes given with the -c/-x parameters are now always added to the -d list for possible symbol/unwind data extraction, for simplifying profiling invocations. Consider --ldd. - The "subbuf" size for kernel-to-user bulk message passing is fixed at the page size. Number of such subbufs is affected by the stap "-s" parameter and amount of free memory available. * What's new in version 4.6, 2021-11-15 - 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-5.3/README000066400000000000000000000126271500444254400143040ustar00rootroot00000000000000systemtap: 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 "--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-5.3/README.security000066400000000000000000000074731500444254400161550ustar00rootroot00000000000000Systemtap 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-5.3/README.stapregex000066400000000000000000000011361500444254400162760ustar00rootroot00000000000000The 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-5.3/README.unprivileged000066400000000000000000000303111500444254400167660ustar00rootroot00000000000000Unprivileged 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-5.3/aclocal.m4000066400000000000000000001651161500444254400152660ustar00rootroot00000000000000# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 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.72],, [m4_warning([this file was generated for autoconf 2.72. 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-2021 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.5], [], [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.5])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-2021 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-2021 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-2021 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-2021 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-2021 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-2021 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 m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])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_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([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 ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) 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-2021 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-2021 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-2021 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-2021 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-2021 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 MISSING="\${SHELL} '$am_aux_dir/missing'" 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-2021 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-2021 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-2021 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. Although site.py simply uses dnl sys.version[:3], printing that failed with Python 3.10, since the dnl trailing zero was eliminated. So now we output just the major dnl and minor version numbers, as numbers. Apparently the tertiary dnl version is not of interest. dnl AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; print ('%u.%u' % sys.version_info[[:2]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl At times, e.g., when building shared libraries, you may want dnl to know which OS platform Python thinks this is. dnl 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]) dnl emacs-page dnl If --with-python-sys-prefix is given, use the values of sys.prefix dnl and sys.exec_prefix for the corresponding values of PYTHON_PREFIX dnl and PYTHON_EXEC_PREFIX. Otherwise, use the GNU ${prefix} and dnl ${exec_prefix} variables. dnl dnl The two are made distinct variables so they can be overridden if dnl need be, although general consensus is that you shouldn't need dnl this separation. dnl dnl Also allow directly setting the prefixes via configure options, dnl overriding any default. dnl if test "x$prefix" = xNONE; then am__usable_prefix=$ac_default_prefix else am__usable_prefix=$prefix fi # Allow user to request using sys.* values from Python, # instead of the GNU $prefix values. AC_ARG_WITH([python-sys-prefix], [AS_HELP_STRING([--with-python-sys-prefix], [use Python's sys.prefix and sys.exec_prefix values])], [am_use_python_sys=:], [am_use_python_sys=false]) # Allow user to override whatever the default Python prefix is. AC_ARG_WITH([python_prefix], [AS_HELP_STRING([--with-python_prefix], [override the default PYTHON_PREFIX])], [am_python_prefix_subst=$withval am_cv_python_prefix=$withval AC_MSG_CHECKING([for explicit $am_display_PYTHON prefix]) AC_MSG_RESULT([$am_cv_python_prefix])], [ if $am_use_python_sys; then # using python sys.prefix value, not GNU AC_CACHE_CHECK([for python default $am_display_PYTHON prefix], [am_cv_python_prefix], [am_cv_python_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"`]) dnl If sys.prefix is a subdir of $prefix, replace the literal value of dnl $prefix with a variable reference so it can be overridden. case $am_cv_python_prefix in $am__usable_prefix*) am__strip_prefix=`echo "$am__usable_prefix" | sed 's|.|.|g'` am_python_prefix_subst=`echo "$am_cv_python_prefix" | sed "s,^$am__strip_prefix,\\${prefix},"` ;; *) am_python_prefix_subst=$am_cv_python_prefix ;; esac else # using GNU prefix value, not python sys.prefix am_python_prefix_subst='${prefix}' am_python_prefix=$am_python_prefix_subst AC_MSG_CHECKING([for GNU default $am_display_PYTHON prefix]) AC_MSG_RESULT([$am_python_prefix]) fi]) # Substituting python_prefix_subst value. AC_SUBST([PYTHON_PREFIX], [$am_python_prefix_subst]) # emacs-page Now do it all over again for Python exec_prefix, but with yet # another conditional: fall back to regular prefix if that was specified. AC_ARG_WITH([python_exec_prefix], [AS_HELP_STRING([--with-python_exec_prefix], [override the default PYTHON_EXEC_PREFIX])], [am_python_exec_prefix_subst=$withval am_cv_python_exec_prefix=$withval AC_MSG_CHECKING([for explicit $am_display_PYTHON exec_prefix]) AC_MSG_RESULT([$am_cv_python_exec_prefix])], [ # no explicit --with-python_exec_prefix, but if # --with-python_prefix was given, use its value for python_exec_prefix too. AS_IF([test -n "$with_python_prefix"], [am_python_exec_prefix_subst=$with_python_prefix am_cv_python_exec_prefix=$with_python_prefix AC_MSG_CHECKING([for python_prefix-given $am_display_PYTHON exec_prefix]) AC_MSG_RESULT([$am_cv_python_exec_prefix])], [ # Set am__usable_exec_prefix whether using GNU or Python values, # since we use that variable for pyexecdir. if test "x$exec_prefix" = xNONE; then am__usable_exec_prefix=$am__usable_prefix else am__usable_exec_prefix=$exec_prefix fi # if $am_use_python_sys; then # using python sys.exec_prefix, not GNU AC_CACHE_CHECK([for python default $am_display_PYTHON exec_prefix], [am_cv_python_exec_prefix], [am_cv_python_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"`]) dnl If sys.exec_prefix is a subdir of $exec_prefix, replace the dnl literal value of $exec_prefix with a variable reference so it can dnl be overridden. case $am_cv_python_exec_prefix in $am__usable_exec_prefix*) am__strip_prefix=`echo "$am__usable_exec_prefix" | sed 's|.|.|g'` am_python_exec_prefix_subst=`echo "$am_cv_python_exec_prefix" | sed "s,^$am__strip_prefix,\\${exec_prefix},"` ;; *) am_python_exec_prefix_subst=$am_cv_python_exec_prefix ;; esac else # using GNU $exec_prefix, not python sys.exec_prefix am_python_exec_prefix_subst='${exec_prefix}' am_python_exec_prefix=$am_python_exec_prefix_subst AC_MSG_CHECKING([for GNU default $am_display_PYTHON exec_prefix]) AC_MSG_RESULT([$am_python_exec_prefix]) fi])]) # Substituting python_exec_prefix_subst. AC_SUBST([PYTHON_EXEC_PREFIX], [$am_python_exec_prefix_subst]) # Factor out some code duplication into this shell variable. 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 emacs-page Set up 4 directories: dnl 1. 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. dnl AC_CACHE_CHECK([for $am_display_PYTHON script directory (pythondir)], [am_cv_python_pythondir], [if test "x$am_cv_python_prefix" = x; then am_py_prefix=$am__usable_prefix else am_py_prefix=$am_cv_python_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 2. 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. dnl AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl 3. pyexecdir: directory for installing python extension modules dnl (shared libraries). dnl Query distutils for this directory. dnl AC_CACHE_CHECK([for $am_display_PYTHON extension module directory (pyexecdir)], [am_cv_python_pyexecdir], [if test "x$am_cv_python_exec_prefix" = x; then am_py_exec_prefix=$am__usable_exec_prefix else am_py_exec_prefix=$am_cv_python_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_exec_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_exec_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 4. pkgpyexecdir: $(pyexecdir)/$(PACKAGE) dnl 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-2021 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-2021 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-2021 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-2021 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-2021 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-2021 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-5.3/analysis.cxx000066400000000000000000000163641500444254400157750ustar00rootroot00000000000000// 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" #include "session.h" #ifdef HAVE_DYNINST #include "loc2stap.h" #include "analysis.h" #include #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, SymtabAPI::Symtab *sym=NULL): symtab(sym), sts(s), co(c) {}; ~bin_info(){}; SymtabAPI::Symtab *symtab; SymtabCodeSource *sts; CodeObject *co; }; typedef map parsed_bin; static parsed_bin cached_info; // Clean things up when analysis no longer needs the cached dyninst objects void flush_analysis_caches() { for(auto i: cached_info) { delete i.second.co; delete i.second.sts; SymtabAPI::Symtab::closeSymtab(i.second.symtab); } cached_info.clear(); } 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; SymtabAPI::Symtab *symTab; bool isParsable; // 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 isParsable = SymtabAPI::Symtab::openFile(symTab, name_str); if(!isParsable) goto cleanup; sts = new SymtabCodeSource(symTab); if(!sts) goto cleanup; co = new CodeObject(sts); if(!co) goto cleanup; // Cache the info for future reference { bin_info entry(sts,co,symTab); 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__) /* For ppc64 still use the ppc32 register names */ static const MachRegister dyninst_register_64[] = { 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 }; 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(systemtap_session& s, target_symbol *e, string executable, Dwarf_Addr addr, location_context ctx) { try{ // Doing this inside a try/catch because dyninst may require // too much memory to parse the binary. // should cache the executable names like the other things analysis func_to_analyze(executable); MachRegister r; // Punt if unsuccessful in parsing binary if (!func_to_analyze.co){ s.print_warning(_F("liveness analysis unable to parse binary %s", executable.c_str()), e->tok); return 0; } // 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); } catch (std::bad_alloc & ex){ s.print_warning(_F("unable to allocate memory for liveness analysis of %s", executable.c_str()), e->tok); return 0; } } #endif // HAVE_DYNINST systemtap-5.3/analysis.h000066400000000000000000000015421500444254400154120ustar00rootroot00000000000000// -*- 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(systemtap_session& s, target_symbol *e, std::string executable, Dwarf_Addr location, location_context ctx); extern void flush_analysis_caches(); #else #define liveness(session, target, executable, location, var) (0) #define flush_analysis_caches() {/* nothing to do */} #endif // HAVE_DYNINST #endif // ANALYSIS_H /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-5.3/ar-lib000077500000000000000000000133031500444254400145100ustar00rootroot00000000000000#! /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; } } /* PR29307: BPF opcode lookup for the embedded-code assembler: */ std::map bpf_opcode_name_map; std::map bpf_src_opcode_map; // when operation takes SRC std::map bpf_imm_opcode_map; // when operation takes IMM std::map bpf_opcode_category_map; // XXX: Follows https://github.com/iovisor/bpf-docs/blob/master/eBPF.md rather than // kernel linux/bpf_exp.y to avoid getting into weird addressing-mode syntax. // Perhaps later, expanding the above bpf_{src,imm}_opcode_map scheme. // // Define as FN_{SRC,IMM}(op_name, raw_opcode, opcode, category) // (raw_opcode is the hex opcode taken from the iovisor cheatsheet, // opcode is the opcode as constructed from linux bpf.h/bpf_common.h macros // following the scheme in linux/filter.h (yet another assembler format!) // These codes should be equal, both are included to sanity-check the table.) // with FN_IMM used only for variants of SRC opcodes that take an IMM value. // // XXX: Does not have to be complete, just complete enough for the needs of the tapsets. // Will gradually add opcodes over the following patches. #ifndef __BPF_OPCODE_MAPPER #define __BPF_OPCODE_MAPPER(FN_SRC,FN_IMM) \ FN_SRC(add, 0x0f, BPF_ALU64 | BPF_OP(BPF_ADD) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(add, 0x07, BPF_ALU64 | BPF_OP(BPF_ADD) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(sub, 0x1f, BPF_ALU64 | BPF_OP(BPF_SUB) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(sub, 0x17, BPF_ALU64 | BPF_OP(BPF_SUB) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(mul, 0x2f, BPF_ALU64 | BPF_OP(BPF_MUL) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(mul, 0x27, BPF_ALU64 | BPF_OP(BPF_MUL) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(div, 0x3f, BPF_ALU64 | BPF_OP(BPF_DIV) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(div, 0x37, BPF_ALU64 | BPF_OP(BPF_DIV) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(or, 0x4f, BPF_ALU64 | BPF_OP(BPF_OR) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(or, 0x47, BPF_ALU64 | BPF_OP(BPF_OR) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(and, 0x5f, BPF_ALU64 | BPF_OP(BPF_AND) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(and, 0x57, BPF_ALU64 | BPF_OP(BPF_AND) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(lsh, 0x6f, BPF_ALU64 | BPF_OP(BPF_LSH) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(lsh, 0x67, BPF_ALU64 | BPF_OP(BPF_LSH) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(rsh, 0x7f, BPF_ALU64 | BPF_OP(BPF_RSH) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(rsh, 0x77, BPF_ALU64 | BPF_OP(BPF_RSH) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(neg, 0x87, BPF_ALU64 | BPF_OP(BPF_NEG) | BPF_K, BPF_ALU_ARI2), \ FN_SRC(mod, 0x9f, BPF_ALU64 | BPF_OP(BPF_MOD) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(mod, 0x97, BPF_ALU64 | BPF_OP(BPF_MOD) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(xor, 0xaf, BPF_ALU64 | BPF_OP(BPF_XOR) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(xor, 0xa7, BPF_ALU64 | BPF_OP(BPF_XOR) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(mov, 0xbf, BPF_ALU64 | BPF_MOV | BPF_X, BPF_ALU_ARI3), \ FN_IMM(mov, 0xb7, BPF_ALU64 | BPF_MOV | BPF_K, BPF_ALU_ARI3), \ FN_SRC(arsh, 0xcf, BPF_ALU64 | BPF_OP(BPF_ARSH) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(arsh, 0xc7, BPF_ALU64 | BPF_OP(BPF_ARSH) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(add32, 0x0c, BPF_ALU | BPF_OP(BPF_ADD) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(add32, 0x04, BPF_ALU | BPF_OP(BPF_ADD) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(sub32, 0x1c, BPF_ALU | BPF_OP(BPF_SUB) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(sub32, 0x14, BPF_ALU | BPF_OP(BPF_SUB) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(mul32, 0x2c, BPF_ALU | BPF_OP(BPF_MUL) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(mul32, 0x24, BPF_ALU | BPF_OP(BPF_MUL) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(div32, 0x3c, BPF_ALU | BPF_OP(BPF_DIV) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(div32, 0x34, BPF_ALU | BPF_OP(BPF_DIV) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(or32, 0x4c, BPF_ALU | BPF_OP(BPF_OR) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(or32, 0x44, BPF_ALU | BPF_OP(BPF_OR) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(and32, 0x5c, BPF_ALU | BPF_OP(BPF_AND) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(and32, 0x54, BPF_ALU | BPF_OP(BPF_AND) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(lsh32, 0x6c, BPF_ALU | BPF_OP(BPF_LSH) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(lsh32, 0x64, BPF_ALU | BPF_OP(BPF_LSH) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(rsh32, 0x7c, BPF_ALU | BPF_OP(BPF_RSH) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(rsh32, 0x74, BPF_ALU | BPF_OP(BPF_RSH) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(neg32, 0x84, BPF_ALU | BPF_OP(BPF_NEG) | BPF_K, BPF_ALU_ARI2), \ FN_SRC(mod32, 0x9c, BPF_ALU | BPF_OP(BPF_MOD) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(mod32, 0x94, BPF_ALU | BPF_OP(BPF_MOD) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(xor32, 0xac, BPF_ALU | BPF_OP(BPF_XOR) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(xor32, 0xa4, BPF_ALU | BPF_OP(BPF_XOR) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(mov32, 0xbc, BPF_ALU | BPF_MOV | BPF_X, BPF_ALU_ARI3), \ FN_IMM(mov32, 0xb4, BPF_ALU | BPF_MOV | BPF_K, BPF_ALU_ARI3), \ FN_SRC(arsh32, 0xcc, BPF_ALU | BPF_OP(BPF_ARSH) | BPF_X, BPF_ALU_ARI3), \ FN_IMM(arsh32, 0xc4, BPF_ALU | BPF_OP(BPF_ARSH) | BPF_K, BPF_ALU_ARI3), \ FN_SRC(lddw, 0x18, BPF_LD | BPF_DW | BPF_IMM, BPF_MEMORY_ARI3), \ FN_SRC(ldxw, 0x61, BPF_LDX | BPF_SIZE(BPF_W) | BPF_MEM, BPF_MEMORY_ARI34_SRCOFF), \ FN_SRC(ldxh, 0x69, BPF_LDX | BPF_SIZE(BPF_H) | BPF_MEM, BPF_MEMORY_ARI34_SRCOFF), \ FN_SRC(ldxb, 0x71, BPF_LDX | BPF_SIZE(BPF_B) | BPF_MEM, BPF_MEMORY_ARI34_SRCOFF), \ FN_SRC(ldxdw, 0x79, BPF_LDX | BPF_SIZE(BPF_DW) | BPF_MEM, BPF_MEMORY_ARI34_SRCOFF), \ FN_SRC(stw, 0x62, BPF_ST | BPF_SIZE(BPF_W) | BPF_MEM, BPF_MEMORY_ARI34_DSTOFF_IMM), \ FN_SRC(sth, 0x6a, BPF_ST | BPF_SIZE(BPF_H) | BPF_MEM, BPF_MEMORY_ARI34_DSTOFF_IMM), \ FN_SRC(stb, 0x72, BPF_ST | BPF_SIZE(BPF_B) | BPF_MEM, BPF_MEMORY_ARI34_DSTOFF_IMM), \ FN_SRC(stdw, 0x7a, BPF_ST | BPF_SIZE(BPF_DW) | BPF_MEM, BPF_MEMORY_ARI34_DSTOFF_IMM), \ FN_SRC(stxw, 0x63, BPF_STX | BPF_SIZE(BPF_W) | BPF_MEM, BPF_MEMORY_ARI34_DSTOFF), \ FN_SRC(stxh, 0x6b, BPF_STX | BPF_SIZE(BPF_H) | BPF_MEM, BPF_MEMORY_ARI34_DSTOFF), \ FN_SRC(stxb, 0x73, BPF_STX | BPF_SIZE(BPF_B) | BPF_MEM, BPF_MEMORY_ARI34_DSTOFF), \ FN_SRC(stxdw, 0x7b, BPF_STX | BPF_SIZE(BPF_DW) | BPF_MEM, BPF_MEMORY_ARI34_DSTOFF), \ FN_SRC(ja, 0x05, BPF_JMP | BPF_JA, BPF_BRANCH_ARI2), \ FN_SRC(jeq, 0x1d, BPF_JMP | BPF_OP(BPF_JEQ) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jeq, 0x15, BPF_JMP | BPF_OP(BPF_JEQ) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jgt, 0x2d, BPF_JMP | BPF_OP(BPF_JGT) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jgt, 0x25, BPF_JMP | BPF_OP(BPF_JGT) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jge, 0x3d, BPF_JMP | BPF_OP(BPF_JGE) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jge, 0x35, BPF_JMP | BPF_OP(BPF_JGE) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jlt, 0xad, BPF_JMP | BPF_OP(BPF_JLT) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jlt, 0xa5, BPF_JMP | BPF_OP(BPF_JLT) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jle, 0xbd, BPF_JMP | BPF_OP(BPF_JLE) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jle, 0xb5, BPF_JMP | BPF_OP(BPF_JLE) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jset, 0x4d, BPF_JMP | BPF_OP(BPF_JSET) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jset, 0x45, BPF_JMP | BPF_OP(BPF_JSET) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jne, 0x5d, BPF_JMP | BPF_OP(BPF_JNE) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jne, 0x55, BPF_JMP | BPF_OP(BPF_JNE) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jsgt, 0x6d, BPF_JMP | BPF_OP(BPF_JSGT) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jsgt, 0x65, BPF_JMP | BPF_OP(BPF_JSGT) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jsge, 0x7d, BPF_JMP | BPF_OP(BPF_JSGE) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jsge, 0x75, BPF_JMP | BPF_OP(BPF_JSGE) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jslt, 0xcd, BPF_JMP | BPF_OP(BPF_JSLT) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jslt, 0xc5, BPF_JMP | BPF_OP(BPF_JSLT) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(jsle, 0xdd, BPF_JMP | BPF_OP(BPF_JSLE) | BPF_X, BPF_BRANCH_ARI4), \ FN_IMM(jsle, 0xd5, BPF_JMP | BPF_OP(BPF_JSLE) | BPF_K, BPF_BRANCH_ARI4), \ FN_SRC(call, 0x85, BPF_JMP | BPF_CALL, BPF_CALL_ARI2), \ FN_SRC(exit, 0x95, BPF_JMP | BPF_EXIT, BPF_EXIT_ARI1), \ #endif // XXX The 2x3 byteswap insns are not too useful. // They need special handling since the opcode name determines imm value. // XXX The 8 ldabs* / ldind* opcodes are specific to network processing. void init_bpf_opcode_tables() { #define __BPF_SET_OPCODE_NAME(name, x, _x, _cat) bpf_opcode_name_map[(x)] = #name #define __BPF_SET_OPCODE_SRC(name, x, _x, _cat) bpf_src_opcode_map[#name] = (x) #define __BPF_SET_OPCODE_IMM(name, x, _x, _cat) bpf_imm_opcode_map[#name] = (x) #define __BPF_SET_OPCODE_CATEGORY(name, x, _x, cat) bpf_opcode_category_map[(x)] = (cat) #define __BPF_CHECK_OPCODE(name, x, y, _cat) assert((x)==(y)) __BPF_OPCODE_MAPPER(__BPF_SET_OPCODE_NAME,__BPF_SET_OPCODE_NAME) __BPF_OPCODE_MAPPER(__BPF_SET_OPCODE_SRC,__BPF_SET_OPCODE_IMM) __BPF_OPCODE_MAPPER(__BPF_SET_OPCODE_CATEGORY,__BPF_SET_OPCODE_CATEGORY) __BPF_OPCODE_MAPPER(__BPF_CHECK_OPCODE,__BPF_CHECK_OPCODE) (void)0; } /* Convert opcode code to name. */ const char * bpf_opcode_name(opcode code) { auto it = bpf_opcode_name_map.find(code); if (it == bpf_opcode_name_map.end()) return "unknown"; return it->second; } /* Convert opcode name to code. In ambiguous cases e.g. add (0x07 vs 0x0f), prefer the variant that takes a register. */ opcode bpf_opcode_id(const std::string &name) { auto it = bpf_src_opcode_map.find(name); if (it == bpf_src_opcode_map.end()) return 0; return it->second; } /* If op is an ALU/branch opcode taking src, return the equivalent opcode taking imm. */ opcode bpf_opcode_variant_imm(opcode code) { if (BPF_CLASS(code) == BPF_ALU64 || BPF_CLASS(code) == BPF_ALU || BPF_CLASS(code) == BPF_JMP) return (code & ~BPF_X); return code; } unsigned bpf_opcode_category(opcode code) { auto it = bpf_opcode_category_map.find(code); if (it == bpf_opcode_category_map.end()) return BPF_UNKNOWN_ARI; return it->second; } const char * bpf_expected_args (unsigned cat) { switch (cat) { case BPF_MEMORY_ARI4: case BPF_BRANCH_ARI4: return "3-4"; case BPF_MEMORY_ARI34_SRCOFF: case BPF_MEMORY_ARI34_DSTOFF: return "2-4"; case BPF_ALU_ARI3: case BPF_MEMORY_ARI3: return "2/4"; case BPF_ALU_ARI2: case BPF_BRANCH_ARI2: case BPF_CALL_ARI2: return "1/4"; case BPF_EXIT_ARI1: return "0/4"; case BPF_UNKNOWN_ARI: default: return "4"; } } /* BPF helper lookup for the translator: */ 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-5.3/bpf-bitset.cxx000066400000000000000000000054361500444254400162070ustar00rootroot00000000000000// -*- 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-5.3/bpf-bitset.h000066400000000000000000000131151500444254400156250ustar00rootroot00000000000000// -*- 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-5.3/bpf-internal.h000066400000000000000000000476641500444254400161670ustar00rootroot00000000000000// bpf internal classes // Copyright (C) 2016-2022 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); /* PR29307: BPF opcode categories for the embedded-code assembler: */ #define BPF_UNKNOWN_ARI 0 #define BPF_MEMORY_ARI4 1 #define BPF_BRANCH_ARI4 2 #define BPF_MEMORY_ARI34_SRCOFF 3 // -> can take [src+off] #define BPF_MEMORY_ARI34_DSTOFF_IMM 4 // -> can take [dst+off]+imm #define BPF_MEMORY_ARI34_DSTOFF 5 // -> can take [dst+off]+src #define BPF_ALU_ARI3 6 // -> takes dst+src/imm #define BPF_MEMORY_ARI3 7 // -> takes dst+imm #define BPF_ALU_ARI2 8 // -> takes dst #define BPF_BRANCH_ARI2 9 // -> takes jmp_target #define BPF_CALL_ARI2 10 // -> takes imm #define BPF_EXIT_ARI1 11 /* PR29307: BPF opcode lookup for the embedded-code assembler: */ void init_bpf_opcode_tables(); const char *bpf_opcode_name (opcode code); opcode bpf_opcode_id (const std::string &name); opcode bpf_opcode_variant_imm(opcode code); unsigned bpf_opcode_category (opcode code); const char *bpf_expected_args (unsigned cat); /* BPF helper lookup for the translator: */ 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-5.3/bpf-opt.cxx000066400000000000000000000637101500444254400155160ustar00rootroot00000000000000// 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-5.3/bpf-shared-globals.h000066400000000000000000000045361500444254400172310ustar00rootroot00000000000000// 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-5.3/bpf-translate.cxx000066400000000000000000005317471500444254400167230ustar00rootroot00000000000000// bpf translation pass // Copyright (C) 2016-2022 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: opcode parse_opcode_tentative (const asm_stmt &stmt, const std::string &str, /*OUT*/bool &numeric_opcode); bool parse_imm_optional (const asm_stmt &stmt, const std::string &str, /*OUT*/int64_t &val); int64_t parse_imm (const asm_stmt &stmt, const std::string &str); void parse_reg_offset (const asm_stmt &stmt, const std::string &str, /*OUT*/std::string ®, /*OUT*/int64_t &off); void parse_asm_opcode (const std::vector &args, /*OUT*/asm_stmt &stmt); 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. The first 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 (* Asterisk: except in the first opcode / operator keyword.) Ahh for the days of 1960s FORTRAN. PR29307: The second attempt adds support for the assembler syntax from iovisor's docs i.e. https://github.com/iovisor/bpf-docs/blob/master/eBPF.md Comma after opcode now optional, semicolons can be replaced with newline. I also considered the syntax from kernel Documentation/networking/filter.rst or bpfc(8), also implemented in kernel tools/bpf/bpf_exp.y, but the addressing-mode syntax seems a bit too baroque to bother for the time being. */ /* 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 | - ::= | */ /* TODO PR29307 Suggested further improvements for the assembler syntax: 1. dest argument of call is optional 2. jump_to_catch and register_error error msg support formats */ // #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; // TODO std::hex is sticky? need to verify std::string opcode_name(bpf_opcode_name(stmt.code)); if (opcode_name != "unknown") o << "(" << opcode_name << ")"; o << ", " << 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()); } opcode bpf_unparser::parse_opcode_tentative (const asm_stmt &stmt, const std::string &str, /*OUT*/bool &numeric_opcode) { opcode code; try { code = stoul(str, 0, 0); numeric_opcode = true; } catch (std::exception &e) { // XXX: invalid_argument, out_of_range code = bpf_opcode_id(str); numeric_opcode = false; if (code == 0) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode opcode '%s'", str.c_str()), stmt.tok); } return code; } bool bpf_unparser::parse_imm_optional (const asm_stmt &stmt, const std::string &str, /*OUT*/int64_t &val) { (void)stmt; /* XXX unused; could report errors, but we don't */ 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 val = 0; return false; } return true; } int64_t bpf_unparser::parse_imm (const asm_stmt &stmt, const std::string &str) { int64_t val; if (!parse_imm_optional(stmt, str, val)) { throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode operand '%s'", str.c_str()), stmt.tok); } return val; } /* Parse an argument of the form [reg+off] or [reg-off]. */ void bpf_unparser::parse_reg_offset (const asm_stmt &stmt, const std::string &str, /*OUT*/std::string ®, /*OUT*/int64_t &off) { { if (str.length() < 3 || str[0] != '[' || str[str.size()-1] != ']') goto error; size_t separator = str.find_first_of("+-", 0); if (separator == std::string::npos) goto error; reg = str.substr(1,separator-1); char sep_chr = str[separator]; std::string off_str = str.substr(separator+1,str.size()-1-separator-1); off = parse_imm(stmt, off_str); if (sep_chr == '-') off = -off; return; } error: throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode operand '%s', expected [reg+off] or [reg-off]", str.c_str()), stmt.tok); } /* Parse an assembly opcode, then write the output in stmt. */ void bpf_unparser::parse_asm_opcode (const std::vector &args, /*OUT*/asm_stmt &stmt) { stmt.kind = "opcode"; bool numeric_opcode; stmt.code = parse_opcode_tentative(stmt, args[0], numeric_opcode); opcode tentative_code = stmt.code; 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 // XXX default values required for emit_asm_opcode stmt.dest = "-"; stmt.src1 = "-"; stmt.off = 0; stmt.jmp_target = "-"; stmt.imm = 0; unsigned cat = bpf_opcode_category(stmt.code); if (args.size() == 5) // op dest src jmp_target/off imm { stmt.dest = args[1]; stmt.src1 = args[2]; 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 if (cat == BPF_MEMORY_ARI4 && args.size() == 4) // op src dest imm { stmt.src1 = args[1]; stmt.dest = args[2]; stmt.imm = parse_imm(stmt, args[3]); } else if (cat == BPF_BRANCH_ARI4 && args.size() == 4 && stmt.has_jmp_target) // op dest imm jmp_target, op dest jmp_target imm, op dest src jmp_target { stmt.dest = args[1]; // disambiguate opcode taking imm vs src if (parse_imm_optional(stmt, args[2], stmt.imm)) { stmt.code = bpf_opcode_variant_imm(stmt.code); stmt.jmp_target = args[3]; } else if (parse_imm_optional(stmt, args[3], stmt.imm)) { stmt.code = bpf_opcode_variant_imm(stmt.code); stmt.jmp_target = args[2]; } else { stmt.src1 = args[2]; stmt.jmp_target = args[3]; } // error if stmt.code was specified numerically and doesn't match if (numeric_opcode && stmt.code != tentative_code) throw SEMANTIC_ERROR (_F("numeric opcode '%x' given argument types for '%x'", tentative_code, stmt.code), stmt.tok); // TODO convert opcode to string } else if (cat == BPF_MEMORY_ARI34_SRCOFF && args.size() == 4) // op dest src off { stmt.dest = args[1]; stmt.src1 = args[2]; stmt.off = parse_imm(stmt, args[3]); } else if (cat == BPF_MEMORY_ARI34_SRCOFF && args.size() == 3) // op dest [src+off] { stmt.dest = args[1]; parse_reg_offset(stmt, args[2], stmt.dest, stmt.off); } else if (cat == BPF_MEMORY_ARI34_DSTOFF_IMM && args.size() == 4) // op dest off imm, op dest src imm { stmt.dest = args[1]; // allow off/src to be ordered according to either convention if (parse_imm_optional(stmt, args[2], stmt.off)) { stmt.imm = parse_imm(stmt, args[2]); } else { stmt.imm = parse_imm(stmt, args[2]); stmt.off = parse_imm(stmt, args[3]); } } else if (cat == BPF_MEMORY_ARI34_DSTOFF_IMM && args.size() == 3) // op [dest+off] imm { parse_reg_offset(stmt, args[1], stmt.dest, stmt.off); stmt.imm = parse_imm(stmt, args[2]); } else if (cat == BPF_MEMORY_ARI34_DSTOFF && args.size() == 4) // op dest off src, op dest src off { stmt.dest = args[1]; // allow off/src to be ordered according to either convention if (parse_imm_optional(stmt, args[2], stmt.off)) { stmt.src1 = args[3]; } else { stmt.src1 = args[2]; stmt.off = parse_imm(stmt, args[3]); } } else if (cat == BPF_MEMORY_ARI34_DSTOFF && args.size() == 3) // op [dest+off] src { parse_reg_offset(stmt, args[1], stmt.dest, stmt.off); stmt.src1 = args[2]; } else if (cat == BPF_ALU_ARI3 && args.size() == 3) // op dest src, op dest imm { stmt.dest = args[1]; // disambiguate opcode taking imm vs src if (parse_imm_optional(stmt, args[2], stmt.imm)) { stmt.code = bpf_opcode_variant_imm(stmt.code); } else { stmt.src1 = args[2]; } // error if stmt.code was specified numerically and doesn't match if (numeric_opcode && stmt.code != tentative_code) throw SEMANTIC_ERROR (_F("numeric opcode '%x' given argument types for '%x'", tentative_code, stmt.code), stmt.tok); // TODO convert opcode to string } else if (cat == BPF_MEMORY_ARI3 && args.size() == 3) // op dest imm { stmt.dest = args[1]; stmt.imm = parse_imm(stmt, args[2]); } else if (cat == BPF_ALU_ARI2 && args.size() == 2) // op dest { stmt.dest = args[1]; } else if (cat == BPF_BRANCH_ARI2 && args.size() == 2) // op jmp_target { stmt.jmp_target = args[1]; } else if (cat == BPF_CALL_ARI2 && args.size() == 2) // op imm/helper_name { if (!parse_imm_optional(stmt, args[2], stmt.imm)) { // TODO: handle helper_name by convering stmt to a "call" directive? throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (opcode expects imm, found '%s')", args[2].c_str()), stmt.tok); } } else if (cat == BPF_EXIT_ARI1 && args.size() == 1) // op { // nothing } else { const char * expected_args = bpf_expected_args(cat); throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (opcode expects %s args, found %llu)", expected_args, (long long) args.size()-1), stmt.tok); } } /* 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; bool in_starting_keyword = true; // first keyword terminated by space bool trailing_comma = false; // newline not after comma separates statements bool is_label = false; // XXX "label:" syntax // ??? 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 (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 == ';' || (c == '\n' && !trailing_comma)) // reached end of statement { // XXX: This strips out empty args. A more rigorous parser would error. if (arg != "") args.push_back(arg); arg = ""; pos++, in_starting_keyword = true; break; } else if (c == ':') // reached end of label { is_label = true; pos++, in_starting_keyword = false; trailing_comma = false; break; } else if (c == ',' || (isspace(c) && in_starting_keyword && arg != "")) // reached end of argument { // XXX: This strips out empty args. A more rigorous parser would error. if (arg != "") args.push_back(arg); arg = ""; in_starting_keyword = false; trailing_comma = (c == ','); // XXX only after an actual comma } else if (isspace(c) && !in_string) continue; // skip else if (c == '/' && c2 == '*') ++pos, in_comment = true; // XXX in_starting_keyword unchanged 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, in_starting_keyword = false; trailing_comma = false; } 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); trailing_comma = false; } } // final ';' is optional, so we watch for a trailing arg: if (arg != "") args.push_back(arg); // handle 'label:' syntax if (is_label) { std::string lb = args[0]; args[0] = "label"; args.push_back(lb); } // 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]; // TODO: handle optional dest 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]) || bpf_opcode_id(args[0]) != 0x0) { parse_asm_opcode(args, stmt); } 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 = ULONG_MAX; 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]; 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; } else { throw SEMANTIC_ERROR(_("unhandled foreach index type"), s->tok); } 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 (ninsns, sizeof(bpf_insn)); assert (buf); Elf64_Rel *rel = (Elf64_Rel*) calloc (nreloc, sizeof(Elf64_Rel)); 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_opcode_tables(); 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.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.vma_tracker_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-5.3/bpf.h000066400000000000000000000006131500444254400143340ustar00rootroot00000000000000// -*- 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-5.3/buildrun.cxx000066400000000000000000001454611500444254400157770ustar00rootroot00000000000000// build/run probes // Copyright (C) 2005-2025 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 "staputil.h" #include "hash.h" #include "translate.h" #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include #include #include } #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=", // PR30716: work around objtool stac/clac warning "CONFIG_HAVE_UACCESS_VALIDATION=", // 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? // PR29837: Suppress the kernel version warning make_cmd.push_back("CC_VERSION_TEXT=foo"); make_cmd.push_back("CONFIG_CC_VERSION_TEXT=foo"); // 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 << "$(obj)/" << 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_basenm = "stapconf_export.h"; string stap_export_nm = s.tmpdir + "/" + stap_export_basenm; 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; // Support deprecation of $(EXTRA_CFLAGS); replacement flag available since 3.18ish. // See linux kernel commits f77bf01425b119 and e966ad0edd005 string extra_cflags = "EXTRA_CFLAGS"; if (strverscmp (s.kernel_base_release.c_str(), "6.15") >= 0) extra_cflags = "ccflags-y"; 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) -DMODULE $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) $(CPPFLAGS) " << "$(LINUXINCLUDE) $(_KBUILD_CFLAGS) $(CFLAGS_KERNEL) $(" << extra_cflags << ") " << "$(CFLAGS) -DKBUILD_BASENAME=\\\"" << s.module_name << "\\\" " << "-Wmissing-prototypes " // GCC14 prep, PR31288 << "-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 << module_cflags << " += -Wmissing-prototypes" << endl; // GCC14 prep, PR31288 o << "STAPCONF_HEADER := " << "$(obj)/" << s.stapconf_name << endl; // PR32607 check if the stapconf_HASH file is already present, i.e. reused from the cache. // If os, then we don't need to emit any of the autoc vector cs; // to hold autoconf C file names output_autoconf(s, o, cs, "autoconf-nsset-complete.c", "STAPCONF_NSSET_COMPLETE", NULL); output_autoconf(s, o, cs, "autoconf-d-real-inode.c", "STAPCONF_D_REAL_INODE", NULL); 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-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_autoconf(s, o, cs, "autoconf-task_work_cancel_func.c", "STAPCONF_TASK_WORK_CANCEL_FUNC", NULL); output_autoconf(s, o, cs, "autoconf-pr32194-uprobe-register-unregister.c", "STAPCONF_PR32194_UPROBE_REGISTER_UNREGISTER", NULL); output_autoconf(s, o, cs, "autoconf-uprobes-cb-data.c", "STAPCONF_UPROBES_CB_DATA", 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-stacktrace_h.c", "STAPCONF_STACKTRACE_H", NULL); 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-genhd.c", "STAPCONF_GENHD_H", 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-pde_data.c", "STAPCONF_PDE_DATA2", NULL); 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-twa_resume.c", "STAPCONF_TWA_RESUME", 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 userland memory reads output_autoconf(s, o, cs, "autoconf-nmi-uaccess-okay.c", "STAPCONF_NMI_UACCESS_OKAY", NULL); output_autoconf(s, o, cs, "autoconf-asm-access-ok.c", "STAPCONF_ASM_ACCESS_OK", NULL); output_autoconf(s, o, cs, "autoconf-user-access-begin-2-args.c", "STAPCONF_USER_ACCESS_BEGIN_2_ARGS", NULL); output_autoconf(s, o, cs, "autoconf-user-access-begin-3-args.c", "STAPCONF_USER_ACCESS_BEGIN_3_ARGS", NULL); output_autoconf(s, o, cs, "autoconf-user-access-end.c", "STAPCONF_USER_ACCESS_END", NULL); output_autoconf(s, o, cs, "autoconf-asm-tlbflush-h.c", "STAPCONF_ASM_TLBFLUSH_H", 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-kallsyms_6_3.c", "STAPCONF_KALLSYMS_6_3", NULL); output_autoconf(s, o, cs, "autoconf-kallsyms_6_4.c", "STAPCONF_KALLSYMS_6_4", NULL); 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"); // 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-module_memory.c", "STAPCONF_MODULE_MEMORY", 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-get_user_page_vma_remote.c", "STAPCONF_GET_USER_PAGE_VMA_REMOTE", 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); output_autoconf(s, o, cs, "autoconf-linux-unaligned-h.c", "STAPCONF_LINUX_UNALIGNED_H", NULL); output_autoconf(s, o, cs, "autoconf-hrtimer_init.c", "STAPCONF_HRTIMER_INIT", NULL); output_autoconf(s, o, cs, "autoconf-del_timer_sync.c", "STAPCONF_DEL_TIMER_SYNC", 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 (); // PR32607: check if the stapconf_HASH file is already present, // i.e. reused from the cache, and emplaced by // get_stapconf_from_cache(). If so, then we don't need to emit the // autoconf dependency list here at all, thus the thing won't // attempt to trigger repeated tests from the autoconf* deps listed // above. string stapconf_dest_path = s.tmpdir + "/" + s.stapconf_name; ifstream flub (stapconf_dest_path); if (flub.good()) { // already computed } else { // PR32458 (!) Build the combined conf header as an ordinary // dependency of the module.o file. Don't invoke a sub-$(MAKE) with // crude command line parsing. o << "$(STAPCONF_HEADER): " << "$(obj)/" << stap_export_basenm; for (unsigned i=0; i $(STAPCONF_HEADER)" << endl; } o << "$(obj)/" << s.module_name <<".o : $(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. // // Also: PR30396, -fcf-protection=branch & objtool --ibt on linux 6.3 causes // eh_frame bad-reloc warnings from kbuild. // if (s.architecture != "riscv" && s.kernel_config["CONFIG_CC_HAS_IBT"] != "y") 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; // Suppress gcc12 diagnostic bug in kernel-devel for 5.16ish o << extra_cflags << " += $(call cc-option,-Wno-infinite-recursion)" << endl; // Suppress gcc12 diagnostic about STAP_KPROBE_PROBE_STR_* null checks o << extra_cflags << " += -Wno-address" << 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 << "$(obj)/stap_symbols.o: $(STAPCONF_HEADER)" << endl; // add all stapconf dependencies string translated = s.translated_source; translated = translated.substr(translated.rfind('/')+1); // basename translated[translated.size()-1] = 'o'; o << "$(obj)/" << translated << ": $(STAPCONF_HEADER)" << endl; translated[translated.size()-1] = 'i'; o << "$(obj)/" << translated << ": $(STAPCONF_HEADER)" << endl; for (unsigned i=0; ifilename; translated = translated.substr(translated.rfind('/')+1); // basename translated[translated.size()-1] = 'o'; o << "$(obj)/" << 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 (false && s.keep_tmpdir) // PR32458: kbuild 6.13+ can't abide multiple make targets { 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; /* * 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; } // Support deprecation of $(EXTRA_CFLAGS); replacement flag available since 3.18ish. // See linux kernel commits f77bf01425b119 and e966ad0edd005 string extra_cflags = "EXTRA_CFLAGS"; if (strverscmp (s.kernel_base_release.c_str(), "6.15") >= 0) extra_cflags = "ccflags-y"; // 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; // objtool is slow and uses a lot of memory, skip it since these modules aren't loaded omf << "CONFIG_STACK_VALIDATION := " << 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"; // Support deprecation of $(EXTRA_CFLAGS); replacement flag available since 3.18ish. // See linux kernel commits f77bf01425b119 and e966ad0edd005 string extra_cflags = "EXTRA_CFLAGS"; if (strverscmp (s.kernel_base_release.c_str(), "6.15") >= 0) extra_cflags = "ccflags-y"; // 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; // objtool is slow and uses a lot of memory, skip it since these modules aren't loaded omf << "CONFIG_STACK_VALIDATION := " << 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 << "MODULE_DESCRIPTION(\"" << basename << "\");" << 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-5.3/buildrun.h000066400000000000000000000016251500444254400154150ustar00rootroot00000000000000// -*- 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-5.3/cache.cxx000066400000000000000000000316321500444254400152100ustar00rootroot00000000000000// 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 "staputil.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-5.3/cache.h000066400000000000000000000004601500444254400146300ustar00rootroot00000000000000void 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-5.3/client-http.cxx000066400000000000000000001241311500444254400163750ustar00rootroot00000000000000// -*- 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 "staputil.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 #ifdef HAVE_RPMCRYPTO_H #include #endif } 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; } #if HAVE_LIBRPMIO rpmFreeCrypto (); #endif 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-5.3/client-http.h000066400000000000000000000034451500444254400160260ustar00rootroot00000000000000// -*- 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-5.3/client-nss.cxx000066400000000000000000000732141500444254400162260ustar00rootroot00000000000000/* 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 "staputil.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_UNKNOWN_ISSUER: 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-5.3/client-nss.h000066400000000000000000000035401500444254400156460ustar00rootroot00000000000000// -*- 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-5.3/cmdline.cxx000066400000000000000000000120411500444254400155510ustar00rootroot00000000000000// 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 }, { "build-as", optional_argument, NULL, LONG_OPT_BUILD_AS }, { "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 }, { "sign-module", optional_argument, NULL, LONG_OPT_SIGN_MODULE }, { "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}, { "language-server", no_argument, NULL, LONG_OPT_LANGUAGE_SERVER}, { NULL, 0, NULL, 0 } }; systemtap-5.3/cmdline.h000066400000000000000000000043651500444254400152100ustar00rootroot00000000000000// -*- 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_BUILD_AS, 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_SIGN_MODULE, 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, LONG_OPT_LANGUAGE_SERVER, }; // 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-5.3/compile000077500000000000000000000162451500444254400150020ustar00rootroot00000000000000#! /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-5.3/config.guess000077500000000000000000001406141500444254400157420ustar00rootroot00000000000000#! /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-5.3/config.in000066400000000000000000000226371500444254400152230ustar00rootroot00000000000000/* 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_ASIO_POST_HPP /* Define to 1 if you have the header file. */ #undef HAVE_BOOST_ASIO_THREAD_POOL_HPP /* 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 you have the header file. */ #undef HAVE_DYNINST_BPATCH_OBJECT_H /* 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 the json-c library is installed */ #undef HAVE_JSON_C /* Define to 1 if the language server is supported */ #undef HAVE_LANGUAGE_SERVER_SUPPORT /* 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_MINIX_CONFIG_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 /* have rpmcrypto_h */ #undef HAVE_RPMCRYPTO_H /* Define to 1 if you have the header file. */ #undef HAVE_RPM_RPMCRYPTO_H /* Define to 1 if you have the SELinux libraries. */ #undef HAVE_SELINUX /* Define to 1 if you have the header file. */ #undef HAVE_STDATOMIC_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_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 you have the header file. */ #undef HAVE_WCHAR_H /* Define if a new enough version of elfutils exists to support metadata querying */ #undef METADATA_QUERY_ENABLED /* 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 all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Enable extensions on AIX, Interix, z/OS. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by C23 Annex F. */ #ifndef __STDC_WANT_IEC_60559_EXT__ # undef __STDC_WANT_IEC_60559_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Version number of package */ #undef VERSION /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define to 1 on platforms where this makes off_t a 64-bit type. */ #undef _LARGE_FILES /* Number of bits in time_t, on hosts where this is settable. */ #undef _TIME_BITS /* Define to 1 on platforms where this makes time_t a 64-bit type. */ #undef __MINGW_USE_VC2005_COMPAT systemtap-5.3/config.rpath000077500000000000000000000442161500444254400157330ustar00rootroot00000000000000#! /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-5.3/configure000077500000000000000000017315561500444254400153450ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.72 for systemtap 5.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 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 ${ZSH_VERSION+y} && (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 e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 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 \${ZSH_VERSION+y} && (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 e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; 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 case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || 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 case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$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 ;; esac 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=`printf "%s\n" "$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 || printf "%s\n" 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 case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac 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 case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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 || printf "%s\n" 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 ' t clear :clear 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" || { printf "%s\n" "$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 } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated 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='5.3' PACKAGE_STRING='systemtap 5.3' PACKAGE_BUGREPORT='systemtap@sourceware.org' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= gt_needs= enable_option_checking=no enable_year2038=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_LANGUAGE_SERVER_SUPPORT_FALSE HAVE_LANGUAGE_SERVER_SUPPORT_TRUE HAVE_JSON_C_FALSE HAVE_JSON_C_TRUE 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 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_LDFLAGS debuginfod_LIBS debuginfod_CFLAGS PIECXXFLAGS PIECFLAGS PIELDFLAGS ALIGNEDNEW HAVE_CXX11 Werror_FALSE Werror_TRUE py3execdir python3dir PYTHON3_PLATFORM PYTHON3_EXEC_PREFIX PYTHON3_PREFIX PYTHON3_VERSION PYTHON3 pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_PLATFORM 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 CPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX LN_S 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 PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS 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 with_python_sys_prefix with_python_prefix with_python_exec_prefix enable_Werror 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 enable_year2038 ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP PYTHON debuginfod_CFLAGS debuginfod_LIBS sqlite3_CFLAGS sqlite3_LIBS nss_CFLAGS nss_LIBS openssl_CFLAGS openssl_LIBS avahi_CFLAGS avahi_LIBS 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 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=`printf "%s\n" "$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=`printf "%s\n" "$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=`printf "%s\n" "$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=`printf "%s\n" "$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. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$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" ;; *) printf "%s\n" "$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 || printf "%s\n" 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 5.3 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 5.3:";; 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-Werror compile with -Werror flags --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 --enable-year2038 support timestamps after 2038 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-python-sys-prefix use Python's sys.prefix and sys.exec_prefix values --with-python_prefix override the default PYTHON_PREFIX --with-python_exec_prefix override the default PYTHON_EXEC_PREFIX --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: 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 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 CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor PYTHON the Python interpreter 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 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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 configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. 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 printf "%s\n" "$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 5.3 generated by GNU Autoconf 2.72 Copyright (C) 2023 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 conftest.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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 case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac 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_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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$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 conftest.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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 case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac 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_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\"" printf "%s\n" "$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 printf "%s\n" "$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 case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac 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_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.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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 case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 (void); below. */ #include #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 (void); /* 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 (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_try_run LINENO # ---------------------- # Try to run 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status ;; esac 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_cxx_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_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_compile # 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.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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 case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac 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_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR # ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. ac_fn_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { #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 case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_check_decl ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac 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 5.3, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "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=`printf "%s\n" "$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=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$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 printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$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 printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (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; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* 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 do not provoke an error unfortunately, instead are silently treated as an "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 is necessary to write \x00 == 0 to get something that is 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 **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include #include // and are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template struct test_template { T const val; explicit test_template(T t) : val(t) {} template T add(U u) { return static_cast(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template auto sum(V first) -> V { return first; } template auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template> v(test_template(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " gt_needs="$gt_needs " # Auxiliary files required by this configure script. ac_aux_files="config.rpath ar-lib compile missing install-sh config.guess config.sub" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac 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. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # 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,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$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=`printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-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 # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 printf %s "checking target system type... " >&6; } if test ${ac_cv_target+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 printf "%s\n" "$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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. 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 ;; esac fi if test ${ac_cv_path_install+y}; 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$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' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "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=`printf "%s\n" "$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 MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 ('*'coreutils) '* | \ *'BusyBox '* | \ '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 ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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+y} 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} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in #( e) if printf "%s\n" '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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$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='5.3' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # 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 -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test ${enable_maintainer_mode+y} then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else case e in #( e) USE_MAINTAINER_MODE=no ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 printf "%s\n" "$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+y} 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} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in #( e) if printf "%s\n" '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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$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 "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "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.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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. printf "%s\n" "$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 -version; 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\"" printf "%s\n" "$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 printf "%s\n" "$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 (void) { ; 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$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+y} && 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 case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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 case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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 case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$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 (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$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 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$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 case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; 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 ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _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 conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac 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 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$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= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$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_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else case e in #( e) ac_cv_safe_to_define___extensions__=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "#define _MINIX 1" >>confdefs.h printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h else case e in #( e) MINIX= ;; esac fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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. printf "%s\n" "$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 -version; 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\"" printf "%s\n" "$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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; 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 ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _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 conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac 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 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$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= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$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 clang++ 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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. printf "%s\n" "$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\"" printf "%s\n" "$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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else case e in #( e) CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else case e in #( e) ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; 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_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 ;; esac fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 ;; esac 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= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "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 test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else case e in #( e) # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" 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. # 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. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac 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 case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac 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 ;; esac fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$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. # 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. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac 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 case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac 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 case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See 'config.log' for more details" "$LINENO" 5; } ;; esac 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 printf %s "checking the archiver ($AR) interface... " >&6; } if test ${am_cv_ar_interface+y} then : printf %s "(cached) " >&6 else case e in #( e) 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=$? printf "%s\n" "$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=$? printf "%s\n" "$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.beam 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Check whether --enable-largefile was given. if test ${enable_largefile+y} then : enableval=$enable_largefile; fi if test "$enable_largefile,$enable_year2038" != no,no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5 printf %s "checking for $CC option to enable large file support... " >&6; } if test ${ac_cv_sys_largefile_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CC="$CC" ac_opt_found=no for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do if test x"$ac_opt" != x"none needed" then : CC="$ac_save_CC $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef FTYPE # define FTYPE off_t #endif /* Check that FTYPE can represent 2**63 - 1 correctly. We can't simply define LARGE_FTYPE to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) int FTYPE_is_large[(LARGE_FTYPE % 2147483629 == 721 && LARGE_FTYPE % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_opt" = x"none needed" then : # GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. CC="$CC -DFTYPE=ino_t" if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) CC="$CC -D_FILE_OFFSET_BITS=64" if ac_fn_c_try_compile "$LINENO" then : ac_opt='-D_FILE_OFFSET_BITS=64' fi rm -f core conftest.err conftest.$ac_objext conftest.beam ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam fi ac_cv_sys_largefile_opts=$ac_opt ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CC="$ac_save_CC" test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5 printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; } ac_have_largefile=yes case $ac_cv_sys_largefile_opts in #( "none needed") : ;; #( "supported through gnulib") : ;; #( "support not detected") : ac_have_largefile=no ;; #( "-D_FILE_OFFSET_BITS=64") : printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h ;; #( "-D_LARGE_FILES=1") : printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h ;; #( "-n32") : CC="$CC -n32" ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;; esac if test "$enable_year2038" != no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option for timestamps after 2038" >&5 printf %s "checking for $CC option for timestamps after 2038... " >&6; } if test ${ac_cv_sys_year2038_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CPPFLAGS="$CPPFLAGS" ac_opt_found=no for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do if test x"$ac_opt" != x"none needed" then : CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_year2038_opts="$ac_opt" ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CPPFLAGS="$ac_save_CPPFLAGS" test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5 printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; } ac_have_year2038=yes case $ac_cv_sys_year2038_opts in #( "none needed") : ;; #( "support not detected") : ac_have_year2038=no ;; #( "-D_TIME_BITS=64") : printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h ;; #( "-D__MINGW_USE_VC2005_COMPAT") : printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h ;; #( "-U_USE_32_BIT_TIME_T"*) : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It will stop working after mid-January 2038. Remove _USE_32BIT_TIME_T from the compiler flags. See 'config.log' for more details" "$LINENO" 5; } ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;; esac fi fi ac_fn_c_check_func "$LINENO" "ppoll" "ac_cv_func_ppoll" if test "x$ac_cv_func_ppoll" = xyes then : printf "%s\n" "#define HAVE_PPOLL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "openat" "ac_cv_func_openat" if test "x$ac_cv_func_openat" = xyes then : printf "%s\n" "#define HAVE_OPENAT 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 printf %s "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test ${enable_nls+y} then : enableval=$enable_nls; USE_NLS=$enableval else case e in #( e) USE_NLS=yes ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MSGFMT+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 printf "%s\n" "$MSGFMT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_GMSGFMT+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 printf "%s\n" "$GMSGFMT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_XGETTEXT+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 printf "%s\n" "$XGETTEXT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MSGMERGE+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 printf "%s\n" "$MSGMERGE" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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+y} then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else case e in #( e) with_gnu_ld=no ;; esac 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${acl_cv_path_LD+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${acl_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else case e in #( e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 printf %s "checking for shared library run path origin... " >&6; } if test ${acl_cv_rpath+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 printf "%s\n" "$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+y} then : enableval=$enable_rpath; : else case e in #( e) enable_rpath=yes ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep -e" >&5 printf %s "checking for egrep -e... " >&6; } if test ${ac_cv_path_EGREP_TRADITIONAL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$EGREP_TRADITIONAL"; then ac_path_EGREP_TRADITIONAL_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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue # Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. # Check for GNU $ac_path_EGREP_TRADITIONAL case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" "$ac_path_EGREP_TRADITIONAL" -E 'EGR(EP|AC)_TRADITIONAL$' < "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_TRADITIONAL_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_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_TRADITIONAL_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then : fi else ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL fi if test "$ac_cv_path_EGREP_TRADITIONAL" then : ac_cv_path_EGREP_TRADITIONAL="$ac_cv_path_EGREP_TRADITIONAL -E" else case e in #( e) if test -z "$EGREP_TRADITIONAL"; then ac_path_EGREP_TRADITIONAL_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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue # Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. # Check for GNU $ac_path_EGREP_TRADITIONAL case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" "$ac_path_EGREP_TRADITIONAL" 'EGR(EP|AC)_TRADITIONAL$' < "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_TRADITIONAL_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_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_TRADITIONAL_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP_TRADITIONAL"; 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_TRADITIONAL=$EGREP_TRADITIONAL fi ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP_TRADITIONAL" >&5 printf "%s\n" "$ac_cv_path_EGREP_TRADITIONAL" >&6; } EGREP_TRADITIONAL=$ac_cv_path_EGREP_TRADITIONAL acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 printf %s "checking for 64-bit host... " >&6; } if test ${gl_cv_solaris_64bit+y} then : printf %s "(cached) " >&6 else case e in #( e) 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_TRADITIONAL "sixtyfour bits" >/dev/null 2>&1 then : gl_cv_solaris_64bit=yes else case e in #( e) gl_cv_solaris_64bit=no ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 printf "%s\n" "$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+y} 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 printf %s "checking for CFPreferencesCopyAppValue... " >&6; } if test ${gt_cv_func_CFPreferencesCopyAppValue+y} then : printf %s "(cached) " >&6 else case e in #( e) gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFPreferencesCopyAppValue=yes else case e in #( e) gt_cv_func_CFPreferencesCopyAppValue=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 printf %s "checking for CFLocaleCopyCurrent... " >&6; } if test ${gt_cv_func_CFLocaleCopyCurrent+y} then : printf %s "(cached) " >&6 else case e in #( e) gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFLocaleCopyCurrent=yes else case e in #( e) gt_cv_func_CFLocaleCopyCurrent=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then printf "%s\n" "#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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 printf %s "checking for GNU gettext in libc... " >&6; } if eval test \${$gt_func_gnugettext_libc+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 (void) { 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 case e in #( e) eval "$gt_func_gnugettext_libc=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi eval ac_res=\$$gt_func_gnugettext_libc { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 printf %s "checking for iconv... " >&6; } if test ${am_cv_func_iconv+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 (void) { 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.beam \ 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 (void) { 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.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 printf "%s\n" "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 printf %s "checking for working iconv... " >&6; } if test ${am_cv_func_iconv_works+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif int main (void) { 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 ;; esac fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 printf "%s\n" "$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 printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 printf %s "checking how to link with libiconv... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 printf "%s\n" "$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+y} 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 printf %s "checking for GNU gettext in libintl... " >&6; } if eval test \${$gt_func_gnugettext_libintl+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 (void) { 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 case e in #( e) eval "$gt_func_gnugettext_libintl=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ 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 (void) { 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.beam \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" ;; esac fi eval ac_res=\$$gt_func_gnugettext_libintl { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$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 printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 printf %s "checking whether to use NLS... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 printf "%s\n" "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 printf %s "checking how to link with libintl... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 printf "%s\n" "$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 printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h printf "%s\n" "#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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON_UNKNOWN+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi PYTHON_UNKNOWN=$ac_cv_path_PYTHON_UNKNOWN if test -n "$PYTHON_UNKNOWN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_UNKNOWN" >&5 printf "%s\n" "$PYTHON_UNKNOWN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$PYTHON_UNKNOWN" != "xno"; then # OK, we found 'python'. What version is it? { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON_UNKNOWN is version 2 or 3" >&5 printf %s "checking whether $PYTHON_UNKNOWN is version 2 or 3... " >&6; } if test ${ac_cv_python_unknown_version+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_python_unknown_version=`$PYTHON_UNKNOWN -c "import sys; sys.stdout.write(sys.version[:3][0])"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_unknown_version" >&5 printf "%s\n" "$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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 2.6" >&5 printf %s "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 : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "Python interpreter is too old" "$LINENO" 5 ;; esac fi am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.6" >&5 printf %s "checking for a Python interpreter with version >= 2.6... " >&6; } if test ${am_cv_pathless_PYTHON+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 printf "%s\n" "$PYTHON" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi am_display_PYTHON=$am_cv_pathless_PYTHON fi if test "$PYTHON" = :; then : else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 printf %s "checking for $am_display_PYTHON version... " >&6; } if test ${am_cv_python_version+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_python_version=`$PYTHON -c "import sys; print ('%u.%u' % sys.version_info[:2])"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 printf "%s\n" "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 printf %s "checking for $am_display_PYTHON platform... " >&6; } if test ${am_cv_python_platform+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 printf "%s\n" "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform if test "x$prefix" = xNONE; then am__usable_prefix=$ac_default_prefix else am__usable_prefix=$prefix fi # Allow user to request using sys.* values from Python, # instead of the GNU $prefix values. # Check whether --with-python-sys-prefix was given. if test ${with_python_sys_prefix+y} then : withval=$with_python_sys_prefix; am_use_python_sys=: else case e in #( e) am_use_python_sys=false ;; esac fi # Allow user to override whatever the default Python prefix is. # Check whether --with-python_prefix was given. if test ${with_python_prefix+y} then : withval=$with_python_prefix; am_python_prefix_subst=$withval am_cv_python_prefix=$withval { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for explicit $am_display_PYTHON prefix" >&5 printf %s "checking for explicit $am_display_PYTHON prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_prefix" >&5 printf "%s\n" "$am_cv_python_prefix" >&6; } else case e in #( e) if $am_use_python_sys; then # using python sys.prefix value, not GNU { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python default $am_display_PYTHON prefix" >&5 printf %s "checking for python default $am_display_PYTHON prefix... " >&6; } if test ${am_cv_python_prefix+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_python_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_prefix" >&5 printf "%s\n" "$am_cv_python_prefix" >&6; } case $am_cv_python_prefix in $am__usable_prefix*) am__strip_prefix=`echo "$am__usable_prefix" | sed 's|.|.|g'` am_python_prefix_subst=`echo "$am_cv_python_prefix" | sed "s,^$am__strip_prefix,\\${prefix},"` ;; *) am_python_prefix_subst=$am_cv_python_prefix ;; esac else # using GNU prefix value, not python sys.prefix am_python_prefix_subst='${prefix}' am_python_prefix=$am_python_prefix_subst { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU default $am_display_PYTHON prefix" >&5 printf %s "checking for GNU default $am_display_PYTHON prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_python_prefix" >&5 printf "%s\n" "$am_python_prefix" >&6; } fi ;; esac fi # Substituting python_prefix_subst value. PYTHON_PREFIX=$am_python_prefix_subst # emacs-page Now do it all over again for Python exec_prefix, but with yet # another conditional: fall back to regular prefix if that was specified. # Check whether --with-python_exec_prefix was given. if test ${with_python_exec_prefix+y} then : withval=$with_python_exec_prefix; am_python_exec_prefix_subst=$withval am_cv_python_exec_prefix=$withval { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for explicit $am_display_PYTHON exec_prefix" >&5 printf %s "checking for explicit $am_display_PYTHON exec_prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_exec_prefix" >&5 printf "%s\n" "$am_cv_python_exec_prefix" >&6; } else case e in #( e) # no explicit --with-python_exec_prefix, but if # --with-python_prefix was given, use its value for python_exec_prefix too. if test -n "$with_python_prefix" then : am_python_exec_prefix_subst=$with_python_prefix am_cv_python_exec_prefix=$with_python_prefix { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python_prefix-given $am_display_PYTHON exec_prefix" >&5 printf %s "checking for python_prefix-given $am_display_PYTHON exec_prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_exec_prefix" >&5 printf "%s\n" "$am_cv_python_exec_prefix" >&6; } else case e in #( e) # Set am__usable_exec_prefix whether using GNU or Python values, # since we use that variable for pyexecdir. if test "x$exec_prefix" = xNONE; then am__usable_exec_prefix=$am__usable_prefix else am__usable_exec_prefix=$exec_prefix fi # if $am_use_python_sys; then # using python sys.exec_prefix, not GNU { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python default $am_display_PYTHON exec_prefix" >&5 printf %s "checking for python default $am_display_PYTHON exec_prefix... " >&6; } if test ${am_cv_python_exec_prefix+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_python_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_exec_prefix" >&5 printf "%s\n" "$am_cv_python_exec_prefix" >&6; } case $am_cv_python_exec_prefix in $am__usable_exec_prefix*) am__strip_prefix=`echo "$am__usable_exec_prefix" | sed 's|.|.|g'` am_python_exec_prefix_subst=`echo "$am_cv_python_exec_prefix" | sed "s,^$am__strip_prefix,\\${exec_prefix},"` ;; *) am_python_exec_prefix_subst=$am_cv_python_exec_prefix ;; esac else # using GNU $exec_prefix, not python sys.exec_prefix am_python_exec_prefix_subst='${exec_prefix}' am_python_exec_prefix=$am_python_exec_prefix_subst { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU default $am_display_PYTHON exec_prefix" >&5 printf %s "checking for GNU default $am_display_PYTHON exec_prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_python_exec_prefix" >&5 printf "%s\n" "$am_python_exec_prefix" >&6; } fi ;; esac fi ;; esac fi # Substituting python_exec_prefix_subst. PYTHON_EXEC_PREFIX=$am_python_exec_prefix_subst # Factor out some code duplication into this shell variable. 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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory (pythondir)" >&5 printf %s "checking for $am_display_PYTHON script directory (pythondir)... " >&6; } if test ${am_cv_python_pythondir+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$am_cv_python_prefix" = x; then am_py_prefix=$am__usable_prefix else am_py_prefix=$am_cv_python_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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 printf "%s\n" "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory (pyexecdir)" >&5 printf %s "checking for $am_display_PYTHON extension module directory (pyexecdir)... " >&6; } if test ${am_cv_python_pyexecdir+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$am_cv_python_exec_prefix" = x; then am_py_exec_prefix=$am__usable_exec_prefix else am_py_exec_prefix=$am_cv_python_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_exec_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_exec_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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 printf "%s\n" "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi python_basename=$(basename "$PYTHON") printf "%s\n" "#define PYTHON_BASENAME \"${python_basename}\"" >>confdefs.h if test "x$PYTHON" != "x:"; then printf "%s\n" "#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. 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON3+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PYTHON3=$ac_cv_path_PYTHON3 if test -n "$PYTHON3"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON3" >&5 printf "%s\n" "$PYTHON3" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PYTHON3" && break done test -n "$PYTHON3" || PYTHON3=":" python3_basename=$(basename "$PYTHON3") printf "%s\n" "#define PYTHON3_BASENAME \"${python3_basename}\"" >>confdefs.h # 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 printf "%s\n" "#define PYTHON3_EXISTS /**/" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python3 version" >&5 printf %s "checking for python3 version... " >&6; } if test ${ac_cv_python3_version+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_python3_version=`$PYTHON3 -c "import sys; sys.stdout.write(sys.version[:3])"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python3_version" >&5 printf "%s\n" "$ac_cv_python3_version" >&6; } PYTHON3_VERSION=$ac_cv_python3_version PYTHON3_PREFIX='${prefix}' PYTHON3_EXEC_PREFIX='${exec_prefix}' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python3 platform" >&5 printf %s "checking for python3 platform... " >&6; } if test ${ac_cv_python3_platform+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_python3_platform=`$PYTHON3 -c "import sys; sys.stdout.write(sys.platform)"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python3_platform" >&5 printf "%s\n" "$ac_cv_python3_platform" >&6; } PYTHON3_PLATFORM=$ac_cv_python3_platform { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python3 script directory" >&5 printf %s "checking for python3 script directory... " >&6; } if test ${ac_cv_python3_dir+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_python3_dir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(0,0,prefix='$PYTHON3_PREFIX'))"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python3_dir" >&5 printf "%s\n" "$ac_cv_python3_dir" >&6; } python3dir=$ac_cv_python3_dir { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python3 extension module directory" >&5 printf %s "checking for python3 extension module directory... " >&6; } if test ${ac_cv_py3execdir+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_py3execdir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(1,0,prefix='$PYTHON3_EXEC_PREFIX'))"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_py3execdir" >&5 printf "%s\n" "$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'" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build with -Werror" >&5 printf %s "checking whether to build with -Werror... " >&6; } # Check whether --enable-Werror was given. if test ${enable_Werror+y} then : enableval=$enable_Werror; fi if test "${enable_Werror}" != "no" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi if test "${enable_Werror}" != "no"; then Werror_TRUE= Werror_FALSE='#' else Werror_TRUE='#' Werror_FALSE= fi if test "${enable_prologues+set}" != set; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking to see if prologue searching should be the default" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi # Check whether --enable-prologues was given. if test ${enable_prologues+y} then : enableval=$enable_prologues; if test "$enable_prologues" = yes; then printf "%s\n" "#define ENABLE_PROLOGUES /**/" >>confdefs.h fi fi if test "${enable_sdt_probes+set}" != set; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking to see if sdt probes should be the default" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi # Check whether --enable-sdt-probes was given. if test ${enable_sdt_probes+y} then : enableval=$enable_sdt_probes; fi if test "x$enable_sdt_probes" != xno then : printf "%s\n" "#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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 printf %s "checking whether $CXX supports C++11 features by default... " >&6; } if test ${ax_cv_cxx_compile_cxx11+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case e in #( e) ax_cv_cxx_compile_cxx11=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 printf "%s\n" "$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=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case e in #( e) eval $cachevar=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXX="$ac_save_CXX" ;; esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 printf "%s\n" "#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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts -std=c++0x" >&5 printf %s "checking whether C++ compiler accepts -std=c++0x... " >&6; } if test ${ax_cv_check_cxxflags___std_cpp0x+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_check_save_flags=$CXXFLAGS CXXFLAGS="$CXXFLAGS -std=c++0x" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ax_cv_check_cxxflags___std_cpp0x=yes else case e in #( e) ax_cv_check_cxxflags___std_cpp0x=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXXFLAGS=$ax_check_save_flags ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cxxflags___std_cpp0x" >&5 printf "%s\n" "$ax_cv_check_cxxflags___std_cpp0x" >&6; } if test "x$ax_cv_check_cxxflags___std_cpp0x" = xyes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Compiling with -std=c++0x" >&5 printf "%s\n" "$as_me: Compiling with -std=c++0x" >&6;} CXX="$CXX -std=c++0x" HAVE_CXX11=1 have_cxx0x="yes" else case e in #( e) as_fn_error $? "A compiler with C++11 support is required." "$LINENO" 5 ;; esac 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts -faligned-new" >&5 printf %s "checking whether C++ compiler accepts -faligned-new... " >&6; } if test ${ax_cv_check_cxxflags___faligned_new+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_check_save_flags=$CXXFLAGS CXXFLAGS="$CXXFLAGS -faligned-new" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ax_cv_check_cxxflags___faligned_new=yes else case e in #( e) ax_cv_check_cxxflags___faligned_new=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXXFLAGS=$ax_check_save_flags ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cxxflags___faligned_new" >&5 printf "%s\n" "$ax_cv_check_cxxflags___faligned_new" >&6; } if test "x$ax_cv_check_cxxflags___faligned_new" = xyes then : ALIGNEDNEW="-faligned-new" else case e in #( e) ALIGNEDNEW="" ;; esac 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+y} then : withval=$with_debuginfod; else case e in #( e) with_debuginfod=auto ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use debuginfod" >&5 printf %s "checking whether to use debuginfod... " >&6; } if expr "$with_debuginfod" : "/.*" >/dev/null; then debuginfod_LDFLAGS=-L$with_debuginfod/lib debuginfod_LIBS=-ldebuginfod debuginfod_CFLAGS=-I$with_debuginfod/include have_debuginfod=1 printf "%s\n" "#define HAVE_LIBDEBUGINFOD 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } elif test "x$with_debuginfod" != xno; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for debuginfod" >&5 printf %s "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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 fi elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if test "x$with_debuginfod" = xyes; then as_fn_error $? "\"--with-debuginfod was given, but libdebuginfod is missing or unusable.\"" "$LINENO" 5 fi else debuginfod_CFLAGS=$pkg_cv_debuginfod_CFLAGS debuginfod_LIBS=$pkg_cv_debuginfod_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_debuginfod=1 printf "%s\n" "#define HAVE_LIBDEBUGINFOD 1" >>confdefs.h fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ac_save_CFLAGS="$CFLAGS" ac_save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS $debuginfod_CFLAGS" LDFLAGS="$LDFLAGS $debuginfod_LDFLAGS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for debuginfod_find_metadata in -ldebuginfod" >&5 printf %s "checking for debuginfod_find_metadata in -ldebuginfod... " >&6; } if test ${ac_cv_lib_debuginfod_debuginfod_find_metadata+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldebuginfod $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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char debuginfod_find_metadata (void); int main (void) { return debuginfod_find_metadata (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_debuginfod_debuginfod_find_metadata=yes else case e in #( e) ac_cv_lib_debuginfod_debuginfod_find_metadata=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_debuginfod_debuginfod_find_metadata" >&5 printf "%s\n" "$ac_cv_lib_debuginfod_debuginfod_find_metadata" >&6; } if test "x$ac_cv_lib_debuginfod_debuginfod_find_metadata" = xyes then : printf "%s\n" "#define METADATA_QUERY_ENABLED 1" >>confdefs.h fi CFLAGS="$ac_save_CFLAGS" LDFLAGS="$ac_save_LDFLAGS" # Check whether --enable-sqlite was given. if test ${enable_sqlite+y} then : enableval=$enable_sqlite; else case e in #( e) enable_sqlite=check ;; esac fi sqlite3_LIBS= if test "x$enable_sqlite" != xno then : pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sqlite3" >&5 printf %s "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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if test "x$enable_sqlite" != xcheck; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_LIBSQLITE3 1" >>confdefs.h fi fi # Check whether --enable-translator was given. if test ${enable_translator+y} then : enableval=$enable_translator; else case e in #( e) enable_translator="yes" ;; esac 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+y} 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 : printf "%s\n" "#define HAVE_CRASH_DEFS_H 1" >>confdefs.h else case e in #( e) as_fn_error $? "cannot find required crash header (crash-devel may need to be installed)" "$LINENO" 5 ;; esac fi done CPPFLAGS="$save_CPPFLAGS" fi else case e in #( e) enable_crash="no" ;; esac 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+y} then : enableval=$enable_docs; enable_docs=$enableval else case e in #( e) enable_docs="prebuilt" ;; esac fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_have_latex+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi have_latex=$ac_cv_prog_have_latex if test -n "$have_latex"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_latex" >&5 printf "%s\n" "$have_latex" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_have_dvips+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi have_dvips=$ac_cv_prog_have_dvips if test -n "$have_dvips"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_dvips" >&5 printf "%s\n" "$have_dvips" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "ps2pdf", so it can be a program name with args. set dummy ps2pdf; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_have_ps2pdf+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi have_ps2pdf=$ac_cv_prog_have_ps2pdf if test -n "$have_ps2pdf"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_ps2pdf" >&5 printf "%s\n" "$have_ps2pdf" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: will not build documentation, cannot find all tools" >&5 printf "%s\n" "$as_me: WARNING: will not build documentation, cannot find all tools" >&2;} fi fi if test "$enable_docs" = "prebuilt"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: will only install prebuilt documentation" >&5 printf "%s\n" "$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+y} then : enableval=$enable_refdocs; enable_refdocs=$enableval else case e in #( e) enable_refdocs="check" ;; esac 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_have_xmlto+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi have_xmlto=$ac_cv_prog_have_xmlto if test -n "$have_xmlto"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_xmlto" >&5 printf "%s\n" "$have_xmlto" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "fop", so it can be a program name with args. set dummy fop; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_have_fop+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi have_fop=$ac_cv_prog_have_fop if test -n "$have_fop"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_fop" >&5 printf "%s\n" "$have_fop" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking to see if xmlto --with-fop actually works" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: it's dead, Jim" >&5 printf "%s\n" "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+y} then : enableval=$enable_htmldocs; building_htmldocs=$enableval else case e in #( e) building_htmldocs="no" ;; esac 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xmlto --stringparam support" >&5 printf %s "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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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+y} then : withval=$with_nss; fi if test "x$with_nss" != "xno" then : pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nss" >&5 printf %s "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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss >= 3\""; } >&5 ($PKG_CONFIG --exists --print-errors "nss >= 3") 2>&5 ac_status=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss >= 3\""; } >&5 ($PKG_CONFIG --exists --print-errors "nss >= 3") 2>&5 ac_status=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_nss=no else nss_CFLAGS=$pkg_cv_nss_CFLAGS nss_LIBS=$pkg_cv_nss_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_nss=yes printf "%s\n" "#define HAVE_NSS 1" >>confdefs.h fi else case e in #( e) have_nss=no ;; esac 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+y} then : withval=$with_openssl; fi if test "x$with_openssl" != "xno" then : pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openssl" >&5 printf %s "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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 ac_status=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 ac_status=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_openssl=no else openssl_CFLAGS=$pkg_cv_openssl_CFLAGS openssl_LIBS=$pkg_cv_openssl_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_openssl=yes printf "%s\n" "#define HAVE_OPENSSL 1" >>confdefs.h fi else case e in #( e) have_openssl=no ;; esac 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+y} then : withval=$with_dracutstap; fi if test "x$with_dracutstap" != "x" then : dracutstap="$with_dracutstap" else case e in #( e) dracutstap=/usr/lib/dracut/modules.d/99stap ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using dracut module directory $dracutstap" >&5 printf "%s\n" "$as_me: using dracut module directory $dracutstap" >&6;} # Check whether --with-dracutbindir was given. if test ${with_dracutbindir+y} then : withval=$with_dracutbindir; fi if test "x$with_dracutbindir" != "x" then : dracutbindir="$with_dracutbindir" else case e in #( e) dracutbindir=/sbin ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using dracut binary $dracutbindir" >&5 printf "%s\n" "$as_me: using dracut binary $dracutbindir" >&6;} # Check whether --enable-server was given. if test ${enable_server+y} then : enableval=$enable_server; enable_server=$enableval else case e in #( e) enable_server="check" ;; esac fi if test "$enable_server" != "no"; then if test "x${have_nss}" != "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: will not build systemtap compile server, cannot find nss headers" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compile-server client functionality will be disabled, cannot find nss development files" >&5 printf "%s\n" "$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+y} then : withval=$with_avahi; fi if test "x$with_avahi" != "xno" then : pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for avahi" >&5 printf %s "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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-client\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-client") 2>&5 ac_status=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-client\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-client") 2>&5 ac_status=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_avahi=no else avahi_CFLAGS=$pkg_cv_avahi_CFLAGS avahi_LIBS=$pkg_cv_avahi_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_avahi=yes printf "%s\n" "#define HAVE_AVAHI 1" >>confdefs.h fi else case e in #( e) have_avahi=no ;; esac 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: some compile-server functionality will be restricted, cannot find avahi development files" >&5 printf "%s\n" "$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+y} then : withval=$with_rpm; else case e in #( e) with_rpm="auto" ;; esac fi if test "$with_rpm" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rpmtsInitIterator in -lrpm" >&5 printf %s "checking for rpmtsInitIterator in -lrpm... " >&6; } if test ${ac_cv_lib_rpm_rpmtsInitIterator+y} then : printf %s "(cached) " >&6 else case e in #( e) 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char rpmtsInitIterator (void); int main (void) { return rpmtsInitIterator (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rpm_rpmtsInitIterator=yes else case e in #( e) ac_cv_lib_rpm_rpmtsInitIterator=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpm_rpmtsInitIterator" >&5 printf "%s\n" "$ac_cv_lib_rpm_rpmtsInitIterator" >&6; } if test "x$ac_cv_lib_rpm_rpmtsInitIterator" = xyes then : printf "%s\n" "#define HAVE_LIBRPM 1" >>confdefs.h stap_LIBS="$stap_LIBS -lc -lrpm" have_librpm="yes" else case e in #( e) have_librpm="no" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rpmdbNextIterator in -lrpmdb" >&5 printf %s "checking for rpmdbNextIterator in -lrpmdb... " >&6; } if test ${ac_cv_lib_rpmdb_rpmdbNextIterator+y} then : printf %s "(cached) " >&6 else case e in #( e) 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char rpmdbNextIterator (void); int main (void) { return rpmdbNextIterator (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rpmdb_rpmdbNextIterator=yes else case e in #( e) ac_cv_lib_rpmdb_rpmdbNextIterator=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpmdb_rpmdbNextIterator" >&5 printf "%s\n" "$ac_cv_lib_rpmdb_rpmdbNextIterator" >&6; } if test "x$ac_cv_lib_rpmdb_rpmdbNextIterator" = xyes then : stap_LIBS="$stap_LIBS -lrpmdb" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rpmFreeCrypto in -lrpmio" >&5 printf %s "checking for rpmFreeCrypto in -lrpmio... " >&6; } if test ${ac_cv_lib_rpmio_rpmFreeCrypto+y} then : printf %s "(cached) " >&6 else case e in #( e) 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char rpmFreeCrypto (void); int main (void) { return rpmFreeCrypto (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rpmio_rpmFreeCrypto=yes else case e in #( e) ac_cv_lib_rpmio_rpmFreeCrypto=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpmio_rpmFreeCrypto" >&5 printf "%s\n" "$ac_cv_lib_rpmio_rpmFreeCrypto" >&6; } if test "x$ac_cv_lib_rpmio_rpmFreeCrypto" = xyes then : printf "%s\n" "#define HAVE_LIBRPMIO 1" >>confdefs.h stap_LIBS="$stap_LIBS -lc -lrpmio" have_librpmio="yes" else case e in #( e) have_librpmio="no" ;; esac 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot find librpmio" >&5 printf "%s\n" "$as_me: WARNING: cannot find librpmio" >&2;} fi fi ac_fn_c_check_header_compile "$LINENO" "stdatomic.h" "ac_cv_header_stdatomic_h" "$ac_includes_default" if test "x$ac_cv_header_stdatomic_h" = xyes then : printf "%s\n" "#define HAVE_STDATOMIC_H 1" >>confdefs.h fi for ac_header in rpm/rpmcrypto.h do : ac_fn_c_check_header_compile "$LINENO" "rpm/rpmcrypto.h" "ac_cv_header_rpm_rpmcrypto_h" "$ac_includes_default" if test "x$ac_cv_header_rpm_rpmcrypto_h" = xyes then : printf "%s\n" "#define HAVE_RPM_RPMCRYPTO_H 1" >>confdefs.h printf "%s\n" "#define HAVE_RPMCRYPTO_H 1" >>confdefs.h have_rpmcrypto_h=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: separate rpm/rpmcrypto.h" >&5 printf "%s\n" "$as_me: separate rpm/rpmcrypto.h" >&6;} fi done LIBS_no_readline=$LIBS have_libreadline="no" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link readline libs" >&5 printf %s "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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char readline (void); int main (void) { 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.beam \ conftest$ac_exeext conftest.$ac_ext if test "$have_libreadline" = "yes"; then break fi done if test "$have_libreadline" = "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } READLINE_LIBS="" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $READLINE_LIBS" >&5 printf "%s\n" "$READLINE_LIBS" >&6; } printf "%s\n" "#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+y} then : withval=$with_python3; else case e in #( e) with_python3="auto" ;; esac 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 case e in #( e) preferred_python=$PYTHON3 ;; esac 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 case e in #( e) preferred_python=$PYTHON ;; esac fi elif test "x$PYTHON3" != "x:" then : preferred_python=$PYTHON3 elif test "x$PYTHON" != "x:" then : preferred_python=$PYTHON else case e in #( e) as_fn_error $? "neither python version 2 nor 3 found" "$LINENO" 5 ;; esac 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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ebl_strtabinit in -lebl" >&5 printf %s "checking for ebl_strtabinit in -lebl... " >&6; } if test ${ac_cv_lib_ebl_ebl_strtabinit+y} then : printf %s "(cached) " >&6 else case e in #( e) 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char ebl_strtabinit (void); int main (void) { return ebl_strtabinit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ebl_ebl_strtabinit=yes else case e in #( e) ac_cv_lib_ebl_ebl_strtabinit=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ebl_ebl_strtabinit" >&5 printf "%s\n" "$ac_cv_lib_ebl_ebl_strtabinit" >&6; } if test "x$ac_cv_lib_ebl_ebl_strtabinit" = xyes then : ebl_LIBS=-lebl else case e in #( e) ebl_LIBS= ;; esac fi LIBS="$save_LIBS" save_LIBS="$LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dwfl_module_getsym in -ldw" >&5 printf %s "checking for dwfl_module_getsym in -ldw... " >&6; } if test ${ac_cv_lib_dw_dwfl_module_getsym+y} then : printf %s "(cached) " >&6 else case e in #( e) 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dwfl_module_getsym (void); int main (void) { return dwfl_module_getsym (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dw_dwfl_module_getsym=yes else case e in #( e) ac_cv_lib_dw_dwfl_module_getsym=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dw_dwfl_module_getsym" >&5 printf "%s\n" "$ac_cv_lib_dw_dwfl_module_getsym" >&6; } if test "x$ac_cv_lib_dw_dwfl_module_getsym" = xyes then : printf "%s\n" "#define HAVE_LIBDW 1" >>confdefs.h LIBS="-ldw $LIBS" else case e in #( e) as_fn_error $? "missing elfutils development headers/libraries (install elfutils-devel, libebl-dev, libdw-dev and/or libebl-devel)" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dwarf_next_unit in -ldw" >&5 printf %s "checking for dwarf_next_unit in -ldw... " >&6; } if test ${ac_cv_lib_dw_dwarf_next_unit+y} then : printf %s "(cached) " >&6 else case e in #( e) 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dwarf_next_unit (void); int main (void) { return dwarf_next_unit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dw_dwarf_next_unit=yes else case e in #( e) ac_cv_lib_dw_dwarf_next_unit=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dw_dwarf_next_unit" >&5 printf "%s\n" "$ac_cv_lib_dw_dwarf_next_unit" >&6; } if test "x$ac_cv_lib_dw_dwarf_next_unit" = xyes then : printf "%s\n" "#define HAVE_LIBDW 1" >>confdefs.h LIBS="-ldw $LIBS" else case e in #( e) as_fn_error $? "elfutils, libdw too old, need 0.148+" "$LINENO" 5 ;; esac fi stap_LIBS="$stap_LIBS -Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf" LIBS="$save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: stap will link $stap_LIBS" >&5 printf "%s\n" "$as_me: stap will link $stap_LIBS" >&6;} # staprun has more modest libelf needs save_LIBS="$LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for elf_getshdrstrndx in -lelf" >&5 printf %s "checking for elf_getshdrstrndx in -lelf... " >&6; } if test ${ac_cv_lib_elf_elf_getshdrstrndx+y} then : printf %s "(cached) " >&6 else case e in #( e) 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char elf_getshdrstrndx (void); int main (void) { return elf_getshdrstrndx (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_elf_elf_getshdrstrndx=yes else case e in #( e) ac_cv_lib_elf_elf_getshdrstrndx=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_elf_getshdrstrndx" >&5 printf "%s\n" "$ac_cv_lib_elf_elf_getshdrstrndx" >&6; } if test "x$ac_cv_lib_elf_elf_getshdrstrndx" = xyes then : printf "%s\n" "#define HAVE_LIBELF 1" >>confdefs.h LIBS="-lelf $LIBS" else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "libelf too old, need 0.142+ See 'config.log' for more details" "$LINENO" 5; } ;; esac fi staprun_LIBS="$staprun_LIBS -lelf" stapbpf_LIBS="$stapbpf_LIBS -lelf" LIBS="$save_LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: staprun will link $staprun_LIBS" >&5 printf "%s\n" "$as_me: staprun will link $staprun_LIBS" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: stapbpf will link $stapbpf_LIBS" >&5 printf "%s\n" "$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 # PR32788 concurrency goodies ac_fn_cxx_check_header_compile "$LINENO" "boost/asio/thread_pool.hpp" "ac_cv_header_boost_asio_thread_pool_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_asio_thread_pool_hpp" = xyes then : printf "%s\n" "#define HAVE_BOOST_ASIO_THREAD_POOL_HPP 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "boost/asio/post.hpp" "ac_cv_header_boost_asio_post_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_asio_post_hpp" = xyes then : printf "%s\n" "#define HAVE_BOOST_ASIO_POST_HPP 1" >>confdefs.h fi # Use boost::string_ref if available; moot with PR32788 # AC_CHECK_HEADERS([boost/utility/string_ref.hpp]) # add boost_system bits for stapdyn with dyninst 10+ saved_LIBS="$LIBS" LIBS="-lboost_system $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking need for -lboost_system library" >&5 printf %s "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 : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yup" >&5 printf "%s\n" "yup" >&6; } BOOST_SYSTEM_LIB="-lboost_system" else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: nope" >&5 printf "%s\n" "nope" >&6; } BOOST_SYSTEM_LIB="" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ 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+y} then : withval=$with_dyninst; fi case "$with_dyninst" in no) ;; ''|yes) # Try a simple-minded distro search DYNINST_CXXFLAGS="-I/usr/include/dyninst" old_LIBS="$LIBS" old_LDFLAGS="$LDFLAGS" old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $DYNINST_CXXFLAGS" 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 location in /usr/lib64/dyninst /usr/lib/dyninst ${libdir}/dyninst; do LDFLAGS="-L${location}" LIBS="-lparseAPI ${BOOST_SYSTEM_LIB}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { char *s; Dyninst::ParseAPI::SymtabCodeSource *sts = new Dyninst::ParseAPI::SymtabCodeSource(s); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : found_DYNINST_LDFLAGS=yes else case e in #( e) found_DYNINST_LDFLAGS=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$found_DYNINST_LDFLAGS" = "yes"; then DYNINST_LDFLAGS="$LDFLAGS" break fi done 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 CPPFLAGS="$old_CPPFLAGS" LDFLAGS="$old_LDFLAGS" LIBS="$old_LIBS" # Add Dyninst libraries only if they are available if test -d "/usr/include/dyninst"; then save_LIBS="$LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for TBB_runtime_interface_version in -ltbb" >&5 printf %s "checking for TBB_runtime_interface_version in -ltbb... " >&6; } if test ${ac_cv_lib_tbb_TBB_runtime_interface_version+y} then : printf %s "(cached) " >&6 else case e in #( e) 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char TBB_runtime_interface_version (void); int main (void) { 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 case e in #( e) ac_cv_lib_tbb_TBB_runtime_interface_version=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tbb_TBB_runtime_interface_version" >&5 printf "%s\n" "$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 case e in #( e) tbb_LIBS= ;; esac 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 -I$with_dyninst/include/dyninst" DYNINST_LDFLAGS="-L$with_dyninst/lib64/dyninst -Wl,-rpath-link,$with_dyninst/lib64/dyninst" # Will assume Dyninst libraries are available as the path is specified save_LIBS="$LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for TBB_runtime_interface_version in -ltbb" >&5 printf %s "checking for TBB_runtime_interface_version in -ltbb... " >&6; } if test ${ac_cv_lib_tbb_TBB_runtime_interface_version+y} then : printf %s "(cached) " >&6 else case e in #( e) 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char TBB_runtime_interface_version (void); int main (void) { 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 case e in #( e) ac_cv_lib_tbb_TBB_runtime_interface_version=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tbb_TBB_runtime_interface_version" >&5 printf "%s\n" "$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 case e in #( e) tbb_LIBS= ;; esac 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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dyninst support" >&5 printf "%s\n" "$as_me: checking dyninst support" >&6;} for ac_header in dyninst/BPatch_object.h do : ac_fn_cxx_check_header_compile "$LINENO" "dyninst/BPatch_object.h" "ac_cv_header_dyninst_BPatch_object_h" "$ac_includes_default" if test "x$ac_cv_header_dyninst_BPatch_object_h" = xyes then : printf "%s\n" "#define HAVE_DYNINST_BPATCH_OBJECT_H 1" >>confdefs.h printf "%s\n" "#define HAVE_DYNINST 1" >>confdefs.h have_dyninst=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: dyninst support available" >&5 printf "%s\n" "$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+y} then : enableval=$enable_virt; enable_virt=$enableval else case e in #( e) enable_virt="check" ;; esac fi # Check whether --enable-libvirt was given. if test ${enable_libvirt+y} then : enableval=$enable_libvirt; fi if test "$enable_libvirt" != no; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libvirt" >&5 printf %s "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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_libvirt=no else libvirt_CFLAGS=$pkg_cv_libvirt_CFLAGS libvirt_LIBS=$pkg_cv_libvirt_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_libvirt=yes printf "%s\n" "#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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 printf %s "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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_libxml2=no else libxml2_CFLAGS=$pkg_cv_libxml2_CFLAGS libxml2_LIBS=$pkg_cv_libxml2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_libxml2=yes printf "%s\n" "#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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: will not build systemtap virt support, cannot find libvirt headers" >&5 printf "%s\n" "$as_me: WARNING: will not build systemtap virt support, cannot find libvirt headers" >&2;} fi if test "x${have_libxml2}" != "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: will not build systemtap virt support, cannot find xml2 headers" >&5 printf "%s\n" "$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+y} 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PYTHON_CONFIG=$ac_cv_path_PYTHON_CONFIG if test -n "$PYTHON_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CONFIG" >&5 printf "%s\n" "$PYTHON_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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_compile "$LINENO" "Python.h" "ac_cv_header_Python_h" "$ac_includes_default" if test "x$ac_cv_header_Python_h" = xyes then : printf "%s\n" "#define HAVE_PYTHON_H 1" >>confdefs.h have_python2_support=yes fi done CPPFLAGS="$save_CPPFLAGS" fi fi if test "x$have_python2_support" = "xyes" then : printf "%s\n" "#define HAVE_PYTHON2_PROBES 1" >>confdefs.h else case e in #( e) if test "x$with_python2_probes" = "xyes" then : as_fn_error $? "python version 2 probe support requested but not found" "$LINENO" 5 fi ;; esac 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+y} 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON3_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PYTHON3_CONFIG=$ac_cv_path_PYTHON3_CONFIG if test -n "$PYTHON3_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON3_CONFIG" >&5 printf "%s\n" "$PYTHON3_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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_compile "$LINENO" "Python.h" "ac_cv_header_Python_h" "$ac_includes_default" if test "x$ac_cv_header_Python_h" = xyes then : printf "%s\n" "#define HAVE_PYTHON_H 1" >>confdefs.h have_python3_support=yes fi done CPPFLAGS="$save_CPPFLAGS" fi fi if test "x$have_python3_support" = "xyes" then : printf "%s\n" "#define HAVE_PYTHON3_PROBES 1" >>confdefs.h else case e in #( e) if test "x$with_python3_probes" = "xyes" then : as_fn_error $? "python version 3 probe support requested but not found" "$LINENO" 5 fi ;; esac 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 pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for jsonc" >&5 printf %s "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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c >= 0.13\""; } >&5 ($PKG_CONFIG --exists --print-errors "json-c >= 0.13") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jsonc_CFLAGS=`$PKG_CONFIG --cflags "json-c >= 0.13" 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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c >= 0.13\""; } >&5 ($PKG_CONFIG --exists --print-errors "json-c >= 0.13") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jsonc_LIBS=`$PKG_CONFIG --libs "json-c >= 0.13" 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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.13" 2>&1` else jsonc_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "json-c >= 0.13" 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_jsonc=no else jsonc_CFLAGS=$pkg_cv_jsonc_CFLAGS jsonc_LIBS=$pkg_cv_jsonc_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_jsonc=yes fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ncurses" >&5 printf %s "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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_ncurses=no else ncurses_CFLAGS=$pkg_cv_ncurses_CFLAGS ncurses_LIBS=$pkg_cv_ncurses_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_ncurses=yes fi # Check whether --enable-monitor was given. if test ${enable_monitor+y} then : enableval=$enable_monitor; fi if test "$enable_monitor" != "no"; then if test "${have_jsonc}" = "yes" -a "${have_ncurses}" = yes; then printf "%s\n" "#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 if test "${have_jsonc}" = "yes"; then printf "%s\n" "#define HAVE_JSON_C 1" >>confdefs.h fi if test "${have_jsonc}" = "yes"; then HAVE_JSON_C_TRUE= HAVE_JSON_C_FALSE='#' else HAVE_JSON_C_TRUE='#' HAVE_JSON_C_FALSE= fi # We require gcc >=8 since we use some more modern language features such as lambda-capture [this] and # initializer list constructors in class template argument deduction { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking to see if the language server is supported" >&5 printf %s "checking to see if the language server is supported... " >&6; } if { echo '#if __GNUC__ >= 8 ' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then have_language_server_support=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_LANGUAGE_SERVER_SUPPORT 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$have_language_server_support" = "xyes"; then HAVE_LANGUAGE_SERVER_SUPPORT_TRUE= HAVE_LANGUAGE_SERVER_SUPPORT_FALSE='#' else HAVE_LANGUAGE_SERVER_SUPPORT_TRUE='#' HAVE_LANGUAGE_SERVER_SUPPORT_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for assembler .section \"?\" flags support" >&5 printf %s "checking for assembler .section \"?\" flags support... " >&6; } if test ${stap_cv_sectionq+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case e in #( e) stap_cv_sectionq=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$old_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $stap_cv_sectionq" >&5 printf "%s\n" "$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+y} then : withval=$with_bpf; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" # This test program should *not* compile successfully. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { (void) strchr; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the # off chance that they somehow elicit warnings. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include extern void ac_decl (int, char *); int main (void) { (void) ac_decl (0, (char *) 0); (void) ac_decl; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' else case e in #( e) ac_cv_c_undeclared_builtin_options=$ac_arg ;; esac fi break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins See 'config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; esac if test "x$with_bpf" != "xno" then : ac_fn_check_decl "$LINENO" "BPF_PROG_TYPE_PERF_EVENT" "ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_BPF_PROG_TYPE_PERF_EVENT $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : printf "%s\n" "#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_check_decl "$LINENO" "BPF_PROG_TYPE_RAW_TRACEPOINT" "ac_cv_have_decl_BPF_PROG_TYPE_RAW_TRACEPOINT" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_BPF_PROG_TYPE_RAW_TRACEPOINT" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_BPF_PROG_TYPE_RAW_TRACEPOINT $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : printf "%s\n" "#define HAVE_BPF_PROG_TYPE_RAW_TRACEPOINT 1" >>confdefs.h fi # Check whether --with-selinux was given. if test ${with_selinux+y} then : withval=$with_selinux; fi if test "x$with_selinux" != "xno" then : pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for selinux" >&5 printf %s "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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libselinux\""; } >&5 ($PKG_CONFIG --exists --print-errors "libselinux") 2>&5 ac_status=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libselinux\""; } >&5 ($PKG_CONFIG --exists --print-errors "libselinux") 2>&5 ac_status=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_selinux=no else selinux_CFLAGS=$pkg_cv_selinux_CFLAGS selinux_LIBS=$pkg_cv_selinux_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_selinux=yes printf "%s\n" "#define HAVE_SELINUX 1" >>confdefs.h fi else case e in #( e) have_selinux=no ;; esac fi if test "${have_selinux}" = "yes"; then HAVE_SELINUX_TRUE= HAVE_SELINUX_FALSE='#' else HAVE_SELINUX_TRUE='#' HAVE_SELINUX_FALSE= fi ac_fn_check_decl "$LINENO" "F_SETPIPE_SZ" "ac_cv_have_decl_F_SETPIPE_SZ" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_F_SETPIPE_SZ" = xyes then : printf "%s\n" "#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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_have_javac+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi have_javac=$ac_cv_prog_have_javac if test -n "$have_javac"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_javac" >&5 printf "%s\n" "$have_javac" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "jar", so it can be a program name with args. set dummy jar; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_have_jar+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 ;; esac fi have_jar=$ac_cv_prog_have_jar if test -n "$have_jar"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_jar" >&5 printf "%s\n" "$have_jar" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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+y} then : withval=$with_java; else case e in #( e) with_java=/usr/lib/jvm/java ;; esac fi if test ! -d "$with_java"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: directory $with_java not found, disabling java support" >&5 printf "%s\n" "$as_me: directory $with_java not found, disabling java support" >&6;} with_java=no fi JAVADIR="${with_java}" # always needed to compile if test "$with_java" != "no"; then printf "%s\n" "#define HAVE_JAVA \"1\"" >>confdefs.h fi if test "$with_java" != "no"; then HAVE_JAVA_TRUE= HAVE_JAVA_FALSE='#' else HAVE_JAVA_TRUE='#' HAVE_JAVA_FALSE= fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: will not run per-method java probing, missing byteman or java requirements" >&5 printf "%s\n" "$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+y} then : withval=$with_extra_version; fi if test "x$with_extra_version" != "xno" then : stap_extra_version="$with_extra_version" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Adding extra version $stap_extra_version" >&5 printf "%s\n" "$as_me: Adding extra version $stap_extra_version" >&6;} else case e in #( e) stap_extra_version="" ;; esac fi printf "%s\n" "#define STAP_EXTRA_VERSION \"$stap_extra_version\"" >>confdefs.h STAP_EXTRA_VERSION="$stap_extra_version" # Check whether --enable-http was given. if test ${enable_http+y} then : enableval=$enable_http; fi have_http_support=no if test "x$enable_http" = "xyes" then : pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libmicrohttpd" >&5 printf %s "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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_libmicrohttpd=false else libmicrohttpd_CFLAGS=$pkg_cv_libmicrohttpd_CFLAGS libmicrohttpd_LIBS=$pkg_cv_libmicrohttpd_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_libmicrohttpd=true fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid" >&5 printf %s "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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_libuuid=false else uuid_CFLAGS=$pkg_cv_uuid_CFLAGS uuid_LIBS=$pkg_cv_uuid_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_libuuid=true fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libcurl" >&5 printf %s "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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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" && \ { { printf "%s\n" "$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=$? printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_libcurl=false else libcurl_CFLAGS=$pkg_cv_libcurl_CFLAGS libcurl_LIBS=$pkg_cv_libcurl_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "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 : printf "%s\n" "#define HAVE_HTTP_SUPPORT 1" >>confdefs.h else case e in #( e) if test "x$enable_http" = "xyes" then : as_fn_error $? "http service support requested but not found" "$LINENO" 5 fi ;; esac 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 : printf "%s\n" "#define NEED_BASE_CLIENT_CODE 1" >>confdefs.h fi stap_prefix=$prefix test "$stap_prefix" = NONE && stap_prefix=$ac_default_prefix printf "%s\n" "#define STAP_PREFIX \"$stap_prefix\"" >>confdefs.h 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 interactive-notebook/Makefile" ac_config_files="$ac_config_files interactive-notebook/stap-jupyter-container" ac_config_files="$ac_config_files interactive-notebook/stap-jupyter-install" 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" ac_config_files="$ac_config_files stap-profile-annotate" # 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$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+y} || &/ 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$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=`printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "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 # Check whether --enable-year2038 was given. if test ${enable_year2038+y} then : enableval=$enable_year2038; fi if test -z "${Werror_TRUE}" && test -z "${Werror_FALSE}"; then as_fn_error $? "conditional \"Werror\" 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_JSON_C_TRUE}" && test -z "${HAVE_JSON_C_FALSE}"; then as_fn_error $? "conditional \"HAVE_JSON_C\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LANGUAGE_SERVER_SUPPORT_TRUE}" && test -z "${HAVE_LANGUAGE_SERVER_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"HAVE_LANGUAGE_SERVER_SUPPORT\" 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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$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 ${ZSH_VERSION+y} && (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 e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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 case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac 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 case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac 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 || printf "%s\n" 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 # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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=`printf "%s\n" "$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 || printf "%s\n" 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_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated 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 5.3, which was generated by GNU Autoconf 2.72. 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 ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ systemtap config.status 5.3 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 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 ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$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=`printf "%s\n" "$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 ) printf "%s\n" "$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 \printf "%s\n" "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 printf "%s\n" "$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" ;; "interactive-notebook/Makefile") CONFIG_FILES="$CONFIG_FILES interactive-notebook/Makefile" ;; "interactive-notebook/stap-jupyter-container") CONFIG_FILES="$CONFIG_FILES interactive-notebook/stap-jupyter-container" ;; "interactive-notebook/stap-jupyter-install") CONFIG_FILES="$CONFIG_FILES interactive-notebook/stap-jupyter-install" ;; "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" ;; "stap-profile-annotate") CONFIG_FILES="$CONFIG_FILES stap-profile-annotate" ;; "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+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || 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=`printf "%s\n" "$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 '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$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 || printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$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"; } && { printf "%s\n" "$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 printf "%s\n" "$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 { printf "%s\n" "/* $configure_input */" >&1 \ && 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$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 printf "%s\n" "/* $configure_input */" >&1 \ && 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 || printf "%s\n" 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) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$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=`printf "%s\n" "$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 || printf "%s\n" 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 || printf "%s\n" 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 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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 ;; "interactive-notebook/stap-jupyter-container":F) chmod +x interactive-notebook/stap-jupyter-container ;; "interactive-notebook/stap-jupyter-install":F) chmod +x interactive-notebook/stap-jupyter-install ;; "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 ;; "stap-profile-annotate":F) chmod +x stap-profile-annotate ;; "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=`printf "%s\n" "$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=`printf "%s\n" "$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)" printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 printf "%s\n" "$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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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 configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. 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 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi if test "${prefix}" = "/usr/local"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 printf "%s\n" "$as_me: " >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: For a private or temporary build of systemtap, we recommend" >&5 printf "%s\n" "$as_me: For a private or temporary build of systemtap, we recommend" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: configuring with a prefix. For example, try" >&5 printf "%s\n" "$as_me: configuring with a prefix. For example, try" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $0 $ac_configure_args --prefix=$HOME/systemtap-${PACKAGE_VERSION}-$$" >&5 printf "%s\n" "$as_me: $0 $ac_configure_args --prefix=$HOME/systemtap-${PACKAGE_VERSION}-$$" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Running systemtap uninstalled, entirely out of the build tree," >&5 printf "%s\n" "$as_me: Running systemtap uninstalled, entirely out of the build tree," >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: is not supported." >&5 printf "%s\n" "$as_me: is not supported." >&6;} fi systemtap-5.3/configure.ac000066400000000000000000001233461500444254400157130ustar00rootroot00000000000000dnl configure.ac --- autoconf input file for systemtap dnl Process this file with autoconf to produce a configure script. AC_INIT([systemtap],[5.3],[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.71]) 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])]) PKG_PROG_PKG_CONFIG 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. AC_PATH_PROGS([PYTHON3], [python3 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0], [:]) 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 Allow the build to exclude -Werror AC_MSG_CHECKING([whether to build with -Werror]) AC_ARG_ENABLE([Werror], AS_HELP_STRING('[--enable-Werror], [compile with -Werror flags])) AS_IF([test "${enable_Werror}" != "no"], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AM_CONDITIONAL([Werror], [test "${enable_Werror}" != "no"]) 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. If given --with-debuginfod=/PATH, interpret /PATH as a prefix dnl of an elfutils install tree. AC_ARG_WITH([debuginfod], AS_HELP_STRING([--with-debuginfod],[Enable debuginfo lookups with debuginfod (auto/yes/no)]), [], [with_debuginfod=auto]) AC_MSG_CHECKING([whether to use debuginfod]) if expr "$with_debuginfod" : "/.*" >/dev/null; then dnl take the user at his or her word debuginfod_LDFLAGS=-L$with_debuginfod/lib debuginfod_LIBS=-ldebuginfod debuginfod_CFLAGS=-I$with_debuginfod/include have_debuginfod=1 AC_DEFINE([HAVE_LIBDEBUGINFOD], [1], [Define to 1 if debuginfod is enabled.]) AC_MSG_RESULT([yes]) elif test "x$with_debuginfod" != xno; then dnl check in the system pkgconfig PKG_CHECK_MODULES([debuginfod], [libdebuginfod >= 0.179], [have_debuginfod=1 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."]) fi]) else AC_MSG_RESULT([no]) fi ac_save_CFLAGS="$CFLAGS" ac_save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS $debuginfod_CFLAGS" LDFLAGS="$LDFLAGS $debuginfod_LDFLAGS" AC_CHECK_LIB(debuginfod, debuginfod_find_metadata, [ AC_DEFINE([METADATA_QUERY_ENABLED], [1], [Define if a new enough version of elfutils exists to support metadata querying]) ]) CFLAGS="$ac_save_CFLAGS" LDFLAGS="$ac_save_LDFLAGS" AC_SUBST(debuginfod_LDFLAGS) 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 AC_CHECK_HEADERS([stdatomic.h]) dnl Look for rpmcrypto.h AC_CHECK_HEADERS([rpm/rpmcrypto.h], [ AC_DEFINE([HAVE_RPMCRYPTO_H],[1],[have rpmcrypto_h]) have_rpmcrypto_h=yes AC_MSG_NOTICE([separate rpm/rpmcrypto.h])]) 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++) # PR32788 concurrency goodies AC_CHECK_HEADERS([boost/asio/thread_pool.hpp]) AC_CHECK_HEADERS([boost/asio/post.hpp]) # Use boost::string_ref if available; moot with PR32788 # 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" old_LIBS="$LIBS" old_LDFLAGS="$LDFLAGS" old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $DYNINST_CXXFLAGS" AC_LANG_PUSH(C++) for location in /usr/lib64/dyninst /usr/lib/dyninst ${libdir}/dyninst; do LDFLAGS="-L${location}" LIBS="-lparseAPI ${BOOST_SYSTEM_LIB}" AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[char *s; Dyninst::ParseAPI::SymtabCodeSource *sts = new Dyninst::ParseAPI::SymtabCodeSource(s);]])], [found_DYNINST_LDFLAGS=yes],[found_DYNINST_LDFLAGS=no]) if test "$found_DYNINST_LDFLAGS" = "yes"; then DYNINST_LDFLAGS="$LDFLAGS" break fi done AC_LANG_POP(C++) CPPFLAGS="$old_CPPFLAGS" LDFLAGS="$old_LDFLAGS" LIBS="$old_LIBS" # 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 -I$with_dyninst/include/dyninst" DYNINST_LDFLAGS="-L$with_dyninst/lib64/dyninst -Wl,-rpath-link,$with_dyninst/lib64/dyninst" # 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([dyninst/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"]) PKG_CHECK_MODULES([jsonc], [json-c >= 0.13], [have_jsonc=yes], [have_jsonc=no]) PKG_CHECK_MODULES([ncurses], [ncurses], [have_ncurses=yes], [have_ncurses=no]) 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 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"]) if test "${have_jsonc}" = "yes"; then AC_DEFINE([HAVE_JSON_C],[1],[Define to 1 if the json-c library is installed]) fi AM_CONDITIONAL([HAVE_JSON_C], [test "${have_jsonc}" = "yes"]) # We require gcc >=8 since we use some more modern language features such as lambda-capture [this] and # initializer list constructors in class template argument deduction AC_MSG_CHECKING([to see if the language server is supported]) if { echo '#if __GNUC__ >= 8 ' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then have_language_server_support=yes AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_LANGUAGE_SERVER_SUPPORT], [1], [Define to 1 if the language server is supported]) else AC_MSG_RESULT([no]) fi AM_CONDITIONAL([HAVE_LANGUAGE_SERVER_SUPPORT], [test "x$have_language_server_support" = "xyes"]) 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 AC_MSG_NOTICE([directory $with_java not found, disabling java support]) 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(interactive-notebook/Makefile) AC_CONFIG_FILES([interactive-notebook/stap-jupyter-container], [chmod +x interactive-notebook/stap-jupyter-container]) AC_CONFIG_FILES([interactive-notebook/stap-jupyter-install], [chmod +x interactive-notebook/stap-jupyter-install]) 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) AC_CONFIG_FILES([stap-profile-annotate], [chmod +x stap-profile-annotate]) 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-5.3/coveragedb.cxx000066400000000000000000000243671500444254400162550ustar00rootroot00000000000000// 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 "staputil.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-5.3/coveragedb.h000066400000000000000000000035501500444254400156710ustar00rootroot00000000000000// 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-5.3/csclient.cxx000066400000000000000000000242311500444254400157460ustar00rootroot00000000000000/* 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 "staputil.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-5.3/csclient.h000066400000000000000000000043471500444254400154010ustar00rootroot00000000000000// -*- 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-5.3/cscommon.cxx000066400000000000000000000257071500444254400157710ustar00rootroot00000000000000/* 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 "staputil.h" #include "cscommon.h" #include "nsscommon.h" #include #include #include #include #include #include #include extern "C" { #include #include #include #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 (); } int mok_sign_file (const std::string &mok_fingerprint, const std::string &mok_path, const std::string &kernel_build_tree, const std::string &name) { string mok_directory = mok_path + "/" + mok_fingerprint; vector cmd { kernel_build_tree + "/scripts/sign-file", "sha512", mok_directory + MOK_PRIVATE_CERT_FILE, mok_directory + MOK_PUBLIC_CERT_FILE, name }; return stap_system (0, cmd); } void generate_mok(string &mok_fingerprint, void report_error (const string& msg, int logit)) { string mok_path = server_cert_db_path() + "/moks"; vector cmd; int rc; char tmpdir[PATH_MAX] = { '\0' }; string public_cert_path, private_cert_path, destdir; string msg; mode_t old_umask; int retlen; // The default MOK config text used when creating new MOKs. This text is // saved to the MOK config file and can be modified by the administrator. const char mok_config_text[] = "[ req ]\n" "default_bits = 4096\n" "distinguished_name = req_distinguished_name\n" "prompt = no\n" "x509_extensions = myexts\n" "\n" "[ req_distinguished_name ]\n" "O = Systemtap\n" "CN = Systemtap module signing key\n" "\n" "[ myexts ]\n" "basicConstraints=critical,CA:FALSE\n" "keyUsage=digitalSignature\n" "subjectKeyIdentifier=hash\n" "authorityKeyIdentifier=keyid\n"; mok_fingerprint.clear (); // Set umask so that everything is private. old_umask = umask(077); DIR *dirp = opendir (mok_path.c_str()); if (dirp == NULL) { if (create_dir (mok_path.c_str (), 0755) != 0) report_error (_F("Unable to find or create the MOK directory %s: %s", mok_path.c_str (), strerror (errno)), false); } else closedir (dirp); // Make sure the config file exists. If not, create it with default // contents. string config_path = mok_path + MOK_CONFIG_FILE; if (! file_exists (config_path)) { ofstream config_stream; config_stream.open (config_path.c_str ()); if (! config_stream.good ()) { msg = _F("Could not open MOK config file %s: %s", config_path.c_str (), strerror (errno)); report_error (msg, true); goto cleanup; } config_stream << mok_config_text; config_stream.close (); } // Make a temporary directory to store results in. retlen = snprintf (tmpdir, PATH_MAX, "%s/stap-server.XXXXXX", mok_path.c_str ()); if (retlen < 0 || retlen >= PATH_MAX) { msg = _F("Could not create %s name", "temporary directory"); report_error (msg, true); tmpdir[0] = '\0'; goto cleanup; } if (mkdtemp (tmpdir) == NULL) { msg = _F("Could not create temporary directory %s: %s", tmpdir, strerror (errno)); report_error (msg, true); tmpdir[0] = '\0'; goto cleanup; } // Actually generate key using openssl. public_cert_path = tmpdir + string (MOK_PUBLIC_CERT_FILE); private_cert_path = tmpdir + string (MOK_PRIVATE_CERT_FILE); cmd = { "openssl", "req", "-new", "-nodes", "-utf8", "-sha256", "-days", "36500", "-batch", "-x509", "-config", config_path, "-outform", "DER", "-out", public_cert_path, "-keyout", private_cert_path }; rc = stap_system (0, cmd); if (rc != 0) { msg = _F("Generating MOK failed, rc = %d", rc); report_error (msg, true); goto cleanup; } // Grab the fingerprint from the cert. if (read_cert_info_from_file (public_cert_path, mok_fingerprint) != SECSuccess) goto cleanup; // Once we know the fingerprint, rename the temporary directory. destdir = mok_path + "/" + mok_fingerprint; if (rename (tmpdir, destdir.c_str ()) < 0) { msg = _F("Could not rename temporary directory %s to %s: %s", tmpdir, destdir.c_str (), strerror (errno)); report_error (msg, true); goto cleanup; } // Restore the old umask. umask(old_umask); return; cleanup: // Remove the temporary directory. cmd = { "rm", "-rf", tmpdir }; rc = stap_system (0, cmd); if (rc != 0) { msg = _("Error in tmpdir cleanup"); report_error (msg, true); } mok_fingerprint.clear (); // Restore the old umask. umask(old_umask); return; } static void client_error (const string &msg, int logit __attribute__ ((unused)) = 0) { cerr << _(msg.c_str()) << endl; } int sign_module(const string &tmpdir, const string &module_filename, std::vector mok_fingerprints, const string &mok_root, const string &kernel_build_tree) { string module_src_path = tmpdir + "/" + module_filename; PR_Init (PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1); /* Set the cert database password callback. */ PK11_SetPasswordFunc (nssPasswordCallback); struct stat file_info; if(stat(server_cert_db_path().c_str(), &file_info) != 0) { vector cmd; int rc; cmd = { "mkdir", "-p", server_cert_db_path().c_str() }; rc = stap_system (0, cmd); if (rc != 0) cerr << (_F("Error creating server cert db path \"%s\"", // server_cert_db_path().c_str())) << endl; } NSSInitContext *context = nssInitContext (server_cert_db_path().c_str()); if (!context) cerr << "nssInitContext failed for " << server_cert_db_path(); bool module_signed = false; int rc; string mok_fingerprint; string mok_path; if (mok_root.empty()) // --sign-module mok_path = server_cert_db_path() + "/moks"; else // --sign-module=PATH mok_path = mok_root; for (auto it = mok_fingerprints.cbegin(); it != mok_fingerprints.cend(); it++) { mok_fingerprint = *it; if (! mok_dir_valid_p (*it, mok_path, false, client_error)) continue; if ((rc = mok_sign_file (mok_fingerprint, mok_path, kernel_build_tree, module_src_path)) == 0) { cerr << (_F("Module signed with MOK, fingerprint \"%s\"", // mok_fingerprint.c_str())) << endl; module_signed = true; break; } } if (! module_signed) { generate_mok (mok_fingerprint, client_error); cerr << (_("Running sign-file failed\n")) << (_F("There is no machine owner key (MOK) in common with this system.\nUse the following command to import a MOK into this system, then reboot:\n\n\t# sudo mokutil --import %s/moks/%s/signing_key.x509", server_cert_db_path().c_str(), mok_fingerprint.c_str())) << endl; } PR_Cleanup (); return !module_signed; } bool mok_dir_valid_p (const string &mok_fingerprint, const string &mok_path, bool verbose, void report_error (const string &msg, int logit)) { string mok_dir = mok_path + "/" + mok_fingerprint; DIR *dirp = opendir (mok_dir.c_str()); if (dirp == NULL) { // We can't open the directory. Just quit. if (verbose) report_error (_F("Could not open server MOK fingerprint directory %s: %s", mok_dir.c_str(), strerror(errno)), true); return false; } // Find both the x509 certificate and private key files. string mok_private_cert_path = mok_dir + MOK_PRIVATE_CERT_FILE; string mok_public_cert_path = mok_dir + MOK_PUBLIC_CERT_FILE; if (access(mok_private_cert_path.c_str(), R_OK ) != 0 || access(mok_public_cert_path.c_str(), R_OK ) != 0) { if (verbose) report_error (_F("Could not find server MOK files in directory %s", mok_dir.c_str ()), true); return false; } // Grab info from the cert. string fingerprint; if (read_cert_info_from_file (mok_dir + MOK_PUBLIC_CERT_FILE, fingerprint) == SECSuccess) { // Make sure the fingerprint from the certificate matches the // directory name. if (fingerprint != mok_fingerprint) { if (verbose) report_error (_F("Server MOK directory name '%s' doesn't match fingerprint from certificate %s", mok_dir.c_str(), fingerprint.c_str()), true); return false; } } return true; } #endif /* HAVE_NSS */ systemtap-5.3/cscommon.h000066400000000000000000000062121500444254400154040ustar00rootroot00000000000000// Common functions and macros used by the compile-server and its client. #ifndef CSCOMMON_H #define CSCOMMON_H 1 #define MOK_PRIVATE_CERT_NAME "signing_key.priv" #define MOK_PRIVATE_CERT_FILE "/" MOK_PRIVATE_CERT_NAME #define MOK_CONFIG_FILE "/x509.genkey" #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); extern int mok_sign_file (const std::string &mok_fingerprint, const std::string &mok_path, const std::string &kernel_build_tree, const std::string &name); extern void generate_mok (std::string &mok_fingerprint, void report_error(const std::string &msg, int logit)); extern int sign_module (const std::string &tmpdir, const std::string &module_filename, std::vector mok_fingerprints, const std::string &mok_path, const std::string &kernel_build_tree); extern bool mok_dir_valid_p (const std::string &mok_fingerprint, const std::string &mok_path, bool verbose, void report_error (const std::string &msg, int logit)); #endif #endif // CSCOMMON_H systemtap-5.3/depcomp000077500000000000000000000560161500444254400150010ustar00rootroot00000000000000#! /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-5.3/doc/000077500000000000000000000000001500444254400141615ustar00rootroot00000000000000systemtap-5.3/doc/.gitignore000066400000000000000000000001251500444254400161470ustar00rootroot00000000000000*.gls *.ilg *.aux *.glo *.idx *.log *.lot *.out *.pdf *.toc *.dvi _region_.* langref systemtap-5.3/doc/.latex2html-init000066400000000000000000000021161500444254400172070ustar00rootroot00000000000000$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-5.3/doc/Language_Reference_Guide/000077500000000000000000000000001500444254400207775ustar00rootroot00000000000000systemtap-5.3/doc/Language_Reference_Guide/Makefile000066400000000000000000000006731500444254400224450ustar00rootroot00000000000000#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-5.3/doc/Language_Reference_Guide/README000066400000000000000000000016541500444254400216650ustar00rootroot00000000000000This 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-5.3/doc/Language_Reference_Guide/en-US/000077500000000000000000000000001500444254400217265ustar00rootroot00000000000000systemtap-5.3/doc/Language_Reference_Guide/en-US/Author_Group.xml000066400000000000000000000006121500444254400250650ustar00rootroot00000000000000 Robb Romans IBM Documentation robb@linux.vnet.ibm.com systemtap-5.3/doc/Language_Reference_Guide/en-US/Book_Info.xml000066400000000000000000000042401500444254400243150ustar00rootroot00000000000000 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-5.3/doc/Language_Reference_Guide/en-US/Language_Reference_Guide.ent000066400000000000000000000001071500444254400272520ustar00rootroot00000000000000 systemtap-5.3/doc/Language_Reference_Guide/en-US/Preface.xml000066400000000000000000000011171500444254400240150ustar00rootroot00000000000000 Preface systemtap-5.3/doc/Language_Reference_Guide/en-US/Revision_History.xml000066400000000000000000000011031500444254400257620ustar00rootroot00000000000000 Revision History 1.0 systemtap-5.3/doc/Language_Reference_Guide/en-US/images/000077500000000000000000000000001500444254400231735ustar00rootroot00000000000000systemtap-5.3/doc/Language_Reference_Guide/en-US/images/icon.svg000066400000000000000000003301271500444254400246520ustar00rootroot00000000000000 image/svg+xml id="path2858" /> systemtap-5.3/doc/Language_Reference_Guide/publicanize-langref.sh000077500000000000000000000204551500444254400252650ustar00rootroot00000000000000#!/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-5.3/doc/Makefile.am000066400000000000000000000017471500444254400162260ustar00rootroot00000000000000# 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-5.3/doc/Makefile.in000066400000000000000000000463321500444254400162360ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 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)` 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@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ 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@ ENABLE_NLS = @ENABLE_NLS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ 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_LDFLAGS = @debuginfod_LDFLAGS@ 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-5.3/doc/SystemTap_Beginners_Guide/000077500000000000000000000000001500444254400212235ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Beginners_Guide/.gitignore000066400000000000000000000000041500444254400232050ustar00rootroot00000000000000tmp systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/000077500000000000000000000000001500444254400221525ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Appendix.xml000066400000000000000000000010311500444254400244370ustar00rootroot00000000000000 Full Version of Advanced Scripts This appendix contains the full versions of all scripts discussed in . systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Array-Operations.xml000066400000000000000000001170401500444254400260760ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Arrays.xml000066400000000000000000000217731500444254400241470ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Author_Group.xml000066400000000000000000000013071500444254400253130ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Book_Info.xml000066400000000000000000000024431500444254400245440ustar00rootroot00000000000000 %BOOK_ENTITIES; ]> SystemTap Beginners Guide Introduction to SystemTap 5.3 SystemTap 5.3 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Chapter.xml000066400000000000000000000010641500444254400242630ustar00rootroot00000000000000 Test This is a test paragraph
Section 1 Test Test of a section
Section 2 Test Test of a section
systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/000077500000000000000000000000001500444254400250745ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Conventions.xml000066400000000000000000000201341500444254400301230ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Feedback.xml000066400000000000000000000006121500444254400273010ustar00rootroot00000000000000
We Need Feedback! feedback contact information for this manual You should over ride this by creating your own local Feedback.xml file.
systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Legal_Notice.xml000066400000000000000000000010221500444254400301360ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Program_Listing.xml000066400000000000000000000012301500444254400307120ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Revision_History.xml000066400000000000000000000011121500444254400311300ustar00rootroot00000000000000 Revision History 3.0-0 Mon Mar 12 2012 Jeff Fearn jfearn@redhat.com Publican 3.0 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/000077500000000000000000000000001500444254400256645ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/brand.css000066400000000000000000000004261500444254400274660ustar00rootroot00000000000000/*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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/common.css000066400000000000000000000611111500444254400276660ustar00rootroot00000000000000* { 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/default.css000066400000000000000000000001231500444254400300160ustar00rootroot00000000000000@import url("common.css"); @import url("overrides.css"); @import url("lang.css"); systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/epub.css000066400000000000000000000021101500444254400273230ustar00rootroot00000000000000/*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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/print.css000066400000000000000000000003001500444254400275230ustar00rootroot00000000000000@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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/000077500000000000000000000000001500444254400263415ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/1.png000066400000000000000000000013211500444254400272040ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/1.svg000066400000000000000000000024721500444254400272270ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/10.png000066400000000000000000000017741500444254400273000ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/10.svg000066400000000000000000000056661500444254400273170ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/11.png000066400000000000000000000014571500444254400272770ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/11.svg000066400000000000000000000040521500444254400273040ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/12.png000066400000000000000000000017721500444254400273000ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/13.png000066400000000000000000000020451500444254400272730ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/13.svg000066400000000000000000000075731500444254400273210ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/14.png000066400000000000000000000016361500444254400273010ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/15.png000066400000000000000000000017531500444254400273020ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/15.svg000066400000000000000000000060101500444254400273040ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/16.png000066400000000000000000000020461500444254400272770ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/17.png000066400000000000000000000016071500444254400273020ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/17.svg000066400000000000000000000031731500444254400273150ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/18.png000066400000000000000000000021071500444254400272770ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/18.svg000066400000000000000000000117061500444254400273170ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/19.png000066400000000000000000000020501500444254400272750ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/2.png000066400000000000000000000016171500444254400272150ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/20.png000066400000000000000000000022231500444254400272670ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/21.png000066400000000000000000000017471500444254400273020ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/22.png000066400000000000000000000021661500444254400272770ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/22.svg000066400000000000000000000066751500444254400273230ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/23.png000066400000000000000000000022741500444254400273000ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/23.svg000066400000000000000000000111141500444254400273040ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/24.png000066400000000000000000000020731500444254400272760ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/24.svg000066400000000000000000000055401500444254400273130ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/25.png000066400000000000000000000022361500444254400273000ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/25.svg000066400000000000000000000073311500444254400273140ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/26.png000066400000000000000000000022771500444254400273060ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/27.png000066400000000000000000000020761500444254400273040ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]lSe9I~auSu2d#+o؍& " F*`Z4b憩,1,:FtiV6H_e1)3W}~-+rt~$ systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/28.png000066400000000000000000000023431500444254400273020ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/28.svg000066400000000000000000000132271500444254400273200ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/29.png000066400000000000000000000022741500444254400273060ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/3.png000066400000000000000000000017101500444254400272100ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/3.svg000066400000000000000000000062551500444254400272340ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/30.png000066400000000000000000000023631500444254400272750ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/30.svg000066400000000000000000000114561500444254400273130ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/31.png000066400000000000000000000020731500444254400272740ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/31.svg000066400000000000000000000076421500444254400273160ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/32.png000066400000000000000000000023341500444254400272750ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/32.svg000066400000000000000000000111441500444254400273070ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/33.png000066400000000000000000000023771500444254400273050ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/34.png000066400000000000000000000022321500444254400272740ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/34.svg000066400000000000000000000100071500444254400273060ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/35.png000066400000000000000000000023231500444254400272760ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/35.svg000066400000000000000000000116001500444254400273070ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/36.png000066400000000000000000000024061500444254400273010ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/37.png000066400000000000000000000022031500444254400272750ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/38.png000066400000000000000000000024551500444254400273070ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/39.png000066400000000000000000000024241500444254400273040ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/39.svg000066400000000000000000000136451500444254400273260ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/4.png000066400000000000000000000015061500444254400272140ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/4.svg000066400000000000000000000027011500444254400272250ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/40.png000066400000000000000000000021711500444254400272730ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/5.png000066400000000000000000000016241500444254400272160ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/6.png000066400000000000000000000016531500444254400272210ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/7.png000066400000000000000000000014631500444254400272210ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/7.svg000066400000000000000000000016571500444254400272410ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/8.png000066400000000000000000000017411500444254400272210ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/9.png000066400000000000000000000016551500444254400272260ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/dot.png000066400000000000000000000002551500444254400276370ustar00rootroot00000000000000PNG  IHDR TKbKGD pHYs  tIME :IDATuɱ AuPF> 4H|yIc{$ N$$(=w$Aݵ^ _ )d6IENDB`systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/dot2.png000066400000000000000000000002001500444254400277070ustar00rootroot00000000000000PNG  IHDR TKGIDATm˱ 0> p@Jmq#" d1qT/aǑnxz IENDB`systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/green.png000066400000000000000000000002601500444254400301450ustar00rootroot00000000000000PNG  IHDRtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<-IDATc(🉁7ӿ0(\l,t$P [ ;, ~NIENDB`systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/h1-bg.png000066400000000000000000000010651500444254400277470ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/image_left.png000066400000000000000000000102741500444254400311470ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/image_right.png000066400000000000000000000046711500444254400313360ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/important.png000066400000000000000000000044161500444254400310710ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/important.svg000066400000000000000000000047441500444254400311100ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/note.png000066400000000000000000000040461500444254400300200ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/note.svg000066400000000000000000000052541500444254400300350ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/red.png000066400000000000000000000002431500444254400276200ustar00rootroot00000000000000PNG  IHDRtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATcX🉁w gIENDB`systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/shine.png000066400000000000000000000002221500444254400301510ustar00rootroot00000000000000PNG  IHDR1bKGD pHYs  tIME  IDATcD&L &7FfU2 IENDB`systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-go-back.png000066400000000000000000000014261500444254400314760ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-go-forward.png000066400000000000000000000015341500444254400322420ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-go-up.png000066400000000000000000000013611500444254400312200ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-home.png000066400000000000000000000014631500444254400311240ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/title_logo.png000066400000000000000000001161731500444254400312210ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/warning.png000066400000000000000000000036251500444254400305220ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/warning.svg000066400000000000000000000127441500444254400305370ustar00rootroot00000000000000 image/svg+xml systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/watermark-draft.png000066400000000000000000000614251500444254400321520ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/yellow.png000066400000000000000000000002571500444254400303660ustar00rootroot00000000000000PNG  IHDRtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<,IDATc'+???K]?2?^Y2`$IENDB`systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/CrossInstrumenting.xml000066400000000000000000000277231500444254400265670ustar00rootroot00000000000000
    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-5.3/doc/SystemTap_Beginners_Guide/en-US/Errors.xml000066400000000000000000000671041500444254400241600ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Feedback.xml000066400000000000000000000022371500444254400243640ustar00rootroot00000000000000 %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-5.3/doc/SystemTap_Beginners_Guide/en-US/Installation.xml000066400000000000000000000236321500444254400253430ustar00rootroot00000000000000
    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-5.3/doc/SystemTap_Beginners_Guide/en-US/Introduction.xml000066400000000000000000000174261500444254400253670ustar00rootroot00000000000000 %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-5.3/doc/SystemTap_Beginners_Guide/en-US/Legal_Notice.xml000066400000000000000000000017171500444254400252270ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Preface.xml000066400000000000000000000011411500444254400242360ustar00rootroot00000000000000 Preface systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/References.xml000066400000000000000000000103561500444254400247620ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Revision_History.xml000066400000000000000000000043471500444254400262230ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/ScriptConstructs.xml000066400000000000000000000657501500444254400262450ustar00rootroot00000000000000
    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-5.3/doc/SystemTap_Beginners_Guide/en-US/Scripts.xml000066400000000000000000001125621500444254400243320ustar00rootroot00000000000000
    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-5.3/doc/SystemTap_Beginners_Guide/en-US/Section.xml000066400000000000000000000004471500444254400243050ustar00rootroot00000000000000
    Section 1 Test Test of a section
    systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/SystemTap_Beginners_Guide.ent000066400000000000000000000005011500444254400277200ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/SystemTap_Beginners_Guide.pdf000066400000000000000000017041501500444254400277170ustar00rootroot00000000000000%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.9) /CreationDate (D:20250429174353Z) >> endobj 2 0 obj << /N 3 /Length 3 0 R /Filter /FlateDecode >> stream xӌ1ŗf^s?OrRO' (P'*9` ?B{*q{6^|@)oΪr)5]:F+%{|UeXW]9AK3|YjT]~:cR{R Kj|^MTP .SK  ʂg^qP|* J 2/ 6CO70dm[JC{"(3 3"eŒ 90RVs S`AOz(8vVf 8;ex?F˰V ~KicΫ2bB/¼ 3fT2а(|qŁ#k7=M/7ۦ^lz6G^^`٦_煦Mh?;yFqak#7X LL{$ tU^ -> (QzF=z[F$>1f@ZEVRU[ r *iU&^u Tj-ʳi)$YghAڮ|vouRPp^$Vy09g6/yؤ;caGUz_??[k_;qK}Wn;q;qyAw{ w+{_}_ה/):|hE߯ԟR<˸J-R ~ԿWB);Y?AR7<߃>!2|fyaDȏy#,=ԩV4 dIݱ)תy0v üjo 9`z:I,/Yde8[%([ HY0$㥁 Jv]KZԥw^W J I:Qpݜ gmc¢3-awAjf}mjѾ?@ae9U;Em.I `sLb{H~g.V^E;<R+MJ5)RiOL5;j`K3:tF{j_42 R72K@PX8MڲȏfiߡA_g)lL+O;-U4Dsѻ5E؝!Vhmi?e8zX[!owdT k/.vh>GjisH6)Wh/X*ϻ$I{W)ߦ}'װS} 33 :GGG?2&IÃ2 iI3Xh/3j1@QViY󩚧uym-Y\%j9+Ӝa;}ڡU:aY9:wu]>-ȧ lBG%X, qU{:td]! -(qjVDҦ]@c r5[);'12Ŵ)29}S,r8's S|:_U `qh$%+' w9N(y@;=r=@0W)'|#d](1l8> d7Gau}0sDᬧhˀ4dG20zPsT%bJTQmg4y7J|#cYdP8#— -^ar?UzrhU X1X?)) ke"𮬐8 ZKX_KN  |0dVU0Z`+?o\ xaVXxxU)#43p}WT+C'6+BLGƼ,/~Gys^9Mzn͑2<ϩ>)%|eK Ot_V^vXGi ZR@i'NgF^y DsNj%uxb̃I=P(ŋZ- McYSvyL/ Qԫ{Aۦ3a$kȞ_x󇨖S ,*,j}7MKL&9Y>;Gk4 K4I[gT|pij=E ڮfqw.O@;K,Q [_3XbA7, ޵shg&kZO%k zE@(@aDOn{j4[;c/@4 ^|>@t0[wkQ}(Xt#]nix>I0 #ޙ `Aˆ]f= kQj(МG`VGw$5oԿf1C0M2 aPsv! mэ]hm'Yl`vVE}\B)+iHXkoOZ'R? U#򸏴Q$F`ѴmfhraW0ɥϲXgp}*w4S_VWxG 0%)+5RQ3I Ö3s ryU3B {j eaPzGb0*Sro^5aUSM0C NX5t-T(ƩWX;,pk˻ =ώfUceR 0W/b.[rw4q8&9>.6٩󼋗5|\q!y$Cdvbk86L8I&_Q)ԡ}~xDD.-J<#/KVRI5owݽ\ wS!4#ک :C zV[ yE/]UE`bd u7~+l Me|jQ(䷮fDv~^fWΑU<;5!wuQ\,8>iZff$OTIJk2|Ze&d Ϊ qc_1dGs%,vpۢ ɕ|`t%~&3jnXĽwTYh]y s?Gfj'cYf#aFTw WMҹpLrRR5Ai$dӷ$j'˔~Βl5֔qs[[vI"iNխ4y>W럎 }cI!*h1:s% V6J.ƅ _K@{2z ·N=F\#}Ӑn^ŭUCV6G-qN+Ҥ-ܽT[C`)fz ϦZ'}!~,ghN}>yC!aAՒl)ʫFv[-q9efYwg(GCĴ-ؤh䪲OSV>)~yql1ggIAhH<ϣ1Ck:rRI'֟_Eoie|F*X/|ρ7 !1S6Yui[tRzLG[JOʩH)ٴɲj8*@ڍsR!hy_.ykZO{)Y*Turf.:f ‹vV4o*gDHRݲRVƴ0U~cw2V2te<'~i~L[>GNC.ezЮ@kCˑ]{#.oW6|έmн/-GNQƳ+Q po|P.C=ށ8O;oDK3ҥ8dhˠ5 1S!~cYM) ÑpC֣aY@j9,χ EKH^KʎE,]c+2H-;i*aV\DNEts(On`^ч Sߓ^2T&DRrShjbrDگF =U 8iPNF]3DҔJKj|,zMuVf~BU_K1WV,ɧ?.w SvA#|h9IA0&K}m'Xk'Ԃ7r')Xlb7Ւ)i9Ie({ٱXb4JQ24Z@yXFTS,X$q#赓nYjߢ8(M ˺fzߛ]tB24gTK_ZݶYcI`6 +/fr%|lmO5,\^ Z ljveZlgRӉV[^R-XW#] 9B5X<=aB&vΦQzgB{M|hMn4'Ă?Ic@>5Y3>gS7~[%3n\?zR{R v9yuglD#DR+!VX +>M{uuZ".ۈ2HI'G]!.zB *X.QW@4#sJ)h%zN$"{5O 4Xї j剻 0[c^bs J -Ml&P&%;`@õ(V nxFo+яrmSFKBk}m{814t=k;n(`Yϣ= |p> {eK0gg!>|\ m |::M|7n$|;ûuxp#9HXw<խ4J=ŷ]>oCjVx>,XQJsx fş>O~)=$u,`al%O`)g|;l=JTGsZ/~M!yZI2 ; `_&'jBvyI4M04'fIƨM7 ^fٮ" Ŀ^&~&JXyb-os]&>;dz׻Înp.L0Ox^*ݯHSwFMk )mUvAx,??"2\5V]> R!Omho{Xul:>K, }Ce#8UU'+ܼƯL0/ȴJATs )gbQ!jJV ~I07υpo\ΌH"#4LSo28nYEb`9KA8E"o54)dz61F~/4mdA83*_h2ʳaI09c_InU !!֖! [^%1A^mVsFKQaň+a{J+P:$|J:a;4< 8+#p/DxM$ ΥYY >*Ys]t UHe4X1Rt=S(Kb/AI%|5GK̀t+YH}xoMΣv&<[8%(_.YRYoiiZ^faH37zE7(`⣨]QYohQ]/ъ0g&h׿u-y붞δ_/ko?8\OKZO߹һֿzO4.ZoYzu=W~;p +ڿڷdIq嚕k`%cu;vq϶Lcxf:{ϟ!4W^G ԺO}w;h.RƭSOV-mN4嶅+۾~u?s Zo-╫=뱇1a_];DcK3%[4:/_L4789߳ 7Z>kUi̤FZߺ%3kj]nJO4() endstream endobj 3 0 obj 6801 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 2025-04-29T17:43:53Z Apache FOP Version 2.9 1.4 DocBook XSL Stylesheets with Apache FOP 2025-04-29T17:43:53Z 2025-04-29T17:43:53Z endstream endobj 6 0 obj 1141 endobj 7 0 obj << /S /r >> endobj 8 0 obj << /Length 9 0 R /Filter /FlateDecode >> stream xQMO0 W:n8 VJe[wH{yy1l,VM=H=x-L2(> endobj 13 0 obj << /URI (mailto:ddomingo@redhat.com) /S /URI >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Rect [ 367.37 627.515 481.37 635.375 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 13 0 R /H /I >> endobj 15 0 obj << /URI (mailto:wcohen@redhat.com) /S /URI >> endobj 16 0 obj << /Type /Annot /Subtype /Link /Rect [ 367.37 614.515 469.37 622.375 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 15 0 R /H /I >> endobj 17 0 obj << /Length 18 0 R /Filter /FlateDecode >> stream xVoF~_1]`Q^UIl(^v}YsS*Kfwfozm޷sk[u-hh0ŇtDZrxYsO|Ekv^f{e*]! i2- 2gA+RRׯ޻ + 3@o%NUӨ@{y8!C+Iϱ<3lk6S"}oÉ79򘏂uԹH %APWF,3į]obQy!#"0 n/zZRTY-' TG;XZF=k#d8sxj+RtUpg"Za]^Cl#tU(”p3jD}ϟ˦qk"\.˕bn.XfLs@#`@CgQZEʶw VXEeƥ$ mKةP\:RsB_2dg yzA<+@%dޅZPn9n2a "܋˂wˆ+VqB )"XX݄>9}e5ex%UZ#ԙaEÂCYLg8{0p:NK 6qZיDN&Fy(#֣q0`0!<z~?|0` 6m~9Sj+V4:i-p/i1 GD\lR.J.̷\H@*63f#q )3n4N#`QT~Wf!RrNBa>Z FBQwr~x|OnB+TGMFX{!˿JKs>mY",Bb0)Q[s(g<2%FȸnE(B(*P;f>[mo7۵?yymne:dc3Gm0H=?3ZNQ endstream endobj 18 0 obj 1064 endobj 19 0 obj [ 14 0 R 16 0 R ] endobj 20 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 19 0 R /Contents 17 0 R >> endobj 21 0 obj << /S /r /St 5 >> endobj 22 0 obj << /URI (https://fedorahosted.org/liberation-fonts/) /S /URI >> endobj 23 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.464 598.573 474.164 607.823 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 22 0 R /H /I >> endobj 24 0 obj << /Type /Annot /Subtype /Link /Rect [ 93.062 66.696 234.47 74.096 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 22 0 R /H /I >> endobj 25 0 obj << /Length 26 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 26 0 obj 1996 endobj 27 0 obj [ 23 0 R 24 0 R ] endobj 28 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 27 0 R /Contents 25 0 R >> endobj 29 0 obj << /Length 30 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 30 0 obj 2712 endobj 31 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 29 0 R >> endobj 32 0 obj << /Length 33 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 35 0 obj << /URI (http://sourceware.org/bugzilla/) /S /URI >> endobj 36 0 obj << /Type /Annot /Subtype /Link /Rect [ 351.758 694.175 485.148 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 35 0 R /H /I >> endobj 37 0 obj << /Length 38 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 38 0 obj 785 endobj 39 0 obj [ 36 0 R ] endobj 40 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 39 0 R /Contents 37 0 R >> endobj 41 0 obj << /S /D /St 2 >> endobj 42 0 obj << /Length 43 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 43 0 obj 502 endobj 44 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 42 0 R >> endobj 45 0 obj << /Length 46 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 48 0 obj << /Length 49 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 49 0 obj 2363 endobj 50 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 48 0 R >> endobj 51 0 obj << /S /D /St 6 >> endobj 52 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 87.874 433.4 null] >> endobj 53 0 obj << /Type /Annot /Subtype /Link /Rect [ 438.998 316.175 500.148 325.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 52 0 R /H /I >> endobj 54 0 obj << /Type /Annot /Subtype /Link /Rect [ 73.858 303.175 173.328 312.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 52 0 R /H /I >> endobj 55 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 87.874 185.2 null] >> endobj 56 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.598 267.175 511.838 276.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 55 0 R /H /I >> endobj 57 0 obj << /Type /Annot /Subtype /Link /Rect [ 73.858 254.175 117.198 263.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 55 0 R /H /I >> endobj 58 0 obj << /Length 59 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 59 0 obj 2513 endobj 60 0 obj [ 53 0 R 54 0 R 56 0 R 57 0 R ] endobj 61 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 60 0 R /Contents 58 0 R >> endobj 62 0 obj << /Length 63 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 63 0 obj 2242 endobj 64 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 62 0 R >> endobj 65 0 obj << /S /D /St 10 >> endobj 66 0 obj << /Length 67 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 67 0 obj 1649 endobj 68 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 66 0 R >> endobj 69 0 obj << /Type /Annot /Subtype /Link /Rect [ 107.874 321.075 271.274 330.325 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 52 0 R /H /I >> endobj 70 0 obj << /Type /Annot /Subtype /Link /Rect [ 363.044 285.075 526.444 294.325 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 52 0 R /H /I >> endobj 71 0 obj << /Length 72 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 72 0 obj 2088 endobj 73 0 obj [ 69 0 R 70 0 R ] endobj 74 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 73 0 R /Contents 71 0 R >> endobj 75 0 obj << /S /D /St 5 >> endobj 76 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 446.3 null] >> endobj 77 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 156.449 251.824 165.699 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 76 0 R /H /I >> endobj 78 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 530.1 null] >> endobj 79 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.164 156.449 380.764 165.699 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 78 0 R /H /I >> endobj 80 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 87.874 660.1 null] >> endobj 81 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 119.077 246.294 128.327 ] /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 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 83 0 obj 2415 endobj 84 0 obj [ 77 0 R 79 0 R 81 0 R ] endobj 85 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 84 0 R /Contents 82 0 R >> endobj 86 0 obj << /S /D /St 12 >> endobj 87 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 718.3 null] >> endobj 88 0 obj << /Type /Annot /Subtype /Link /Rect [ 108.888 693.175 330.628 702.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 87 0 R /H /I >> endobj 89 0 obj << /Length 90 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 90 0 obj 2080 endobj 91 0 obj [ 88 0 R ] endobj 92 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 91 0 R /Contents 89 0 R >> endobj 93 0 obj << /S /D /St 14 >> endobj 94 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 53.858 379.486 null] >> endobj 96 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.668 292.547 291.948 301.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 94 0 R /H /I >> endobj 97 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.728 266.547 482.088 275.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 94 0 R /H /I >> endobj 98 0 obj << /Type /Annot /Subtype /Link /Rect [ 71.858 253.547 152.998 262.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 94 0 R /H /I >> endobj 99 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 53.858 663.3 null] >> endobj 100 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.788 240.547 276.378 249.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 99 0 R /H /I >> endobj 101 0 obj << /Length 102 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 104 0 obj << /Type /Action /S /GoTo /D [105 0 R /XYZ 87.874 588.3 null] >> endobj 106 0 obj << /Type /Annot /Subtype /Link /Rect [ 105.874 481.996 220.344 491.246 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 104 0 R /H /I >> endobj 107 0 obj << /Length 108 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 108 0 obj 1949 endobj 109 0 obj [ 106 0 R ] endobj 105 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 109 0 R /Contents 107 0 R >> endobj 110 0 obj << /Type /Action /S /GoTo /D [105 0 R /XYZ 87.874 142.573 null] >> endobj 111 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 648.975 193.908 658.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 110 0 R /H /I >> endobj 112 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.788 402.022 475.148 411.272 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 110 0 R /H /I >> endobj 113 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 389.022 121.648 398.272 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 110 0 R /H /I >> endobj 114 0 obj << /Length 115 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 115 0 obj 2430 endobj 116 0 obj [ 111 0 R 112 0 R 113 0 R ] endobj 117 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 116 0 R /Contents 114 0 R >> endobj 118 0 obj << /Type /Action /S /GoTo /D [117 0 R /XYZ 53.858 183.209 null] >> endobj 119 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 669.775 300.714 679.025 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 120 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 446.123 300.714 455.373 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 121 0 obj << /Length 122 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 122 0 obj 1516 endobj 123 0 obj [ 119 0 R 120 0 R ] endobj 124 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 123 0 R /Contents 121 0 R >> endobj 125 0 obj << /S /D /St 9 >> endobj 126 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 87.874 529.3 null] >> endobj 128 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 87.874 521.675 null] >> endobj 129 0 obj << /Type /Annot /Subtype /Link /Rect [ 105.874 667.175 202.574 676.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 130 0 obj << /Type /Annot /Subtype /Link /Rect [ 314.854 580.175 534.934 589.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 126 0 R /H /I >> endobj 131 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 87.874 250.746 null] >> endobj 132 0 obj << /Type /Annot /Subtype /Link /Rect [ 378.874 544.175 487.264 553.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 131 0 R /H /I >> endobj 133 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 531.175 254.044 540.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 131 0 R /H /I >> endobj 134 0 obj << /Length 135 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 135 0 obj 2091 endobj 136 0 obj [ 129 0 R 130 0 R 132 0 R 133 0 R ] endobj 127 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 136 0 R /Contents 134 0 R >> endobj 137 0 obj << /S /D /St 18 >> endobj 138 0 obj << /Type /Action /S /GoTo /D [139 0 R /XYZ 53.858 515.254 null] >> endobj 140 0 obj << /Type /Annot /Subtype /Link /Rect [ 71.858 365.384 216.928 374.634 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 138 0 R /H /I >> endobj 141 0 obj << /Length 142 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 142 0 obj 2150 endobj 143 0 obj [ 140 0 R ] endobj 139 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 143 0 R /Contents 141 0 R >> endobj 144 0 obj << /Type /Action /S /GoTo /D [145 0 R /XYZ 87.874 513.3 null] >> endobj 146 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.774 405.259 282.054 414.509 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 144 0 R /H /I >> endobj 147 0 obj << /Length 148 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 148 0 obj 2349 endobj 149 0 obj [ 146 0 R ] endobj 145 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 149 0 R /Contents 147 0 R >> endobj 150 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 53.858 650.3 null] >> endobj 152 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 467.329 186.108 476.579 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 150 0 R /H /I >> endobj 153 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.568 372.429 280.818 381.679 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 150 0 R /H /I >> endobj 154 0 obj << /Length 155 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 155 0 obj 2517 endobj 156 0 obj [ 152 0 R 153 0 R ] endobj 151 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 156 0 R /Contents 154 0 R >> endobj 157 0 obj << /S /D /St 22 >> endobj 158 0 obj << /Length 159 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 161 0 obj << /Type /Action /S /GoTo /D [162 0 R /XYZ 87.874 410.049 null] >> endobj 163 0 obj << /Type /Action /S /GoTo /D [162 0 R /XYZ 87.874 154.656 null] >> endobj 164 0 obj << /Type /Annot /Subtype /Link /Rect [ 107.884 491.924 251.264 501.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 161 0 R /H /I >> endobj 165 0 obj << /Type /Annot /Subtype /Link /Rect [ 107.884 223.531 364.094 232.781 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 163 0 R /H /I >> endobj 166 0 obj << /Length 167 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 167 0 obj 3025 endobj 168 0 obj [ 164 0 R 165 0 R ] endobj 162 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 168 0 R /Contents 166 0 R >> endobj 169 0 obj << /Type /Action /S /GoTo /D [170 0 R /XYZ 53.858 398.121 null] >> endobj 171 0 obj << /Type /Annot /Subtype /Link /Rect [ 71.858 197.095 184.678 206.345 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 169 0 R /H /I >> endobj 172 0 obj << /Length 173 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 173 0 obj 2266 endobj 174 0 obj [ 171 0 R ] endobj 170 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 174 0 R /Contents 172 0 R >> endobj 175 0 obj << /Type /Action /S /GoTo /D [176 0 R /XYZ 87.874 192.556 null] >> endobj 177 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 106.067 256.264 115.317 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 175 0 R /H /I >> endobj 178 0 obj << /Type /Annot /Subtype /Link /Rect [ 311.824 106.067 437.414 115.317 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 99 0 R /H /I >> endobj 179 0 obj << /Length 180 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 180 0 obj 2154 endobj 181 0 obj [ 177 0 R 178 0 R ] endobj 176 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 181 0 R /Contents 179 0 R >> endobj 182 0 obj << /S /D /St 27 >> endobj 183 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 588.104 265.714 597.354 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 184 0 R /H /I >> endobj 185 0 obj << /Type /Action /S /GoTo /D [186 0 R /XYZ 87.874 510.132 null] >> endobj 187 0 obj << /Type /Annot /Subtype /Link /Rect [ 287.974 434.33 554.164 443.58 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 185 0 R /H /I >> endobj 188 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.334 128.162 535.494 137.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 185 0 R /H /I >> endobj 189 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 115.162 230.124 124.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 185 0 R /H /I >> endobj 190 0 obj << /Type /Action /S /GoTo /D [186 0 R /XYZ 87.874 705.3 null] >> endobj 191 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.014 115.162 466.894 124.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 190 0 R /H /I >> endobj 192 0 obj << /Type /Action /S /GoTo /D [186 0 R /XYZ 87.874 203.964 null] >> endobj 193 0 obj << /Type /Annot /Subtype /Link /Rect [ 161.794 80.065 429.104 89.315 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 192 0 R /H /I >> endobj 194 0 obj << /Length 195 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 197 0 obj << /Type /Annot /Subtype /Link /Rect [ 154.348 588.907 421.658 598.157 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 192 0 R /H /I >> endobj 198 0 obj << /Type /Action /S /GoTo /D [199 0 R /XYZ 53.858 386.033 null] >> endobj 200 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 278.013 192.248 287.263 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 198 0 R /H /I >> endobj 201 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.598 146.445 357.868 155.695 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 198 0 R /H /I >> endobj 202 0 obj << /Type /Annot /Subtype /Link /Rect [ 103.318 120.445 230.588 129.695 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 198 0 R /H /I >> endobj 203 0 obj << /Length 204 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 204 0 obj 2376 endobj 205 0 obj [ 197 0 R 200 0 R 201 0 R 202 0 R ] endobj 199 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 205 0 R /Contents 203 0 R >> endobj 206 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 87.874 652.339 null] >> endobj 208 0 obj << /Type /Annot /Subtype /Link /Rect [ 190.164 480.646 368.554 489.896 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 206 0 R /H /I >> endobj 209 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.634 429.685 463.024 438.935 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 206 0 R /H /I >> endobj 210 0 obj << /Type /Annot /Subtype /Link /Rect [ 299.944 364.724 478.334 373.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 206 0 R /H /I >> endobj 211 0 obj << /Type /Annot /Subtype /Link /Rect [ 197.374 93.073 375.764 102.323 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 206 0 R /H /I >> endobj 212 0 obj << /Type /Action /S /GoTo /D [199 0 R /XYZ 53.858 224.138 null] >> endobj 213 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.104 93.073 543.054 102.323 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 212 0 R /H /I >> endobj 214 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 80.073 184.014 89.323 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 212 0 R /H /I >> endobj 215 0 obj << /Length 216 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 218 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 53.858 638.3 null] >> endobj 220 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 456.175 260.048 465.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 218 0 R /H /I >> endobj 221 0 obj << /Length 222 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 224 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 638.275 351.744 647.525 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 212 0 R /H /I >> endobj 225 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 87.874 172.359 null] >> endobj 226 0 obj << /Type /Annot /Subtype /Link /Rect [ 373.984 638.275 517.934 647.525 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 227 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 625.275 221.684 634.525 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 228 0 obj << /Length 229 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 229 0 obj 1975 endobj 230 0 obj [ 224 0 R 226 0 R 227 0 R ] endobj 231 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 230 0 R /Contents 228 0 R >> endobj 232 0 obj << /Type /Action /S /GoTo /D [231 0 R /XYZ 87.874 197.421 null] >> endobj 233 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.568 596.975 328.398 606.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 232 0 R /H /I >> endobj 234 0 obj << /Length 235 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 235 0 obj 2073 endobj 236 0 obj [ 233 0 R ] endobj 237 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 236 0 R /Contents 234 0 R >> endobj 238 0 obj << /Type /Action /S /GoTo /D [239 0 R /XYZ 87.874 676.3 null] >> endobj 240 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.994 542.575 257.954 551.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 238 0 R /H /I >> endobj 241 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.814 434.675 331.774 443.925 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 238 0 R /H /I >> endobj 242 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.784 292.675 303.744 301.925 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 238 0 R /H /I >> endobj 243 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.784 215.675 303.744 224.925 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 238 0 R /H /I >> endobj 244 0 obj << /Length 245 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 247 0 obj << /Type /Action /S /GoTo /D [248 0 R /XYZ 53.858 613.3 null] >> endobj 249 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 443.175 237.258 452.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 250 0 obj << /Type /Annot /Subtype /Link /Rect [ 147.798 394.175 320.078 403.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 251 0 obj << /Type /Annot /Subtype /Link /Rect [ 139.438 260.375 255.038 269.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 78 0 R /H /I >> endobj 252 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.488 113.375 300.648 122.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 254 0 obj << /Type /Annot /Subtype /Link /Rect [ 322.888 113.375 419.588 122.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 255 0 obj << /Length 256 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 258 0 obj << /Length 259 0 R /Filter /FlateDecode >> stream xZ[~ׯyx.7SMcgE$H"L2/V}^Dr]uR/ș3߹' ~W >,>8By<%O{Tpº_pW WMKlY{E`/ \9c"fj0 .' ~bCTzT׫ŋ`7FV۳G=0 1e>~gձ_1ިa 6BX(Yʼ14l^ c<*9hRq;.G|ydo.4٢` H Ȉ4S~*uqUZwE~dƋ /^i$0Fͩa$ɒ*Qiz"|]zC|Ecs%z`PH(+uI͍5|oa$UF:=MvY(s/Շ%9EKPr^RP=%PPQ*PG<'ۀ窺ȶp[g*%\ҋ]6, &(vP\49x,/IDΒZq@H0;:ПYMj4Qۼ8Lj͖ Os,$)FkHHx8F*D̒$j^(Y(7ٞ u]owr *iI:6h9a/X0XPB֥z:TJ?cέ]8VP&ڪ18~/^Gk9\WiṸR"Vܞb]3EmO|ؚw#} oa:p4!L@gU&w>o7ӻ~uC^ybgdw{&WM;"EH$6otY`ͪP,Muu+onS W4)WM@ c7N)8_&6DLvDb&DԙO1/hgZA~Q13l=.Qwc+`z'Xa2b^鰉@ڔ;I']֋LzG!e EvXc;%kC4}Lj #QmƎwd=OއxE ^*Yש*lMPz]W ˃lC4 ?<{rχ>"+blO-e PܥS]R#N [OtQu24n0|W)\\ BQ9y3k?l(NݖyZWsYF1 Pig ՝xH RnC;-!̴duY[nmv\ 1kf5oN\HSFxalq01c$aJ(J)y 3afV5,ħR8`:m#^uѣiI%91ivbEPG0(9# Wxq71$yK`.nLIɛkIYbS.s'g/atEOC 9oЇ3{ʹyz7@/l'e&m~sߕ7[˛RMr}V@s^ƼBAcܞn vc-#ASEhJ˪ {֊Aw!b"Brme*,dP5cDd['\~r 8Dj9fc#6YԐ<>䭭bÀ(1Xuz}.2D #CW7,%<54 yCC2֏ݤ{\@>BҠ?ϸs<`BGF,CV3O:ȃMO-(0ܧe&KN#)> 90H~͗ka^ KMADݩ$5D pXK3,h8G%4@KL=t*I9~7 2+]qج[DH u?nތk3A 3O/Ө?Go(ϫC۟??{rf|rFo8 :Kl)o'bnvVrIq3PJ@ ?. endstream endobj 259 0 obj 2388 endobj 260 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 258 0 R >> endobj 261 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 53.858 259.194 null] >> endobj 262 0 obj << /Type /Annot /Subtype /Link /Rect [ 411.788 305.175 507.948 314.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 263 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 292.175 98.868 301.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 264 0 obj << /Length 265 0 R /Filter /FlateDecode >> stream xY[o6~ >@ˆt[;tV MQ2m+%O4HI,rEa$(s g8\/$m <!]yx pQt_X_w}%gplp?6,9هX]b= g;X~ϮC櫾unF[TA|J*UqYdȟEHˏdx[vE/v~;Vㆁ'sB;;-GEg-q\K^#܎^2piam"#,,Z+=-5s.t-C`#4xl=~i3ppag7fr"u CsCsQdW.:P$#?4ݦ/7hD pų,dqu{QN|]sC?qPf.qVw+ۤИ$d`t+;4Wok8~ <ੑFD8ԇ $qd$ImRj{UN$ɢJ:^/$/pkU)W(F0ԃJ.REx씓(|ev'tDsVeb2Qr/z{.;^Q/Frʪȿ|XO{22i:bq;U1TjK.J_ Y]`\I14A8F ;0Q1y~|#iREQ\- URVL,Veb 8{:c(>Nv&uNzsںG4t@u~ںnb}9A1iȦ9, إȳ9Dee.dU[s}yoP>ѺaD5ܤ9ОHOk裼i)r d0Qlو)q2,aS.@huc0 O;b<<Q-Wyڴ9 BUֱ66zl|C豗h?ꎳr*,Cpd.t5(lH*<#|An\kܴsHd`vt=wD%o3{x?+̜tOn\. ͛$+Hh*2"5'kjW&ǓJ$WgM+]m;$$jXbZyeeot:k}[T}ew+[f2D,TbP|_J6G*)pv wv$`Ŋ*>Yܼe/t"wDCKP~ ذXT2o5Xkqz\K[9{@+P(tTLuHUryhDY9ez1Qƒanv1M:&eKYS^HMQp{(a8A(gbǹ,9":D iۋk dk8aضH I`> endobj 268 0 obj << /S /D /St 21 >> endobj 269 0 obj << /Type /Action /S /GoTo /D [267 0 R /XYZ 53.858 374.1 null] >> endobj 270 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.594 263.841 444.124 273.091 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 269 0 R /H /I >> endobj 271 0 obj << /Length 272 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 272 0 obj 2542 endobj 273 0 obj [ 270 0 R ] endobj 274 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 273 0 R /Contents 271 0 R >> endobj 275 0 obj << /S /D /St 37 >> endobj 276 0 obj << /Length 277 0 R /Filter /FlateDecode >> stream xZn}hemEu.',+0!pȞa^l$ȿTm( { Hu몢?o{Efqܭ VK&m+q-H&e/,/yl('x{~Sl8G&Xwæcnvp,g0Y}=~blfsF0Dۖ#,r v/UuŊ? tjyHOo;O_]g\puۗo쩜k[~)Ș"DIR){ٞA`9zb&{;-'ЬWeʢ]*ayr[!]+pHYf2<⦪TQ3R;T%LY8em++ #%z¯W]3ʠpא\nM<{gҫ&fQ,zĵ./su(*ɖBz.kCs bX d*Oc`H48Op^ -bOf"J%yD؁2 ]ioie ;%4u\"x"Ӳ`iq4gӸɢ/dVXnWJ!u}{Cgbݩ)!A:b{DtP6yC"ʕV>`5XGGZu$\9@ Ȱt>b'nged'mc_EbQt, tYG{nJ쇁rgHP]ixdK(N 8L>aEk}Пp%򤡹m,8{U*jPB}TfmBIG\dFV7yc9! E9p`uS8h(%LgMb[m/TpBE֓߳ 6 6-/gO9 cp6[dv(be N{a3i4c_mӚRNx<xQV{Vb¢*OkUŒe͎f9ʪcNt9(b7%歎B7-5Lc "csfl37BAP˅)/BN,>BT^feK|}-܊d 9AK*j]I)iϕ; G| K2ŧ}dž] [<;6z>ݩ b'Lzrh= οϙzhcl=t,0wV:9?/zY>&# qnX h;Ah'2 NPg1:c>|Zf\yi?.O/E9]o"#`s Qx\}e9Cg/%$vxGi1* 3WI153(>jƾD,:%u:t-Ѳ:na=Ip"F%GZ4n78*J,+ul,GNwK"@&)G)sշ_G]f8 epza#]lpT4@r('!$` 8+ u)k " cp_IQZ U$ ")`ww0w|ۤ:]B _m v`nh T;$kdp.ϵ/.3= !~)M2:W+T2nPLbY-$U>yYQOTG)nznN馉ɳ(ze-]_d{ނI, smn[6\%(~frIh*mv8x`6hُ"/qEM^dTf GT4xi Pv)ཬ*[HoCzحmzKK|9/'0ӷ [G8+?1ە4ͣw¥^9?8 endstream endobj 277 0 obj 2383 endobj 278 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 276 0 R >> endobj 279 0 obj << /S /r /St 3 >> endobj 280 0 obj << /Type /Action /S /GoTo /D [28 0 R /XYZ 87.874 718.3 null] >> endobj 281 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 707.175 124.004 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 280 0 R /H /I >> endobj 282 0 obj << /Type /Annot /Subtype /Link /Rect [ 555.212 707.175 560.772 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 280 0 R /H /I >> endobj 283 0 obj << /Type /Action /S /GoTo /D [28 0 R /XYZ 87.874 686.1 null] >> endobj 284 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 694.175 229.0 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 283 0 R /H /I >> endobj 285 0 obj << /Type /Annot /Subtype /Link /Rect [ 555.216 694.175 560.216 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 283 0 R /H /I >> endobj 286 0 obj << /Type /Action /S /GoTo /D [28 0 R /XYZ 87.874 557.698 null] >> endobj 287 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 681.175 270.62 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 286 0 R /H /I >> endobj 288 0 obj << /Type /Annot /Subtype /Link /Rect [ 555.046 681.175 560.046 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 286 0 R /H /I >> endobj 289 0 obj << /Type /Action /S /GoTo /D [31 0 R /XYZ 53.858 188.662 null] >> endobj 290 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 668.175 260.675 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 289 0 R /H /I >> endobj 291 0 obj << /Type /Annot /Subtype /Link /Rect [ 552.879 668.175 560.099 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 289 0 R /H /I >> endobj 292 0 obj << /Type /Action /S /GoTo /D [34 0 R /XYZ 87.874 485.339 null] >> endobj 293 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 655.175 248.97 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 292 0 R /H /I >> endobj 294 0 obj << /Type /Annot /Subtype /Link /Rect [ 550.73 655.175 560.17 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 292 0 R /H /I >> endobj 295 0 obj << /Type /Action /S /GoTo /D [34 0 R /XYZ 87.874 189.995 null] >> endobj 296 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 642.175 217.333 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 295 0 R /H /I >> endobj 297 0 obj << /Type /Annot /Subtype /Link /Rect [ 550.826 642.175 560.266 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 295 0 R /H /I >> endobj 298 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 621.175 158.528 630.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 299 0 R /H /I >> endobj 300 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.987 621.175 560.547 630.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 299 0 R /H /I >> endobj 301 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 608.175 229.553 617.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 302 0 R /H /I >> endobj 303 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.648 608.175 560.208 617.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 302 0 R /H /I >> endobj 304 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 595.175 238.373 604.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 305 0 R /H /I >> endobj 306 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.588 595.175 560.148 604.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 305 0 R /H /I >> endobj 307 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 582.175 246.525 591.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 308 0 R /H /I >> endobj 309 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.534 582.175 560.094 591.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 308 0 R /H /I >> endobj 310 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 87.874 718.3 null] >> endobj 311 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 561.175 185.143 570.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 310 0 R /H /I >> endobj 312 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.818 561.175 560.378 570.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 310 0 R /H /I >> endobj 313 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 548.175 230.597 557.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 80 0 R /H /I >> endobj 314 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.642 548.175 560.202 557.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 80 0 R /H /I >> endobj 315 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 535.175 258.473 544.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 52 0 R /H /I >> endobj 316 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.568 535.175 560.128 544.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 52 0 R /H /I >> endobj 317 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 522.175 422.864 531.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 55 0 R /H /I >> endobj 318 0 obj << /Type /Annot /Subtype /Link /Rect [ 553.386 522.175 558.946 531.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 55 0 R /H /I >> endobj 319 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 87.874 630.03 null] >> endobj 320 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 509.175 224.815 518.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 319 0 R /H /I >> endobj 321 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.81 509.175 560.37 518.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 319 0 R /H /I >> endobj 322 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 496.175 349.564 505.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 131 0 R /H /I >> endobj 323 0 obj << /Type /Annot /Subtype /Link /Rect [ 553.834 496.175 559.394 505.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 131 0 R /H /I >> endobj 324 0 obj << /Type /Action /S /GoTo /D [64 0 R /XYZ 87.874 322.352 null] >> endobj 325 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 483.175 258.078 492.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 324 0 R /H /I >> endobj 326 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.456 483.175 560.016 492.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 324 0 R /H /I >> endobj 327 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 470.175 316.311 479.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 126 0 R /H /I >> endobj 328 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.152 470.175 559.712 479.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 126 0 R /H /I >> endobj 329 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 87.874 410.752 null] >> endobj 330 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 457.175 317.428 466.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 329 0 R /H /I >> endobj 331 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.248 457.175 559.808 466.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 329 0 R /H /I >> endobj 332 0 obj << /Type /Action /S /GoTo /D [68 0 R /XYZ 53.858 679.3 null] >> endobj 333 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 444.175 286.054 453.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 332 0 R /H /I >> endobj 334 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.886 444.175 560.006 453.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 332 0 R /H /I >> endobj 335 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 423.175 286.03 432.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 87 0 R /H /I >> endobj 336 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.576 423.175 559.696 432.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 87 0 R /H /I >> endobj 337 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 410.175 185.847 419.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 78 0 R /H /I >> endobj 338 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.346 410.175 560.466 419.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 78 0 R /H /I >> endobj 339 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 162.2 null] >> endobj 340 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 397.175 217.358 406.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.132 397.175 560.252 406.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 384.175 190.463 393.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.458 384.175 560.578 393.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 344 0 obj << /Type /Action /S /GoTo /D [105 0 R /XYZ 87.874 203.773 null] >> endobj 345 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 371.175 279.403 380.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.818 371.175 559.938 380.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 344 0 R /H /I >> endobj 347 0 obj << /Type /Action /S /GoTo /D [145 0 R /XYZ 87.874 291.989 null] >> endobj 348 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 358.175 300.595 367.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 347 0 R /H /I >> endobj 349 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.57 358.175 559.69 367.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 347 0 R /H /I >> endobj 350 0 obj << /Type /Action /S /GoTo /D [145 0 R /XYZ 87.874 183.794 null] >> endobj 351 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 345.175 206.515 354.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 350 0 R /H /I >> endobj 352 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.342 345.175 560.462 354.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 350 0 R /H /I >> endobj 353 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 332.175 239.123 341.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 354 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.108 332.175 560.228 341.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 355 0 obj << /Type /Action /S /GoTo /D [160 0 R /XYZ 53.858 691.3 null] >> endobj 356 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 319.175 337.893 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 355 0 R /H /I >> endobj 357 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.488 319.175 559.608 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 355 0 R /H /I >> endobj 358 0 obj << /Type /Action /S /GoTo /D [162 0 R /XYZ 87.874 627.607 null] >> endobj 359 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 306.175 250.991 315.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 358 0 R /H /I >> endobj 360 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.153 306.175 560.273 315.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 358 0 R /H /I >> endobj 361 0 obj << /Type /Action /S /GoTo /D [162 0 R /XYZ 87.874 334.385 null] >> endobj 362 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 293.175 361.422 302.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 361 0 R /H /I >> endobj 363 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.308 293.175 559.428 302.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 361 0 R /H /I >> endobj 364 0 obj << /Type /Action /S /GoTo /D [170 0 R /XYZ 53.858 690.5 null] >> endobj 365 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 280.175 268.928 289.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 364 0 R /H /I >> endobj 366 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.892 280.175 560.012 289.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 364 0 R /H /I >> endobj 367 0 obj << /Type /Action /S /GoTo /D [176 0 R /XYZ 87.874 299.21 null] >> endobj 368 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 267.175 284.913 276.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.778 267.175 559.898 276.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 367 0 R /H /I >> endobj 370 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 254.175 215.699 263.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 371 0 R /H /I >> endobj 372 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.144 254.175 560.264 263.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 371 0 R /H /I >> endobj 373 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 241.175 274.281 250.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 374 0 R /H /I >> endobj 375 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.748 241.175 559.868 250.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 374 0 R /H /I >> endobj 376 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 228.175 304.205 237.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 190 0 R /H /I >> endobj 377 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.64 228.175 559.76 237.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 190 0 R /H /I >> endobj 378 0 obj << /Type /Action /S /GoTo /D [186 0 R /XYZ 87.874 332.358 null] >> endobj 379 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 215.175 295.412 224.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 378 0 R /H /I >> endobj 380 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.704 215.175 559.824 224.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 378 0 R /H /I >> endobj 381 0 obj << /Type /Action /S /GoTo /D [199 0 R /XYZ 53.858 552.664 null] >> endobj 382 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 202.175 308.895 211.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 381 0 R /H /I >> endobj 383 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.606 202.175 559.726 211.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 381 0 R /H /I >> endobj 384 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 189.175 349.832 198.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 212 0 R /H /I >> endobj 385 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.31 189.175 559.43 198.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 212 0 R /H /I >> endobj 386 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 176.175 365.572 185.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 387 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.196 176.175 559.316 185.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 388 0 obj << /Type /Action /S /GoTo /D [231 0 R /XYZ 87.874 271.621 null] >> endobj 389 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 163.175 341.014 172.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 388 0 R /H /I >> endobj 390 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.376 163.175 559.496 172.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 388 0 R /H /I >> endobj 391 0 obj << /Type /Action /S /GoTo /D [237 0 R /XYZ 53.858 158.698 null] >> endobj 392 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 150.175 328.85 159.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 391 0 R /H /I >> endobj 393 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.462 150.175 559.582 159.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 391 0 R /H /I >> endobj 394 0 obj << /Type /Action /S /GoTo /D [248 0 R /XYZ 53.858 366.3 null] >> endobj 395 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 137.175 168.127 146.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 394 0 R /H /I >> endobj 396 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.466 137.175 560.586 146.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 394 0 R /H /I >> endobj 397 0 obj << /Type /Action /S /GoTo /D [260 0 R /XYZ 87.874 718.3 null] >> endobj 398 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 116.175 195.601 125.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 397 0 R /H /I >> endobj 399 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.156 116.175 560.276 125.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 397 0 R /H /I >> endobj 400 0 obj << /Type /Action /S /GoTo /D [260 0 R /XYZ 87.874 490.102 null] >> endobj 401 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 103.175 219.573 112.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 400 0 R /H /I >> endobj 402 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.118 103.175 560.238 112.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 400 0 R /H /I >> endobj 403 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 90.175 311.566 99.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 269 0 R /H /I >> endobj 404 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.494 90.175 559.614 99.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 269 0 R /H /I >> endobj 405 0 obj << /Type /Action /S /GoTo /D [278 0 R /XYZ 87.874 654.3 null] >> endobj 406 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 77.175 266.822 86.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 405 0 R /H /I >> endobj 407 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.798 77.175 559.918 86.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 405 0 R /H /I >> endobj 408 0 obj << /Length 409 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 412 0 obj << /S /D /St 38 >> endobj 413 0 obj << /Length 414 0 R /Filter /FlateDecode >> stream xT=O0WC͝/'+ UXb:(EԿsשDErwFH&?0Fiwˋ:HռƀdwA)LQ4N~VkC? WCޣ*)#3*Y]GN5fG:pL uIrz02}ط:+p&am]Pp jyK2?xl* WyrU~\ʒg6~A endstream endobj 414 0 obj 262 endobj 415 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 413 0 R >> endobj 416 0 obj << /Type /Action /S /GoTo /D [417 0 R /XYZ 87.874 500.712 null] >> endobj 418 0 obj << /Type /Annot /Subtype /Link /Rect [ 325.734 515.587 369.654 524.837 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 416 0 R /H /I >> endobj 419 0 obj << /Length 420 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 420 0 obj 1586 endobj 421 0 obj [ 418 0 R ] endobj 417 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 421 0 R /Contents 419 0 R >> endobj 422 0 obj << /S /D >> endobj 299 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 87.874 718.3 null] >> endobj 302 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 87.874 634.1 null] >> endobj 305 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 87.874 363.94 null] >> endobj 308 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 87.874 146.068 null] >> endobj 424 0 obj << /Type /Action /S /GoTo /D [417 0 R /XYZ 87.874 718.3 null] >> endobj 425 0 obj << /Type /Annot /Subtype /Link /Rect [ 291.844 199.943 456.344 209.193 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 424 0 R /H /I >> endobj 426 0 obj << /Length 427 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 427 0 obj 2174 endobj 428 0 obj [ 425 0 R ] endobj 423 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 428 0 R /Contents 426 0 R >> endobj 429 0 obj << /S /D /St 13 >> endobj 253 0 obj << /Type /Action /S /GoTo /D [430 0 R /XYZ 87.874 485.641 null] >> endobj 431 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 547.144 245.034 556.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 339 0 R /H /I >> endobj 432 0 obj << /Type /Annot /Subtype /Link /Rect [ 452.354 534.144 530.164 543.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 424 0 R /H /I >> endobj 433 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 521.144 182.784 530.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 424 0 R /H /I >> endobj 434 0 obj << /Length 435 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 435 0 obj 2516 endobj 436 0 obj [ 431 0 R 432 0 R 433 0 R ] endobj 430 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 436 0 R /Contents 434 0 R >> endobj 437 0 obj << /S /D /St 40 >> endobj 438 0 obj << /Type /Action /S /GoTo /D [439 0 R /XYZ 53.858 188.21 null] >> endobj 440 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 429.851 97.778 439.101 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 416 0 R /H /I >> endobj 441 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 231.085 97.778 240.335 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 416 0 R /H /I >> endobj 442 0 obj << /Type /Annot /Subtype /Link /Rect [ 232.768 218.085 413.968 227.335 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 438 0 R /H /I >> endobj 443 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.898 205.085 167.818 214.335 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 416 0 R /H /I >> endobj 444 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 177.085 169.918 186.335 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 416 0 R /H /I >> endobj 445 0 obj << /Length 446 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 446 0 obj 2105 endobj 447 0 obj [ 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R ] endobj 439 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 447 0 R /Contents 445 0 R >> endobj 448 0 obj << /Type /Action /S /GoTo /D [449 0 R /XYZ 87.874 476.1 null] >> endobj 450 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 310.966 158.454 320.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 448 0 R /H /I >> endobj 451 0 obj << /Type /Annot /Subtype /Link /Rect [ 221.814 310.966 366.884 320.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 138 0 R /H /I >> endobj 452 0 obj << /Type /Annot /Subtype /Link /Rect [ 486.924 310.966 537.494 320.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 453 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 297.966 131.224 307.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 454 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 269.966 230.594 279.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 448 0 R /H /I >> endobj 455 0 obj << /Length 456 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 456 0 obj 1951 endobj 457 0 obj [ 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R ] endobj 449 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 457 0 R /Contents 455 0 R >> endobj 458 0 obj << /Type /Action /S /GoTo /D [449 0 R /XYZ 87.874 281.091 null] >> endobj 459 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 659.375 261.718 668.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 458 0 R /H /I >> endobj 460 0 obj << /Type /Annot /Subtype /Link /Rect [ 465.168 659.375 497.398 668.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 448 0 R /H /I >> endobj 461 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 646.375 92.208 655.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 448 0 R /H /I >> endobj 462 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 633.375 150.558 642.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 463 0 obj << /Type /Annot /Subtype /Link /Rect [ 153.338 633.375 298.408 642.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 138 0 R /H /I >> endobj 464 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 550.686 null] >> endobj 466 0 obj << /Type /Annot /Subtype /Link /Rect [ 81.638 331.38 170.018 340.63 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 464 0 R /H /I >> endobj 467 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 173.766 214.378 183.016 ] /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 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 471 0 obj << /Type /Action /S /GoTo /D [472 0 R /XYZ 87.874 692.3 null] >> endobj 473 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.654 416.493 185.124 425.743 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 471 0 R /H /I >> endobj 474 0 obj << /Type /Annot /Subtype /Link /Rect [ 279.644 311.913 349.114 321.163 ] /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 123.333 229.484 132.583 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 471 0 R /H /I >> endobj 476 0 obj << /Length 477 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 477 0 obj 1849 endobj 478 0 obj [ 473 0 R 474 0 R 475 0 R ] endobj 472 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 478 0 R /Contents 476 0 R >> endobj 479 0 obj << /Type /Action /S /GoTo /D [480 0 R /XYZ 53.858 491.7 null] >> endobj 481 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 506.575 116.108 515.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 479 0 R /H /I >> endobj 482 0 obj << /Type /Annot /Subtype /Link /Rect [ 366.878 80.072 429.128 89.322 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 479 0 R /H /I >> endobj 483 0 obj << /Length 484 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ʻ2b|1m ܒ P~8bwS|*;ک2c*Ĉjs[}#&~HS;UJ' ]\#.KaN fTJv (&. ޛlS>GƴW+\]k5!k>OȂ 9=N Gv p^MzjRwMJ{[ C5Ž m<>kjS#Ի1gQ(tGY6Y"/>[X8 'ZH5m 3ӝh,T;leEi JDVP`;@C5ܵSj'cuiN*`^#WK\+5\>7L=@){ܴ , [֜` >em endstream endobj 484 0 obj 2016 endobj 485 0 obj [ 481 0 R 482 0 R ] endobj 480 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 485 0 R /Contents 483 0 R >> endobj 486 0 obj << /Type /Action /S /GoTo /D [487 0 R /XYZ 87.874 513.504 null] >> endobj 488 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.684 556.379 556.404 565.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 486 0 R /H /I >> endobj 489 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 543.379 157.904 552.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 486 0 R /H /I >> endobj 490 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 502.379 222.264 511.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 479 0 R /H /I >> endobj 491 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.994 220.091 298.524 229.341 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 486 0 R /H /I >> endobj 492 0 obj << /Length 493 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 493 0 obj 2220 endobj 494 0 obj [ 488 0 R 489 0 R 490 0 R 491 0 R ] endobj 487 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 494 0 R /Contents 492 0 R >> endobj 495 0 obj << /Length 496 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 496 0 obj 1526 endobj 497 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 495 0 R >> endobj 498 0 obj << /S /D /St 26 >> endobj 371 0 obj << /Type /Action /S /GoTo /D [499 0 R /XYZ 53.858 705.3 null] >> endobj 184 0 obj << /Type /Action /S /GoTo /D [499 0 R /XYZ 53.858 393.036 null] >> endobj 374 0 obj << /Type /Action /S /GoTo /D [499 0 R /XYZ 53.858 130.004 null] >> endobj 500 0 obj << /Type /Action /S /GoTo /D [497 0 R /XYZ 53.858 659.1 null] >> endobj 501 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 269.559 101.658 278.809 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 500 0 R /H /I >> endobj 502 0 obj << /Length 503 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 505 0 obj << /S /D /St 47 >> endobj 506 0 obj << /Type /Action /S /GoTo /D [507 0 R /XYZ 87.874 146.145 null] >> endobj 508 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 491.39 135.674 500.64 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 500 0 R /H /I >> endobj 509 0 obj << /Type /Annot /Subtype /Link /Rect [ 488.624 491.39 546.984 500.64 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 506 0 R /H /I >> endobj 510 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 478.39 211.814 487.64 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 506 0 R /H /I >> endobj 511 0 obj << /Type /Annot /Subtype /Link /Rect [ 240.194 266.205 287.994 275.455 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 500 0 R /H /I >> endobj 512 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 135.02 207.814 144.27 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 500 0 R /H /I >> endobj 513 0 obj << /Length 514 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 514 0 obj 2218 endobj 515 0 obj [ 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R ] endobj 507 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 515 0 R /Contents 513 0 R >> endobj 516 0 obj << /Length 517 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 517 0 obj 1870 endobj 518 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 516 0 R >> endobj 519 0 obj << /Length 520 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 520 0 obj 1275 endobj 521 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 519 0 R >> endobj 522 0 obj << /Type /Action /S /GoTo /D [518 0 R /XYZ 53.858 548.9 null] >> endobj 523 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 707.175 96.648 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 524 0 obj << /Type /Annot /Subtype /Link /Rect [ 153.328 694.175 196.118 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 525 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 642.324 96.648 651.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 526 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.068 629.324 354.868 638.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 500 0 R /H /I >> endobj 527 0 obj << /Type /Action /S /GoTo /D [497 0 R /XYZ 53.858 718.3 null] >> endobj 528 0 obj << /Type /Annot /Subtype /Link /Rect [ 380.428 629.324 506.028 638.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 529 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 616.324 159.978 625.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 530 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 575.324 168.788 584.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 531 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 586.449 null] >> endobj 533 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 414.843 233.928 424.093 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 534 0 obj << /Length 535 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 537 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 151.215 null] >> endobj 538 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 210.024 134.004 219.274 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 537 0 R /H /I >> endobj 539 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.234 145.273 177.364 154.523 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 537 0 R /H /I >> endobj 540 0 obj << /Type /Annot /Subtype /Link /Rect [ 447.794 145.273 495.594 154.523 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 500 0 R /H /I >> endobj 541 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 132.273 322.374 141.523 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 542 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 104.273 206.144 113.523 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 537 0 R /H /I >> endobj 543 0 obj << /Length 544 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 544 0 obj 1957 endobj 545 0 obj [ 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R ] endobj 546 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 545 0 R /Contents 543 0 R >> endobj 547 0 obj << /Type /Action /S /GoTo /D [548 0 R /XYZ 53.858 437.1 null] >> endobj 549 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 143.842 105.548 153.092 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 547 0 R /H /I >> endobj 550 0 obj << /Length 551 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 553 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.584 707.175 201.274 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 547 0 R /H /I >> endobj 554 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 618.068 211.704 627.318 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 547 0 R /H /I >> endobj 555 0 obj << /Type /Action /S /GoTo /D [556 0 R /XYZ 87.874 455.907 null] >> endobj 557 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 275.072 154.574 284.322 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 555 0 R /H /I >> endobj 558 0 obj << /Length 559 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 559 0 obj 2043 endobj 560 0 obj [ 553 0 R 554 0 R 557 0 R ] endobj 556 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 560 0 R /Contents 558 0 R >> endobj 561 0 obj << /Type /Action /S /GoTo /D [562 0 R /XYZ 53.858 590.099 null] >> endobj 563 0 obj << /Type /Action /S /GoTo /D [562 0 R /XYZ 53.858 102.954 null] >> endobj 564 0 obj << /Type /Annot /Subtype /Link /Rect [ 142.778 632.974 352.318 642.224 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 561 0 R /H /I >> endobj 565 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 578.974 198.258 588.224 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 555 0 R /H /I >> endobj 566 0 obj << /Type /Annot /Subtype /Link /Rect [ 74.978 233.03 141.678 242.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 555 0 R /H /I >> endobj 567 0 obj << /Type /Action /S /GoTo /D [556 0 R /XYZ 87.874 522.107 null] >> endobj 568 0 obj << /Type /Annot /Subtype /Link /Rect [ 167.238 233.03 405.108 242.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 567 0 R /H /I >> endobj 569 0 obj << /Type /Action /S /GoTo /D [562 0 R /XYZ 53.858 455.738 null] >> endobj 570 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.668 233.03 482.928 242.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 569 0 R /H /I >> endobj 571 0 obj << /Type /Annot /Subtype /Link /Rect [ 296.178 207.03 511.828 216.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 567 0 R /H /I >> endobj 572 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 194.03 73.298 203.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 567 0 R /H /I >> endobj 573 0 obj << /Type /Annot /Subtype /Link /Rect [ 118.898 171.829 191.158 181.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 569 0 R /H /I >> endobj 574 0 obj << /Type /Annot /Subtype /Link /Rect [ 277.298 171.829 343.998 181.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 555 0 R /H /I >> endobj 575 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.258 171.829 473.518 181.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 569 0 R /H /I >> endobj 576 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 145.829 268.958 155.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 563 0 R /H /I >> endobj 577 0 obj << /Type /Annot /Subtype /Link /Rect [ 361.238 145.829 433.498 155.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 569 0 R /H /I >> endobj 578 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 91.829 203.818 101.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 569 0 R /H /I >> endobj 579 0 obj << /Length 580 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 580 0 obj 2646 endobj 581 0 obj [ 564 0 R 565 0 R 566 0 R 568 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R ] endobj 562 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 581 0 R /Contents 579 0 R >> endobj 582 0 obj << /Type /Action /S /GoTo /D [583 0 R /XYZ 87.874 608.7 null] >> endobj 584 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 155.02 143.444 164.27 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 582 0 R /H /I >> endobj 585 0 obj << /Length 586 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 586 0 obj 1918 endobj 587 0 obj [ 584 0 R ] endobj 583 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 587 0 R /Contents 585 0 R >> endobj 588 0 obj << /S /D /St 57 >> endobj 589 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 692.175 256.174 701.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 590 0 R /H /I >> endobj 591 0 obj << /Length 592 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 592 0 obj 1568 endobj 593 0 obj [ 589 0 R ] endobj 594 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 593 0 R /Contents 591 0 R >> endobj 595 0 obj << /S /D /St 56 >> endobj 590 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 410.048 null] >> endobj 597 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 692.175 187.128 701.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 582 0 R /H /I >> endobj 598 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 703.3 null] >> endobj 599 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 585.103 252.268 594.353 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 598 0 R /H /I >> endobj 600 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 143.162 144.458 152.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 590 0 R /H /I >> endobj 601 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.568 93.072 206.168 102.322 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 590 0 R /H /I >> endobj 602 0 obj << /Type /Action /S /GoTo /D [594 0 R /XYZ 87.874 703.3 null] >> endobj 603 0 obj << /Type /Annot /Subtype /Link /Rect [ 288.948 80.072 522.388 89.322 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 604 0 obj << /Length 605 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 607 0 obj << /S /D /St 58 >> endobj 608 0 obj << /Type /Action /S /GoTo /D [594 0 R /XYZ 87.874 311.846 null] >> endobj 609 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 624.77 133.888 634.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 608 0 R /H /I >> endobj 610 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 515.365 133.888 524.615 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 608 0 R /H /I >> endobj 611 0 obj << /Type /Annot /Subtype /Link /Rect [ 232.228 489.365 328.928 498.615 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 612 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 425.96 211.588 435.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 608 0 R /H /I >> endobj 613 0 obj << /Length 614 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 617 0 obj << /Type /Action /S /GoTo /D [618 0 R /XYZ 87.874 177.056 null] >> endobj 619 0 obj << /Type /Action /S /GoTo /D [616 0 R /XYZ 53.858 146.561 null] >> endobj 620 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 269.753 159.564 279.003 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 619 0 R /H /I >> endobj 621 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 206.931 302.404 216.181 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 617 0 R /H /I >> endobj 622 0 obj << /Type /Annot /Subtype /Link /Rect [ 505.294 206.931 536.974 216.181 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 619 0 R /H /I >> endobj 623 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 193.931 127.884 203.181 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 619 0 R /H /I >> endobj 624 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 165.931 237.264 175.181 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 619 0 R /H /I >> endobj 625 0 obj << /Length 626 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 628 0 obj << /Length 629 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 631 0 obj << /Length 632 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 632 0 obj 1197 endobj 633 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 631 0 R >> endobj 634 0 obj << /Type /Action /S /GoTo /D [630 0 R /XYZ 53.858 483.9 null] >> endobj 635 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 542.575 102.768 551.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 634 0 R /H /I >> endobj 636 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 315.575 180.468 324.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 634 0 R /H /I >> endobj 637 0 obj << /Length 638 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 638 0 obj 1742 endobj 639 0 obj [ 635 0 R 636 0 R ] endobj 640 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 639 0 R /Contents 637 0 R >> endobj 641 0 obj << /S /D /St 64 >> endobj 642 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 679.175 176.578 688.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 643 0 R /H /I >> endobj 644 0 obj << /Type /Annot /Subtype /Link /Rect [ 78.858 325.182 349.498 334.432 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 645 0 R /H /I >> endobj 646 0 obj << /Type /Action /S /GoTo /D [630 0 R /XYZ 53.858 576.1 null] >> endobj 647 0 obj << /Type /Annot /Subtype /Link /Rect [ 406.088 312.182 520.028 321.432 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 648 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 299.182 143.888 308.432 ] /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 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 650 0 obj 1907 endobj 651 0 obj [ 642 0 R 644 0 R 647 0 R 648 0 R ] endobj 652 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 651 0 R /Contents 649 0 R >> endobj 653 0 obj << /S /D /St 63 >> endobj 645 0 obj << /Type /Action /S /GoTo /D [654 0 R /XYZ 87.874 653.3 null] >> endobj 643 0 obj << /Type /Action /S /GoTo /D [654 0 R /XYZ 87.874 523.124 null] >> endobj 655 0 obj << /Type /Annot /Subtype /Link /Rect [ 500.834 707.175 549.744 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 634 0 R /H /I >> endobj 656 0 obj << /Type /Action /S /GoTo /D [640 0 R /XYZ 53.858 326.7 null] >> endobj 657 0 obj << /Type /Annot /Subtype /Link /Rect [ 297.934 681.175 489.684 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 656 0 R /H /I >> endobj 658 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 589.999 136.784 599.249 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 634 0 R /H /I >> endobj 659 0 obj << /Type /Annot /Subtype /Link /Rect [ 162.344 589.999 369.094 599.249 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 660 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.894 524.999 172.914 534.249 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 643 0 R /H /I >> endobj 661 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 93.069 132.894 102.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 643 0 R /H /I >> endobj 662 0 obj << /Type /Action /S /GoTo /D [652 0 R /XYZ 53.858 690.3 null] >> endobj 663 0 obj << /Type /Annot /Subtype /Link /Rect [ 357.984 80.069 545.844 89.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 662 0 R /H /I >> endobj 664 0 obj << /Length 665 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 665 0 obj 1966 endobj 666 0 obj [ 655 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 663 0 R ] endobj 654 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 666 0 R /Contents 664 0 R >> endobj 667 0 obj << /S /D /St 65 >> endobj 668 0 obj << /Type /Action /S /GoTo /D [669 0 R /XYZ 87.874 513.504 null] >> endobj 670 0 obj << /Type /Action /S /GoTo /D [652 0 R /XYZ 53.858 284.307 null] >> endobj 671 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 556.379 180.124 565.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 670 0 R /H /I >> endobj 672 0 obj << /Type /Annot /Subtype /Link /Rect [ 464.674 543.379 528.594 552.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 668 0 R /H /I >> endobj 673 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 530.379 209.034 539.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 668 0 R /H /I >> endobj 674 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 502.379 210.594 511.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 643 0 R /H /I >> endobj 675 0 obj << /Length 676 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 676 0 obj 1968 endobj 677 0 obj [ 671 0 R 672 0 R 673 0 R 674 0 R ] endobj 669 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 677 0 R /Contents 675 0 R >> endobj 678 0 obj << /Type /Action /S /GoTo /D [679 0 R /XYZ 53.858 262.65 null] >> endobj 680 0 obj << /Type /Annot /Subtype /Link /Rect [ 73.868 264.525 122.228 273.775 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 678 0 R /H /I >> endobj 681 0 obj << /Length 682 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 684 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 87.874 316.5 null] >> endobj 686 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 461.375 136.234 470.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 678 0 R /H /I >> endobj 687 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 346.375 279.074 355.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 684 0 R /H /I >> endobj 688 0 obj << /Type /Annot /Subtype /Link /Rect [ 452.504 346.375 500.864 355.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 678 0 R /H /I >> endobj 689 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 305.375 213.934 314.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 678 0 R /H /I >> endobj 690 0 obj << /Length 691 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 691 0 obj 1686 endobj 692 0 obj [ 686 0 R 687 0 R 688 0 R 689 0 R ] endobj 685 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 692 0 R /Contents 690 0 R >> endobj 693 0 obj << /Length 694 0 R /Filter /FlateDecode >> stream xT=o0WX;;'+ĆjbjU'`Y>I4ZñřFn]։aW9XQo*BQ RI *)Z+ E/X^8e0> endobj 696 0 obj << /Length 697 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 697 0 obj 2307 endobj 698 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 696 0 R >> endobj 699 0 obj << /S /D /St 8 >> endobj 700 0 obj << /Type /Action /S /GoTo /D [698 0 R /XYZ 87.874 718.3 null] >> endobj 701 0 obj << /Type /Annot /Subtype /Link /Rect [ 286.928 217.069 484.778 226.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 700 0 R /H /I >> endobj 702 0 obj << /Type /Annot /Subtype /Link /Rect [ 187.678 67.069 284.378 76.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 703 0 obj << /Length 704 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 707 0 obj << /S /D /St 70 >> endobj 708 0 obj << /Length 709 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 709 0 obj 1970 endobj 710 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 708 0 R >> endobj 711 0 obj << /Length 712 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 712 0 obj 1772 endobj 713 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 711 0 R >> endobj 714 0 obj << /Length 715 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 717 0 obj << /URI (http://sourceware.org/systemtap/wiki/HomePage) /S /URI >> endobj 718 0 obj << /Type /Annot /Subtype /Link /Rect [ 310.424 611.975 524.944 621.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 717 0 R /H /I >> endobj 719 0 obj << /URI (http://sourceware.org/systemtap/tutorial/) /S /URI >> endobj 720 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.744 548.975 441.594 558.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 719 0 R /H /I >> endobj 721 0 obj << /URI (http://sourceware.org/systemtap/tapsets/) /S /URI >> endobj 722 0 obj << /Type /Annot /Subtype /Link /Rect [ 349.904 359.975 529.984 369.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 721 0 R /H /I >> endobj 723 0 obj << /URI (http://sourceware.org/systemtap/langref/) /S /URI >> endobj 724 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.574 296.975 548.284 306.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 723 0 R /H /I >> endobj 725 0 obj << /Type /Annot /Subtype /Link /Rect [ 105.874 283.975 187.574 293.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 723 0 R /H /I >> endobj 726 0 obj << /Type /Annot /Subtype /Link /Rect [ 377.674 170.975 542.174 180.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 424 0 R /H /I >> endobj 727 0 obj << /Length 728 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 731 0 obj << /Length 732 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 732 0 obj 262 endobj 733 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 731 0 R >> endobj 734 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.338 673.625 509.338 681.305 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 13 0 R /H /I >> endobj 735 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.338 618.625 509.338 626.305 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 13 0 R /H /I >> endobj 736 0 obj << /Length 737 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 737 0 obj 576 endobj 738 0 obj [ 734 0 R 735 0 R ] endobj 739 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 738 0 R /Contents 736 0 R >> endobj 740 0 obj << /Length 741 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 741 0 obj 262 endobj 742 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 740 0 R >> endobj 743 0 obj << /Type /Action /S /GoTo /D [744 0 R /XYZ 329.008 81.3 null] >> endobj 745 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 670.574 null] >> endobj 746 0 obj << /Type /Annot /Subtype /Link /Rect [ 180.784 628.923 191.904 638.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 745 0 R /H /I >> endobj 747 0 obj << /Type /Action /S /GoTo /D [507 0 R /XYZ 87.874 217.27 null] >> endobj 748 0 obj << /Type /Annot /Subtype /Link /Rect [ 180.784 589.923 191.904 599.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 749 0 obj << /Type /Action /S /GoTo /D [546 0 R /XYZ 87.874 173.523 null] >> endobj 750 0 obj << /Type /Annot /Subtype /Link /Rect [ 197.464 589.923 208.584 599.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 749 0 R /H /I >> endobj 751 0 obj << /Type /Action /S /GoTo /D [248 0 R /XYZ 71.858 707.425 null] >> endobj 752 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 550.923 200.804 560.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 751 0 R /H /I >> endobj 753 0 obj << /Type /Action /S /GoTo /D [239 0 R /XYZ 105.874 333.925 null] >> endobj 754 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 511.923 200.804 521.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 753 0 R /H /I >> endobj 755 0 obj << /Type /Action /S /GoTo /D [239 0 R /XYZ 105.874 128.925 null] >> endobj 756 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 472.923 200.804 482.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 755 0 R /H /I >> endobj 757 0 obj << /Type /Action /S /GoTo /D [239 0 R /XYZ 105.874 179.925 null] >> endobj 758 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 433.923 200.804 443.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 759 0 obj << /Type /Action /S /GoTo /D [239 0 R /XYZ 105.874 256.925 null] >> endobj 760 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 394.923 200.804 404.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 759 0 R /H /I >> endobj 761 0 obj << /Type /Action /S /GoTo /D [239 0 R /XYZ 87.874 721.425 null] >> endobj 762 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 327.071 200.804 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 761 0 R /H /I >> endobj 763 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 53.858 683.425 null] >> endobj 764 0 obj << /Type /Annot /Subtype /Link /Rect [ 254.614 314.071 260.174 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 763 0 R /H /I >> endobj 765 0 obj << /Type /Action /S /GoTo /D [713 0 R /XYZ 87.874 108.318 null] >> endobj 766 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 275.071 276.384 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 765 0 R /H /I >> endobj 767 0 obj << /Type /Action /S /GoTo /D [237 0 R /XYZ 53.858 121.325 null] >> endobj 768 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 249.071 188.804 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 769 0 obj << /Type /Action /S /GoTo /D [716 0 R /XYZ 53.858 702.225 null] >> endobj 770 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 210.071 276.384 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 769 0 R /H /I >> endobj 771 0 obj << /Type /Action /S /GoTo /D [186 0 R /XYZ 87.874 235.089 null] >> endobj 772 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 171.071 200.804 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 773 0 obj << /Type /Action /S /GoTo /D [64 0 R /XYZ 98.874 679.525 null] >> endobj 774 0 obj << /Type /Annot /Subtype /Link /Rect [ 241.834 158.071 247.394 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 773 0 R /H /I >> endobj 775 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 489.425 null] >> endobj 776 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.144 145.071 221.264 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 775 0 R /H /I >> endobj 777 0 obj << /Type /Action /S /GoTo /D [710 0 R /XYZ 53.858 310.55 null] >> endobj 778 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 106.071 274.164 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 779 0 obj << /Type /Action /S /GoTo /D [186 0 R /XYZ 87.874 670.128 null] >> endobj 780 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.934 80.071 241.054 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 779 0 R /H /I >> endobj 781 0 obj << /Type /Action /S /GoTo /D [186 0 R /XYZ 87.874 541.257 null] >> endobj 782 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.054 67.071 314.174 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 783 0 obj << /Type /Action /S /GoTo /D [499 0 R /XYZ 53.858 111.329 null] >> endobj 784 0 obj << /Type /Annot /Subtype /Link /Rect [ 426.588 707.175 437.708 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 783 0 R /H /I >> endobj 785 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 87.874 134.323 null] >> endobj 786 0 obj << /Type /Annot /Subtype /Link /Rect [ 481.048 694.175 492.168 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 785 0 R /H /I >> endobj 787 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 53.858 721.425 null] >> endobj 788 0 obj << /Type /Annot /Subtype /Link /Rect [ 425.828 681.175 436.948 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 787 0 R /H /I >> endobj 789 0 obj << /Type /Action /S /GoTo /D [231 0 R /XYZ 98.874 679.525 null] >> endobj 790 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.138 655.175 395.258 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 791 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 53.858 669.425 null] >> endobj 792 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.688 629.175 400.808 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 791 0 R /H /I >> endobj 793 0 obj << /Type /Annot /Subtype /Link /Rect [ 503.858 616.175 514.978 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 794 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.528 603.175 477.648 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 751 0 R /H /I >> endobj 795 0 obj << /Type /Annot /Subtype /Link /Rect [ 474.868 590.175 485.988 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 753 0 R /H /I >> endobj 796 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.298 577.175 480.418 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 755 0 R /H /I >> endobj 797 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.518 564.175 477.638 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 798 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.298 551.175 480.418 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 759 0 R /H /I >> endobj 799 0 obj << /Type /Annot /Subtype /Link /Rect [ 528.098 538.175 539.218 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 761 0 R /H /I >> endobj 800 0 obj << /Type /Action /S /GoTo /D [239 0 R /XYZ 87.874 570.825 null] >> endobj 801 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.708 525.175 440.828 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 800 0 R /H /I >> endobj 802 0 obj << /Type /Action /S /GoTo /D [239 0 R /XYZ 87.874 399.925 null] >> endobj 803 0 obj << /Type /Annot /Subtype /Link /Rect [ 408.598 499.175 419.718 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 804 0 obj << /Type /Action /S /GoTo /D [231 0 R /XYZ 87.874 255.546 null] >> endobj 805 0 obj << /Type /Annot /Subtype /Link /Rect [ 516.638 486.175 527.758 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 804 0 R /H /I >> endobj 806 0 obj << /Type /Action /S /GoTo /D [237 0 R /XYZ 53.858 533.397 null] >> endobj 807 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.828 473.175 496.948 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 806 0 R /H /I >> endobj 808 0 obj << /Type /Annot /Subtype /Link /Rect [ 500.518 460.175 511.638 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 785 0 R /H /I >> endobj 809 0 obj << /Type /Action /S /GoTo /D [199 0 R /XYZ 53.858 536.589 null] >> endobj 810 0 obj << /Type /Annot /Subtype /Link /Rect [ 486.068 447.175 497.188 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 809 0 R /H /I >> endobj 811 0 obj << /Type /Action /S /GoTo /D [199 0 R /XYZ 53.858 417.158 null] >> endobj 812 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 421.175 364.128 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 813 0 obj << /Type /Action /S /GoTo /D [199 0 R /XYZ 53.858 187.695 null] >> endobj 814 0 obj << /Type /Annot /Subtype /Link /Rect [ 474.388 408.175 485.508 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 813 0 R /H /I >> endobj 815 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.518 395.175 536.638 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 813 0 R /H /I >> endobj 816 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 87.874 683.464 null] >> endobj 817 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 369.175 364.128 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 816 0 R /H /I >> endobj 818 0 obj << /Type /Action /S /GoTo /D [199 0 R /XYZ 53.858 111.327 null] >> endobj 819 0 obj << /Type /Annot /Subtype /Link /Rect [ 391.918 356.175 403.038 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 820 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 330.175 364.128 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 821 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 87.874 392.974 null] >> endobj 822 0 obj << /Type /Annot /Subtype /Link /Rect [ 484.188 317.175 495.308 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 823 0 obj << /Type /Annot /Subtype /Link /Rect [ 489.758 304.175 500.878 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 824 0 obj << /Type /Action /S /GoTo /D [186 0 R /XYZ 87.874 297.186 null] >> endobj 825 0 obj << /Type /Annot /Subtype /Link /Rect [ 464.938 291.175 476.058 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 824 0 R /H /I >> endobj 826 0 obj << /Type /Annot /Subtype /Link /Rect [ 497.508 278.175 508.628 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 827 0 obj << /Type /Action /S /GoTo /D [199 0 R /XYZ 53.858 672.057 null] >> endobj 828 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.938 265.175 453.058 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 827 0 R /H /I >> endobj 829 0 obj << /Type /Annot /Subtype /Link /Rect [ 517.508 252.175 528.628 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 830 0 obj << /Type /Action /S /GoTo /D [499 0 R /XYZ 53.858 666.435 null] >> endobj 831 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.348 239.175 373.468 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 832 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.358 226.175 464.378 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 743 0 R /H /I >> endobj 833 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 200.175 429.938 209.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 779 0 R /H /I >> endobj 834 0 obj << /Type /Annot /Subtype /Link /Rect [ 544.188 187.175 555.308 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 835 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 161.175 441.938 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 836 0 obj << /Type /Action /S /GoTo /D [499 0 R /XYZ 53.858 603.245 null] >> endobj 837 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.348 122.175 397.468 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 838 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 83.175 441.938 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 839 0 obj << /Length 840 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 840 0 obj 2080 endobj 841 0 obj [ 746 0 R 748 0 R 750 0 R 752 0 R 754 0 R 756 0 R 758 0 R 760 0 R 762 0 R 764 0 R 766 0 R 768 0 R 770 0 R 772 0 R 774 0 R 776 0 R 778 0 R 780 0 R 782 0 R 784 0 R 786 0 R 788 0 R 790 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 801 0 R 803 0 R 805 0 R 807 0 R 808 0 R 810 0 R 812 0 R 814 0 R 815 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 833 0 R 834 0 R 835 0 R 837 0 R 838 0 R ] endobj 744 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 841 0 R /Contents 839 0 R >> endobj 842 0 obj << /S /r /St 4 >> endobj 843 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 707.175 191.267 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 424 0 R /H /I >> endobj 844 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.948 707.175 526.068 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 424 0 R /H /I >> endobj 845 0 obj << /Type /Action /S /GoTo /D [417 0 R /XYZ 87.874 647.1 null] >> endobj 846 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 694.175 135.207 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 845 0 R /H /I >> endobj 847 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.442 694.175 526.562 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 845 0 R /H /I >> endobj 848 0 obj << /Type /Action /S /GoTo /D [417 0 R /XYZ 87.874 579.606 null] >> endobj 849 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 681.175 207.301 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 848 0 R /H /I >> endobj 850 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.076 681.175 526.196 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 848 0 R /H /I >> endobj 851 0 obj << /Type /Action /S /GoTo /D [449 0 R /XYZ 87.874 555.3 null] >> endobj 852 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 668.175 353.853 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 851 0 R /H /I >> endobj 853 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.02 668.175 525.14 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 851 0 R /H /I >> endobj 854 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 631.5 null] >> endobj 855 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 655.175 303.588 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 854 0 R /H /I >> endobj 856 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.384 655.175 525.504 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 854 0 R /H /I >> endobj 857 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 117.4 null] >> endobj 858 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 642.175 240.223 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 857 0 R /H /I >> endobj 859 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.84 642.175 525.96 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 857 0 R /H /I >> endobj 860 0 obj << /Type /Action /S /GoTo /D [480 0 R /XYZ 53.858 596.9 null] >> endobj 861 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 629.175 329.412 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 860 0 R /H /I >> endobj 862 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.196 629.175 525.316 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 860 0 R /H /I >> endobj 863 0 obj << /Type /Action /S /GoTo /D [487 0 R /XYZ 87.874 118.106 null] >> endobj 864 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 616.175 118.035 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 863 0 R /H /I >> endobj 865 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.558 616.175 526.678 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 863 0 R /H /I >> endobj 866 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 603.175 296.431 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 867 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.434 603.175 525.554 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 868 0 obj << /Type /Action /S /GoTo /D [518 0 R /XYZ 53.858 628.1 null] >> endobj 869 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 590.175 340.825 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 868 0 R /H /I >> endobj 870 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.116 590.175 525.236 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 868 0 R /H /I >> endobj 871 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 219.266 null] >> endobj 872 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 577.175 223.721 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 871 0 R /H /I >> endobj 873 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.958 577.175 526.078 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 871 0 R /H /I >> endobj 874 0 obj << /Type /Action /S /GoTo /D [548 0 R /XYZ 53.858 503.3 null] >> endobj 875 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 564.175 250.433 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 874 0 R /H /I >> endobj 876 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.766 564.175 525.886 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 874 0 R /H /I >> endobj 877 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 551.175 301.814 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 567 0 R /H /I >> endobj 878 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.396 551.175 525.516 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 567 0 R /H /I >> endobj 879 0 obj << /Type /Action /S /GoTo /D [562 0 R /XYZ 53.858 534.938 null] >> endobj 880 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 538.175 297.725 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 879 0 R /H /I >> endobj 881 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.424 538.175 525.544 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 879 0 R /H /I >> endobj 882 0 obj << /Type /Action /S /GoTo /D [583 0 R /XYZ 87.874 700.9 null] >> endobj 883 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 525.175 276.408 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 882 0 R /H /I >> endobj 884 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.58 525.175 525.7 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 882 0 R /H /I >> endobj 885 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 557.228 null] >> endobj 886 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 512.175 134.659 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 885 0 R /H /I >> endobj 887 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.446 512.175 526.566 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 885 0 R /H /I >> endobj 888 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 502.338 null] >> endobj 889 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 499.175 266.887 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 888 0 R /H /I >> endobj 890 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.648 499.175 525.768 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 888 0 R /H /I >> endobj 891 0 obj << /Type /Action /S /GoTo /D [594 0 R /XYZ 87.874 378.046 null] >> endobj 892 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 486.175 216.578 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 891 0 R /H /I >> endobj 893 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.01 486.175 526.13 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 891 0 R /H /I >> endobj 894 0 obj << /Type /Action /S /GoTo /D [616 0 R /XYZ 53.858 225.761 null] >> endobj 895 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 473.175 358.14 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 894 0 R /H /I >> endobj 896 0 obj << /Type /Annot /Subtype /Link /Rect [ 513.99 473.175 525.11 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 894 0 R /H /I >> endobj 897 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 460.175 268.27 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 898 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.638 460.175 525.758 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 899 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 447.175 333.21 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 645 0 R /H /I >> endobj 900 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.168 447.175 525.288 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 645 0 R /H /I >> endobj 901 0 obj << /Type /Action /S /GoTo /D [652 0 R /XYZ 53.858 415.507 null] >> endobj 902 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 434.175 321.787 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 901 0 R /H /I >> endobj 903 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.252 434.175 525.372 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 901 0 R /H /I >> endobj 904 0 obj << /Type /Action /S /GoTo /D [679 0 R /XYZ 53.858 471.32 null] >> endobj 905 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 421.175 281.96 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 904 0 R /H /I >> endobj 906 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.448 421.175 525.568 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 904 0 R /H /I >> endobj 907 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 402.175 227.034 411.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 700 0 R /H /I >> endobj 908 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.72 402.175 525.84 411.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 700 0 R /H /I >> endobj 909 0 obj << /Type /Action /S /GoTo /D [698 0 R /XYZ 87.874 673.1 null] >> endobj 910 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 389.175 221.075 398.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 909 0 R /H /I >> endobj 911 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.862 389.175 525.982 398.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 909 0 R /H /I >> endobj 912 0 obj << /Type /Action /S /GoTo /D [713 0 R /XYZ 87.874 380.997 null] >> endobj 913 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 376.175 232.579 385.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 912 0 R /H /I >> endobj 914 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.784 376.175 525.904 385.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 912 0 R /H /I >> endobj 915 0 obj << /Type /Action /S /GoTo /D [730 0 R /XYZ 87.874 718.3 null] >> endobj 916 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 357.175 120.089 366.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 917 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.406 357.175 526.526 366.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 918 0 obj << /Type /Action /S /GoTo /D [739 0 R /XYZ 87.874 718.3 null] >> endobj 919 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 338.175 147.773 347.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 920 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.228 338.175 526.348 347.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 921 0 obj << /Type /Action /S /GoTo /D [744 0 R /XYZ 87.874 718.3 null] >> endobj 922 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 319.175 79.978 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 921 0 R /H /I >> endobj 923 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.664 319.175 526.784 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 921 0 R /H /I >> endobj 924 0 obj << /Length 925 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 925 0 obj 9277 endobj 926 0 obj [ 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 866 0 R 867 0 R 869 0 R 870 0 R 872 0 R 873 0 R 875 0 R 876 0 R 877 0 R 878 0 R 880 0 R 881 0 R 883 0 R 884 0 R 886 0 R 887 0 R 889 0 R 890 0 R 892 0 R 893 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 902 0 R 903 0 R 905 0 R 906 0 R 907 0 R 908 0 R 910 0 R 911 0 R 913 0 R 914 0 R 916 0 R 917 0 R 919 0 R 920 0 R 922 0 R 923 0 R ] endobj 927 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 926 0 R /Contents 924 0 R >> endobj 928 0 obj << /S /D /St 78 >> endobj 929 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.108 707.175 134.228 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 930 0 obj << /Type /Annot /Subtype /Link /Rect [ 162.898 694.175 174.018 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 931 0 obj << /Type /Action /S /GoTo /D [499 0 R /XYZ 53.858 424.161 null] >> endobj 932 0 obj << /Type /Annot /Subtype /Link /Rect [ 121.208 681.175 132.328 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 931 0 R /H /I >> endobj 933 0 obj << /Type /Annot /Subtype /Link /Rect [ 158.448 668.175 169.568 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 934 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.428 655.175 134.548 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 935 0 obj << /Type /Action /S /GoTo /D [499 0 R /XYZ 53.858 540.055 null] >> endobj 936 0 obj << /Type /Annot /Subtype /Link /Rect [ 112.318 642.175 123.438 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 935 0 R /H /I >> endobj 937 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.778 629.175 147.898 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 938 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 53.858 168.359 null] >> endobj 939 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 603.175 113.108 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 938 0 R /H /I >> endobj 940 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 71.858 81.323 null] >> endobj 941 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 549.623 113.108 558.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 940 0 R /H /I >> endobj 942 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 87.874 210.699 null] >> endobj 943 0 obj << /Type /Annot /Subtype /Link /Rect [ 88.308 523.623 93.868 532.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 944 0 obj << /Type /Annot /Subtype /Link /Rect [ 272.258 510.623 277.818 519.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 945 0 obj << /Type /Action /S /GoTo /D [594 0 R /XYZ 87.874 341.971 null] >> endobj 946 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 457.071 221.468 466.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 947 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 87.874 326.193 null] >> endobj 948 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.668 431.071 129.228 440.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 947 0 R /H /I >> endobj 949 0 obj << /Type /Action /S /GoTo /D [562 0 R /XYZ 53.858 498.863 null] >> endobj 950 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 405.071 221.468 414.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 949 0 R /H /I >> endobj 951 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.668 379.071 154.788 388.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 785 0 R /H /I >> endobj 952 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.678 366.071 161.798 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 787 0 R /H /I >> endobj 953 0 obj << /Type /Annot /Subtype /Link /Rect [ 108.988 340.071 120.108 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 954 0 obj << /Type /Annot /Subtype /Link /Rect [ 114.538 314.071 125.658 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 791 0 R /H /I >> endobj 955 0 obj << /Type /Action /S /GoTo /D [176 0 R /XYZ 87.874 263.681 null] >> endobj 956 0 obj << /Type /Annot /Subtype /Link /Rect [ 121.768 275.071 132.888 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 955 0 R /H /I >> endobj 957 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.658 249.071 147.218 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 958 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 53.858 721.425 null] >> endobj 959 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.108 210.071 146.228 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 958 0 R /H /I >> endobj 960 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.668 184.071 154.788 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 961 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.378 171.071 202.498 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 751 0 R /H /I >> endobj 962 0 obj << /Type /Annot /Subtype /Link /Rect [ 199.718 158.071 210.838 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 753 0 R /H /I >> endobj 963 0 obj << /Type /Annot /Subtype /Link /Rect [ 194.148 145.071 205.268 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 755 0 R /H /I >> endobj 964 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.368 132.071 202.488 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 965 0 obj << /Type /Annot /Subtype /Link /Rect [ 194.148 119.071 205.268 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 759 0 R /H /I >> endobj 966 0 obj << /Type /Annot /Subtype /Link /Rect [ 252.948 106.071 264.068 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 761 0 R /H /I >> endobj 967 0 obj << /Type /Annot /Subtype /Link /Rect [ 154.558 93.071 165.678 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 800 0 R /H /I >> endobj 968 0 obj << /Type /Annot /Subtype /Link /Rect [ 133.448 67.071 144.568 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 969 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 681.175 407.922 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 970 0 obj << /Type /Action /S /GoTo /D [176 0 R /XYZ 87.874 439.789 null] >> endobj 971 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.902 642.175 374.022 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 970 0 R /H /I >> endobj 972 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.802 616.175 395.922 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 804 0 R /H /I >> endobj 973 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.812 603.175 462.932 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 806 0 R /H /I >> endobj 974 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 53.858 495.579 null] >> endobj 975 0 obj << /Type /Annot /Subtype /Link /Rect [ 424.472 590.175 435.592 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 974 0 R /H /I >> endobj 976 0 obj << /Type /Action /S /GoTo /D [679 0 R /XYZ 53.858 432.355 null] >> endobj 977 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 551.175 462.602 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 976 0 R /H /I >> endobj 978 0 obj << /Type /Action /S /GoTo /D [716 0 R /XYZ 53.858 477.625 null] >> endobj 979 0 obj << /Type /Annot /Subtype /Link /Rect [ 472.382 512.175 483.502 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 980 0 obj << /Type /Annot /Subtype /Link /Rect [ 394.012 473.175 405.132 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 800 0 R /H /I >> endobj 981 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 466.173 null] >> endobj 982 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 447.175 462.602 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 981 0 R /H /I >> endobj 983 0 obj << /Type /Action /S /GoTo /D [618 0 R /XYZ 87.874 298.003 null] >> endobj 984 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 421.175 462.602 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 983 0 R /H /I >> endobj 985 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 105.874 285.323 null] >> endobj 986 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.572 395.175 363.692 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 985 0 R /H /I >> endobj 987 0 obj << /Type /Annot /Subtype /Link /Rect [ 370.002 382.175 375.562 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 988 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.372 356.175 380.932 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 763 0 R /H /I >> endobj 989 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 330.175 312.552 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 990 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 53.858 416.425 null] >> endobj 991 0 obj << /Type /Annot /Subtype /Link /Rect [ 460.162 304.175 465.722 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 990 0 R /H /I >> endobj 992 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 278.175 347.002 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 993 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 63.858 549.425 null] >> endobj 994 0 obj << /Type /Annot /Subtype /Link /Rect [ 365.902 265.175 371.462 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 993 0 R /H /I >> endobj 995 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 63.858 585.425 null] >> endobj 996 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.482 252.175 422.042 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 995 0 R /H /I >> endobj 997 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 63.858 477.425 null] >> endobj 998 0 obj << /Type /Annot /Subtype /Link /Rect [ 368.132 239.175 373.692 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 997 0 R /H /I >> endobj 999 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 63.858 513.425 null] >> endobj 1000 0 obj << /Type /Annot /Subtype /Link /Rect [ 372.572 226.175 378.132 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 999 0 R /H /I >> endobj 1001 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 105.874 183.323 null] >> endobj 1002 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.572 200.175 363.692 209.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1001 0 R /H /I >> endobj 1003 0 obj << /Type /Action /S /GoTo /D [507 0 R /XYZ 87.874 294.455 null] >> endobj 1004 0 obj << /Type /Annot /Subtype /Link /Rect [ 382.012 174.175 393.132 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1003 0 R /H /I >> endobj 1005 0 obj << /Type /Action /S /GoTo /D [532 0 R /XYZ 53.858 181.34 null] >> endobj 1006 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 148.175 462.602 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1005 0 R /H /I >> endobj 1007 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 109.175 407.922 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 816 0 R /H /I >> endobj 1008 0 obj << /Length 1009 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 1009 0 obj 2105 endobj 1010 0 obj [ 929 0 R 930 0 R 932 0 R 933 0 R 934 0 R 936 0 R 937 0 R 939 0 R 941 0 R 943 0 R 944 0 R 946 0 R 948 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 956 0 R 957 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 971 0 R 972 0 R 973 0 R 975 0 R 977 0 R 979 0 R 980 0 R 982 0 R 984 0 R 986 0 R 987 0 R 988 0 R 989 0 R 991 0 R 992 0 R 994 0 R 996 0 R 998 0 R 1000 0 R 1002 0 R 1004 0 R 1006 0 R 1007 0 R ] endobj 1011 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1010 0 R /Contents 1008 0 R >> endobj 1012 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 694.175 200.804 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 787 0 R /H /I >> endobj 1013 0 obj << /Type /Annot /Subtype /Link /Rect [ 239.054 681.175 244.614 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 773 0 R /H /I >> endobj 1014 0 obj << /Type /Action /S /GoTo /D [50 0 R /XYZ 53.858 568.549 null] >> endobj 1015 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.374 668.175 232.934 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1014 0 R /H /I >> endobj 1016 0 obj << /Type /Action /S /GoTo /D [616 0 R /XYZ 53.858 189.686 null] >> endobj 1017 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 642.175 255.484 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1018 0 obj << /Type /Action /S /GoTo /D [548 0 R /XYZ 53.858 467.225 null] >> endobj 1019 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 616.175 255.484 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1020 0 obj << /Type /Action /S /GoTo /D [556 0 R /XYZ 87.874 267.215 null] >> endobj 1021 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 590.175 255.484 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1020 0 R /H /I >> endobj 1022 0 obj << /Type /Action /S /GoTo /D [497 0 R /XYZ 53.858 702.225 null] >> endobj 1023 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.894 564.175 186.014 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1024 0 obj << /Type /Action /S /GoTo /D [713 0 R /XYZ 87.874 173.619 null] >> endobj 1025 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 525.175 276.384 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1026 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 87.874 596.353 null] >> endobj 1027 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.684 499.175 163.244 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1026 0 R /H /I >> endobj 1028 0 obj << /Type /Action /S /GoTo /D [698 0 R /XYZ 87.874 317.577 null] >> endobj 1029 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 431.071 274.164 440.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1030 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 392.071 200.804 401.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 827 0 R /H /I >> endobj 1031 0 obj << /Type /Action /S /GoTo /D [105 0 R /XYZ 105.874 684.425 null] >> endobj 1032 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 366.071 147.124 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1031 0 R /H /I >> endobj 1033 0 obj << /Type /Action /S /GoTo /D [698 0 R /XYZ 87.874 636.361 null] >> endobj 1034 0 obj << /Type /Annot /Subtype /Link /Rect [ 202.124 340.071 213.244 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1033 0 R /H /I >> endobj 1035 0 obj << /Type /Annot /Subtype /Link /Rect [ 283.064 327.071 294.184 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1036 0 obj << /Type /Action /S /GoTo /D [710 0 R /XYZ 53.858 552.195 null] >> endobj 1037 0 obj << /Type /Annot /Subtype /Link /Rect [ 295.834 314.071 306.954 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1036 0 R /H /I >> endobj 1038 0 obj << /Type /Action /S /GoTo /D [698 0 R /XYZ 87.874 546.097 null] >> endobj 1039 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.694 301.071 295.814 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1038 0 R /H /I >> endobj 1040 0 obj << /Type /Action /S /GoTo /D [698 0 R /XYZ 87.874 243.513 null] >> endobj 1041 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.234 288.071 176.354 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1040 0 R /H /I >> endobj 1042 0 obj << /Type /Annot /Subtype /Link /Rect [ 261.924 275.071 273.044 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1038 0 R /H /I >> endobj 1043 0 obj << /Type /Action /S /GoTo /D [713 0 R /XYZ 87.874 488.423 null] >> endobj 1044 0 obj << /Type /Annot /Subtype /Link /Rect [ 175.224 262.071 186.344 271.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1043 0 R /H /I >> endobj 1045 0 obj << /Type /Action /S /GoTo /D [713 0 R /XYZ 87.874 684.025 null] >> endobj 1046 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.824 249.071 236.944 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1045 0 R /H /I >> endobj 1047 0 obj << /Type /Annot /Subtype /Link /Rect [ 194.684 236.071 205.804 245.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 1048 0 obj << /Type /Action /S /GoTo /D [710 0 R /XYZ 53.858 121.32 null] >> endobj 1049 0 obj << /Type /Annot /Subtype /Link /Rect [ 188.564 223.071 199.684 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1048 0 R /H /I >> endobj 1050 0 obj << /Type /Action /S /GoTo /D [698 0 R /XYZ 87.874 133.785 null] >> endobj 1051 0 obj << /Type /Annot /Subtype /Link /Rect [ 236.914 210.071 248.034 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1050 0 R /H /I >> endobj 1052 0 obj << /Type /Action /S /GoTo /D [710 0 R /XYZ 53.858 420.765 null] >> endobj 1053 0 obj << /Type /Annot /Subtype /Link /Rect [ 221.924 197.071 233.044 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1052 0 R /H /I >> endobj 1054 0 obj << /Type /Action /S /GoTo /D [713 0 R /XYZ 87.874 579.724 null] >> endobj 1055 0 obj << /Type /Annot /Subtype /Link /Rect [ 280.824 184.071 291.944 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1054 0 R /H /I >> endobj 1056 0 obj << /Type /Action /S /GoTo /D [710 0 R /XYZ 53.858 644.21 null] >> endobj 1057 0 obj << /Type /Annot /Subtype /Link /Rect [ 243.044 171.071 254.164 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1056 0 R /H /I >> endobj 1058 0 obj << /Type /Action /S /GoTo /D [710 0 R /XYZ 53.858 218.535 null] >> endobj 1059 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.534 158.071 274.654 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1058 0 R /H /I >> endobj 1060 0 obj << /Type /Action /S /GoTo /D [713 0 R /XYZ 87.874 343.221 null] >> endobj 1061 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.454 145.071 221.574 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1060 0 R /H /I >> endobj 1062 0 obj << /Type /Annot /Subtype /Link /Rect [ 245.294 132.071 256.414 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 765 0 R /H /I >> endobj 1063 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.254 119.071 221.374 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 769 0 R /H /I >> endobj 1064 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.234 106.071 171.354 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 1065 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.454 93.071 183.574 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1066 0 obj << /Type /Action /S /GoTo /D [716 0 R /XYZ 53.858 556.825 null] >> endobj 1067 0 obj << /Type /Annot /Subtype /Link /Rect [ 223.024 80.071 234.144 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1066 0 R /H /I >> endobj 1068 0 obj << /Type /Action /S /GoTo /D [716 0 R /XYZ 53.858 636.025 null] >> endobj 1069 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.694 67.071 240.814 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1068 0 R /H /I >> endobj 1070 0 obj << /Type /Action /S /GoTo /D [713 0 R /XYZ 87.874 264.92 null] >> endobj 1071 0 obj << /Type /Annot /Subtype /Link /Rect [ 532.518 707.175 543.638 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1070 0 R /H /I >> endobj 1072 0 obj << /Type /Action /S /GoTo /D [716 0 R /XYZ 53.858 411.425 null] >> endobj 1073 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.958 694.175 478.078 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1072 0 R /H /I >> endobj 1074 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 583.1 null] >> endobj 1075 0 obj << /Type /Annot /Subtype /Link /Rect [ 518.838 668.175 529.958 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1074 0 R /H /I >> endobj 1076 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.058 642.175 452.178 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 938 0 R /H /I >> endobj 1077 0 obj << /Type /Annot /Subtype /Link /Rect [ 371.028 629.175 382.148 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 940 0 R /H /I >> endobj 1078 0 obj << /Type /Annot /Subtype /Link /Rect [ 363.248 616.175 374.368 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1031 0 R /H /I >> endobj 1079 0 obj << /Type /Action /S /GoTo /D [430 0 R /XYZ 87.874 355.947 null] >> endobj 1080 0 obj << /Type /Annot /Subtype /Link /Rect [ 376.028 590.175 387.148 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1079 0 R /H /I >> endobj 1081 0 obj << /Type /Action /S /GoTo /D [430 0 R /XYZ 87.874 469.566 null] >> endobj 1082 0 obj << /Type /Annot /Subtype /Link /Rect [ 398.258 577.175 409.378 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1081 0 R /H /I >> endobj 1083 0 obj << /Type /Action /S /GoTo /D [430 0 R /XYZ 105.874 164.319 null] >> endobj 1084 0 obj << /Type /Annot /Subtype /Link /Rect [ 460.378 564.175 471.498 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1083 0 R /H /I >> endobj 1085 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 71.858 514.611 null] >> endobj 1086 0 obj << /Type /Annot /Subtype /Link /Rect [ 456.478 551.175 467.598 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1085 0 R /H /I >> endobj 1087 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 71.858 424.611 null] >> endobj 1088 0 obj << /Type /Annot /Subtype /Link /Rect [ 425.908 538.175 437.028 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1087 0 R /H /I >> endobj 1089 0 obj << /Type /Action /S /GoTo /D [430 0 R /XYZ 87.874 405.575 null] >> endobj 1090 0 obj << /Type /Annot /Subtype /Link /Rect [ 435.498 525.175 446.618 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1089 0 R /H /I >> endobj 1091 0 obj << /Type /Action /S /GoTo /D [430 0 R /XYZ 105.874 305.319 null] >> endobj 1092 0 obj << /Type /Annot /Subtype /Link /Rect [ 431.578 512.175 442.698 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1091 0 R /H /I >> endobj 1093 0 obj << /Type /Action /S /GoTo /D [105 0 R /XYZ 105.874 633.425 null] >> endobj 1094 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.028 499.175 412.148 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1093 0 R /H /I >> endobj 1095 0 obj << /Type /Action /S /GoTo /D [260 0 R /XYZ 87.874 450.059 null] >> endobj 1096 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.028 486.175 407.148 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1095 0 R /H /I >> endobj 1097 0 obj << /Type /Action /S /GoTo /D [430 0 R /XYZ 105.874 228.319 null] >> endobj 1098 0 obj << /Type /Annot /Subtype /Link /Rect [ 422.158 473.175 433.278 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1097 0 R /H /I >> endobj 1099 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 71.858 721.425 null] >> endobj 1100 0 obj << /Type /Annot /Subtype /Link /Rect [ 388.238 460.175 399.358 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1099 0 R /H /I >> endobj 1101 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 635.1 null] >> endobj 1102 0 obj << /Type /Annot /Subtype /Link /Rect [ 424.618 447.175 435.738 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1101 0 R /H /I >> endobj 1103 0 obj << /Type /Annot /Subtype /Link /Rect [ 408.478 434.175 419.598 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1099 0 R /H /I >> endobj 1104 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.348 395.175 397.468 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 931 0 R /H /I >> endobj 1105 0 obj << /Type /Action /S /GoTo /D [616 0 R /XYZ 53.858 653.02 null] >> endobj 1106 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 369.175 496.618 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1105 0 R /H /I >> endobj 1107 0 obj << /Type /Annot /Subtype /Link /Rect [ 377.138 330.175 388.258 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1079 0 R /H /I >> endobj 1108 0 obj << /Type /Action /S /GoTo /D [417 0 R /XYZ 87.874 687.1 null] >> endobj 1109 0 obj << /Type /Annot /Subtype /Link /Rect [ 473.498 317.175 484.618 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1110 0 obj << /Type /Annot /Subtype /Link /Rect [ 422.708 304.175 433.828 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 1111 0 obj << /Type /Annot /Subtype /Link /Rect [ 390.458 291.175 401.578 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 983 0 R /H /I >> endobj 1112 0 obj << /Type /Annot /Subtype /Link /Rect [ 461.608 278.175 472.728 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1003 0 R /H /I >> endobj 1113 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.008 252.175 352.128 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1114 0 obj << /Type /Annot /Subtype /Link /Rect [ 498.838 239.175 509.958 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1020 0 R /H /I >> endobj 1115 0 obj << /Type /Action /S /GoTo /D [679 0 R /XYZ 53.858 369.065 null] >> endobj 1116 0 obj << /Type /Annot /Subtype /Link /Rect [ 449.388 226.175 460.508 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1115 0 R /H /I >> endobj 1117 0 obj << /Type /Action /S /GoTo /D [679 0 R /XYZ 53.858 292.775 null] >> endobj 1118 0 obj << /Type /Annot /Subtype /Link /Rect [ 420.478 213.175 431.598 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1117 0 R /H /I >> endobj 1119 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.038 187.175 412.158 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 976 0 R /H /I >> endobj 1120 0 obj << /Type /Action /S /GoTo /D [439 0 R /XYZ 53.858 629.859 null] >> endobj 1121 0 obj << /Type /Annot /Subtype /Link /Rect [ 511.638 174.175 522.758 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1122 0 obj << /Type /Action /S /GoTo /D [556 0 R /XYZ 87.874 81.315 null] >> endobj 1123 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.708 161.175 418.828 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1122 0 R /H /I >> endobj 1124 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.418 148.175 515.538 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 949 0 R /H /I >> endobj 1125 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.048 135.175 452.168 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1126 0 obj << /Type /Action /S /GoTo /D [583 0 R /XYZ 87.874 664.825 null] >> endobj 1127 0 obj << /Type /Annot /Subtype /Link /Rect [ 457.158 122.175 468.278 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1126 0 R /H /I >> endobj 1128 0 obj << /Type /Action /S /GoTo /D [518 0 R /XYZ 53.858 592.025 null] >> endobj 1129 0 obj << /Type /Annot /Subtype /Link /Rect [ 431.038 109.175 442.158 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1130 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 593.811 null] >> endobj 1131 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.958 96.175 526.078 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1130 0 R /H /I >> endobj 1132 0 obj << /Type /Action /S /GoTo /D [630 0 R /XYZ 53.858 540.025 null] >> endobj 1133 0 obj << /Type /Annot /Subtype /Link /Rect [ 480.508 83.175 491.628 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1132 0 R /H /I >> endobj 1134 0 obj << /Type /Action /S /GoTo /D [556 0 R /XYZ 87.874 486.032 null] >> endobj 1135 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.408 70.175 515.528 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1134 0 R /H /I >> endobj 1136 0 obj << /Length 1137 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 1137 0 obj 2521 endobj 1138 0 obj [ 1012 0 R 1013 0 R 1015 0 R 1017 0 R 1019 0 R 1021 0 R 1023 0 R 1025 0 R 1027 0 R 1029 0 R 1030 0 R 1032 0 R 1034 0 R 1035 0 R 1037 0 R 1039 0 R 1041 0 R 1042 0 R 1044 0 R 1046 0 R 1047 0 R 1049 0 R 1051 0 R 1053 0 R 1055 0 R 1057 0 R 1059 0 R 1061 0 R 1062 0 R 1063 0 R 1064 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 1078 0 R 1080 0 R 1082 0 R 1084 0 R 1086 0 R 1088 0 R 1090 0 R 1092 0 R 1094 0 R 1096 0 R 1098 0 R 1100 0 R 1102 0 R 1103 0 R 1104 0 R 1106 0 R 1107 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1116 0 R 1118 0 R 1119 0 R 1121 0 R 1123 0 R 1124 0 R 1125 0 R 1127 0 R 1129 0 R 1131 0 R 1133 0 R 1135 0 R ] endobj 1139 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1138 0 R /Contents 1136 0 R >> endobj 1140 0 obj << /Type /Action /S /GoTo /D [654 0 R /XYZ 87.874 618.249 null] >> endobj 1141 0 obj << /Type /Annot /Subtype /Link /Rect [ 175.328 707.175 186.448 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1140 0 R /H /I >> endobj 1142 0 obj << /Type /Action /S /GoTo /D [652 0 R /XYZ 53.858 379.432 null] >> endobj 1143 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 681.175 76.978 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1142 0 R /H /I >> endobj 1144 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 81.325 null] >> endobj 1145 0 obj << /Type /Annot /Subtype /Link /Rect [ 178.118 668.175 189.238 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1144 0 R /H /I >> endobj 1146 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 642.175 76.978 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1105 0 R /H /I >> endobj 1147 0 obj << /Type /Action /S /GoTo /D [449 0 R /XYZ 87.874 519.225 null] >> endobj 1148 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.928 629.175 237.048 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1147 0 R /H /I >> endobj 1149 0 obj << /Type /Action /S /GoTo /D [417 0 R /XYZ 87.874 543.837 null] >> endobj 1150 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.218 616.175 155.338 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1151 0 obj << /Type /Action /S /GoTo /D [480 0 R /XYZ 53.858 560.825 null] >> endobj 1152 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.898 616.175 172.018 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1151 0 R /H /I >> endobj 1153 0 obj << /Type /Action /S /GoTo /D [556 0 R /XYZ 87.874 184.215 null] >> endobj 1154 0 obj << /Type /Annot /Subtype /Link /Rect [ 103.088 590.175 114.208 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1153 0 R /H /I >> endobj 1155 0 obj << /Type /Action /S /GoTo /D [548 0 R /XYZ 53.858 172.092 null] >> endobj 1156 0 obj << /Type /Annot /Subtype /Link /Rect [ 253.708 577.175 264.828 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1157 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.998 564.175 203.118 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1158 0 obj << /Type /Annot /Subtype /Link /Rect [ 163.118 551.175 174.238 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 981 0 R /H /I >> endobj 1159 0 obj << /Type /Action /S /GoTo /D [616 0 R /XYZ 53.858 543.615 null] >> endobj 1160 0 obj << /Type /Annot /Subtype /Link /Rect [ 207.038 538.175 218.158 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1159 0 R /H /I >> endobj 1161 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 121.322 null] >> endobj 1162 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.218 525.175 195.338 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1161 0 R /H /I >> endobj 1163 0 obj << /Type /Action /S /GoTo /D [640 0 R /XYZ 53.858 357.825 null] >> endobj 1164 0 obj << /Type /Annot /Subtype /Link /Rect [ 175.888 512.175 187.008 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1163 0 R /H /I >> endobj 1165 0 obj << /Type /Action /S /GoTo /D [652 0 R /XYZ 53.858 721.425 null] >> endobj 1166 0 obj << /Type /Annot /Subtype /Link /Rect [ 192.568 512.175 203.688 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1165 0 R /H /I >> endobj 1167 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 486.175 76.978 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1147 0 R /H /I >> endobj 1168 0 obj << /Type /Annot /Subtype /Link /Rect [ 173.118 473.175 184.238 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1005 0 R /H /I >> endobj 1169 0 obj << /Type /Action /S /GoTo /D [616 0 R /XYZ 53.858 616.615 null] >> endobj 1170 0 obj << /Type /Annot /Subtype /Link /Rect [ 137.558 460.175 148.678 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1169 0 R /H /I >> endobj 1171 0 obj << /Type /Action /S /GoTo /D [548 0 R /XYZ 53.858 121.322 null] >> endobj 1172 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.218 447.175 160.338 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1171 0 R /H /I >> endobj 1173 0 obj << /Type /Annot /Subtype /Link /Rect [ 116.988 421.175 128.108 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1174 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 382.175 242.368 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1066 0 R /H /I >> endobj 1175 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 343.175 242.368 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1068 0 R /H /I >> endobj 1176 0 obj << /Type /Action /S /GoTo /D [117 0 R /XYZ 64.858 595.325 null] >> endobj 1177 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.438 317.175 122.558 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1176 0 R /H /I >> endobj 1178 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 278.175 240.148 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1036 0 R /H /I >> endobj 1179 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 239.175 166.788 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 1180 0 obj << /Type /Action /S /GoTo /D [34 0 R /XYZ 87.874 171.32 null] >> endobj 1181 0 obj << /Type /Annot /Subtype /Link /Rect [ 224.258 184.071 233.698 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1180 0 R /H /I >> endobj 1182 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 158.071 221.468 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 949 0 R /H /I >> endobj 1183 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 132.071 221.468 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1020 0 R /H /I >> endobj 1184 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 106.071 221.468 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1134 0 R /H /I >> endobj 1185 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 87.874 491.551 null] >> endobj 1186 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.338 93.071 153.898 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1185 0 R /H /I >> endobj 1187 0 obj << /Type /Action /S /GoTo /D [68 0 R /XYZ 53.858 644.525 null] >> endobj 1188 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.988 80.071 123.108 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1187 0 R /H /I >> endobj 1189 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 87.874 374.303 null] >> endobj 1190 0 obj << /Type /Annot /Subtype /Link /Rect [ 146.428 67.071 151.988 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1189 0 R /H /I >> endobj 1191 0 obj << /Type /Action /S /GoTo /D [176 0 R /XYZ 105.874 633.461 null] >> endobj 1192 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.902 681.175 374.022 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1193 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 642.175 407.922 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 1194 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.332 603.175 363.452 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 935 0 R /H /I >> endobj 1195 0 obj << /Type /Action /S /GoTo /D [117 0 R /XYZ 64.858 286.853 null] >> endobj 1196 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 577.175 352.562 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1195 0 R /H /I >> endobj 1197 0 obj << /Type /Action /S /GoTo /D [145 0 R /XYZ 87.874 147.324 null] >> endobj 1198 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.902 551.175 374.022 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1197 0 R /H /I >> endobj 1199 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 53.858 409.601 null] >> endobj 1200 0 obj << /Type /Annot /Subtype /Link /Rect [ 376.242 525.175 387.362 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1199 0 R /H /I >> endobj 1201 0 obj << /Type /Action /S /GoTo /D [117 0 R /XYZ 53.858 381.753 null] >> endobj 1202 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 499.175 352.562 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1201 0 R /H /I >> endobj 1203 0 obj << /Type /Action /S /GoTo /D [117 0 R /XYZ 53.858 430.272 null] >> endobj 1204 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 473.175 352.562 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1203 0 R /H /I >> endobj 1205 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 434.175 481.282 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1052 0 R /H /I >> endobj 1206 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 408.175 462.602 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 1207 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 382.175 462.602 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 981 0 R /H /I >> endobj 1208 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 87.874 487.373 null] >> endobj 1209 0 obj << /Type /Annot /Subtype /Link /Rect [ 340.572 369.175 351.692 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1208 0 R /H /I >> endobj 1210 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.332 356.175 346.452 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 985 0 R /H /I >> endobj 1211 0 obj << /Type /Annot /Subtype /Link /Rect [ 343.102 343.175 354.222 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1001 0 R /H /I >> endobj 1212 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 105.874 234.323 null] >> endobj 1213 0 obj << /Type /Annot /Subtype /Link /Rect [ 387.022 330.175 398.142 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1214 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 105.874 132.323 null] >> endobj 1215 0 obj << /Type /Annot /Subtype /Link /Rect [ 330.332 317.175 341.452 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1214 0 R /H /I >> endobj 1216 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 53.858 141.328 null] >> endobj 1217 0 obj << /Type /Annot /Subtype /Link /Rect [ 376.242 291.175 387.362 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1216 0 R /H /I >> endobj 1218 0 obj << /Type /Action /S /GoTo /D [145 0 R /XYZ 105.874 584.425 null] >> endobj 1219 0 obj << /Type /Annot /Subtype /Link /Rect [ 344.782 278.175 355.902 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1220 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 105.874 81.323 null] >> endobj 1221 0 obj << /Type /Annot /Subtype /Link /Rect [ 380.362 265.175 391.482 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1220 0 R /H /I >> endobj 1222 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 105.874 387.323 null] >> endobj 1223 0 obj << /Type /Annot /Subtype /Link /Rect [ 329.772 252.175 340.892 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1222 0 R /H /I >> endobj 1224 0 obj << /Type /Annot /Subtype /Link /Rect [ 346.452 252.175 357.572 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1222 0 R /H /I >> endobj 1225 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 105.874 336.323 null] >> endobj 1226 0 obj << /Type /Annot /Subtype /Link /Rect [ 332.552 239.175 343.672 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1225 0 R /H /I >> endobj 1227 0 obj << /Type /Annot /Subtype /Link /Rect [ 334.772 213.175 345.892 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1176 0 R /H /I >> endobj 1228 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 187.175 462.602 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1147 0 R /H /I >> endobj 1229 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 161.175 462.602 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1115 0 R /H /I >> endobj 1230 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 135.175 462.602 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1115 0 R /H /I >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 109.175 462.602 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1115 0 R /H /I >> endobj 1232 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 83.175 462.602 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1117 0 R /H /I >> endobj 1233 0 obj << /Length 1234 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 1234 0 obj 2158 endobj 1235 0 obj [ 1141 0 R 1143 0 R 1145 0 R 1146 0 R 1148 0 R 1150 0 R 1152 0 R 1154 0 R 1156 0 R 1157 0 R 1158 0 R 1160 0 R 1162 0 R 1164 0 R 1166 0 R 1167 0 R 1168 0 R 1170 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1177 0 R 1178 0 R 1179 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1186 0 R 1188 0 R 1190 0 R 1192 0 R 1193 0 R 1194 0 R 1196 0 R 1198 0 R 1200 0 R 1202 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1209 0 R 1210 0 R 1211 0 R 1213 0 R 1215 0 R 1217 0 R 1219 0 R 1221 0 R 1223 0 R 1224 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R ] endobj 1236 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1235 0 R /Contents 1233 0 R >> endobj 1237 0 obj << /Type /Annot /Subtype /Link /Rect [ 145.454 675.455 156.574 684.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1238 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 53.858 721.425 null] >> endobj 1239 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 636.455 166.904 645.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1238 0 R /H /I >> endobj 1240 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.684 610.455 163.244 619.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1026 0 R /H /I >> endobj 1241 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 571.455 274.164 580.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1038 0 R /H /I >> endobj 1242 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 532.455 274.164 541.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1040 0 R /H /I >> endobj 1243 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.584 488.735 180.704 497.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1208 0 R /H /I >> endobj 1244 0 obj << /Type /Action /S /GoTo /D [170 0 R /XYZ 53.858 654.425 null] >> endobj 1245 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.924 462.735 216.044 471.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1244 0 R /H /I >> endobj 1246 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.254 449.735 221.374 458.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 970 0 R /H /I >> endobj 1247 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 436.735 166.904 445.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1248 0 obj << /Type /Action /S /GoTo /D [170 0 R /XYZ 71.858 555.173 null] >> endobj 1249 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.554 423.735 154.674 432.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1248 0 R /H /I >> endobj 1250 0 obj << /Type /Action /S /GoTo /D [170 0 R /XYZ 71.858 122.345 null] >> endobj 1251 0 obj << /Type /Annot /Subtype /Link /Rect [ 166.894 410.735 178.014 419.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1250 0 R /H /I >> endobj 1252 0 obj << /Type /Action /S /GoTo /D [105 0 R /XYZ 87.874 187.698 null] >> endobj 1253 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.124 397.735 168.244 406.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1252 0 R /H /I >> endobj 1254 0 obj << /Type /Action /S /GoTo /D [145 0 R /XYZ 87.874 252.919 null] >> endobj 1255 0 obj << /Type /Annot /Subtype /Link /Rect [ 240.484 384.735 251.604 393.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1256 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.244 371.735 241.364 380.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 955 0 R /H /I >> endobj 1257 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.114 358.735 155.234 367.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1238 0 R /H /I >> endobj 1258 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.914 345.735 208.034 354.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1259 0 obj << /Type /Action /S /GoTo /D [499 0 R /XYZ 53.858 721.425 null] >> endobj 1260 0 obj << /Type /Annot /Subtype /Link /Rect [ 195.804 332.735 206.924 341.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1259 0 R /H /I >> endobj 1261 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.444 319.735 168.564 328.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1197 0 R /H /I >> endobj 1262 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 53.858 243.119 null] >> endobj 1263 0 obj << /Type /Annot /Subtype /Link /Rect [ 173.794 306.735 184.914 315.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1262 0 R /H /I >> endobj 1264 0 obj << /Type /Annot /Subtype /Link /Rect [ 183.484 293.735 194.604 302.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1101 0 R /H /I >> endobj 1265 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.124 267.735 180.244 276.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 958 0 R /H /I >> endobj 1266 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.894 241.735 186.014 250.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1267 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 66.638 549.425 null] >> endobj 1268 0 obj << /Type /Annot /Subtype /Link /Rect [ 201.014 215.735 206.574 224.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1267 0 R /H /I >> endobj 1269 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.684 176.735 180.244 185.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 990 0 R /H /I >> endobj 1270 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 120.015 255.484 129.265 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1126 0 R /H /I >> endobj 1271 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 94.015 255.484 103.265 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1272 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 68.015 255.484 77.265 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1273 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.028 694.175 427.148 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1274 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 655.175 515.298 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1050 0 R /H /I >> endobj 1275 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 616.175 496.618 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 976 0 R /H /I >> endobj 1276 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.028 590.175 427.148 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1277 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.918 551.175 408.038 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1248 0 R /H /I >> endobj 1278 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 525.175 496.618 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1279 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 499.175 429.938 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 804 0 R /H /I >> endobj 1280 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 473.175 496.618 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1130 0 R /H /I >> endobj 1281 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 447.175 496.618 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 1282 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 421.175 429.938 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 809 0 R /H /I >> endobj 1283 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 395.175 364.128 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 1284 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.348 356.175 397.468 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 1285 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 87.874 592.583 null] >> endobj 1286 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.588 343.175 395.148 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1285 0 R /H /I >> endobj 1287 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 317.175 496.618 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1122 0 R /H /I >> endobj 1288 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.588 291.175 407.148 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1285 0 R /H /I >> endobj 1289 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 87.874 147.125 null] >> endobj 1290 0 obj << /Type /Annot /Subtype /Link /Rect [ 471.618 278.175 477.178 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1289 0 R /H /I >> endobj 1291 0 obj << /Type /Annot /Subtype /Link /Rect [ 483.288 265.175 488.848 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1014 0 R /H /I >> endobj 1292 0 obj << /Type /Annot /Subtype /Link /Rect [ 428.828 252.175 434.388 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1289 0 R /H /I >> endobj 1293 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 87.874 619.425 null] >> endobj 1294 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.738 239.175 448.298 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1293 0 R /H /I >> endobj 1295 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 87.874 392.325 null] >> endobj 1296 0 obj << /Type /Annot /Subtype /Link /Rect [ 432.718 226.175 438.278 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1295 0 R /H /I >> endobj 1297 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.388 213.175 474.948 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1295 0 R /H /I >> endobj 1298 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 66.638 585.425 null] >> endobj 1299 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.148 187.175 447.708 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1298 0 R /H /I >> endobj 1300 0 obj << /Type /Annot /Subtype /Link /Rect [ 369.028 161.175 374.588 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 1301 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 122.175 441.938 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 1302 0 obj << /Type /Annot /Subtype /Link /Rect [ 460.498 96.175 466.058 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 947 0 R /H /I >> endobj 1303 0 obj << /Type /Annot /Subtype /Link /Rect [ 438.838 83.175 444.398 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1026 0 R /H /I >> endobj 1304 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.618 70.175 447.178 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1026 0 R /H /I >> endobj 1305 0 obj << /Length 1306 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 1306 0 obj 2109 endobj 1307 0 obj [ 1237 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1245 0 R 1246 0 R 1247 0 R 1249 0 R 1251 0 R 1253 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1260 0 R 1261 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1286 0 R 1287 0 R 1288 0 R 1290 0 R 1291 0 R 1292 0 R 1294 0 R 1296 0 R 1297 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R ] endobj 1308 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1307 0 R /Contents 1305 0 R >> endobj 1309 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 87.874 108.321 null] >> endobj 1310 0 obj << /Type /Annot /Subtype /Link /Rect [ 180.338 707.175 185.898 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1309 0 R /H /I >> endobj 1311 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 87.874 687.1 null] >> endobj 1312 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.008 694.175 182.568 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1311 0 R /H /I >> endobj 1313 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 655.175 242.368 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1314 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 616.175 240.148 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1038 0 R /H /I >> endobj 1315 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 577.175 166.788 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 1316 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 524.14 221.468 533.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1317 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.468 511.14 190.028 520.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1289 0 R /H /I >> endobj 1318 0 obj << /Type /Annot /Subtype /Link /Rect [ 275.038 498.14 280.598 507.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 1319 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.138 485.14 201.698 494.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1014 0 R /H /I >> endobj 1320 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 459.14 113.108 468.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1083 0 R /H /I >> endobj 1321 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 433.14 113.108 442.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1085 0 R /H /I >> endobj 1322 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.198 394.14 122.318 403.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 1323 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 328.105 240.148 337.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1043 0 R /H /I >> endobj 1324 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.668 302.105 129.228 311.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1309 0 R /H /I >> endobj 1325 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 263.105 166.788 272.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 1326 0 obj << /Type /Action /S /GoTo /D [145 0 R /XYZ 105.874 648.425 null] >> endobj 1327 0 obj << /Type /Annot /Subtype /Link /Rect [ 96.428 237.105 107.548 246.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1326 0 R /H /I >> endobj 1328 0 obj << /Type /Annot /Subtype /Link /Rect [ 113.438 211.105 124.558 220.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 745 0 R /H /I >> endobj 1329 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.098 198.105 126.218 207.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 1330 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.778 198.105 142.898 207.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 749 0 R /H /I >> endobj 1331 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 132.07 242.368 141.32 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1066 0 R /H /I >> endobj 1332 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 93.07 242.368 102.32 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1068 0 R /H /I >> endobj 1333 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 707.175 407.922 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 806 0 R /H /I >> endobj 1334 0 obj << /Type /Annot /Subtype /Link /Rect [ 343.122 681.175 354.242 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1087 0 R /H /I >> endobj 1335 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 655.175 462.602 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 949 0 R /H /I >> endobj 1336 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 629.175 462.602 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1005 0 R /H /I >> endobj 1337 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 603.175 462.602 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1338 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 577.175 462.602 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1126 0 R /H /I >> endobj 1339 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 551.175 462.602 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1340 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 525.175 462.602 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1130 0 R /H /I >> endobj 1341 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 499.175 462.602 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1132 0 R /H /I >> endobj 1342 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 473.175 462.602 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1134 0 R /H /I >> endobj 1343 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 447.175 462.602 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1140 0 R /H /I >> endobj 1344 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 421.175 462.602 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1142 0 R /H /I >> endobj 1345 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 395.175 462.602 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1144 0 R /H /I >> endobj 1346 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 356.175 407.922 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 1347 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 330.175 462.602 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1105 0 R /H /I >> endobj 1348 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.802 304.175 395.922 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 813 0 R /H /I >> endobj 1349 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.902 249.071 387.022 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1326 0 R /H /I >> endobj 1350 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 223.071 462.602 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1147 0 R /H /I >> endobj 1351 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 197.071 462.602 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1352 0 obj << /Type /Annot /Subtype /Link /Rect [ 468.162 197.071 479.282 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1151 0 R /H /I >> endobj 1353 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 171.071 462.602 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1147 0 R /H /I >> endobj 1354 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 145.071 462.602 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1355 0 obj << /Type /Annot /Subtype /Link /Rect [ 468.162 145.071 479.282 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1151 0 R /H /I >> endobj 1356 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 106.071 481.282 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1045 0 R /H /I >> endobj 1357 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 67.071 481.282 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 1358 0 obj << /Length 1359 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 1359 0 obj 1961 endobj 1360 0 obj [ 1310 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 1327 0 R 1328 0 R 1329 0 R 1330 0 R 1331 0 R 1332 0 R 1333 0 R 1334 0 R 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 ] endobj 1361 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1360 0 R /Contents 1358 0 R >> endobj 1362 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 681.175 276.384 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1070 0 R /H /I >> endobj 1363 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.054 613.071 314.174 622.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 1364 0 obj << /Type /Annot /Subtype /Link /Rect [ 185.454 600.071 196.574 609.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 783 0 R /H /I >> endobj 1365 0 obj << /Type /Annot /Subtype /Link /Rect [ 239.914 587.071 251.034 596.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 785 0 R /H /I >> endobj 1366 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.694 574.071 195.814 583.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 787 0 R /H /I >> endobj 1367 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.004 548.071 154.124 557.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 789 0 R /H /I >> endobj 1368 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.554 522.071 159.674 531.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 791 0 R /H /I >> endobj 1369 0 obj << /Type /Annot /Subtype /Link /Rect [ 262.724 509.071 273.844 518.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 1370 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.394 496.071 236.514 505.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 751 0 R /H /I >> endobj 1371 0 obj << /Type /Annot /Subtype /Link /Rect [ 233.734 483.071 244.854 492.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 753 0 R /H /I >> endobj 1372 0 obj << /Type /Annot /Subtype /Link /Rect [ 228.164 470.071 239.284 479.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 755 0 R /H /I >> endobj 1373 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.384 457.071 236.504 466.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 1374 0 obj << /Type /Annot /Subtype /Link /Rect [ 228.164 444.071 239.284 453.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 759 0 R /H /I >> endobj 1375 0 obj << /Type /Annot /Subtype /Link /Rect [ 286.964 431.071 298.084 440.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 761 0 R /H /I >> endobj 1376 0 obj << /Type /Annot /Subtype /Link /Rect [ 188.574 418.071 199.694 427.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 800 0 R /H /I >> endobj 1377 0 obj << /Type /Annot /Subtype /Link /Rect [ 167.464 392.071 178.584 401.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 1378 0 obj << /Type /Annot /Subtype /Link /Rect [ 275.504 379.071 286.624 388.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 804 0 R /H /I >> endobj 1379 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.694 366.071 255.814 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 806 0 R /H /I >> endobj 1380 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.384 353.071 270.504 362.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 785 0 R /H /I >> endobj 1381 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.934 340.071 256.054 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 809 0 R /H /I >> endobj 1382 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 314.071 122.994 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 1383 0 obj << /Type /Annot /Subtype /Link /Rect [ 233.254 301.071 244.374 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 813 0 R /H /I >> endobj 1384 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.384 288.071 295.504 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 813 0 R /H /I >> endobj 1385 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 262.071 122.994 271.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 816 0 R /H /I >> endobj 1386 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.784 249.071 161.904 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 1387 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 223.071 122.994 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 1388 0 obj << /Type /Annot /Subtype /Link /Rect [ 243.054 210.071 254.174 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 1389 0 obj << /Type /Annot /Subtype /Link /Rect [ 248.624 197.071 259.744 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 1390 0 obj << /Type /Annot /Subtype /Link /Rect [ 223.804 184.071 234.924 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 824 0 R /H /I >> endobj 1391 0 obj << /Type /Annot /Subtype /Link /Rect [ 256.374 171.071 267.494 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 1392 0 obj << /Type /Annot /Subtype /Link /Rect [ 200.804 158.071 211.924 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 827 0 R /H /I >> endobj 1393 0 obj << /Type /Annot /Subtype /Link /Rect [ 276.374 145.071 287.494 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 1394 0 obj << /Type /Action /S /GoTo /D [706 0 R /XYZ 53.858 339.045 null] >> endobj 1395 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.334 119.071 139.894 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1394 0 R /H /I >> endobj 1396 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 80.071 200.804 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 1397 0 obj << /Type /Annot /Subtype /Link /Rect [ 506.398 694.175 517.518 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 769 0 R /H /I >> endobj 1398 0 obj << /Type /Annot /Subtype /Link /Rect [ 498.528 652.071 504.088 661.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1289 0 R /H /I >> endobj 1399 0 obj << /Type /Annot /Subtype /Link /Rect [ 492.178 626.071 503.298 635.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1033 0 R /H /I >> endobj 1400 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.198 613.071 535.318 622.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1401 0 obj << /Type /Annot /Subtype /Link /Rect [ 536.968 600.071 548.088 609.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1036 0 R /H /I >> endobj 1402 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.828 587.071 536.948 596.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1038 0 R /H /I >> endobj 1403 0 obj << /Type /Annot /Subtype /Link /Rect [ 406.368 574.071 417.488 583.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1040 0 R /H /I >> endobj 1404 0 obj << /Type /Annot /Subtype /Link /Rect [ 503.058 561.071 514.178 570.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1038 0 R /H /I >> endobj 1405 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.358 548.071 427.478 557.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1043 0 R /H /I >> endobj 1406 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.958 535.071 478.078 544.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1045 0 R /H /I >> endobj 1407 0 obj << /Type /Annot /Subtype /Link /Rect [ 435.818 522.071 446.938 531.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 1408 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.698 509.071 440.818 518.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1048 0 R /H /I >> endobj 1409 0 obj << /Type /Annot /Subtype /Link /Rect [ 478.048 496.071 489.168 505.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1050 0 R /H /I >> endobj 1410 0 obj << /Type /Annot /Subtype /Link /Rect [ 463.058 483.071 474.178 492.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1052 0 R /H /I >> endobj 1411 0 obj << /Type /Annot /Subtype /Link /Rect [ 521.958 470.071 533.078 479.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1054 0 R /H /I >> endobj 1412 0 obj << /Type /Annot /Subtype /Link /Rect [ 484.178 457.071 495.298 466.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1056 0 R /H /I >> endobj 1413 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.668 444.071 515.788 453.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1058 0 R /H /I >> endobj 1414 0 obj << /Type /Annot /Subtype /Link /Rect [ 398.818 418.071 404.378 427.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1311 0 R /H /I >> endobj 1415 0 obj << /Type /Annot /Subtype /Link /Rect [ 506.398 379.071 517.518 388.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1072 0 R /H /I >> endobj 1416 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 353.071 496.618 362.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1132 0 R /H /I >> endobj 1417 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.588 327.071 397.708 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1214 0 R /H /I >> endobj 1418 0 obj << /Type /Annot /Subtype /Link /Rect [ 419.918 301.071 431.038 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1201 0 R /H /I >> endobj 1419 0 obj << /Type /Action /S /GoTo /D [117 0 R /XYZ 53.858 520.406 null] >> endobj 1420 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.138 288.071 418.258 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1419 0 R /H /I >> endobj 1421 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.818 288.071 434.938 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1203 0 R /H /I >> endobj 1422 0 obj << /Type /Annot /Subtype /Link /Rect [ 426.048 275.071 437.168 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1195 0 R /H /I >> endobj 1423 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 249.071 496.618 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1005 0 R /H /I >> endobj 1424 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 223.071 496.618 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1126 0 R /H /I >> endobj 1425 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 184.071 515.298 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1048 0 R /H /I >> endobj 1426 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 145.071 515.298 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1045 0 R /H /I >> endobj 1427 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 64.858 626.525 null] >> endobj 1428 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.258 106.071 421.378 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1427 0 R /H /I >> endobj 1429 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 80.071 429.938 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 813 0 R /H /I >> endobj 1430 0 obj << /Length 1431 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 1431 0 obj 2311 endobj 1432 0 obj [ 1362 0 R 1363 0 R 1364 0 R 1365 0 R 1366 0 R 1367 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 1392 0 R 1393 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R 1404 0 R 1405 0 R 1406 0 R 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 1420 0 R 1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1428 0 R 1429 0 R ] endobj 1433 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1432 0 R /Contents 1430 0 R >> endobj 1434 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 707.175 166.788 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 816 0 R /H /I >> endobj 1435 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 681.175 166.788 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 1436 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 655.175 166.788 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 1437 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 629.175 166.788 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 1438 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 603.175 221.468 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1439 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.028 603.175 238.148 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1151 0 R /H /I >> endobj 1440 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.668 549.623 154.788 558.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 824 0 R /H /I >> endobj 1441 0 obj << /Type /Annot /Subtype /Link /Rect [ 166.788 536.623 177.908 545.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 827 0 R /H /I >> endobj 1442 0 obj << /Type /Annot /Subtype /Link /Rect [ 242.358 523.623 253.478 532.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 1443 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 497.623 166.788 506.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 1444 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 471.623 221.468 480.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1134 0 R /H /I >> endobj 1445 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.678 458.623 147.238 467.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1289 0 R /H /I >> endobj 1446 0 obj << /Type /Annot /Subtype /Link /Rect [ 207.798 445.623 213.358 454.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1289 0 R /H /I >> endobj 1447 0 obj << /Type /Action /S /GoTo /D [706 0 R /XYZ 53.858 454.735 null] >> endobj 1448 0 obj << /Type /Annot /Subtype /Link /Rect [ 213.368 432.623 218.928 441.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1447 0 R /H /I >> endobj 1449 0 obj << /Type /Action /S /GoTo /D [64 0 R /XYZ 87.874 303.677 null] >> endobj 1450 0 obj << /Type /Annot /Subtype /Link /Rect [ 100.318 406.623 105.878 415.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1449 0 R /H /I >> endobj 1451 0 obj << /Type /Annot /Subtype /Link /Rect [ 219.248 380.623 230.368 389.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1060 0 R /H /I >> endobj 1452 0 obj << /Type /Annot /Subtype /Link /Rect [ 211.278 367.623 222.398 376.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 765 0 R /H /I >> endobj 1453 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.238 354.623 187.358 363.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 769 0 R /H /I >> endobj 1454 0 obj << /Type /Annot /Subtype /Link /Rect [ 126.218 341.623 137.338 350.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 1455 0 obj << /Type /Annot /Subtype /Link /Rect [ 138.438 328.623 149.558 337.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1456 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.008 315.623 200.128 324.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1066 0 R /H /I >> endobj 1457 0 obj << /Type /Annot /Subtype /Link /Rect [ 195.678 302.623 206.798 311.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1068 0 R /H /I >> endobj 1458 0 obj << /Type /Annot /Subtype /Link /Rect [ 257.368 289.623 268.488 298.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1070 0 R /H /I >> endobj 1459 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.808 276.623 202.928 285.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1072 0 R /H /I >> endobj 1460 0 obj << /Type /Annot /Subtype /Link /Rect [ 147.558 223.071 158.678 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 1461 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.308 210.071 126.428 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 983 0 R /H /I >> endobj 1462 0 obj << /Type /Annot /Subtype /Link /Rect [ 186.458 197.071 197.578 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1003 0 R /H /I >> endobj 1463 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 171.071 76.978 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1464 0 obj << /Type /Annot /Subtype /Link /Rect [ 223.688 158.071 234.808 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1020 0 R /H /I >> endobj 1465 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.238 145.071 185.358 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1115 0 R /H /I >> endobj 1466 0 obj << /Type /Annot /Subtype /Link /Rect [ 145.328 132.071 156.448 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1117 0 R /H /I >> endobj 1467 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.888 106.071 137.008 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 976 0 R /H /I >> endobj 1468 0 obj << /Type /Annot /Subtype /Link /Rect [ 236.488 93.071 247.608 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1469 0 obj << /Type /Annot /Subtype /Link /Rect [ 132.558 80.071 143.678 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1122 0 R /H /I >> endobj 1470 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.268 67.071 240.388 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 949 0 R /H /I >> endobj 1471 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.032 707.175 418.152 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1472 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.142 694.175 434.262 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1126 0 R /H /I >> endobj 1473 0 obj << /Type /Annot /Subtype /Link /Rect [ 397.022 681.175 408.142 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1474 0 obj << /Type /Annot /Subtype /Link /Rect [ 480.942 668.175 492.062 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1130 0 R /H /I >> endobj 1475 0 obj << /Type /Annot /Subtype /Link /Rect [ 446.492 655.175 457.612 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1132 0 R /H /I >> endobj 1476 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.392 642.175 481.512 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1134 0 R /H /I >> endobj 1477 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.462 629.175 427.582 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1140 0 R /H /I >> endobj 1478 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 603.175 318.112 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1142 0 R /H /I >> endobj 1479 0 obj << /Type /Annot /Subtype /Link /Rect [ 419.252 590.175 430.372 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1144 0 R /H /I >> endobj 1480 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 564.175 318.112 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1105 0 R /H /I >> endobj 1481 0 obj << /Type /Annot /Subtype /Link /Rect [ 467.062 551.175 478.182 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1147 0 R /H /I >> endobj 1482 0 obj << /Type /Annot /Subtype /Link /Rect [ 385.352 538.175 396.472 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1483 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.032 538.175 413.152 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1151 0 R /H /I >> endobj 1484 0 obj << /Type /Annot /Subtype /Link /Rect [ 344.222 512.175 355.342 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1153 0 R /H /I >> endobj 1485 0 obj << /Type /Annot /Subtype /Link /Rect [ 494.842 499.175 505.962 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1486 0 obj << /Type /Annot /Subtype /Link /Rect [ 433.132 486.175 444.252 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1487 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.252 473.175 415.372 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 981 0 R /H /I >> endobj 1488 0 obj << /Type /Annot /Subtype /Link /Rect [ 448.172 460.175 459.292 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1159 0 R /H /I >> endobj 1489 0 obj << /Type /Annot /Subtype /Link /Rect [ 425.352 447.175 436.472 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1161 0 R /H /I >> endobj 1490 0 obj << /Type /Annot /Subtype /Link /Rect [ 417.022 434.175 428.142 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1163 0 R /H /I >> endobj 1491 0 obj << /Type /Annot /Subtype /Link /Rect [ 433.702 434.175 444.822 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1165 0 R /H /I >> endobj 1492 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 408.175 318.112 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1147 0 R /H /I >> endobj 1493 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.252 395.175 425.372 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1005 0 R /H /I >> endobj 1494 0 obj << /Type /Annot /Subtype /Link /Rect [ 378.692 382.175 389.812 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1169 0 R /H /I >> endobj 1495 0 obj << /Type /Annot /Subtype /Link /Rect [ 390.352 369.175 401.472 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1171 0 R /H /I >> endobj 1496 0 obj << /Type /Annot /Subtype /Link /Rect [ 358.122 343.175 369.242 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1497 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 121.525 null] >> endobj 1498 0 obj << /Type /Annot /Subtype /Link /Rect [ 364.242 317.175 375.362 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1497 0 R /H /I >> endobj 1499 0 obj << /Type /Annot /Subtype /Link /Rect [ 379.022 304.175 390.142 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 958 0 R /H /I >> endobj 1500 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.602 291.175 425.722 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 958 0 R /H /I >> endobj 1501 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.032 278.175 415.152 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1199 0 R /H /I >> endobj 1502 0 obj << /Type /Annot /Subtype /Link /Rect [ 364.572 265.175 375.692 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1216 0 R /H /I >> endobj 1503 0 obj << /Type /Annot /Subtype /Link /Rect [ 355.122 252.175 366.242 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1427 0 R /H /I >> endobj 1504 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 53.858 286.063 null] >> endobj 1505 0 obj << /Type /Annot /Subtype /Link /Rect [ 399.582 239.175 410.702 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1504 0 R /H /I >> endobj 1506 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 424.325 null] >> endobj 1507 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.582 226.175 406.702 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1506 0 R /H /I >> endobj 1508 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.722 213.175 402.282 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1293 0 R /H /I >> endobj 1509 0 obj << /Type /Action /S /GoTo /D [278 0 R /XYZ 87.874 615.625 null] >> endobj 1510 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.012 187.175 373.132 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1509 0 R /H /I >> endobj 1511 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 161.175 347.012 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1447 0 R /H /I >> endobj 1512 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 135.175 347.012 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1449 0 R /H /I >> endobj 1513 0 obj << /Type /Annot /Subtype /Link /Rect [ 354.472 122.175 360.032 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1394 0 R /H /I >> endobj 1514 0 obj << /Type /Action /S /GoTo /D [64 0 R /XYZ 105.874 141.313 null] >> endobj 1515 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 96.175 347.012 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1514 0 R /H /I >> endobj 1516 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 70.175 347.012 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1449 0 R /H /I >> endobj 1517 0 obj << /Length 1518 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 1518 0 obj 2483 endobj 1519 0 obj [ 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 1448 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 1470 0 R 1471 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R 1482 0 R 1483 0 R 1484 0 R 1485 0 R 1486 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R 1505 0 R 1507 0 R 1508 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1515 0 R 1516 0 R ] endobj 1520 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1519 0 R /Contents 1517 0 R >> endobj 1521 0 obj << /Type /Action /S /GoTo /D [706 0 R /XYZ 71.858 597.393 null] >> endobj 1522 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.334 694.175 139.894 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1521 0 R /H /I >> endobj 1523 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 655.175 255.484 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1153 0 R /H /I >> endobj 1524 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 629.175 255.484 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1525 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.124 590.175 180.244 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1504 0 R /H /I >> endobj 1526 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 564.175 188.804 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 1527 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.894 538.175 186.014 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1528 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.574 538.175 202.694 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1022 0 R /H /I >> endobj 1529 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 512.175 147.124 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1089 0 R /H /I >> endobj 1530 0 obj << /Type /Annot /Subtype /Link /Rect [ 145.214 473.175 156.334 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 935 0 R /H /I >> endobj 1531 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.324 447.175 145.444 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1195 0 R /H /I >> endobj 1532 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 421.175 166.904 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1533 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.124 395.175 180.244 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1199 0 R /H /I >> endobj 1534 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 369.175 147.124 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1091 0 R /H /I >> endobj 1535 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 343.175 255.484 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1142 0 R /H /I >> endobj 1536 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 317.175 255.484 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1140 0 R /H /I >> endobj 1537 0 obj << /Type /Annot /Subtype /Link /Rect [ 199.024 304.175 210.144 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 775 0 R /H /I >> endobj 1538 0 obj << /Type /Annot /Subtype /Link /Rect [ 240.484 278.175 251.604 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1539 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.914 265.175 208.034 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1540 0 obj << /Type /Annot /Subtype /Link /Rect [ 179.584 252.175 185.144 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1295 0 R /H /I >> endobj 1541 0 obj << /Type /Annot /Subtype /Link /Rect [ 213.474 239.175 224.594 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1208 0 R /H /I >> endobj 1542 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.124 213.175 168.244 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1497 0 R /H /I >> endobj 1543 0 obj << /Type /Annot /Subtype /Link /Rect [ 171.904 200.175 183.024 209.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 958 0 R /H /I >> endobj 1544 0 obj << /Type /Annot /Subtype /Link /Rect [ 207.484 187.175 218.604 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 958 0 R /H /I >> endobj 1545 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.914 174.175 208.034 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1199 0 R /H /I >> endobj 1546 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.454 161.175 168.574 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1216 0 R /H /I >> endobj 1547 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.004 148.175 159.124 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1427 0 R /H /I >> endobj 1548 0 obj << /Type /Annot /Subtype /Link /Rect [ 192.464 135.175 203.584 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1504 0 R /H /I >> endobj 1549 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 122.175 188.804 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1550 0 obj << /Type /Action /S /GoTo /D [64 0 R /XYZ 87.874 216.495 null] >> endobj 1551 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.924 109.175 233.484 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1550 0 R /H /I >> endobj 1552 0 obj << /Type /Annot /Subtype /Link /Rect [ 185.684 96.175 196.804 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1506 0 R /H /I >> endobj 1553 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.924 70.175 216.044 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1244 0 R /H /I >> endobj 1554 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.388 707.175 462.508 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 970 0 R /H /I >> endobj 1555 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.918 694.175 408.038 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1556 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.688 681.175 395.808 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1248 0 R /H /I >> endobj 1557 0 obj << /Type /Annot /Subtype /Link /Rect [ 408.028 668.175 419.148 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1250 0 R /H /I >> endobj 1558 0 obj << /Type /Annot /Subtype /Link /Rect [ 471.378 642.175 482.498 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 955 0 R /H /I >> endobj 1559 0 obj << /Type /Annot /Subtype /Link /Rect [ 385.248 629.175 396.368 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1238 0 R /H /I >> endobj 1560 0 obj << /Type /Annot /Subtype /Link /Rect [ 436.938 616.175 448.058 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1259 0 R /H /I >> endobj 1561 0 obj << /Type /Annot /Subtype /Link /Rect [ 398.578 603.175 409.698 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1197 0 R /H /I >> endobj 1562 0 obj << /Type /Annot /Subtype /Link /Rect [ 457.388 590.175 462.948 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1295 0 R /H /I >> endobj 1563 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.468 564.175 421.588 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1564 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 509.071 496.618 518.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 981 0 R /H /I >> endobj 1565 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 470.071 441.938 479.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 1566 0 obj << /Type /Action /S /GoTo /D [248 0 R /XYZ 53.858 327.625 null] >> endobj 1567 0 obj << /Type /Annot /Subtype /Link /Rect [ 397.708 444.071 408.828 453.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1566 0 R /H /I >> endobj 1568 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 66.638 477.425 null] >> endobj 1569 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.148 418.071 447.708 427.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1568 0 R /H /I >> endobj 1570 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 66.638 513.425 null] >> endobj 1571 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.148 392.071 447.708 401.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1570 0 R /H /I >> endobj 1572 0 obj << /Type /Annot /Subtype /Link /Rect [ 403.818 366.071 409.378 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 990 0 R /H /I >> endobj 1573 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.928 353.071 414.048 362.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1262 0 R /H /I >> endobj 1574 0 obj << /Type /Action /S /GoTo /D [160 0 R /XYZ 53.858 657.698 null] >> endobj 1575 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.148 340.071 418.268 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1574 0 R /H /I >> endobj 1576 0 obj << /Type /Action /S /GoTo /D [162 0 R /XYZ 87.874 594.003 null] >> endobj 1577 0 obj << /Type /Annot /Subtype /Link /Rect [ 397.148 327.071 408.268 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1576 0 R /H /I >> endobj 1578 0 obj << /Type /Action /S /GoTo /D [267 0 R /XYZ 53.858 333.425 null] >> endobj 1579 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.028 314.071 407.148 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1578 0 R /H /I >> endobj 1580 0 obj << /Type /Action /S /GoTo /D [162 0 R /XYZ 87.874 299.61 null] >> endobj 1581 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.478 301.071 441.598 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1580 0 R /H /I >> endobj 1582 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.588 275.071 397.708 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1583 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 236.071 515.298 245.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1054 0 R /H /I >> endobj 1584 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 210.071 496.618 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1130 0 R /H /I >> endobj 1585 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 184.071 496.618 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1144 0 R /H /I >> endobj 1586 0 obj << /Type /Annot /Subtype /Link /Rect [ 502.178 184.071 513.298 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1144 0 R /H /I >> endobj 1587 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 145.071 441.938 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 806 0 R /H /I >> endobj 1588 0 obj << /Type /Annot /Subtype /Link /Rect [ 392.368 132.071 397.928 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1285 0 R /H /I >> endobj 1589 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.588 106.071 397.708 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1220 0 R /H /I >> endobj 1590 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 80.071 496.618 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1159 0 R /H /I >> endobj 1591 0 obj << /Length 1592 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 1595 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.438 707.175 122.558 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1222 0 R /H /I >> endobj 1596 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 681.175 221.468 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1597 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 655.175 221.468 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1598 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 629.175 113.108 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1093 0 R /H /I >> endobj 1599 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 603.175 221.468 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1161 0 R /H /I >> endobj 1600 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 577.175 221.468 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1163 0 R /H /I >> endobj 1601 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.028 577.175 238.148 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1165 0 R /H /I >> endobj 1602 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 538.175 166.788 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 1603 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 499.175 166.788 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 1604 0 obj << /Type /Annot /Subtype /Link /Rect [ 103.328 486.175 114.448 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1085 0 R /H /I >> endobj 1605 0 obj << /Type /Action /S /GoTo /D [480 0 R /XYZ 53.858 546.825 null] >> endobj 1606 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.008 486.175 131.128 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1605 0 R /H /I >> endobj 1607 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 460.175 221.468 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 1608 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 434.175 221.468 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1147 0 R /H /I >> endobj 1609 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 408.175 221.468 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 1610 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 382.175 221.468 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1005 0 R /H /I >> endobj 1611 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 356.175 221.468 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1169 0 R /H /I >> endobj 1612 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 317.175 240.148 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1050 0 R /H /I >> endobj 1613 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 278.175 240.148 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1038 0 R /H /I >> endobj 1614 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.438 223.071 122.558 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1225 0 R /H /I >> endobj 1615 0 obj << /Type /Annot /Subtype /Link /Rect [ 104.428 210.071 109.988 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 773 0 R /H /I >> endobj 1616 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.428 197.071 104.988 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1014 0 R /H /I >> endobj 1617 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.438 171.071 187.558 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1060 0 R /H /I >> endobj 1618 0 obj << /Type /Annot /Subtype /Link /Rect [ 211.278 158.071 222.398 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 765 0 R /H /I >> endobj 1619 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.238 145.071 187.358 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 769 0 R /H /I >> endobj 1620 0 obj << /Type /Annot /Subtype /Link /Rect [ 126.218 132.071 137.338 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 1621 0 obj << /Type /Annot /Subtype /Link /Rect [ 138.438 119.071 149.558 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1024 0 R /H /I >> endobj 1622 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.008 106.071 200.128 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1066 0 R /H /I >> endobj 1623 0 obj << /Type /Annot /Subtype /Link /Rect [ 195.678 93.071 206.798 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1068 0 R /H /I >> endobj 1624 0 obj << /Type /Annot /Subtype /Link /Rect [ 257.368 80.071 268.488 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1070 0 R /H /I >> endobj 1625 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.808 67.071 202.928 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1072 0 R /H /I >> endobj 1626 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 87.874 687.1 null] >> endobj 1627 0 obj << /Type /Annot /Subtype /Link /Rect [ 472.822 707.175 483.942 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1626 0 R /H /I >> endobj 1628 0 obj << /Type /Annot /Subtype /Link /Rect [ 364.792 694.175 375.912 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 775 0 R /H /I >> endobj 1629 0 obj << /Type /Annot /Subtype /Link /Rect [ 363.692 681.175 374.812 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1074 0 R /H /I >> endobj 1630 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.602 668.175 413.722 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1101 0 R /H /I >> endobj 1631 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.802 655.175 415.922 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1506 0 R /H /I >> endobj 1632 0 obj << /Type /Annot /Subtype /Link /Rect [ 409.242 629.175 420.362 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1033 0 R /H /I >> endobj 1633 0 obj << /Type /Annot /Subtype /Link /Rect [ 490.182 616.175 501.302 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1634 0 obj << /Type /Annot /Subtype /Link /Rect [ 502.952 603.175 514.072 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1036 0 R /H /I >> endobj 1635 0 obj << /Type /Annot /Subtype /Link /Rect [ 491.812 590.175 502.932 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1038 0 R /H /I >> endobj 1636 0 obj << /Type /Annot /Subtype /Link /Rect [ 372.352 577.175 383.472 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1040 0 R /H /I >> endobj 1637 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.042 564.175 480.162 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1038 0 R /H /I >> endobj 1638 0 obj << /Type /Annot /Subtype /Link /Rect [ 382.342 551.175 393.462 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1043 0 R /H /I >> endobj 1639 0 obj << /Type /Annot /Subtype /Link /Rect [ 432.942 538.175 444.062 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1045 0 R /H /I >> endobj 1640 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.802 525.175 412.922 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 1641 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.682 512.175 406.802 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1048 0 R /H /I >> endobj 1642 0 obj << /Type /Annot /Subtype /Link /Rect [ 444.032 499.175 455.152 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1050 0 R /H /I >> endobj 1643 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.042 486.175 440.162 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1052 0 R /H /I >> endobj 1644 0 obj << /Type /Annot /Subtype /Link /Rect [ 487.942 473.175 499.062 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1054 0 R /H /I >> endobj 1645 0 obj << /Type /Annot /Subtype /Link /Rect [ 450.162 460.175 461.282 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1056 0 R /H /I >> endobj 1646 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.652 447.175 481.772 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1058 0 R /H /I >> endobj 1647 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.332 408.175 363.452 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 1648 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 369.175 481.282 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1649 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 330.175 481.282 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1052 0 R /H /I >> endobj 1650 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 291.175 481.282 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1054 0 R /H /I >> endobj 1651 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 252.175 481.282 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1056 0 R /H /I >> endobj 1652 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 213.175 481.282 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1028 0 R /H /I >> endobj 1653 0 obj << /Type /Annot /Subtype /Link /Rect [ 369.252 187.175 374.812 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1394 0 R /H /I >> endobj 1654 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.922 174.175 436.482 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1449 0 R /H /I >> endobj 1655 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.282 161.175 474.842 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1447 0 R /H /I >> endobj 1656 0 obj << /Type /Annot /Subtype /Link /Rect [ 331.452 148.175 337.012 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1449 0 R /H /I >> endobj 1657 0 obj << /Type /Annot /Subtype /Link /Rect [ 347.572 135.175 353.132 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1514 0 R /H /I >> endobj 1658 0 obj << /Type /Annot /Subtype /Link /Rect [ 345.902 122.175 351.462 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1449 0 R /H /I >> endobj 1659 0 obj << /Type /Annot /Subtype /Link /Rect [ 345.342 109.175 350.902 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1521 0 R /H /I >> endobj 1660 0 obj << /Type /Annot /Subtype /Link /Rect [ 468.942 96.175 480.062 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1108 0 R /H /I >> endobj 1661 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 70.175 462.602 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1662 0 obj << /Length 1663 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 1663 0 obj 2211 endobj 1664 0 obj [ 1595 0 R 1596 0 R 1597 0 R 1598 0 R 1599 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 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 1627 0 R 1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1633 0 R 1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R 1639 0 R 1640 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 1659 0 R 1660 0 R 1661 0 R ] endobj 1665 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1664 0 R /Contents 1662 0 R >> endobj 1666 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 681.175 200.804 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 771 0 R /H /I >> endobj 1667 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 87.874 687.1 null] >> endobj 1668 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.344 668.175 177.904 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1667 0 R /H /I >> endobj 1669 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 642.175 255.484 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1171 0 R /H /I >> endobj 1670 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 587.455 188.804 596.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 779 0 R /H /I >> endobj 1671 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 548.455 274.164 557.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1058 0 R /H /I >> endobj 1672 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 509.455 166.904 518.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1259 0 R /H /I >> endobj 1673 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 470.455 166.904 479.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1197 0 R /H /I >> endobj 1674 0 obj << /Type /Annot /Subtype /Link /Rect [ 130.444 444.455 141.564 453.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1326 0 R /H /I >> endobj 1675 0 obj << /Type /Annot /Subtype /Link /Rect [ 147.454 418.455 158.574 427.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 745 0 R /H /I >> endobj 1676 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.114 405.455 160.234 414.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 747 0 R /H /I >> endobj 1677 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.794 405.455 176.914 414.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 749 0 R /H /I >> endobj 1678 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 366.455 200.804 375.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 1679 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 340.455 147.124 349.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1097 0 R /H /I >> endobj 1680 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 301.455 200.804 310.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 816 0 R /H /I >> endobj 1681 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 262.455 200.804 271.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 791 0 R /H /I >> endobj 1682 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 194.735 166.904 203.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1250 0 R /H /I >> endobj 1683 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 155.735 255.484 164.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1684 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.904 142.735 189.024 151.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1099 0 R /H /I >> endobj 1685 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 116.735 255.484 125.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1134 0 R /H /I >> endobj 1686 0 obj << /Length 1687 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 1687 0 obj 1172 endobj 1688 0 obj [ 1666 0 R 1668 0 R 1669 0 R 1670 0 R 1671 0 R 1672 0 R 1673 0 R 1674 0 R 1675 0 R 1676 0 R 1677 0 R 1678 0 R 1679 0 R 1680 0 R 1681 0 R 1682 0 R 1683 0 R 1684 0 R 1685 0 R ] endobj 1689 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1688 0 R /Contents 1686 0 R >> endobj 1690 0 obj << /Length 1691 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 1691 0 obj 262 endobj 1692 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1690 0 R >> endobj 1693 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 53.858 413.3 null] >> endobj 1694 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 53.858 445.895 null] >> endobj 1695 0 obj << /Type /Action /S /GoTo /D [117 0 R /XYZ 53.858 532.681 null] >> endobj 1696 0 obj << /Type /Action /S /GoTo /D [237 0 R /XYZ 53.858 417.536 null] >> endobj 1697 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 184.891 null] >> endobj 1698 0 obj << /Type /Action /S /GoTo /D [472 0 R /XYZ 87.874 134.458 null] >> endobj 1699 0 obj << /Type /Action /S /GoTo /D [546 0 R /XYZ 87.874 115.398 null] >> endobj 1700 0 obj << /Type /Action /S /GoTo /D [556 0 R /XYZ 87.874 629.193 null] >> endobj 1701 0 obj << /Type /Action /S /GoTo /D [616 0 R /XYZ 53.858 437.085 null] >> endobj 1702 0 obj << /Type /Action /S /GoTo /D [669 0 R /XYZ 87.874 280.227 null] >> endobj 1703 0 obj << /Type /Action /S /GoTo /D [10 0 R /XYZ 87.874 718.3 null] >> endobj 1704 0 obj << /Title (SystemTap Beginners Guide) /Parent 1705 0 R /Next 1706 0 R /A 1703 0 R >> endobj 1707 0 obj << /Type /Action /S /GoTo /D [411 0 R /XYZ 87.874 718.3 null] >> endobj 1706 0 obj << /Title (Table of Contents) /Parent 1705 0 R /Prev 1704 0 R /Next 1708 0 R /A 1707 0 R >> endobj 1708 0 obj << /Title (Preface) /Parent 1705 0 R /Prev 1706 0 R /Next 1709 0 R /First 1710 0 R /Last 1711 0 R /Count -5 /A 280 0 R >> endobj 1710 0 obj << /Title /Parent 1708 0 R /Next 1711 0 R /First 1712 0 R /Last 1713 0 R /Count -3 /A 283 0 R >> endobj 1712 0 obj << /Title /Parent 1710 0 R /Next 1714 0 R /A 286 0 R >> endobj 1714 0 obj << /Title /Parent 1710 0 R /Prev 1712 0 R /Next 1713 0 R /A 289 0 R >> endobj 1713 0 obj << /Title /Parent 1710 0 R /Prev 1714 0 R /A 292 0 R >> endobj 1711 0 obj << /Title /Parent 1708 0 R /Prev 1710 0 R /A 295 0 R >> endobj 1709 0 obj << /Title /Parent 1705 0 R /Prev 1708 0 R /Next 1715 0 R /First 1716 0 R /Last 1717 0 R /Count -3 /A 299 0 R >> endobj 1716 0 obj << /Title /Parent 1709 0 R /Next 1718 0 R /A 302 0 R >> endobj 1718 0 obj << /Title /Parent 1709 0 R /Prev 1716 0 R /Next 1717 0 R /A 305 0 R >> endobj 1717 0 obj << /Title /Parent 1709 0 R /Prev 1718 0 R /A 308 0 R >> endobj 1715 0 obj << /Title /Parent 1705 0 R /Prev 1709 0 R /Next 1719 0 R /First 1720 0 R /Last 1721 0 R /Count -9 /A 310 0 R >> endobj 1720 0 obj << /Title /Parent 1715 0 R /Next 1722 0 R /First 1723 0 R /Last 1724 0 R /Count -3 /A 80 0 R >> endobj 1723 0 obj << /Title /Parent 1720 0 R /Next 1725 0 R /A 52 0 R >> endobj 1725 0 obj << /Title /Parent 1720 0 R /Prev 1723 0 R /Next 1724 0 R /A 55 0 R >> endobj 1724 0 obj << /Title /Parent 1720 0 R /Prev 1725 0 R /A 319 0 R >> endobj 1722 0 obj << /Title /Parent 1715 0 R /Prev 1720 0 R /Next 1721 0 R /A 131 0 R >> endobj 1721 0 obj << /Title /Parent 1715 0 R /Prev 1722 0 R /First 1726 0 R /Last 1726 0 R /Count -3 /A 324 0 R >> endobj 1726 0 obj << /Title /Parent 1721 0 R /First 1727 0 R /Last 1728 0 R /Count -2 /A 126 0 R >> endobj 1727 0 obj << /Title /Parent 1726 0 R /Next 1728 0 R /A 329 0 R >> endobj 1728 0 obj << /Title /Parent 1726 0 R /Prev 1727 0 R /A 332 0 R >> endobj 1719 0 obj << /Title /Parent 1705 0 R /Prev 1715 0 R /Next 1729 0 R /First 1730 0 R /Last 1731 0 R /Count -22 /A 87 0 R >> endobj 1730 0 obj << /Title /Parent 1719 0 R /Next 1732 0 R /A 78 0 R >> endobj 1732 0 obj << /Title /Parent 1719 0 R /Prev 1730 0 R /Next 1733 0 R /First 1734 0 R /Last 1735 0 R /Count -2 /A 339 0 R >> endobj 1734 0 obj << /Title /Parent 1732 0 R /Next 1735 0 R /A 253 0 R >> endobj 1735 0 obj << /Title /Parent 1732 0 R /Prev 1734 0 R /A 344 0 R >> endobj 1733 0 obj << /Title /Parent 1719 0 R /Prev 1732 0 R /Next 1736 0 R /First 1737 0 R /Last 1738 0 R /Count -7 /A 347 0 R >> endobj 1737 0 obj << /Title /Parent 1733 0 R /Next 1739 0 R /A 350 0 R >> endobj 1739 0 obj << /Title /Parent 1733 0 R /Prev 1737 0 R /Next 1740 0 R /First 1741 0 R /Last 1742 0 R /Count -3 /A 261 0 R >> endobj 1741 0 obj << /Title /Parent 1739 0 R /Next 1743 0 R /A 355 0 R >> endobj 1743 0 obj << /Title /Parent 1739 0 R /Prev 1741 0 R /Next 1742 0 R /A 358 0 R >> endobj 1742 0 obj << /Title /Parent 1739 0 R /Prev 1743 0 R /A 361 0 R >> endobj 1740 0 obj << /Title /Parent 1733 0 R /Prev 1739 0 R /Next 1738 0 R /A 364 0 R >> endobj 1738 0 obj << /Title /Parent 1733 0 R /Prev 1740 0 R /A 367 0 R >> endobj 1736 0 obj << /Title /Parent 1719 0 R /Prev 1733 0 R /Next 1744 0 R /A 371 0 R >> endobj 1744 0 obj << /Title /Parent 1719 0 R /Prev 1736 0 R /Next 1731 0 R /First 1745 0 R /Last 1746 0 R /Count -7 /A 374 0 R >> endobj 1745 0 obj << /Title /Parent 1744 0 R /Next 1747 0 R /A 190 0 R >> endobj 1747 0 obj << /Title /Parent 1744 0 R /Prev 1745 0 R /Next 1748 0 R /A 378 0 R >> endobj 1748 0 obj << /Title /Parent 1744 0 R /Prev 1747 0 R /Next 1749 0 R /A 381 0 R >> endobj 1749 0 obj << /Title /Parent 1744 0 R /Prev 1748 0 R /Next 1750 0 R /A 212 0 R >> endobj 1750 0 obj << /Title /Parent 1744 0 R /Prev 1749 0 R /Next 1751 0 R /A 225 0 R >> endobj 1751 0 obj << /Title /Parent 1744 0 R /Prev 1750 0 R /Next 1746 0 R /A 388 0 R >> endobj 1746 0 obj << /Title /Parent 1744 0 R /Prev 1751 0 R /A 391 0 R >> endobj 1731 0 obj << /Title /Parent 1719 0 R /Prev 1744 0 R /A 394 0 R >> endobj 1729 0 obj << /Title /Parent 1705 0 R /Prev 1719 0 R /Next 1752 0 R /First 1753 0 R /Last 1754 0 R /Count -3 /A 397 0 R >> endobj 1753 0 obj << /Title /Parent 1729 0 R /Next 1755 0 R /A 400 0 R >> endobj 1755 0 obj << /Title /Parent 1729 0 R /Prev 1753 0 R /Next 1754 0 R /A 269 0 R >> endobj 1754 0 obj << /Title /Parent 1729 0 R /Prev 1755 0 R /A 405 0 R >> endobj 1752 0 obj << /Title /Parent 1705 0 R /Prev 1729 0 R /Next 1756 0 R /First 1757 0 R /Last 1758 0 R /Count -22 /A 424 0 R >> endobj 1757 0 obj << /Title /Parent 1752 0 R /Next 1759 0 R /First 1760 0 R /Last 1761 0 R /Count -5 /A 845 0 R >> endobj 1760 0 obj << /Title /Parent 1757 0 R /Next 1762 0 R /A 848 0 R >> endobj 1762 0 obj << /Title /Parent 1757 0 R /Prev 1760 0 R /Next 1763 0 R /A 851 0 R >> endobj 1763 0 obj << /Title /Parent 1757 0 R /Prev 1762 0 R /Next 1764 0 R /A 854 0 R >> endobj 1764 0 obj << /Title /Parent 1757 0 R /Prev 1763 0 R /Next 1761 0 R /A 857 0 R >> endobj 1761 0 obj << /Title /Parent 1757 0 R /Prev 1764 0 R /A 860 0 R >> endobj 1759 0 obj << /Title /Parent 1752 0 R /Prev 1757 0 R /Next 1765 0 R /First 1766 0 R /Last 1767 0 R /Count -7 /A 863 0 R >> endobj 1766 0 obj << /Title /Parent 1759 0 R /Next 1768 0 R /A 527 0 R >> endobj 1768 0 obj << /Title /Parent 1759 0 R /Prev 1766 0 R /Next 1769 0 R /A 868 0 R >> endobj 1769 0 obj << /Title /Parent 1759 0 R /Prev 1768 0 R /Next 1770 0 R /A 871 0 R >> endobj 1770 0 obj << /Title /Parent 1759 0 R /Prev 1769 0 R /Next 1771 0 R /A 874 0 R >> endobj 1771 0 obj << /Title /Parent 1759 0 R /Prev 1770 0 R /Next 1772 0 R /A 567 0 R >> endobj 1772 0 obj << /Title /Parent 1759 0 R /Prev 1771 0 R /Next 1767 0 R /A 879 0 R >> endobj 1767 0 obj << /Title /Parent 1759 0 R /Prev 1772 0 R /A 882 0 R >> endobj 1765 0 obj << /Title /Parent 1752 0 R /Prev 1759 0 R /Next 1758 0 R /First 1773 0 R /Last 1774 0 R /Count -6 /A 885 0 R >> endobj 1773 0 obj << /Title /Parent 1765 0 R /Next 1775 0 R /A 888 0 R >> endobj 1775 0 obj << /Title /Parent 1765 0 R /Prev 1773 0 R /Next 1776 0 R /A 891 0 R >> endobj 1776 0 obj << /Title /Parent 1765 0 R /Prev 1775 0 R /Next 1777 0 R /A 894 0 R >> endobj 1777 0 obj << /Title /Parent 1765 0 R /Prev 1776 0 R /Next 1778 0 R /A 646 0 R >> endobj 1778 0 obj << /Title /Parent 1765 0 R /Prev 1777 0 R /Next 1774 0 R /A 645 0 R >> endobj 1774 0 obj << /Title /Parent 1765 0 R /Prev 1778 0 R /A 901 0 R >> endobj 1758 0 obj << /Title /Parent 1752 0 R /Prev 1765 0 R /A 904 0 R >> endobj 1756 0 obj << /Title /Parent 1705 0 R /Prev 1752 0 R /Next 1779 0 R /First 1780 0 R /Last 1781 0 R /Count -2 /A 700 0 R >> endobj 1780 0 obj << /Title /Parent 1756 0 R /Next 1781 0 R /A 909 0 R >> endobj 1781 0 obj << /Title /Parent 1756 0 R /Prev 1780 0 R /A 912 0 R >> endobj 1779 0 obj << /Title /Parent 1705 0 R /Prev 1756 0 R /Next 1782 0 R /A 915 0 R >> endobj 1782 0 obj << /Title /Parent 1705 0 R /Prev 1779 0 R /Next 1783 0 R /A 918 0 R >> endobj 1783 0 obj << /Title (Index) /Parent 1705 0 R /Prev 1782 0 R /A 921 0 R >> endobj 1784 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier /Encoding /WinAnsiEncoding >> endobj 1785 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Oblique /Encoding /WinAnsiEncoding >> endobj 1786 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-BoldOblique /Encoding /WinAnsiEncoding >> endobj 1787 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Bold /Encoding /WinAnsiEncoding >> endobj 1788 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Symbol /ToUnicode 1789 0 R >> endobj 1789 0 obj << /Length 1790 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 1790 0 obj 1047 endobj 1791 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 1792 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding >> endobj 1793 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj 1794 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding >> endobj 1795 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Roman /Encoding /WinAnsiEncoding >> endobj 1796 0 obj << /Limits [(SystemTap_Beginners_Guide-Preface) (SystemTap_Beginners_Guide-Preface)] /Names [(SystemTap_Beginners_Guide-Preface) 280 0 R] >> endobj 1797 0 obj << /Limits [(appe-Publican-Revision_History) (appe-Publican-Revision_History)] /Names [(appe-Publican-Revision_History) 918 0 R] >> endobj 1798 0 obj << /Limits [(arrayoperators) (arrayoperators)] /Names [(arrayoperators) 374 0 R] >> endobj 1799 0 obj << /Limits [(arrayops-aggregates) (arrayops-aggregates)] /Names [(arrayops-aggregates) 391 0 R] >> endobj 1800 0 obj << /Limits [(arrayops-assignvalue) (arrayops-assignvalue)] /Names [(arrayops-assignvalue) 190 0 R] >> endobj 1801 0 obj << /Limits [(arrayops-conditionals) (arrayops-conditionals)] /Names [(arrayops-conditionals) 388 0 R] >> endobj 1802 0 obj << /Limits [(arrayops-deleting) (arrayops-deleting)] /Names [(arrayops-deleting) 225 0 R] >> endobj 1803 0 obj << /Limits [(arrayops-foreach) (arrayops-foreach)] /Names [(arrayops-foreach) 212 0 R] >> endobj 1804 0 obj << /Limits [(arrayops-increment) (arrayops-increment)] /Names [(arrayops-increment) 381 0 R] >> endobj 1805 0 obj << /Limits [(arrayops-readvalues) (arrayops-readvalues)] /Names [(arrayops-readvalues) 378 0 R] >> endobj 1806 0 obj << /Limits [(arrayreadingvaluesfrom) (arrayreadingvaluesfrom)] /Names [(arrayreadingvaluesfrom) 192 0 R] >> endobj 1807 0 obj << /Limits [(arrays-timestampprocessname) (arrays-timestampprocessname)] /Names [(arrays-timestampprocessname) 185 0 R] >> endobj 1808 0 obj << /Limits [(arraysimplestexample) (arraysimplestexample)] /Names [(arraysimplestexample) 184 0 R] >> endobj 1809 0 obj << /Limits [(associativearrays) (associativearrays)] /Names [(associativearrays) 371 0 R] >> endobj 1810 0 obj << /Limits [(available) (available)] /Names [(available) 163 0 R] >> endobj 1811 0 obj << /Limits [(casting) (casting)] /Names [(casting) 161 0 R] >> endobj 1812 0 obj << /Limits [(commandlineargs) (commandlineargs)] /Names [(commandlineargs) 175 0 R] >> endobj 1813 0 obj << /Limits [(commandlineargssect) (commandlineargssect)] /Names [(commandlineargssect) 367 0 R] >> endobj 1814 0 obj << /Limits [(countcalls) (countcalls)] /Names [(countcalls) 590 0 R] >> endobj 1815 0 obj << /Limits [(countcallsoutput) (countcallsoutput)] /Names [(countcallsoutput) 602 0 R] >> endobj 1816 0 obj << /Limits [(countcallssect) (countcallssect)] /Names [(countcallssect) 888 0 R] >> endobj 1817 0 obj << /Limits [(cross-compiling) (cross-compiling)] /Names [(cross-compiling) 131 0 R] >> endobj 1818 0 obj << /Limits [(disktop) (disktop)] /Names [(disktop) 527 0 R] >> endobj 1819 0 obj << /Limits [(disktopoutput) (disktopoutput)] /Names [(disktopoutput) 506 0 R] >> endobj 1820 0 obj << /Limits [(dropwatch) (dropwatch)] /Names [(dropwatch) 479 0 R] >> endobj 1821 0 obj << /Limits [(dropwatchoutput) (dropwatchoutput)] /Names [(dropwatchoutput) 486 0 R] >> endobj 1822 0 obj << /Limits [(dropwatchsect) (dropwatchsect)] /Names [(dropwatchsect) 860 0 R] >> endobj 1823 0 obj << /Limits [(errors) (errors)] /Names [(errors) 700 0 R] >> endobj 1824 0 obj << /Limits [(eventsmodules) (eventsmodules)] /Names [(eventsmodules) 94 0 R] >> endobj 1825 0 obj << /Limits [(file-flight-recorder) (file-flight-recorder)] /Names [(file-flight-recorder) 332 0 R] >> endobj 1826 0 obj << /Limits [(flight-recorder) (flight-recorder)] /Names [(flight-recorder) 126 0 R] >> endobj 1827 0 obj << /Limits [(futexcontention) (futexcontention)] /Names [(futexcontention) 678 0 R] >> endobj 1828 0 obj << /Limits [(futexcontentionoutput) (futexcontentionoutput)] /Names [(futexcontentionoutput) 684 0 R] >> endobj 1829 0 obj << /Limits [(futexcontentionsect) (futexcontentionsect)] /Names [(futexcontentionsect) 904 0 R] >> endobj 1830 0 obj << /Limits [(goals) (goals)] /Names [(goals) 302 0 R] >> endobj 1831 0 obj << /Limits [(handlerconditionalstatements) (handlerconditionalstatements)] /Names [(handlerconditionalstatements) 364 0 R] >> endobj 1832 0 obj << /Limits [(helloworld) (helloworld)] /Names [(helloworld) 110 0 R] >> endobj 1833 0 obj << /Limits [(inodewatch) (inodewatch)] /Names [(inodewatch) 555 0 R] >> endobj 1834 0 obj << /Limits [(inodewatch2) (inodewatch2)] /Names [(inodewatch2) 569 0 R] >> endobj 1835 0 obj << /Limits [(inodewatch2output) (inodewatch2output)] /Names [(inodewatch2output) 563 0 R] >> endobj 1836 0 obj << /Limits [(inodewatch2sect) (inodewatch2sect)] /Names [(inodewatch2sect) 879 0 R] >> endobj 1837 0 obj << /Limits [(inodewatchoutput) (inodewatchoutput)] /Names [(inodewatchoutput) 561 0 R] >> endobj 1838 0 obj << /Limits [(inodewatchsect) (inodewatchsect)] /Names [(inodewatchsect) 567 0 R] >> endobj 1839 0 obj << /Limits [(install-kinfo) (install-kinfo)] /Names [(install-kinfo) 55 0 R] >> endobj 1840 0 obj << /Limits [(installproper) (installproper)] /Names [(installproper) 52 0 R] >> endobj 1841 0 obj << /Limits [(intro-systemtap-limitations) (intro-systemtap-limitations)] /Names [(intro-systemtap-limitations) 308 0 R] >> endobj 1842 0 obj << /Limits [(intro-systemtap-vs-others) (intro-systemtap-vs-others)] /Names [(intro-systemtap-vs-others) 305 0 R] >> endobj 1843 0 obj << /Limits [(introduction) (introduction)] /Names [(introduction) 299 0 R] >> endobj 1844 0 obj << /Limits [(ioblktime) (ioblktime)] /Names [(ioblktime) 582 0 R] >> endobj 1845 0 obj << /Limits [(ioblktimeoutput) (ioblktimeoutput)] /Names [(ioblktimeoutput) 598 0 R] >> endobj 1846 0 obj << /Limits [(ioblktimesect) (ioblktimesect)] /Names [(ioblktimesect) 882 0 R] >> endobj 1847 0 obj << /Limits [(iotime) (iotime)] /Names [(iotime) 522 0 R] >> endobj 1848 0 obj << /Limits [(iotimeoutput) (iotimeoutput)] /Names [(iotimeoutput) 531 0 R] >> endobj 1849 0 obj << /Limits [(iotimesect) (iotimesect)] /Names [(iotimesect) 868 0 R] >> endobj 1850 0 obj << /Limits [(mainsect-disk) (mainsect-disk)] /Names [(mainsect-disk) 863 0 R] >> endobj 1851 0 obj << /Limits [(mainsect-network) (mainsect-network)] /Names [(mainsect-network) 845 0 R] >> endobj 1852 0 obj << /Limits [(mainsect-profiling) (mainsect-profiling)] /Names [(mainsect-profiling) 885 0 R] >> endobj 1853 0 obj << /Limits [(memory-flight-recorder) (memory-flight-recorder)] /Names [(memory-flight-recorder) 329 0 R] >> endobj 1854 0 obj << /Limits [(multiplearrayindices) (multiplearrayindices)] /Names [(multiplearrayindices) 247 0 R] >> endobj 1855 0 obj << /Limits [(nettop) (nettop)] /Names [(nettop) 416 0 R] >> endobj 1856 0 obj << /Limits [(nettopoutput) (nettopoutput)] /Names [(nettopoutput) 438 0 R] >> endobj 1857 0 obj << /Limits [(nettopsect) (nettopsect)] /Names [(nettopsect) 848 0 R] >> endobj 1858 0 obj << /Limits [(paracallgraph) (paracallgraph)] /Names [(paracallgraph) 891 0 R] >> endobj 1859 0 obj << /Limits [(paracallgraphoutput) (paracallgraphoutput)] /Names [(paracallgraphoutput) 1701 0 R] >> endobj 1860 0 obj << /Limits [(parsetype) (parsetype)] /Names [(parsetype) 909 0 R] >> endobj 1861 0 obj << /Limits [(preppingxcompile) (preppingxcompile)] /Names [(preppingxcompile) 1693 0 R] >> endobj 1862 0 obj << /Limits [(printf) (printf)] /Names [(printf) 1695 0 R] >> endobj 1863 0 obj << /Limits [(references) (references)] /Names [(references) 915 0 R] >> endobj 1864 0 obj << /Limits [(runtimeerror) (runtimeerror)] /Names [(runtimeerror) 912 0 R] >> endobj 1865 0 obj << /Limits [(scriptcallgraph) (scriptcallgraph)] /Names [(scriptcallgraph) 608 0 R] >> endobj 1866 0 obj << /Limits [(scriptconstructions) (scriptconstructions)] /Names [(scriptconstructions) 347 0 R] >> endobj 1867 0 obj << /Limits [(scriptdisktop) (scriptdisktop)] /Names [(scriptdisktop) 500 0 R] >> endobj 1868 0 obj << /Limits [(scriptformats) (scriptformats)] /Names [(scriptformats) 1694 0 R] >> endobj 1869 0 obj << /Limits [(scripts) (scripts)] /Names [(scripts) 339 0 R] >> endobj 1870 0 obj << /Limits [(simpleaggregates) (simpleaggregates)] /Names [(simpleaggregates) 238 0 R] >> endobj 1871 0 obj << /Limits [(simpleifelseexample) (simpleifelseexample)] /Names [(simpleifelseexample) 169 0 R] >> endobj 1872 0 obj << /Limits [(simplesimplevfsread) (simplesimplevfsread)] /Names [(simplesimplevfsread) 198 0 R] >> endobj 1873 0 obj << /Limits [(simplesimplevfsreadprintifmember) (simplesimplevfsreadprintifmember)] /Names [(simplesimplevfsreadprintifmember) 1696 0 R] >> endobj 1874 0 obj << /Limits [(simplevfsreadprint) (simplevfsreadprint)] /Names [(simplevfsreadprint) 206 0 R] >> endobj 1875 0 obj << /Limits [(simplevfsreadprintif) (simplevfsreadprintif)] /Names [(simplevfsreadprintif) 232 0 R] >> endobj 1876 0 obj << /Limits [(simplevfsreadprintnotcumulative) (simplevfsreadprintnotcumulative)] /Names [(simplevfsreadprintnotcumulative) 218 0 R] >> endobj 1877 0 obj << /Limits [(sockettrace) (sockettrace)] /Names [(sockettrace) 448 0 R] >> endobj 1878 0 obj << /Limits [(sockettraceoutput) (sockettraceoutput)] /Names [(sockettraceoutput) 458 0 R] >> endobj 1879 0 obj << /Limits [(sockettracesect) (sockettracesect)] /Names [(sockettracesect) 851 0 R] >> endobj 1880 0 obj << /Limits [(syscall-open) (syscall-open)] /Names [(syscall-open) 118 0 R] >> endobj 1881 0 obj << /Limits [(syscallsbypid) (syscallsbypid)] /Names [(syscallsbypid) 1702 0 R] >> endobj 1882 0 obj << /Limits [(syscallsbyprocpid) (syscallsbyprocpid)] /Names [(syscallsbyprocpid) 670 0 R] >> endobj 1883 0 obj << /Limits [(syscallsbyprocpidoutput) (syscallsbyprocpidoutput)] /Names [(syscallsbyprocpidoutput) 668 0 R] >> endobj 1884 0 obj << /Limits [(syscallsbyprocpidsect) (syscallsbyprocpidsect)] /Names [(syscallsbyprocpidsect) 901 0 R] >> endobj 1885 0 obj << /Limits [(systemtapscript-events) (systemtapscript-events)] /Names [(systemtapscript-events) 253 0 R] >> endobj 1886 0 obj << /Limits [(systemtapscript-functions) (systemtapscript-functions)] /Names [(systemtapscript-functions) 128 0 R] >> endobj 1887 0 obj << /Limits [(systemtapscript-handler) (systemtapscript-handler)] /Names [(systemtapscript-handler) 344 0 R] >> endobj 1888 0 obj << /Limits [(systemtapsession) (systemtapsession)] /Names [(systemtapsession) 76 0 R] >> endobj 1889 0 obj << /Limits [(targetavailable) (targetavailable)] /Names [(targetavailable) 361 0 R] >> endobj 1890 0 obj << /Limits [(targetexample) (targetexample)] /Names [(targetexample) 144 0 R] >> endobj 1891 0 obj << /Limits [(targetprettyprinting) (targetprettyprinting)] /Names [(targetprettyprinting) 355 0 R] >> endobj 1892 0 obj << /Limits [(targetvariables) (targetvariables)] /Names [(targetvariables) 261 0 R] >> endobj 1893 0 obj << /Limits [(tcpconnections) (tcpconnections)] /Names [(tcpconnections) 464 0 R] >> endobj 1894 0 obj << /Limits [(tcpconnectionsoutput) (tcpconnectionsoutput)] /Names [(tcpconnectionsoutput) 1697 0 R] >> endobj 1895 0 obj << /Limits [(tcpconnectionssect) (tcpconnectionssect)] /Names [(tcpconnectionssect) 854 0 R] >> endobj 1896 0 obj << /Limits [(tcpdumplike) (tcpdumplike)] /Names [(tcpdumplike) 471 0 R] >> endobj 1897 0 obj << /Limits [(tcpdumplikeoutput) (tcpdumplikeoutput)] /Names [(tcpdumplikeoutput) 1698 0 R] >> endobj 1898 0 obj << /Limits [(tcpdumplikesect) (tcpdumplikesect)] /Names [(tcpdumplikesect) 857 0 R] >> endobj 1899 0 obj << /Limits [(testing) (testing)] /Names [(testing) 319 0 R] >> endobj 1900 0 obj << /Limits [(thread_indent) (thread_indent)] /Names [(thread_indent) 138 0 R] >> endobj 1901 0 obj << /Limits [(threadtimes) (threadtimes)] /Names [(threadtimes) 619 0 R] >> endobj 1902 0 obj << /Limits [(threadtimesoutput) (threadtimesoutput)] /Names [(threadtimesoutput) 617 0 R] >> endobj 1903 0 obj << /Limits [(threadtimessect) (threadtimessect)] /Names [(threadtimessect) 894 0 R] >> endobj 1904 0 obj << /Limits [(timeouts) (timeouts)] /Names [(timeouts) 634 0 R] >> endobj 1905 0 obj << /Limits [(timeoutsoutput) (timeoutsoutput)] /Names [(timeoutsoutput) 656 0 R] >> endobj 1906 0 obj << /Limits [(timeoutssect) (timeoutssect)] /Names [(timeoutssect) 646 0 R] >> endobj 1907 0 obj << /Limits [(timer) (timer)] /Names [(timer) 104 0 R] >> endobj 1908 0 obj << /Limits [(timerjiffies) (timerjiffies)] /Names [(timerjiffies) 150 0 R] >> endobj 1909 0 obj << /Limits [(topsys) (topsys)] /Names [(topsys) 643 0 R] >> endobj 1910 0 obj << /Limits [(topsysoutput) (topsysoutput)] /Names [(topsysoutput) 662 0 R] >> endobj 1911 0 obj << /Limits [(topsyssect) (topsyssect)] /Names [(topsyssect) 645 0 R] >> endobj 1912 0 obj << /Limits [(traceio) (traceio)] /Names [(traceio) 537 0 R] >> endobj 1913 0 obj << /Limits [(traceio2) (traceio2)] /Names [(traceio2) 547 0 R] >> endobj 1914 0 obj << /Limits [(traceio2output) (traceio2output)] /Names [(traceio2output) 1700 0 R] >> endobj 1915 0 obj << /Limits [(traceio2sect) (traceio2sect)] /Names [(traceio2sect) 874 0 R] >> endobj 1916 0 obj << /Limits [(traceiooutput) (traceiooutput)] /Names [(traceiooutput) 1699 0 R] >> endobj 1917 0 obj << /Limits [(traceiosect) (traceiosect)] /Names [(traceiosect) 871 0 R] >> endobj 1918 0 obj << /Limits [(typecasting) (typecasting)] /Names [(typecasting) 358 0 R] >> endobj 1919 0 obj << /Limits [(uevents) (uevents)] /Names [(uevents) 400 0 R] >> endobj 1920 0 obj << /Limits [(understanding-architecture-tools) (understanding-architecture-tools)] /Names [(understanding-architecture-tools) 78 0 R] >> endobj 1921 0 obj << /Limits [(understanding-how-systemtap-works) (understanding-how-systemtap-works)] /Names [(understanding-how-systemtap-works) 87 0 R] >> endobj 1922 0 obj << /Limits [(understanding-tapsets) (understanding-tapsets)] /Names [(understanding-tapsets) 394 0 R] >> endobj 1923 0 obj << /Limits [(useful-systemtap-scripts) (useful-systemtap-scripts)] /Names [(useful-systemtap-scripts) 424 0 R] >> endobj 1924 0 obj << /Limits [(userspace-probing) (userspace-probing)] /Names [(userspace-probing) 397 0 R] >> endobj 1925 0 obj << /Limits [(using-setup) (using-setup)] /Names [(using-setup) 80 0 R] >> endobj 1926 0 obj << /Limits [(using-systemtap) (using-systemtap)] /Names [(using-systemtap) 310 0 R] >> endobj 1927 0 obj << /Limits [(using-usage) (using-usage)] /Names [(using-usage) 324 0 R] >> endobj 1928 0 obj << /Limits [(ustack) (ustack)] /Names [(ustack) 405 0 R] >> endobj 1929 0 obj << /Limits [(utargetvariable) (utargetvariable)] /Names [(utargetvariable) 269 0 R] >> endobj 1930 0 obj << /Limits [(variablesconstructs) (variablesconstructs)] /Names [(variablesconstructs) 350 0 R] >> endobj 1931 0 obj << /Limits [(wildcards) (wildcards)] /Names [(wildcards) 99 0 R] >> endobj 1932 0 obj << /Limits [(SystemTap_Beginners_Guide-Preface) (wildcards)] /Kids [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 1905 0 R 1906 0 R 1907 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R] >> endobj 12 0 obj << /Type /Pages /Count 96 /Kids [10 0 R 20 0 R 411 0 R 927 0 R 28 0 R 31 0 R 34 0 R 40 0 R 423 0 R 44 0 R 47 0 R 50 0 R 85 0 R 61 0 R 64 0 R 706 0 R 127 0 R 68 0 R 74 0 R 92 0 R 430 0 R 95 0 R 105 0 R 117 0 R 124 0 R 139 0 R 145 0 R 151 0 R 274 0 R 160 0 R 162 0 R 170 0 R 176 0 R 499 0 R 186 0 R 199 0 R 207 0 R 219 0 R 231 0 R 237 0 R 239 0 R 248 0 R 260 0 R 267 0 R 278 0 R 415 0 R 417 0 R 439 0 R 449 0 R 465 0 R 472 0 R 480 0 R 487 0 R 497 0 R 507 0 R 518 0 R 521 0 R 532 0 R 546 0 R 548 0 R 556 0 R 562 0 R 583 0 R 596 0 R 594 0 R 616 0 R 618 0 R 630 0 R 633 0 R 640 0 R 654 0 R 652 0 R 669 0 R 679 0 R 685 0 R 695 0 R 698 0 R 710 0 R 713 0 R 716 0 R 730 0 R 733 0 R 739 0 R 742 0 R 744 0 R 1011 0 R 1139 0 R 1236 0 R 1308 0 R 1361 0 R 1433 0 R 1520 0 R 1594 0 R 1665 0 R 1689 0 R 1692 0 R ] >> endobj 1933 0 obj << /Type /Catalog /Pages 12 0 R /Lang (en) /Metadata 5 0 R /PageLabels 1934 0 R /Outlines 1705 0 R /PageMode /UseOutlines /Names 1935 0 R >> endobj 11 0 obj << /Font << /F9 1784 0 R /F10 1785 0 R /F12 1786 0 R /F11 1787 0 R /F13 1788 0 R /F1 1791 0 R /F2 1792 0 R /F3 1793 0 R /F4 1794 0 R /F5 1795 0 R >> /ProcSet [/PDF /ImageB /ImageC /Text] /ColorSpace << /DefaultRGB 4 0 R >> >> endobj 1934 0 obj << /Nums [0 7 0 R 2 279 0 R 3 842 0 R 4 21 0 R 8 422 0 R 9 41 0 R 12 75 0 R 13 51 0 R 15 699 0 R 16 125 0 R 17 65 0 R 19 86 0 R 20 429 0 R 21 93 0 R 25 137 0 R 28 268 0 R 29 157 0 R 33 498 0 R 34 182 0 R 44 275 0 R 45 412 0 R 47 437 0 R 54 505 0 R 63 595 0 R 64 588 0 R 65 607 0 R 70 653 0 R 71 641 0 R 72 667 0 R 77 707 0 R 85 928 0 R] >> endobj 1705 0 obj << /First 1704 0 R /Last 1783 0 R >> endobj 1935 0 obj << /Dests 1932 0 R >> endobj xref 0 1936 0000000000 65535 f 0000000015 00000 n 0000000234 00000 n 0000007120 00000 n 0000007140 00000 n 0000007173 00000 n 0000008403 00000 n 0000008423 00000 n 0000008450 00000 n 0000008805 00000 n 0000008824 00000 n 0000454059 00000 n 0000453067 00000 n 0000009017 00000 n 0000009081 00000 n 0000009219 00000 n 0000009281 00000 n 0000009419 00000 n 0000010559 00000 n 0000010580 00000 n 0000010614 00000 n 0000010825 00000 n 0000010859 00000 n 0000010939 00000 n 0000011079 00000 n 0000011215 00000 n 0000013287 00000 n 0000013308 00000 n 0000013342 00000 n 0000013553 00000 n 0000016341 00000 n 0000016362 00000 n 0000016556 00000 n 0000018478 00000 n 0000018499 00000 n 0000018693 00000 n 0000018762 00000 n 0000018902 00000 n 0000019763 00000 n 0000019783 00000 n 0000019810 00000 n 0000020021 00000 n 0000020055 00000 n 0000020633 00000 n 0000020653 00000 n 0000020847 00000 n 0000022791 00000 n 0000022812 00000 n 0000023006 00000 n 0000025445 00000 n 0000025466 00000 n 0000025660 00000 n 0000025694 00000 n 0000025774 00000 n 0000025914 00000 n 0000026053 00000 n 0000026133 00000 n 0000026273 00000 n 0000026412 00000 n 0000029001 00000 n 0000029022 00000 n 0000029070 00000 n 0000029281 00000 n 0000031599 00000 n 0000031620 00000 n 0000031814 00000 n 0000031849 00000 n 0000033574 00000 n 0000033595 00000 n 0000033789 00000 n 0000033929 00000 n 0000034069 00000 n 0000036233 00000 n 0000036254 00000 n 0000036288 00000 n 0000036499 00000 n 0000036533 00000 n 0000036613 00000 n 0000036752 00000 n 0000036832 00000 n 0000036972 00000 n 0000037052 00000 n 0000037191 00000 n 0000039682 00000 n 0000039703 00000 n 0000039744 00000 n 0000039955 00000 n 0000039990 00000 n 0000040070 00000 n 0000040210 00000 n 0000042366 00000 n 0000042387 00000 n 0000042414 00000 n 0000042625 00000 n 0000042660 00000 n 0000045751 00000 n 0000042742 00000 n 0000042882 00000 n 0000043022 00000 n 0000043161 00000 n 0000043241 00000 n 0000043382 00000 n 0000045679 00000 n 0000045701 00000 n 0000045964 00000 n 0000048266 00000 n 0000046046 00000 n 0000046188 00000 n 0000048215 00000 n 0000048237 00000 n 0000048480 00000 n 0000048564 00000 n 0000048705 00000 n 0000048847 00000 n 0000048988 00000 n 0000051496 00000 n 0000051518 00000 n 0000051563 00000 n 0000051777 00000 n 0000051861 00000 n 0000052002 00000 n 0000052143 00000 n 0000053737 00000 n 0000053759 00000 n 0000053796 00000 n 0000054010 00000 n 0000054045 00000 n 0000057105 00000 n 0000054127 00000 n 0000054211 00000 n 0000054353 00000 n 0000054495 00000 n 0000054578 00000 n 0000054720 00000 n 0000054861 00000 n 0000057030 00000 n 0000057052 00000 n 0000057319 00000 n 0000057355 00000 n 0000059859 00000 n 0000057439 00000 n 0000057580 00000 n 0000059808 00000 n 0000059830 00000 n 0000060073 00000 n 0000062775 00000 n 0000060155 00000 n 0000060297 00000 n 0000062724 00000 n 0000062746 00000 n 0000062989 00000 n 0000066008 00000 n 0000063071 00000 n 0000063212 00000 n 0000063354 00000 n 0000065949 00000 n 0000065971 00000 n 0000066222 00000 n 0000066258 00000 n 0000069025 00000 n 0000069047 00000 n 0000069243 00000 n 0000072857 00000 n 0000069327 00000 n 0000069411 00000 n 0000069553 00000 n 0000069695 00000 n 0000072798 00000 n 0000072820 00000 n 0000073071 00000 n 0000075691 00000 n 0000073155 00000 n 0000073296 00000 n 0000075640 00000 n 0000075662 00000 n 0000075905 00000 n 0000078562 00000 n 0000075989 00000 n 0000076130 00000 n 0000076271 00000 n 0000078503 00000 n 0000078525 00000 n 0000078776 00000 n 0000078812 00000 n 0000175955 00000 n 0000078953 00000 n 0000082428 00000 n 0000079037 00000 n 0000079177 00000 n 0000079319 00000 n 0000079460 00000 n 0000079542 00000 n 0000079684 00000 n 0000079768 00000 n 0000079908 00000 n 0000082337 00000 n 0000082359 00000 n 0000082642 00000 n 0000082784 00000 n 0000085822 00000 n 0000082868 00000 n 0000083009 00000 n 0000083151 00000 n 0000083293 00000 n 0000085747 00000 n 0000085769 00000 n 0000086036 00000 n 0000089485 00000 n 0000086120 00000 n 0000086262 00000 n 0000086404 00000 n 0000086546 00000 n 0000086687 00000 n 0000086771 00000 n 0000086912 00000 n 0000087051 00000 n 0000089394 00000 n 0000089416 00000 n 0000089699 00000 n 0000091182 00000 n 0000089781 00000 n 0000089922 00000 n 0000091131 00000 n 0000091153 00000 n 0000091396 00000 n 0000091537 00000 n 0000091621 00000 n 0000091763 00000 n 0000091904 00000 n 0000093957 00000 n 0000093979 00000 n 0000094024 00000 n 0000094238 00000 n 0000094322 00000 n 0000094464 00000 n 0000096615 00000 n 0000096637 00000 n 0000096666 00000 n 0000096880 00000 n 0000099702 00000 n 0000096962 00000 n 0000097103 00000 n 0000097245 00000 n 0000097387 00000 n 0000097529 00000 n 0000099627 00000 n 0000099649 00000 n 0000099916 00000 n 0000103199 00000 n 0000099998 00000 n 0000100139 00000 n 0000100281 00000 n 0000100422 00000 n 0000152002 00000 n 0000100564 00000 n 0000100706 00000 n 0000103116 00000 n 0000103138 00000 n 0000103413 00000 n 0000105879 00000 n 0000105901 00000 n 0000106097 00000 n 0000106181 00000 n 0000106323 00000 n 0000106463 00000 n 0000108246 00000 n 0000108268 00000 n 0000108305 00000 n 0000108519 00000 n 0000108555 00000 n 0000108637 00000 n 0000108779 00000 n 0000111399 00000 n 0000111421 00000 n 0000111450 00000 n 0000111664 00000 n 0000111700 00000 n 0000114161 00000 n 0000114183 00000 n 0000114379 00000 n 0000114414 00000 n 0000114495 00000 n 0000114636 00000 n 0000114778 00000 n 0000114859 00000 n 0000114999 00000 n 0000115141 00000 n 0000115224 00000 n 0000115365 00000 n 0000115507 00000 n 0000115590 00000 n 0000115732 00000 n 0000115874 00000 n 0000115957 00000 n 0000116098 00000 n 0000116238 00000 n 0000116321 00000 n 0000116463 00000 n 0000116605 00000 n 0000148894 00000 n 0000116746 00000 n 0000116888 00000 n 0000148976 00000 n 0000117030 00000 n 0000117172 00000 n 0000149058 00000 n 0000117314 00000 n 0000117456 00000 n 0000149141 00000 n 0000117598 00000 n 0000117740 00000 n 0000117821 00000 n 0000117962 00000 n 0000118104 00000 n 0000118245 00000 n 0000118386 00000 n 0000118527 00000 n 0000118668 00000 n 0000118809 00000 n 0000118950 00000 n 0000119032 00000 n 0000119174 00000 n 0000119314 00000 n 0000119456 00000 n 0000119598 00000 n 0000119681 00000 n 0000119823 00000 n 0000119965 00000 n 0000120107 00000 n 0000120249 00000 n 0000120333 00000 n 0000120475 00000 n 0000120617 00000 n 0000120698 00000 n 0000120840 00000 n 0000120982 00000 n 0000121121 00000 n 0000121262 00000 n 0000121403 00000 n 0000121544 00000 n 0000121625 00000 n 0000121767 00000 n 0000121909 00000 n 0000122051 00000 n 0000122193 00000 n 0000122277 00000 n 0000122419 00000 n 0000122561 00000 n 0000122645 00000 n 0000122787 00000 n 0000122927 00000 n 0000123011 00000 n 0000123153 00000 n 0000123295 00000 n 0000123437 00000 n 0000123579 00000 n 0000123661 00000 n 0000123803 00000 n 0000123945 00000 n 0000124029 00000 n 0000124171 00000 n 0000124313 00000 n 0000124397 00000 n 0000124539 00000 n 0000124681 00000 n 0000124763 00000 n 0000124905 00000 n 0000125047 00000 n 0000125130 00000 n 0000125272 00000 n 0000125414 00000 n 0000175873 00000 n 0000125556 00000 n 0000125698 00000 n 0000176039 00000 n 0000125840 00000 n 0000125982 00000 n 0000126124 00000 n 0000126264 00000 n 0000126348 00000 n 0000126490 00000 n 0000126632 00000 n 0000126716 00000 n 0000126858 00000 n 0000127000 00000 n 0000127142 00000 n 0000127282 00000 n 0000127424 00000 n 0000127566 00000 n 0000127650 00000 n 0000127792 00000 n 0000127934 00000 n 0000128018 00000 n 0000128159 00000 n 0000128301 00000 n 0000128383 00000 n 0000128525 00000 n 0000128667 00000 n 0000128749 00000 n 0000128890 00000 n 0000129032 00000 n 0000129116 00000 n 0000129258 00000 n 0000129400 00000 n 0000129540 00000 n 0000129680 00000 n 0000129762 00000 n 0000129902 00000 n 0000130042 00000 n 0000145107 00000 n 0000145130 00000 n 0000145903 00000 n 0000146117 00000 n 0000146153 00000 n 0000146493 00000 n 0000146514 00000 n 0000146710 00000 n 0000148651 00000 n 0000146794 00000 n 0000146936 00000 n 0000148600 00000 n 0000148622 00000 n 0000148865 00000 n 0000151752 00000 n 0000149225 00000 n 0000149307 00000 n 0000149449 00000 n 0000151701 00000 n 0000151723 00000 n 0000151966 00000 n 0000155171 00000 n 0000152086 00000 n 0000152227 00000 n 0000152369 00000 n 0000152510 00000 n 0000155104 00000 n 0000155126 00000 n 0000155385 00000 n 0000155421 00000 n 0000158476 00000 n 0000155504 00000 n 0000155644 00000 n 0000155784 00000 n 0000155926 00000 n 0000156068 00000 n 0000156210 00000 n 0000158393 00000 n 0000158415 00000 n 0000158690 00000 n 0000161592 00000 n 0000158772 00000 n 0000158913 00000 n 0000159055 00000 n 0000159197 00000 n 0000159338 00000 n 0000159480 00000 n 0000161509 00000 n 0000161531 00000 n 0000161806 00000 n 0000161890 00000 n 0000162031 00000 n 0000162173 00000 n 0000162313 00000 n 0000162454 00000 n 0000162596 00000 n 0000165118 00000 n 0000162680 00000 n 0000162819 00000 n 0000162961 00000 n 0000165019 00000 n 0000165041 00000 n 0000165332 00000 n 0000167834 00000 n 0000165414 00000 n 0000165556 00000 n 0000165698 00000 n 0000165840 00000 n 0000167767 00000 n 0000167789 00000 n 0000168048 00000 n 0000170564 00000 n 0000168130 00000 n 0000168271 00000 n 0000168411 00000 n 0000170505 00000 n 0000170527 00000 n 0000170778 00000 n 0000173801 00000 n 0000170862 00000 n 0000171004 00000 n 0000171145 00000 n 0000171287 00000 n 0000171428 00000 n 0000173726 00000 n 0000173748 00000 n 0000174015 00000 n 0000175619 00000 n 0000175641 00000 n 0000175837 00000 n 0000178757 00000 n 0000176123 00000 n 0000176205 00000 n 0000176346 00000 n 0000178706 00000 n 0000178728 00000 n 0000178971 00000 n 0000179007 00000 n 0000182170 00000 n 0000179091 00000 n 0000179230 00000 n 0000179370 00000 n 0000179509 00000 n 0000179651 00000 n 0000179791 00000 n 0000182087 00000 n 0000182109 00000 n 0000182384 00000 n 0000184332 00000 n 0000184354 00000 n 0000184550 00000 n 0000185903 00000 n 0000185925 00000 n 0000186121 00000 n 0000186203 00000 n 0000186343 00000 n 0000186485 00000 n 0000186625 00000 n 0000186767 00000 n 0000186849 00000 n 0000186991 00000 n 0000187132 00000 n 0000187274 00000 n 0000190038 00000 n 0000187358 00000 n 0000187499 00000 n 0000189931 00000 n 0000189953 00000 n 0000190252 00000 n 0000190336 00000 n 0000190477 00000 n 0000190619 00000 n 0000190761 00000 n 0000190902 00000 n 0000191044 00000 n 0000193079 00000 n 0000193101 00000 n 0000193162 00000 n 0000193376 00000 n 0000195584 00000 n 0000193458 00000 n 0000193599 00000 n 0000195533 00000 n 0000195555 00000 n 0000195798 00000 n 0000195940 00000 n 0000196082 00000 n 0000198495 00000 n 0000196166 00000 n 0000196307 00000 n 0000198428 00000 n 0000198450 00000 n 0000198709 00000 n 0000203747 00000 n 0000198793 00000 n 0000198877 00000 n 0000199019 00000 n 0000199161 00000 n 0000199300 00000 n 0000199384 00000 n 0000199524 00000 n 0000199608 00000 n 0000199748 00000 n 0000199888 00000 n 0000200026 00000 n 0000200168 00000 n 0000200310 00000 n 0000200452 00000 n 0000200593 00000 n 0000200735 00000 n 0000200876 00000 n 0000203600 00000 n 0000203622 00000 n 0000203961 00000 n 0000206229 00000 n 0000204043 00000 n 0000204182 00000 n 0000206178 00000 n 0000206200 00000 n 0000206443 00000 n 0000206479 00000 n 0000208568 00000 n 0000206621 00000 n 0000208267 00000 n 0000208289 00000 n 0000208318 00000 n 0000208532 00000 n 0000211757 00000 n 0000208652 00000 n 0000208794 00000 n 0000208876 00000 n 0000209017 00000 n 0000209158 00000 n 0000209299 00000 n 0000209381 00000 n 0000209521 00000 n 0000211674 00000 n 0000211696 00000 n 0000211971 00000 n 0000212007 00000 n 0000212091 00000 n 0000212230 00000 n 0000212371 00000 n 0000212513 00000 n 0000212653 00000 n 0000214874 00000 n 0000214896 00000 n 0000214949 00000 n 0000215163 00000 n 0000218217 00000 n 0000215247 00000 n 0000215331 00000 n 0000215472 00000 n 0000215613 00000 n 0000215755 00000 n 0000215896 00000 n 0000216038 00000 n 0000218134 00000 n 0000218156 00000 n 0000218431 00000 n 0000220027 00000 n 0000220049 00000 n 0000220245 00000 n 0000221520 00000 n 0000221542 00000 n 0000221738 00000 n 0000221820 00000 n 0000221961 00000 n 0000222103 00000 n 0000223923 00000 n 0000223945 00000 n 0000223982 00000 n 0000224196 00000 n 0000224232 00000 n 0000227272 00000 n 0000224374 00000 n 0000227190 00000 n 0000224515 00000 n 0000224597 00000 n 0000224739 00000 n 0000224880 00000 n 0000226865 00000 n 0000226887 00000 n 0000226940 00000 n 0000227154 00000 n 0000230652 00000 n 0000227356 00000 n 0000227498 00000 n 0000227580 00000 n 0000227722 00000 n 0000227863 00000 n 0000228005 00000 n 0000228147 00000 n 0000228287 00000 n 0000228369 00000 n 0000228509 00000 n 0000230553 00000 n 0000230575 00000 n 0000230866 00000 n 0000230902 00000 n 0000233757 00000 n 0000230986 00000 n 0000231070 00000 n 0000231211 00000 n 0000231353 00000 n 0000231494 00000 n 0000231636 00000 n 0000233682 00000 n 0000233704 00000 n 0000233971 00000 n 0000236321 00000 n 0000234054 00000 n 0000234195 00000 n 0000236270 00000 n 0000236292 00000 n 0000236535 00000 n 0000239022 00000 n 0000236617 00000 n 0000236758 00000 n 0000236899 00000 n 0000237041 00000 n 0000237183 00000 n 0000238947 00000 n 0000238969 00000 n 0000239236 00000 n 0000239576 00000 n 0000239597 00000 n 0000239793 00000 n 0000242178 00000 n 0000242200 00000 n 0000242396 00000 n 0000242431 00000 n 0000242513 00000 n 0000242655 00000 n 0000242795 00000 n 0000245252 00000 n 0000245274 00000 n 0000245311 00000 n 0000245525 00000 n 0000245561 00000 n 0000247609 00000 n 0000247631 00000 n 0000247827 00000 n 0000249677 00000 n 0000249699 00000 n 0000249895 00000 n 0000250833 00000 n 0000250854 00000 n 0000251050 00000 n 0000251134 00000 n 0000251276 00000 n 0000251356 00000 n 0000251498 00000 n 0000251577 00000 n 0000251719 00000 n 0000251798 00000 n 0000251940 00000 n 0000252082 00000 n 0000252224 00000 n 0000254389 00000 n 0000254411 00000 n 0000254480 00000 n 0000254694 00000 n 0000255034 00000 n 0000255055 00000 n 0000255251 00000 n 0000255392 00000 n 0000255533 00000 n 0000256187 00000 n 0000256208 00000 n 0000256245 00000 n 0000256459 00000 n 0000256799 00000 n 0000256820 00000 n 0000257016 00000 n 0000270884 00000 n 0000257098 00000 n 0000257182 00000 n 0000257324 00000 n 0000257407 00000 n 0000257549 00000 n 0000257633 00000 n 0000257775 00000 n 0000257859 00000 n 0000258001 00000 n 0000258086 00000 n 0000258228 00000 n 0000258313 00000 n 0000258455 00000 n 0000258540 00000 n 0000258682 00000 n 0000258767 00000 n 0000258909 00000 n 0000258993 00000 n 0000259135 00000 n 0000259218 00000 n 0000259360 00000 n 0000259444 00000 n 0000259586 00000 n 0000259670 00000 n 0000259812 00000 n 0000259896 00000 n 0000260038 00000 n 0000260122 00000 n 0000260264 00000 n 0000260347 00000 n 0000260489 00000 n 0000260572 00000 n 0000260714 00000 n 0000260797 00000 n 0000260939 00000 n 0000261023 00000 n 0000261163 00000 n 0000261247 00000 n 0000261387 00000 n 0000261471 00000 n 0000261613 00000 n 0000261697 00000 n 0000261839 00000 n 0000261923 00000 n 0000262065 00000 n 0000262149 00000 n 0000262291 00000 n 0000262375 00000 n 0000262517 00000 n 0000262659 00000 n 0000262801 00000 n 0000262943 00000 n 0000263085 00000 n 0000263227 00000 n 0000263369 00000 n 0000263511 00000 n 0000263595 00000 n 0000263737 00000 n 0000263821 00000 n 0000263963 00000 n 0000264047 00000 n 0000264189 00000 n 0000264273 00000 n 0000264415 00000 n 0000264557 00000 n 0000264641 00000 n 0000264783 00000 n 0000264867 00000 n 0000265009 00000 n 0000265093 00000 n 0000265235 00000 n 0000265377 00000 n 0000265461 00000 n 0000265603 00000 n 0000265687 00000 n 0000265829 00000 n 0000265971 00000 n 0000266055 00000 n 0000266197 00000 n 0000266339 00000 n 0000266423 00000 n 0000266565 00000 n 0000266707 00000 n 0000266791 00000 n 0000266933 00000 n 0000267075 00000 n 0000267159 00000 n 0000267301 00000 n 0000267443 00000 n 0000267585 00000 n 0000267727 00000 n 0000267869 00000 n 0000267953 00000 n 0000268095 00000 n 0000268235 00000 n 0000270393 00000 n 0000270415 00000 n 0000271098 00000 n 0000271133 00000 n 0000271274 00000 n 0000271416 00000 n 0000271498 00000 n 0000271639 00000 n 0000271781 00000 n 0000271865 00000 n 0000272007 00000 n 0000272149 00000 n 0000272231 00000 n 0000272373 00000 n 0000272513 00000 n 0000272595 00000 n 0000272737 00000 n 0000272879 00000 n 0000272961 00000 n 0000273103 00000 n 0000273243 00000 n 0000273325 00000 n 0000273467 00000 n 0000273609 00000 n 0000273693 00000 n 0000273834 00000 n 0000273976 00000 n 0000274118 00000 n 0000274260 00000 n 0000274342 00000 n 0000274484 00000 n 0000274626 00000 n 0000274710 00000 n 0000274852 00000 n 0000274994 00000 n 0000275076 00000 n 0000275218 00000 n 0000275360 00000 n 0000275502 00000 n 0000275644 00000 n 0000275728 00000 n 0000275870 00000 n 0000276012 00000 n 0000276094 00000 n 0000276236 00000 n 0000276375 00000 n 0000276459 00000 n 0000276600 00000 n 0000276742 00000 n 0000276826 00000 n 0000276968 00000 n 0000277110 00000 n 0000277194 00000 n 0000277336 00000 n 0000277476 00000 n 0000277560 00000 n 0000277701 00000 n 0000277841 00000 n 0000277982 00000 n 0000278124 00000 n 0000278265 00000 n 0000278407 00000 n 0000278491 00000 n 0000278633 00000 n 0000278775 00000 n 0000278858 00000 n 0000278998 00000 n 0000279140 00000 n 0000279281 00000 n 0000279421 00000 n 0000279503 00000 n 0000279644 00000 n 0000279786 00000 n 0000279870 00000 n 0000280011 00000 n 0000280153 00000 n 0000280235 00000 n 0000280376 00000 n 0000280518 00000 n 0000280600 00000 n 0000280741 00000 n 0000280883 00000 n 0000280965 00000 n 0000281105 00000 n 0000281247 00000 n 0000290602 00000 n 0000290624 00000 n 0000291109 00000 n 0000291323 00000 n 0000291359 00000 n 0000291501 00000 n 0000291643 00000 n 0000291727 00000 n 0000291869 00000 n 0000292011 00000 n 0000292153 00000 n 0000292237 00000 n 0000292379 00000 n 0000292521 00000 n 0000292604 00000 n 0000292746 00000 n 0000292828 00000 n 0000292970 00000 n 0000293053 00000 n 0000293193 00000 n 0000293335 00000 n 0000293419 00000 n 0000293561 00000 n 0000293645 00000 n 0000293787 00000 n 0000293871 00000 n 0000294013 00000 n 0000294155 00000 n 0000294297 00000 n 0000294439 00000 n 0000294581 00000 n 0000294665 00000 n 0000294807 00000 n 0000294949 00000 n 0000295032 00000 n 0000295174 00000 n 0000295316 00000 n 0000295458 00000 n 0000295600 00000 n 0000295742 00000 n 0000295884 00000 n 0000296026 00000 n 0000296168 00000 n 0000296309 00000 n 0000296449 00000 n 0000296591 00000 n 0000296675 00000 n 0000296817 00000 n 0000296959 00000 n 0000297101 00000 n 0000297185 00000 n 0000297327 00000 n 0000297411 00000 n 0000297553 00000 n 0000297637 00000 n 0000297779 00000 n 0000297921 00000 n 0000298005 00000 n 0000298147 00000 n 0000298231 00000 n 0000298373 00000 n 0000298458 00000 n 0000298600 00000 n 0000298742 00000 n 0000298884 00000 n 0000299026 00000 n 0000299109 00000 n 0000299251 00000 n 0000299393 00000 n 0000299476 00000 n 0000299618 00000 n 0000299701 00000 n 0000299843 00000 n 0000299926 00000 n 0000300068 00000 n 0000300151 00000 n 0000300294 00000 n 0000300380 00000 n 0000300524 00000 n 0000300609 00000 n 0000300753 00000 n 0000300837 00000 n 0000300981 00000 n 0000301124 00000 n 0000303309 00000 n 0000303332 00000 n 0000303791 00000 n 0000304008 00000 n 0000304151 00000 n 0000304294 00000 n 0000304378 00000 n 0000304522 00000 n 0000304607 00000 n 0000304751 00000 n 0000304836 00000 n 0000304980 00000 n 0000305065 00000 n 0000305209 00000 n 0000305294 00000 n 0000305438 00000 n 0000305523 00000 n 0000305667 00000 n 0000305752 00000 n 0000305896 00000 n 0000305981 00000 n 0000306125 00000 n 0000306268 00000 n 0000306354 00000 n 0000306498 00000 n 0000306583 00000 n 0000306727 00000 n 0000306871 00000 n 0000306956 00000 n 0000307100 00000 n 0000307185 00000 n 0000307329 00000 n 0000307414 00000 n 0000307558 00000 n 0000307702 00000 n 0000307787 00000 n 0000307931 00000 n 0000308016 00000 n 0000308160 00000 n 0000308303 00000 n 0000308387 00000 n 0000308531 00000 n 0000308616 00000 n 0000308760 00000 n 0000308845 00000 n 0000308989 00000 n 0000309074 00000 n 0000309218 00000 n 0000309302 00000 n 0000309446 00000 n 0000309531 00000 n 0000309675 00000 n 0000309760 00000 n 0000309904 00000 n 0000310047 00000 n 0000310190 00000 n 0000310333 00000 n 0000310476 00000 n 0000310561 00000 n 0000310703 00000 n 0000310788 00000 n 0000310930 00000 n 0000311014 00000 n 0000311158 00000 n 0000311243 00000 n 0000311387 00000 n 0000311469 00000 n 0000311613 00000 n 0000311756 00000 n 0000311899 00000 n 0000312043 00000 n 0000312128 00000 n 0000312272 00000 n 0000312357 00000 n 0000312501 00000 n 0000312587 00000 n 0000312731 00000 n 0000312815 00000 n 0000312959 00000 n 0000313043 00000 n 0000313187 00000 n 0000313272 00000 n 0000313416 00000 n 0000313502 00000 n 0000313646 00000 n 0000313732 00000 n 0000313876 00000 n 0000313961 00000 n 0000314105 00000 n 0000314191 00000 n 0000314335 00000 n 0000314419 00000 n 0000314563 00000 n 0000314645 00000 n 0000314789 00000 n 0000314933 00000 n 0000315076 00000 n 0000315160 00000 n 0000315304 00000 n 0000315448 00000 n 0000315531 00000 n 0000315675 00000 n 0000315818 00000 n 0000315961 00000 n 0000316105 00000 n 0000316249 00000 n 0000316393 00000 n 0000316478 00000 n 0000316622 00000 n 0000316707 00000 n 0000316851 00000 n 0000316994 00000 n 0000317079 00000 n 0000317223 00000 n 0000317307 00000 n 0000317451 00000 n 0000317594 00000 n 0000317738 00000 n 0000317823 00000 n 0000317967 00000 n 0000318052 00000 n 0000318196 00000 n 0000318281 00000 n 0000318424 00000 n 0000318509 00000 n 0000318651 00000 n 0000318736 00000 n 0000318878 00000 n 0000321479 00000 n 0000321502 00000 n 0000322190 00000 n 0000322407 00000 n 0000322492 00000 n 0000322636 00000 n 0000322721 00000 n 0000322863 00000 n 0000322947 00000 n 0000323091 00000 n 0000323233 00000 n 0000323318 00000 n 0000323462 00000 n 0000323547 00000 n 0000323691 00000 n 0000323776 00000 n 0000323920 00000 n 0000324005 00000 n 0000324149 00000 n 0000324234 00000 n 0000324378 00000 n 0000324522 00000 n 0000324665 00000 n 0000324750 00000 n 0000324894 00000 n 0000324979 00000 n 0000325123 00000 n 0000325208 00000 n 0000325352 00000 n 0000325437 00000 n 0000325581 00000 n 0000325723 00000 n 0000325867 00000 n 0000325952 00000 n 0000326096 00000 n 0000326181 00000 n 0000326325 00000 n 0000326469 00000 n 0000326613 00000 n 0000326757 00000 n 0000326842 00000 n 0000326986 00000 n 0000327130 00000 n 0000327273 00000 n 0000327356 00000 n 0000327500 00000 n 0000327643 00000 n 0000327787 00000 n 0000327931 00000 n 0000328016 00000 n 0000328159 00000 n 0000328243 00000 n 0000328385 00000 n 0000328470 00000 n 0000328612 00000 n 0000328698 00000 n 0000328842 00000 n 0000328985 00000 n 0000329128 00000 n 0000329213 00000 n 0000329357 00000 n 0000329442 00000 n 0000329586 00000 n 0000329670 00000 n 0000329814 00000 n 0000329899 00000 n 0000330043 00000 n 0000330128 00000 n 0000330272 00000 n 0000330416 00000 n 0000330559 00000 n 0000330702 00000 n 0000330787 00000 n 0000330931 00000 n 0000331074 00000 n 0000331218 00000 n 0000331304 00000 n 0000331448 00000 n 0000331534 00000 n 0000331678 00000 n 0000331762 00000 n 0000331906 00000 n 0000331992 00000 n 0000332136 00000 n 0000332221 00000 n 0000332365 00000 n 0000332451 00000 n 0000332595 00000 n 0000332739 00000 n 0000332825 00000 n 0000332969 00000 n 0000333113 00000 n 0000333257 00000 n 0000333401 00000 n 0000333545 00000 n 0000333689 00000 n 0000333831 00000 n 0000336069 00000 n 0000336092 00000 n 0000336654 00000 n 0000336871 00000 n 0000337015 00000 n 0000337100 00000 n 0000337244 00000 n 0000337388 00000 n 0000337532 00000 n 0000337676 00000 n 0000337820 00000 n 0000337905 00000 n 0000338049 00000 n 0000338192 00000 n 0000338336 00000 n 0000338421 00000 n 0000338565 00000 n 0000338650 00000 n 0000338794 00000 n 0000338879 00000 n 0000339023 00000 n 0000339108 00000 n 0000339252 00000 n 0000339395 00000 n 0000339539 00000 n 0000339683 00000 n 0000339768 00000 n 0000339912 00000 n 0000340056 00000 n 0000340141 00000 n 0000340285 00000 n 0000340429 00000 n 0000340572 00000 n 0000340716 00000 n 0000340800 00000 n 0000340944 00000 n 0000341087 00000 n 0000341231 00000 n 0000341374 00000 n 0000341516 00000 n 0000341660 00000 n 0000341804 00000 n 0000341947 00000 n 0000342091 00000 n 0000342235 00000 n 0000342379 00000 n 0000342522 00000 n 0000342666 00000 n 0000342809 00000 n 0000342952 00000 n 0000343095 00000 n 0000343238 00000 n 0000343322 00000 n 0000343466 00000 n 0000343610 00000 n 0000343754 00000 n 0000343838 00000 n 0000343982 00000 n 0000344126 00000 n 0000344270 00000 n 0000344354 00000 n 0000344498 00000 n 0000344582 00000 n 0000344726 00000 n 0000344870 00000 n 0000344954 00000 n 0000345098 00000 n 0000345241 00000 n 0000345384 00000 n 0000345526 00000 n 0000345668 00000 n 0000345810 00000 n 0000347999 00000 n 0000348022 00000 n 0000348530 00000 n 0000348747 00000 n 0000348832 00000 n 0000348976 00000 n 0000349059 00000 n 0000349203 00000 n 0000349347 00000 n 0000349491 00000 n 0000349634 00000 n 0000349776 00000 n 0000349918 00000 n 0000350059 00000 n 0000350201 00000 n 0000350343 00000 n 0000350485 00000 n 0000350626 00000 n 0000350770 00000 n 0000350914 00000 n 0000351057 00000 n 0000351143 00000 n 0000351286 00000 n 0000351429 00000 n 0000351572 00000 n 0000351715 00000 n 0000351857 00000 n 0000351998 00000 n 0000352141 00000 n 0000352285 00000 n 0000352428 00000 n 0000352572 00000 n 0000352716 00000 n 0000352860 00000 n 0000353004 00000 n 0000353148 00000 n 0000353292 00000 n 0000353436 00000 n 0000353580 00000 n 0000353724 00000 n 0000353868 00000 n 0000354011 00000 n 0000354155 00000 n 0000354298 00000 n 0000354442 00000 n 0000354586 00000 n 0000354730 00000 n 0000354874 00000 n 0000355018 00000 n 0000355162 00000 n 0000355306 00000 n 0000355450 00000 n 0000355591 00000 n 0000357632 00000 n 0000357655 00000 n 0000358091 00000 n 0000358308 00000 n 0000358452 00000 n 0000358595 00000 n 0000358738 00000 n 0000358881 00000 n 0000359024 00000 n 0000359167 00000 n 0000359310 00000 n 0000359453 00000 n 0000359596 00000 n 0000359739 00000 n 0000359882 00000 n 0000360025 00000 n 0000360168 00000 n 0000360311 00000 n 0000360454 00000 n 0000360597 00000 n 0000360740 00000 n 0000360883 00000 n 0000361026 00000 n 0000361169 00000 n 0000361312 00000 n 0000361455 00000 n 0000361598 00000 n 0000361741 00000 n 0000361884 00000 n 0000362027 00000 n 0000362170 00000 n 0000362313 00000 n 0000362456 00000 n 0000362599 00000 n 0000362742 00000 n 0000362885 00000 n 0000362970 00000 n 0000363114 00000 n 0000363255 00000 n 0000363398 00000 n 0000363542 00000 n 0000363686 00000 n 0000363830 00000 n 0000363974 00000 n 0000364118 00000 n 0000364262 00000 n 0000364406 00000 n 0000364550 00000 n 0000364694 00000 n 0000364837 00000 n 0000364981 00000 n 0000365125 00000 n 0000365269 00000 n 0000365413 00000 n 0000365557 00000 n 0000365701 00000 n 0000365845 00000 n 0000365989 00000 n 0000366133 00000 n 0000366277 00000 n 0000366421 00000 n 0000366506 00000 n 0000366650 00000 n 0000366794 00000 n 0000366938 00000 n 0000367082 00000 n 0000367226 00000 n 0000367370 00000 n 0000367514 00000 n 0000367598 00000 n 0000367742 00000 n 0000367883 00000 n 0000370274 00000 n 0000370297 00000 n 0000370904 00000 n 0000371121 00000 n 0000371264 00000 n 0000371407 00000 n 0000371550 00000 n 0000371693 00000 n 0000371837 00000 n 0000371981 00000 n 0000372124 00000 n 0000372267 00000 n 0000372410 00000 n 0000372553 00000 n 0000372697 00000 n 0000372841 00000 n 0000372985 00000 n 0000373070 00000 n 0000373214 00000 n 0000373298 00000 n 0000373442 00000 n 0000373586 00000 n 0000373729 00000 n 0000373872 00000 n 0000374015 00000 n 0000374159 00000 n 0000374303 00000 n 0000374447 00000 n 0000374591 00000 n 0000374735 00000 n 0000374878 00000 n 0000375021 00000 n 0000375165 00000 n 0000375307 00000 n 0000375451 00000 n 0000375595 00000 n 0000375739 00000 n 0000375882 00000 n 0000376025 00000 n 0000376167 00000 n 0000376308 00000 n 0000376452 00000 n 0000376596 00000 n 0000376740 00000 n 0000376884 00000 n 0000377028 00000 n 0000377172 00000 n 0000377316 00000 n 0000377460 00000 n 0000377604 00000 n 0000377748 00000 n 0000377892 00000 n 0000378036 00000 n 0000378180 00000 n 0000378324 00000 n 0000378468 00000 n 0000378612 00000 n 0000378755 00000 n 0000378899 00000 n 0000379043 00000 n 0000379187 00000 n 0000379331 00000 n 0000379475 00000 n 0000379619 00000 n 0000379763 00000 n 0000379907 00000 n 0000380051 00000 n 0000380135 00000 n 0000380279 00000 n 0000380422 00000 n 0000380565 00000 n 0000380709 00000 n 0000380853 00000 n 0000380997 00000 n 0000381081 00000 n 0000381225 00000 n 0000381309 00000 n 0000381453 00000 n 0000381597 00000 n 0000381682 00000 n 0000381826 00000 n 0000381970 00000 n 0000382114 00000 n 0000382258 00000 n 0000382343 00000 n 0000382486 00000 n 0000382628 00000 n 0000385191 00000 n 0000385214 00000 n 0000385920 00000 n 0000386137 00000 n 0000386222 00000 n 0000386366 00000 n 0000386510 00000 n 0000386654 00000 n 0000386798 00000 n 0000386941 00000 n 0000387085 00000 n 0000387229 00000 n 0000387373 00000 n 0000387516 00000 n 0000387660 00000 n 0000387804 00000 n 0000387948 00000 n 0000388092 00000 n 0000388236 00000 n 0000388380 00000 n 0000388523 00000 n 0000388667 00000 n 0000388811 00000 n 0000388955 00000 n 0000389099 00000 n 0000389243 00000 n 0000389386 00000 n 0000389529 00000 n 0000389673 00000 n 0000389817 00000 n 0000389961 00000 n 0000390105 00000 n 0000390249 00000 n 0000390333 00000 n 0000390477 00000 n 0000390620 00000 n 0000390762 00000 n 0000390905 00000 n 0000391049 00000 n 0000391193 00000 n 0000391337 00000 n 0000391480 00000 n 0000391624 00000 n 0000391768 00000 n 0000391912 00000 n 0000392056 00000 n 0000392200 00000 n 0000392343 00000 n 0000392486 00000 n 0000392571 00000 n 0000392715 00000 n 0000392799 00000 n 0000392943 00000 n 0000393027 00000 n 0000393171 00000 n 0000393314 00000 n 0000393458 00000 n 0000393543 00000 n 0000393687 00000 n 0000393772 00000 n 0000393916 00000 n 0000394001 00000 n 0000394145 00000 n 0000394229 00000 n 0000394373 00000 n 0000394517 00000 n 0000394661 00000 n 0000394805 00000 n 0000394949 00000 n 0000395093 00000 n 0000395236 00000 n 0000395380 00000 n 0000395524 00000 n 0000395666 00000 n 0000397890 00000 n 0000397913 00000 n 0000398484 00000 n 0000398701 00000 n 0000398845 00000 n 0000398989 00000 n 0000399133 00000 n 0000399277 00000 n 0000399421 00000 n 0000399565 00000 n 0000399709 00000 n 0000399852 00000 n 0000399995 00000 n 0000400139 00000 n 0000400224 00000 n 0000400368 00000 n 0000400511 00000 n 0000400655 00000 n 0000400798 00000 n 0000400942 00000 n 0000401086 00000 n 0000401230 00000 n 0000401374 00000 n 0000401518 00000 n 0000401661 00000 n 0000401804 00000 n 0000401948 00000 n 0000402091 00000 n 0000402234 00000 n 0000402377 00000 n 0000402521 00000 n 0000402665 00000 n 0000402808 00000 n 0000402950 00000 n 0000403092 00000 n 0000403174 00000 n 0000403318 00000 n 0000403461 00000 n 0000403605 00000 n 0000403749 00000 n 0000403893 00000 n 0000404037 00000 n 0000404181 00000 n 0000404325 00000 n 0000404469 00000 n 0000404613 00000 n 0000404757 00000 n 0000404901 00000 n 0000405045 00000 n 0000405188 00000 n 0000405332 00000 n 0000405476 00000 n 0000405620 00000 n 0000405764 00000 n 0000405908 00000 n 0000406052 00000 n 0000406195 00000 n 0000406339 00000 n 0000406483 00000 n 0000406627 00000 n 0000406771 00000 n 0000406915 00000 n 0000407059 00000 n 0000407203 00000 n 0000407347 00000 n 0000407491 00000 n 0000407635 00000 n 0000407779 00000 n 0000407923 00000 n 0000408066 00000 n 0000408208 00000 n 0000410499 00000 n 0000410522 00000 n 0000411129 00000 n 0000411346 00000 n 0000411489 00000 n 0000411571 00000 n 0000411715 00000 n 0000411859 00000 n 0000412002 00000 n 0000412146 00000 n 0000412290 00000 n 0000412434 00000 n 0000412578 00000 n 0000412721 00000 n 0000412864 00000 n 0000413007 00000 n 0000413150 00000 n 0000413294 00000 n 0000413437 00000 n 0000413580 00000 n 0000413724 00000 n 0000413868 00000 n 0000414012 00000 n 0000414156 00000 n 0000415408 00000 n 0000415431 00000 n 0000415624 00000 n 0000415841 00000 n 0000416183 00000 n 0000416205 00000 n 0000416403 00000 n 0000416485 00000 n 0000416569 00000 n 0000416654 00000 n 0000416739 00000 n 0000416824 00000 n 0000416909 00000 n 0000416994 00000 n 0000417079 00000 n 0000417164 00000 n 0000417249 00000 n 0000417331 00000 n 0000454685 00000 n 0000417520 00000 n 0000417437 00000 n 0000417634 00000 n 0000418745 00000 n 0000417781 00000 n 0000418581 00000 n 0000418001 00000 n 0000418405 00000 n 0000418197 00000 n 0000419569 00000 n 0000418981 00000 n 0000419369 00000 n 0000419161 00000 n 0000421998 00000 n 0000419817 00000 n 0000421070 00000 n 0000420766 00000 n 0000420052 00000 n 0000420594 00000 n 0000420243 00000 n 0000421318 00000 n 0000421578 00000 n 0000421798 00000 n 0000427265 00000 n 0000422318 00000 n 0000427133 00000 n 0000422469 00000 n 0000423033 00000 n 0000422701 00000 n 0000422833 00000 n 0000424829 00000 n 0000423333 00000 n 0000424629 00000 n 0000423481 00000 n 0000424413 00000 n 0000423717 00000 n 0000424145 00000 n 0000423965 00000 n 0000425021 00000 n 0000425301 00000 n 0000426877 00000 n 0000425529 00000 n 0000425761 00000 n 0000426009 00000 n 0000426297 00000 n 0000426597 00000 n 0000428177 00000 n 0000427525 00000 n 0000427965 00000 n 0000427697 00000 n 0000433882 00000 n 0000428462 00000 n 0000433626 00000 n 0000429898 00000 n 0000428638 00000 n 0000429618 00000 n 0000428818 00000 n 0000429134 00000 n 0000429402 00000 n 0000431870 00000 n 0000430078 00000 n 0000431626 00000 n 0000430330 00000 n 0000430638 00000 n 0000430842 00000 n 0000431074 00000 n 0000431350 00000 n 0000432070 00000 n 0000433358 00000 n 0000432294 00000 n 0000432494 00000 n 0000432810 00000 n 0000433062 00000 n 0000434606 00000 n 0000434190 00000 n 0000434394 00000 n 0000434790 00000 n 0000435002 00000 n 0000435087 00000 n 0000435193 00000 n 0000435307 00000 n 0000435425 00000 n 0000435536 00000 n 0000435634 00000 n 0000436761 00000 n 0000436784 00000 n 0000436892 00000 n 0000437008 00000 n 0000437121 00000 n 0000437241 00000 n 0000437351 00000 n 0000437510 00000 n 0000437660 00000 n 0000437762 00000 n 0000437879 00000 n 0000437999 00000 n 0000438122 00000 n 0000438233 00000 n 0000438341 00000 n 0000438455 00000 n 0000438572 00000 n 0000438698 00000 n 0000438839 00000 n 0000438959 00000 n 0000439070 00000 n 0000439157 00000 n 0000439238 00000 n 0000439343 00000 n 0000439460 00000 n 0000439550 00000 n 0000439658 00000 n 0000439760 00000 n 0000439865 00000 n 0000439946 00000 n 0000440045 00000 n 0000440132 00000 n 0000440237 00000 n 0000440336 00000 n 0000440414 00000 n 0000440512 00000 n 0000440632 00000 n 0000440737 00000 n 0000440842 00000 n 0000440965 00000 n 0000441082 00000 n 0000441157 00000 n 0000441301 00000 n 0000441391 00000 n 0000441481 00000 n 0000441574 00000 n 0000441685 00000 n 0000441790 00000 n 0000441898 00000 n 0000442000 00000 n 0000442098 00000 n 0000442196 00000 n 0000442337 00000 n 0000442472 00000 n 0000442568 00000 n 0000442655 00000 n 0000442760 00000 n 0000442859 00000 n 0000442937 00000 n 0000443033 00000 n 0000443123 00000 n 0000443222 00000 n 0000443330 00000 n 0000443444 00000 n 0000443570 00000 n 0000443690 00000 n 0000443768 00000 n 0000443864 00000 n 0000443954 00000 n 0000444053 00000 n 0000444171 00000 n 0000444258 00000 n 0000444367 00000 n 0000444446 00000 n 0000444536 00000 n 0000444632 00000 n 0000444737 00000 n 0000444854 00000 n 0000444953 00000 n 0000445053 00000 n 0000445134 00000 n 0000445242 00000 n 0000445359 00000 n 0000445476 00000 n 0000445633 00000 n 0000445747 00000 n 0000445867 00000 n 0000446020 00000 n 0000446113 00000 n 0000446224 00000 n 0000446329 00000 n 0000446425 00000 n 0000446525 00000 n 0000446636 00000 n 0000446765 00000 n 0000446888 00000 n 0000447014 00000 n 0000447149 00000 n 0000447278 00000 n 0000447385 00000 n 0000447490 00000 n 0000447589 00000 n 0000447709 00000 n 0000447814 00000 n 0000447916 00000 n 0000448037 00000 n 0000448151 00000 n 0000448244 00000 n 0000448356 00000 n 0000448461 00000 n 0000448542 00000 n 0000448641 00000 n 0000448734 00000 n 0000448845 00000 n 0000448950 00000 n 0000449034 00000 n 0000449136 00000 n 0000449232 00000 n 0000449307 00000 n 0000449403 00000 n 0000449481 00000 n 0000449577 00000 n 0000449667 00000 n 0000449748 00000 n 0000449832 00000 n 0000449935 00000 n 0000450031 00000 n 0000450131 00000 n 0000450224 00000 n 0000450317 00000 n 0000450398 00000 n 0000450553 00000 n 0000450711 00000 n 0000450834 00000 n 0000450966 00000 n 0000451077 00000 n 0000451169 00000 n 0000451274 00000 n 0000451367 00000 n 0000451445 00000 n 0000451550 00000 n 0000451667 00000 n 0000451753 00000 n 0000453884 00000 n 0000454327 00000 n 0000454741 00000 n trailer << /Root 1933 0 R /Info 1 0 R /ID [ ] /Size 1936 >> startxref 454781 %%EOF systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/SystemTap_Beginners_Guide.xml000066400000000000000000000027351500444254400277450ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/Tips_Tricks.xml000066400000000000000000000012121500444254400251260ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Understanding_How_SystemTap_Works.xml000066400000000000000000000200141500444254400315110ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Advanced_Scripts.xml000066400000000000000000000030041500444254400274300ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Disk.xml000066400000000000000000000110271500444254400265370ustar00rootroot00000000000000
    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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-IO.xml000066400000000000000000000014571500444254400261620ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Kernel.xml000066400000000000000000000014151500444254400270650ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Network.xml000066400000000000000000000011001500444254400272650ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Others.xml000066400000000000000000000013331500444254400271100ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Signals.xml000066400000000000000000000014101500444254400272400ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Syscalls.xml000066400000000000000000000016701500444254400274450ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-disktop.xml000066400000000000000000000163121500444254400273240ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-dropwatch.xml000066400000000000000000000103551500444254400276430ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-functioncalls.xml000066400000000000000000000065351500444254400305210ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-futexes.xml000066400000000000000000000117151500444254400273340ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-inodewatch.xml000066400000000000000000000122531500444254400277740ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-inodewatch2.xml000066400000000000000000000057141500444254400300620ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-ioblktime.xml000066400000000000000000000066531500444254400276350ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-iotime.xml000066400000000000000000000123231500444254400271330ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-iotop.xml000066400000000000000000000070011500444254400267740ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-kernelprofiling.xml000066400000000000000000000101741500444254400310410ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-nettop.xml000066400000000000000000000141321500444254400271560ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-paracallgraph.xml000066400000000000000000000122421500444254400304460ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-sockettrace.xml000066400000000000000000000104611500444254400301550ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-syscallsbyprocpid.xml000066400000000000000000000073241500444254400314230ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-tcp_connections.xml000066400000000000000000000051661500444254400310440ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-tcpdumplike.xml000066400000000000000000000075611500444254400301760ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-threadtimes.xml000066400000000000000000000056671500444254400301730ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-timeout.xml000066400000000000000000000110161500444254400273310ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-topsys.xml000066400000000000000000000073321500444254400272120ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-traceio.xml000066400000000000000000000114771500444254400273040ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-traceio2.xml000066400000000000000000000126671500444254400273700ustar00rootroot00000000000000
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Useful_SystemTap_Scripts.xml000066400000000000000000000111411500444254400276550ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/Userspace_probing.xml000066400000000000000000000261371500444254400263570ustar00rootroot00000000000000 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
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-5.3/doc/SystemTap_Beginners_Guide/en-US/Using_SystemTap.xml000066400000000000000000000317151500444254400260010ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/extras/000077500000000000000000000000001500444254400234605ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/extras/cast_example.stp000066400000000000000000000001571500444254400266600ustar00rootroot00000000000000function task_state:long (task:long) { return @cast(task, "task_struct", "kernel")->state } systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/extras/defined_example.stp000066400000000000000000000004341500444254400273220ustar00rootroot00000000000000probe 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-5.3/doc/SystemTap_Beginners_Guide/en-US/extras/fedoradebugurl.sh000077500000000000000000000005151500444254400270120ustar00rootroot00000000000000#! /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-5.3/doc/SystemTap_Beginners_Guide/en-US/extras/perror.stp000066400000000000000000000000371500444254400255210ustar00rootroot00000000000000probe vfs.read probe vfs.write systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/extras/rhelchannels.sh000077500000000000000000000010401500444254400264600ustar00rootroot00000000000000#! /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-5.3/doc/SystemTap_Beginners_Guide/en-US/extras/rheldebugurl.sh000077500000000000000000000003211500444254400264770ustar00rootroot00000000000000#! /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-5.3/doc/SystemTap_Beginners_Guide/en-US/extras/werror.stp000066400000000000000000000000401500444254400255220ustar00rootroot00000000000000probe begin { printf("x") = 1 } systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/images/000077500000000000000000000000001500444254400234175ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/images/gnuplotsample.png000077500000000000000000000201361500444254400270240ustar00rootroot00000000000000PNG  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-5.3/doc/SystemTap_Beginners_Guide/en-US/images/icon.svg000066400000000000000000003301271500444254400250760ustar00rootroot00000000000000 image/svg+xml id="path2858" /> systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/xsl/000077500000000000000000000000001500444254400227605ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Beginners_Guide/en-US/xsl/defaults.xsl000066400000000000000000000173461500444254400253320ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/en-US/xsl/html.xsl000066400000000000000000000254241500444254400244630ustar00rootroot00000000000000


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-5.3/doc/SystemTap_Beginners_Guide/en-US/xsl/pdf.xsl000066400000000000000000003430401500444254400242650ustar00rootroot00000000000000 ]> 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-5.3/doc/SystemTap_Beginners_Guide/en-US/xsl/xhtml-common.xsl000066400000000000000000002754631500444254400261530ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Beginners_Guide/testsuite000077700000000000000000000000001500444254400255742../../testsuiteustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Tapset_Reference/000077500000000000000000000000001500444254400214105ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Tapset_Reference/.gitignore000066400000000000000000000000461500444254400234000ustar00rootroot00000000000000/docproc stamp-* tapsets/ tapsets.xml systemtap-5.3/doc/SystemTap_Tapset_Reference/Makefile.am000066400000000000000000000043521500444254400234500ustar00rootroot00000000000000# 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.xml clean-local: rm -rf tapsets systemtap-5.3/doc/SystemTap_Tapset_Reference/Makefile.in000066400000000000000000000522201500444254400234560ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 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)` 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@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ 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@ ENABLE_NLS = @ENABLE_NLS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ 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_LDFLAGS = @debuginfod_LDFLAGS@ 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.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-5.3/doc/SystemTap_Tapset_Reference/docproc.c000066400000000000000000000263021500444254400232100ustar00rootroot00000000000000/* * 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-5.3/doc/SystemTap_Tapset_Reference/dummy-tapsets.xml000066400000000000000000000026201500444254400247460ustar00rootroot00000000000000 SystemTap Tapset Reference Manual 2008-2025 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-5.3/doc/SystemTap_Tapset_Reference/generate-toc.xml000066400000000000000000000010111500444254400245000ustar00rootroot00000000000000 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-5.3/doc/SystemTap_Tapset_Reference/man3/000077500000000000000000000000001500444254400222465ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::-.3stap000066400000000000000000000000531500444254400253060ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::string (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::HZ.3stap000066400000000000000000000027731500444254400255060ustar00rootroot00000000000000'\" t .\" Title: function::HZ .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HZ" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::MAJOR.3stap000066400000000000000000000027241500444254400260310ustar00rootroot00000000000000'\" t .\" Title: function::MAJOR .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MAJOR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::MINOR.3stap000066400000000000000000000027241500444254400260450ustar00rootroot00000000000000'\" t .\" Title: function::MINOR .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MINOR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::MKDEF.3stap000066400000000000000000000000501500444254400257750ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::dev (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::MKDEV.3stap000066400000000000000000000027731500444254400260330ustar00rootroot00000000000000'\" t .\" Title: function::MKDEV .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MKDEV" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::abort.3stap000066400000000000000000000033331500444254400262650ustar00rootroot00000000000000'\" t .\" Title: function::abort .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ABORT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::addr.3stap000066400000000000000000000032331500444254400260670ustar00rootroot00000000000000'\" t .\" Title: function::addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ADDR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::addr_to_node.3stap000066400000000000000000000032011500444254400275710ustar00rootroot00000000000000'\" t .\" Title: function::addr_to_node .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ADDR_TO_NO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ansi_clear_screen.3stap000066400000000000000000000032001500444254400306060ustar00rootroot00000000000000'\" t .\" Title: function::ansi_clear_screen .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CLEAR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_hide.3stap000066400000000000000000000030121500444254400304700ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_hide .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_move.3stap000066400000000000000000000033331500444254400305330ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_move .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_restore.3stap000066400000000000000000000031571500444254400312540ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_restore .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_save.3stap000066400000000000000000000030441500444254400305220ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_save .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_show.3stap000066400000000000000000000030131500444254400305400ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_show .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ansi_new_line.3stap000066400000000000000000000027731500444254400277770ustar00rootroot00000000000000'\" t .\" Title: function::ansi_new_line .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_NEW_L" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ansi_reset_color.3stap000066400000000000000000000031161500444254400305070ustar00rootroot00000000000000'\" t .\" Title: function::ansi_reset_color .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_RESET" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ansi_set_color.3stap000066400000000000000000000052521500444254400301630ustar00rootroot00000000000000'\" t .\" Title: function::ansi_set_color .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_SET_C" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::asmlinkage.3stap000066400000000000000000000031021500444254400272630ustar00rootroot00000000000000'\" t .\" Title: function::asmlinkage .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ASMLINKAGE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::assert.3stap000066400000000000000000000037171500444254400264650ustar00rootroot00000000000000'\" t .\" Title: function::assert .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ASSERT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::atomic_long_read.3stap000066400000000000000000000033111500444254400304400ustar00rootroot00000000000000'\" t .\" Title: function::atomic_long_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ATOMIC_LON" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::atomic_read.3stap000066400000000000000000000031171500444254400274250ustar00rootroot00000000000000'\" t .\" Title: function::atomic_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ATOMIC_REA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::backtrace.3stap000066400000000000000000000032211500444254400270710ustar00rootroot00000000000000'\" t .\" Title: function::backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::BACKTRACE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::bytes_to_string.3stap000066400000000000000000000040171500444254400303740ustar00rootroot00000000000000'\" t .\" Title: function::bytes_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::BYTES_TO_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::caller.3stap000066400000000000000000000031471500444254400264230ustar00rootroot00000000000000'\" t .\" Title: function::caller .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CALLER" "3stap" "April 2025" "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("\fBs\fR 0x\fBx\fR", symname(\fBcaller_addr\fR), \fBcaller_addr\fR) .SH SEE ALSO\n .IR tapset::context-caller (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::caller_addr.3stap000066400000000000000000000027561500444254400274220ustar00rootroot00000000000000'\" t .\" Title: function::caller_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CALLER_ADD" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::callers.3stap000066400000000000000000000033601500444254400266030ustar00rootroot00000000000000'\" t .\" Title: function::callers .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CALLERS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cmdline_arg.3stap000066400000000000000000000033261500444254400274240ustar00rootroot00000000000000'\" t .\" Title: function::cmdline_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CMDLINE_AR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cmdline_args.3stap000066400000000000000000000041011500444254400275770ustar00rootroot00000000000000'\" t .\" Title: function::cmdline_args .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CMDLINE_AR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cmdline_str.3stap000066400000000000000000000031251500444254400274600ustar00rootroot00000000000000'\" t .\" Title: function::cmdline_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CMDLINE_ST" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::commit.3stap000066400000000000000000000031401500444254400264420ustar00rootroot00000000000000'\" t .\" Title: function::commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::COMMIT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cpu.3stap000066400000000000000000000027041500444254400257460ustar00rootroot00000000000000'\" t .\" Title: function::cpu .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_ms.3stap000066400000000000000000000033321500444254400276160ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_ns.3stap000066400000000000000000000033301500444254400276150ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_s.3stap000066400000000000000000000033151500444254400274420ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_us.3stap000066400000000000000000000033321500444254400276260ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cpuid.3stap000066400000000000000000000030141500444254400262560ustar00rootroot00000000000000'\" t .\" Title: function::cpuid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cputime_to_msecs.3stap000066400000000000000000000027761500444254400305320ustar00rootroot00000000000000'\" t .\" Title: function::cputime_to_msecs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUTIME_TO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cputime_to_string.3stap000066400000000000000000000031111500444254400307060ustar00rootroot00000000000000'\" t .\" Title: function::cputime_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUTIME_TO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cputime_to_usecs.3stap000066400000000000000000000027761500444254400305420ustar00rootroot00000000000000'\" t .\" Title: function::cputime_to_usecs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUTIME_TO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ctime.3stap000066400000000000000000000057061500444254400262650ustar00rootroot00000000000000'\" t .\" Title: function::ctime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CTIME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::current_exe_file.3stap000066400000000000000000000033201500444254400304740ustar00rootroot00000000000000'\" t .\" Title: function::current_exe_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CURRENT_EX" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::cve_count_metric.3stap000066400000000000000000000031601500444254400305040ustar00rootroot00000000000000'\" t .\" Title: function::cve_count_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: CVE Livepatching Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CVE_COUNT_" "3stap" "April 2025" "SystemTap Tapset Reference" "CVE Livepatching Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cve_count_metric \- Increment the count of key .SH "SYNOPSIS" .sp .nf cve_count_metric(key:string) .fi .SH "ARGUMENTS" .PP \fIkey\fR .RS 4 The metric .RE .SH "DESCRIPTION" .PP This function increments the count of the metric key by 1\&. The metrics can be accessed in /proc/systemtap/MODULE_NAME/__prometheus .SH SEE ALSO\n .IR tapset::livepatch (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::cve_record_metric.3stap000066400000000000000000000032251500444254400306340ustar00rootroot00000000000000'\" t .\" Title: function::cve_record_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: CVE Livepatching Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CVE_RECORD" "3stap" "April 2025" "SystemTap Tapset Reference" "CVE Livepatching Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cve_record_metric \- Set the value of key .SH "SYNOPSIS" .sp .nf cve_record_metric(key:string,value:long) .fi .SH "ARGUMENTS" .PP \fIkey\fR .RS 4 The metric .RE .PP \fIvalue\fR .RS 4 The new value .RE .SH "DESCRIPTION" .PP This function sets the value of the metric key\&. The metrics can be accessed in /proc/systemtap/MODULE_NAME/__prometheus .SH SEE ALSO\n .IR tapset::livepatch (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::cve_tmpdisable.3stap000066400000000000000000000032431500444254400301370ustar00rootroot00000000000000'\" t .\" Title: function::cve_tmpdisable .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: CVE Livepatching Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CVE_TMPDIS" "3stap" "April 2025" "SystemTap Tapset Reference" "CVE Livepatching Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cve_tmpdisable \- Disable the cve livepatch .SH "SYNOPSIS" .sp .nf cve_tmpdisable(duration:long) .fi .SH "ARGUMENTS" .PP \fIduration\fR .RS 4 The number of seconds to disable .RE .SH "DESCRIPTION" .PP This function temporarily disables the conditionals which use cve_enabled_p for duration seconds\&. If duration is \-1, disable the livepatch until reenabled\&. .SH SEE ALSO\n .IR tapset::livepatch (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::d_name.3stap000066400000000000000000000027471500444254400264110ustar00rootroot00000000000000'\" t .\" Title: function::d_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::D_NAME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::d_path.3stap000066400000000000000000000030301500444254400264070ustar00rootroot00000000000000'\" t .\" Title: function::d_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::D_PATH" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::delete_stopwatch.3stap000066400000000000000000000030161500444254400305120ustar00rootroot00000000000000'\" t .\" Title: function::delete_stopwatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::DELETE_STO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::discard.3stap000066400000000000000000000027241500444254400265720ustar00rootroot00000000000000'\" t .\" Title: function::discard .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::DISCARD" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::dump_stack.3stap000066400000000000000000000032411500444254400273060ustar00rootroot00000000000000'\" t .\" Title: function::dump_stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::DUMP_STACK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::egid.3stap000066400000000000000000000027431500444254400260720ustar00rootroot00000000000000'\" t .\" Title: function::egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EGID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::env_var.3stap000066400000000000000000000032231500444254400266140ustar00rootroot00000000000000'\" t .\" Title: function::env_var .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ENV_VAR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::errno_str.3stap000066400000000000000000000032061500444254400271720ustar00rootroot00000000000000'\" t .\" Title: function::errno_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ERRNO_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::error.3stap000066400000000000000000000032271500444254400263110ustar00rootroot00000000000000'\" t .\" Title: function::error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ERROR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::euid.3stap000066400000000000000000000027351500444254400261110ustar00rootroot00000000000000'\" t .\" Title: function::euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EUID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::execname.3stap000066400000000000000000000030201500444254400267340ustar00rootroot00000000000000'\" t .\" Title: function::execname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EXECNAME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::exit.3stap000066400000000000000000000031061500444254400261250ustar00rootroot00000000000000'\" t .\" Title: function::exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EXIT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fastcall.3stap000066400000000000000000000030661500444254400267520ustar00rootroot00000000000000'\" t .\" Title: function::fastcall .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FASTCALL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::format_ipaddr.3stap000066400000000000000000000030651500444254400277730ustar00rootroot00000000000000'\" t .\" Title: function::format_ipaddr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FORMAT_IPA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp32_to_fp64.3stap000066400000000000000000000031241500444254400272670ustar00rootroot00000000000000'\" t .\" Title: function::fp32_to_fp64 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP32_TO_FP" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_add.3stap000066400000000000000000000031761500444254400264000ustar00rootroot00000000000000'\" t .\" Title: function::fp_add .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_ADD" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_div.3stap000066400000000000000000000000621500444254400264210ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_eq.3stap000066400000000000000000000031401500444254400262440ustar00rootroot00000000000000'\" t .\" Title: function::fp_eq .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_EQ" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_le.3stap000066400000000000000000000031731500444254400262450ustar00rootroot00000000000000'\" t .\" Title: function::fp_le .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_LE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_lt.3stap000066400000000000000000000031561500444254400262650ustar00rootroot00000000000000'\" t .\" Title: function::fp_lt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_LT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_mul.3stap000066400000000000000000000031661500444254400264440ustar00rootroot00000000000000'\" t .\" Title: function::fp_mul .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_MUL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_rem.3stap000066400000000000000000000031651500444254400264310ustar00rootroot00000000000000'\" t .\" Title: function::fp_rem .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_REM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_sqrt.3stap000066400000000000000000000030361500444254400266340ustar00rootroot00000000000000'\" t .\" Title: function::fp_sqrt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_SQRT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_sub.3stap000066400000000000000000000031571500444254400264400ustar00rootroot00000000000000'\" t .\" Title: function::fp_sub .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_SUB" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_to_long.3stap000066400000000000000000000037361500444254400273130ustar00rootroot00000000000000'\" t .\" Title: function::fp_to_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_TO_LONG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fp_to_string.3stap000066400000000000000000000034631500444254400276570ustar00rootroot00000000000000'\" t .\" Title: function::fp_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_TO_STRI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ftrace.3stap000066400000000000000000000032211500444254400264160ustar00rootroot00000000000000'\" t .\" Title: function::ftrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FTRACE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fullpath_struct_file.3stap000066400000000000000000000032041500444254400313750ustar00rootroot00000000000000'\" t .\" Title: function::fullpath_struct_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FULLPATH_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fullpath_struct_nameidata.3stap000066400000000000000000000032031500444254400324000ustar00rootroot00000000000000'\" t .\" Title: function::fullpath_struct_nameidata .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FULLPATH_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::fullpath_struct_path.3stap000066400000000000000000000031121500444254400314100ustar00rootroot00000000000000'\" t .\" Title: function::fullpath_struct_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FULLPATH_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::get_cycles.3stap000066400000000000000000000033201500444254400272730ustar00rootroot00000000000000'\" t .\" Title: function::get_cycles .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_CYCLES" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::get_loadavg_index.3stap000066400000000000000000000036301500444254400306210ustar00rootroot00000000000000'\" t .\" Title: function::get_loadavg_index .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_LOADAV" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::get_sa_flags.3stap000066400000000000000000000027321500444254400275760ustar00rootroot00000000000000'\" t .\" Title: function::get_sa_flags .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_SA_FLA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::get_sa_handler.3stap000066400000000000000000000027421500444254400301200ustar00rootroot00000000000000'\" t .\" Title: function::get_sa_handler .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_SA_HAN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_ms.3stap000066400000000000000000000030341500444254400303340ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_ns.3stap000066400000000000000000000030321500444254400303330ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_s.3stap000066400000000000000000000030171500444254400301600ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_us.3stap000066400000000000000000000030341500444254400303440ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::gid.3stap000066400000000000000000000027301500444254400257210ustar00rootroot00000000000000'\" t .\" Title: function::gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::htonl.3stap000066400000000000000000000026701500444254400263050ustar00rootroot00000000000000'\" t .\" Title: function::htonl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HTONL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::htonll.3stap000066400000000000000000000027011500444254400264540ustar00rootroot00000000000000'\" t .\" Title: function::htonll .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HTONLL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::htons.3stap000066400000000000000000000026711500444254400263150ustar00rootroot00000000000000'\" t .\" Title: function::htons .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HTONS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::indent.3stap000066400000000000000000000034161500444254400264410ustar00rootroot00000000000000'\" t .\" Title: function::indent .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INDENT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::indent_depth.3stap000066400000000000000000000034741500444254400276310ustar00rootroot00000000000000'\" t .\" Title: function::indent_depth .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INDENT_DEP" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::inet_get_dest_port.3stap000066400000000000000000000027621500444254400310440ustar00rootroot00000000000000'\" t .\" Title: function::inet_get_dest_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INET_GET_D" "3stap" "April 2025" "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_dest_port \- Provide remote port number for a kernel socket .SH "SYNOPSIS" .sp .nf inet_get_dest_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-5.3/doc/SystemTap_Tapset_Reference/man3/function::inet_get_ip_dest.3stap000066400000000000000000000027711500444254400304700ustar00rootroot00000000000000'\" t .\" Title: function::inet_get_ip_dest .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INET_GET_I" "3stap" "April 2025" "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_dest \- Provide IP destination address string for a kernel socket .SH "SYNOPSIS" .sp .nf inet_get_ip_dest: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-5.3/doc/SystemTap_Tapset_Reference/man3/function::inet_get_ip_source.3stap000066400000000000000000000027721500444254400310320ustar00rootroot00000000000000'\" t .\" Title: function::inet_get_ip_source .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INET_GET_I" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::inet_get_local_port.3stap000066400000000000000000000027641500444254400312010ustar00rootroot00000000000000'\" t .\" Title: function::inet_get_local_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INET_GET_L" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::inode_name.3stap000066400000000000000000000030131500444254400272470ustar00rootroot00000000000000'\" t .\" Title: function::inode_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INODE_NAME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::inode_path.3stap000066400000000000000000000030071500444254400272660ustar00rootroot00000000000000'\" t .\" Title: function::inode_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INODE_PATH" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::int_arg.3stap000066400000000000000000000031071500444254400266000ustar00rootroot00000000000000'\" t .\" Title: function::int_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INT_ARG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ip_ntop.3stap000066400000000000000000000027441500444254400266330ustar00rootroot00000000000000'\" t .\" Title: function::ip_ntop .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IP_NTOP" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ipmib_filter_key.3stap000066400000000000000000000037471500444254400305040ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_filter_key .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_FILT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ipmib_get_proto.3stap000066400000000000000000000030411500444254400303340ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_get_proto .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_GET_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ipmib_local_addr.3stap000066400000000000000000000032011500444254400304140ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_local_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_LOCA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ipmib_remote_addr.3stap000066400000000000000000000032131500444254400306200ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_remote_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_REMO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ipmib_tcp_local_port.3stap000066400000000000000000000032161500444254400313420ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_tcp_local_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_TCP_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ipmib_tcp_remote_port.3stap000066400000000000000000000032231500444254400315410ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_tcp_remote_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_TCP_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::is_myproc.3stap000066400000000000000000000030771500444254400271670ustar00rootroot00000000000000'\" t .\" Title: function::is_myproc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IS_MYPROC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::is_return.3stap000066400000000000000000000030221500444254400271630ustar00rootroot00000000000000'\" t .\" Title: function::is_return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IS_RETURN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::is_sig_blocked.3stap000066400000000000000000000030741500444254400301200ustar00rootroot00000000000000'\" t .\" Title: function::is_sig_blocked .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IS_SIG_BLO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::isdigit.3stap000066400000000000000000000031361500444254400266130ustar00rootroot00000000000000'\" t .\" Title: function::isdigit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ISDIGIT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::isinstr.3stap000066400000000000000000000032211500444254400266450ustar00rootroot00000000000000'\" t .\" Title: function::isinstr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ISINSTR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::jiffies.3stap000066400000000000000000000031431500444254400265740ustar00rootroot00000000000000'\" t .\" Title: function::jiffies .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JIFFIES" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::json_add_array.3stap000066400000000000000000000033501500444254400301340ustar00rootroot00000000000000'\" t .\" Title: function::json_add_array .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_A" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::json_add_array_numeric_metric.3stap000066400000000000000000000037011500444254400332210ustar00rootroot00000000000000'\" t .\" Title: function::json_add_array_numeric_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_A" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::json_add_array_string_metric.3stap000066400000000000000000000035271500444254400330730ustar00rootroot00000000000000'\" t .\" Title: function::json_add_array_string_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_A" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::json_add_numeric_metric.3stap000066400000000000000000000033751500444254400320320ustar00rootroot00000000000000'\" t .\" Title: function::json_add_numeric_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_N" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::json_add_string_metric.3stap000066400000000000000000000032421500444254400316670ustar00rootroot00000000000000'\" t .\" Title: function::json_add_string_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::json_set_prefix.3stap000066400000000000000000000032411500444254400303550ustar00rootroot00000000000000'\" t .\" Title: function::json_set_prefix .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_SET_P" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_buffer_quoted.3stap000066400000000000000000000053131500444254400313500ustar00rootroot00000000000000'\" t .\" Title: function::kernel_buffer_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_BUF" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_buffer_quoted_error.3stap000066400000000000000000000042321500444254400325600ustar00rootroot00000000000000'\" t .\" Title: function::kernel_buffer_quoted_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_BUF" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_char.3stap000066400000000000000000000032571500444254400274400ustar00rootroot00000000000000'\" t .\" Title: function::kernel_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_CHA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_int.3stap000066400000000000000000000032521500444254400273100ustar00rootroot00000000000000'\" t .\" Title: function::kernel_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_INT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_long.3stap000066400000000000000000000032571500444254400274620ustar00rootroot00000000000000'\" t .\" Title: function::kernel_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_LON" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_or_user_string_quoted.3stap000066400000000000000000000033121500444254400331400ustar00rootroot00000000000000'\" t .\" Title: function::kernel_or_user_string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_OR_" "3stap" "April 2025" "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_or_user_string_quoted \- Retrieves and quotes string from kernel or user memory .SH "SYNOPSIS" .sp .nf kernel_or_user_string_quoted:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the kernel or user memory address to retrieve the string from .RE .SH "DESCRIPTION" .PP Similar to kernel_string_quoted except user memory is a fallback method .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_or_user_string_quoted_utf16.3stap000066400000000000000000000033571500444254400341760ustar00rootroot00000000000000'\" t .\" Title: function::kernel_or_user_string_quoted_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_OR_" "3stap" "April 2025" "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_or_user_string_quoted_utf16 \- Retrieves and quotes UTF\-16 string from kernel or user memory .SH "SYNOPSIS" .sp .nf kernel_or_user_string_quoted_utf16:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the kernel or user memory address to retrieve the string from .RE .SH "DESCRIPTION" .PP Similar to kernel_string_quoted_utf16 except uses user memory as a fallback method .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_or_user_string_quoted_utf32.3stap000066400000000000000000000033521500444254400341670ustar00rootroot00000000000000'\" t .\" Title: function::kernel_or_user_string_quoted_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_OR_" "3stap" "April 2025" "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_or_user_string_quoted_utf32 \- Retrieves and quotes UTF\-32 string from kernel or user memory .SH "SYNOPSIS" .sp .nf kernel_or_user_string_quoted_utf32:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the kernel or user memory address to retrieve the string from .RE .SH "DESCRIPTION" .PP Similar to kernel_string_quoted_utf32 except user memory is a fallback method .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_pointer.3stap000066400000000000000000000033011500444254400301710ustar00rootroot00000000000000'\" t .\" Title: function::kernel_pointer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_POI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_short.3stap000066400000000000000000000032651500444254400276610ustar00rootroot00000000000000'\" t .\" Title: function::kernel_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_SHO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_string.3stap000066400000000000000000000037431500444254400300310ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_n.3stap000066400000000000000000000034361500444254400303450ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_quoted.3stap000066400000000000000000000037431500444254400314120ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_quoted_utf16.3stap000066400000000000000000000033161500444254400324330ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_quoted_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_quoted_utf32.3stap000066400000000000000000000033161500444254400324310ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_quoted_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_utf16.3stap000066400000000000000000000041611500444254400310510ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_utf32.3stap000066400000000000000000000041611500444254400310470ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ktime_get_ns.3stap000066400000000000000000000027621500444254400276330ustar00rootroot00000000000000'\" t .\" Title: function::ktime_get_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KTIME_GET_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::linuxmib_filter_key.3stap000066400000000000000000000036061500444254400312250ustar00rootroot00000000000000'\" t .\" Title: function::linuxmib_filter_key .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LINUXMIB_F" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::local_clock_ms.3stap000066400000000000000000000032451500444254400301240ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::local_clock_ns.3stap000066400000000000000000000032431500444254400301230ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::local_clock_s.3stap000066400000000000000000000032301500444254400277410ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::local_clock_us.3stap000066400000000000000000000032451500444254400301340ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::log.3stap000066400000000000000000000033501500444254400257360ustar00rootroot00000000000000'\" t .\" Title: function::log .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::long_arg.3stap000066400000000000000000000031511500444254400267440ustar00rootroot00000000000000'\" t .\" Title: function::long_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LONG_ARG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::long_to_fp.3stap000066400000000000000000000031031500444254400272770ustar00rootroot00000000000000'\" t .\" Title: function::long_to_fp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LONG_TO_FP" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::longlong_arg.3stap000066400000000000000000000030471500444254400276300ustar00rootroot00000000000000'\" t .\" Title: function::longlong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LONGLONG_A" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::matched.3stap000066400000000000000000000036321500444254400265650ustar00rootroot00000000000000'\" t .\" Title: function::matched .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MATCHED" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::matched_str.3stap000066400000000000000000000031671500444254400274600ustar00rootroot00000000000000'\" t .\" Title: function::matched_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MATCHED_ST" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::mdelay.3stap000066400000000000000000000030471500444254400264330ustar00rootroot00000000000000'\" t .\" Title: function::mdelay .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MDELAY" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::mem_page_size.3stap000066400000000000000000000026551500444254400277700ustar00rootroot00000000000000'\" t .\" Title: function::mem_page_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MEM_PAGE_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::modname.3stap000066400000000000000000000033541500444254400266010ustar00rootroot00000000000000'\" t .\" Title: function::modname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MODNAME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::module_name.3stap000066400000000000000000000031161500444254400274420ustar00rootroot00000000000000'\" t .\" Title: function::module_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MODULE_NAM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::module_size.3stap000066400000000000000000000030061500444254400274720ustar00rootroot00000000000000'\" t .\" Title: function::module_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MODULE_SIZ" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::msecs_to_string.3stap000066400000000000000000000033551500444254400303640ustar00rootroot00000000000000'\" t .\" Title: function::msecs_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MSECS_TO_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::nfsderror.3stap000066400000000000000000000030731500444254400271630ustar00rootroot00000000000000'\" t .\" Title: function::nfsderror .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NFSDERROR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ngroups.3stap000066400000000000000000000035701500444254400266560ustar00rootroot00000000000000'\" t .\" Title: function::ngroups .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NGROUPS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ns_egid.3stap000066400000000000000000000031331500444254400265640ustar00rootroot00000000000000'\" t .\" Title: function::ns_egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_EGID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ns_euid.3stap000066400000000000000000000031501500444254400266010ustar00rootroot00000000000000'\" t .\" Title: function::ns_euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_EUID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ns_gid.3stap000066400000000000000000000031201500444254400264130ustar00rootroot00000000000000'\" t .\" Title: function::ns_gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_GID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ns_pgrp.3stap000066400000000000000000000031501500444254400266230ustar00rootroot00000000000000'\" t .\" Title: function::ns_pgrp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_PGRP" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ns_pid.3stap000066400000000000000000000030271500444254400264320ustar00rootroot00000000000000'\" t .\" Title: function::ns_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_PID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ns_ppid.3stap000066400000000000000000000032021500444254400266050ustar00rootroot00000000000000'\" t .\" Title: function::ns_ppid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_PPID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ns_sid.3stap000066400000000000000000000032731500444254400264400ustar00rootroot00000000000000'\" t .\" Title: function::ns_sid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_SID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ns_tid.3stap000066400000000000000000000031201500444254400264300ustar00rootroot00000000000000'\" t .\" Title: function::ns_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_TID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ns_uid.3stap000066400000000000000000000031201500444254400264310ustar00rootroot00000000000000'\" t .\" Title: function::ns_uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_UID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::nsecs_to_string.3stap000066400000000000000000000033621500444254400303630ustar00rootroot00000000000000'\" t .\" Title: function::nsecs_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NSECS_TO_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ntohl.3stap000066400000000000000000000026701500444254400263050ustar00rootroot00000000000000'\" t .\" Title: function::ntohl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NTOHL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ntohll.3stap000066400000000000000000000027011500444254400264540ustar00rootroot00000000000000'\" t .\" Title: function::ntohll .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NTOHLL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ntohs.3stap000066400000000000000000000026711500444254400263150ustar00rootroot00000000000000'\" t .\" Title: function::ntohs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NTOHS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pages_to_string.3stap000066400000000000000000000031611500444254400303440ustar00rootroot00000000000000'\" t .\" Title: function::pages_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PAGES_TO_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::panic.3stap000066400000000000000000000031131500444254400262440ustar00rootroot00000000000000'\" t .\" Title: function::panic .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PANIC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pexecname.3stap000066400000000000000000000030341500444254400271210ustar00rootroot00000000000000'\" t .\" Title: function::pexecname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PEXECNAME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pgrp.3stap000066400000000000000000000027621500444254400261330ustar00rootroot00000000000000'\" t .\" Title: function::pgrp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PGRP" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pid.3stap000066400000000000000000000027141500444254400257340ustar00rootroot00000000000000'\" t .\" Title: function::pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pid2execname.3stap000066400000000000000000000030241500444254400275170ustar00rootroot00000000000000'\" t .\" Title: function::pid2execname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PID2EXECNA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pid2task.3stap000066400000000000000000000030221500444254400266720ustar00rootroot00000000000000'\" t .\" Title: function::pid2task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PID2TASK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pn.3stap000066400000000000000000000031011500444254400255640ustar00rootroot00000000000000'\" t .\" Title: function::pn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pnlabel.3stap000066400000000000000000000032501500444254400265710ustar00rootroot00000000000000'\" t .\" Title: function::pnlabel .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PNLABEL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pointer_arg.3stap000066400000000000000000000031251500444254400274660ustar00rootroot00000000000000'\" t .\" Title: function::pointer_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::POINTER_AR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pp.3stap000066400000000000000000000031231500444254400255720ustar00rootroot00000000000000'\" t .\" Title: function::pp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PP" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ppfunc.3stap000066400000000000000000000030671500444254400264550ustar00rootroot00000000000000'\" t .\" Title: function::ppfunc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PPFUNC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ppid.3stap000066400000000000000000000030141500444254400261060ustar00rootroot00000000000000'\" t .\" Title: function::ppid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PPID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_backtrace.3stap000066400000000000000000000032141500444254400303070ustar00rootroot00000000000000'\" t .\" Title: function::print_backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_BACK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_backtrace_fileline.3stap000066400000000000000000000032071500444254400321600ustar00rootroot00000000000000'\" t .\" Title: function::print_backtrace_fileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_BACK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_regs.3stap000066400000000000000000000030141500444254400273260ustar00rootroot00000000000000'\" t .\" Title: function::print_regs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_REGS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_stack.3stap000066400000000000000000000036331500444254400275020ustar00rootroot00000000000000'\" t .\" Title: function::print_stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_STAC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_syms.3stap000066400000000000000000000036261500444254400273720ustar00rootroot00000000000000'\" t .\" Title: function::print_syms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_SYMS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_ubacktrace.3stap000066400000000000000000000042571500444254400305040ustar00rootroot00000000000000'\" t .\" Title: function::print_ubacktrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_UBAC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_ubacktrace_brief.3stap000066400000000000000000000034721500444254400316510ustar00rootroot00000000000000'\" t .\" Title: function::print_ubacktrace_brief .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_UBAC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_ubacktrace_fileline.3stap000066400000000000000000000041551500444254400323500ustar00rootroot00000000000000'\" t .\" Title: function::print_ubacktrace_fileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_UBAC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_ustack.3stap000066400000000000000000000037201500444254400276640ustar00rootroot00000000000000'\" t .\" Title: function::print_ustack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_USTA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::print_usyms.3stap000066400000000000000000000036311500444254400275530ustar00rootroot00000000000000'\" t .\" Title: function::print_usyms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_USYM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::printk.3stap000066400000000000000000000034421500444254400264660ustar00rootroot00000000000000'\" t .\" Title: function::printk .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINTK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::probe_type.3stap000066400000000000000000000036751500444254400273370ustar00rootroot00000000000000'\" t .\" Title: function::probe_type .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROBE_TYPE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::probefunc.3stap000066400000000000000000000037531500444254400271470ustar00rootroot00000000000000'\" t .\" Title: function::probefunc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROBEFUNC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::probemod.3stap000066400000000000000000000030371500444254400267660ustar00rootroot00000000000000'\" t .\" Title: function::probemod .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROBEMOD" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_data.3stap000066400000000000000000000035271500444254400277550ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_data .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_D" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_rss.3stap000066400000000000000000000035141500444254400276470ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_rss .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_R" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_shr.3stap000066400000000000000000000035471500444254400276420ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_shr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_size.3stap000066400000000000000000000035511500444254400300130ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_string.3stap000066400000000000000000000036571500444254400303560ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_txt.3stap000066400000000000000000000034731500444254400276630ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_txt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_T" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::pstrace.3stap000066400000000000000000000032051500444254400266150ustar00rootroot00000000000000'\" t .\" Title: function::pstrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PSTRACE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qs_done.3stap000066400000000000000000000031351500444254400266060ustar00rootroot00000000000000'\" t .\" Title: function::qs_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QS_DONE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qs_run.3stap000066400000000000000000000032261500444254400264660ustar00rootroot00000000000000'\" t .\" Title: function::qs_run .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QS_RUN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qs_wait.3stap000066400000000000000000000031141500444254400266220ustar00rootroot00000000000000'\" t .\" Title: function::qs_wait .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QS_WAIT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qsq_blocked.3stap000066400000000000000000000033031500444254400274420ustar00rootroot00000000000000'\" t .\" Title: function::qsq_blocked .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_BLOCKE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qsq_print.3stap000066400000000000000000000035321500444254400271770ustar00rootroot00000000000000'\" t .\" Title: function::qsq_print .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_PRINT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qsq_service_time.3stap000066400000000000000000000033271500444254400305230ustar00rootroot00000000000000'\" t .\" Title: function::qsq_service_time .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_SERVIC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qsq_start.3stap000066400000000000000000000033001500444254400271710ustar00rootroot00000000000000'\" t .\" Title: function::qsq_start .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_START" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qsq_throughput.3stap000066400000000000000000000032461500444254400302560ustar00rootroot00000000000000'\" t .\" Title: function::qsq_throughput .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_THROUG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qsq_utilization.3stap000066400000000000000000000033161500444254400304160ustar00rootroot00000000000000'\" t .\" Title: function::qsq_utilization .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_UTILIZ" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qsq_wait_queue_length.3stap000066400000000000000000000032241500444254400315520ustar00rootroot00000000000000'\" t .\" Title: function::qsq_wait_queue_length .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_WAIT_Q" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::qsq_wait_time.3stap000066400000000000000000000033371500444254400300300ustar00rootroot00000000000000'\" t .\" Title: function::qsq_wait_time .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_WAIT_T" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::raise.3stap000066400000000000000000000032001500444254400262520ustar00rootroot00000000000000'\" t .\" Title: function::raise .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RAISE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::randint.3stap000066400000000000000000000027551500444254400266240ustar00rootroot00000000000000'\" t .\" Title: function::randint .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Random functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RANDINT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_ms.3stap000066400000000000000000000031751500444254400306700ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_ns.3stap000066400000000000000000000031731500444254400306670ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_s.3stap000066400000000000000000000031601500444254400305050ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_us.3stap000066400000000000000000000031751500444254400307000ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::real_mount.3stap000066400000000000000000000031111500444254400273150ustar00rootroot00000000000000'\" t .\" Title: function::real_mount .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REAL_MOUNT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::register.3stap000066400000000000000000000052311500444254400270010ustar00rootroot00000000000000'\" t .\" Title: function::register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REGISTER" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::registers_valid.3stap000066400000000000000000000032711500444254400303450ustar00rootroot00000000000000'\" t .\" Title: function::registers_valid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REGISTERS_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::regparm.3stap000066400000000000000000000035671500444254400266240ustar00rootroot00000000000000'\" t .\" Title: function::regparm .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REGPARM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::remote_id.3stap000066400000000000000000000035131500444254400271250ustar00rootroot00000000000000'\" t .\" Title: function::remote_id .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REMOTE_ID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::remote_uri.3stap000066400000000000000000000033301500444254400273250ustar00rootroot00000000000000'\" t .\" Title: function::remote_uri .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REMOTE_URI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::return_str.3stap000066400000000000000000000034031500444254400273630ustar00rootroot00000000000000'\" t .\" Title: function::return_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RETURN_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::returnstr.3stap000066400000000000000000000034401500444254400272250ustar00rootroot00000000000000'\" t .\" Title: function::returnstr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RETURNSTR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::returnval.3stap000066400000000000000000000032651500444254400272040ustar00rootroot00000000000000'\" t .\" Title: function::returnval .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RETURNVAL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::reverse_path_walk.3stap000066400000000000000000000030351500444254400306620ustar00rootroot00000000000000'\" t .\" Title: function::reverse_path_walk .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REVERSE_PA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::rlimit_from_str.3stap000066400000000000000000000032351500444254400303720ustar00rootroot00000000000000'\" t .\" Title: function::rlimit_from_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: RLIMIT Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RLIMIT_FRO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::s32_arg.3stap000066400000000000000000000030511500444254400264130ustar00rootroot00000000000000'\" t .\" Title: function::s32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::S32_ARG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::s64_arg.3stap000066400000000000000000000030561500444254400264250ustar00rootroot00000000000000'\" t .\" Title: function::s64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::S64_ARG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sa_flags_str.3stap000066400000000000000000000027621500444254400276320ustar00rootroot00000000000000'\" t .\" Title: function::sa_flags_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SA_FLAGS_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sa_handler.3stap000066400000000000000000000000531500444254400272520ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::sa_handler_str.3stap000066400000000000000000000031461500444254400301500ustar00rootroot00000000000000'\" t .\" Title: function::sa_handler_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SA_HANDLER" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_int_arg.3stap000066400000000000000000000031651500444254400274570ustar00rootroot00000000000000'\" t .\" Title: function::set_int_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_INT_AR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_char.3stap000066400000000000000000000034141500444254400303060ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_int.3stap000066400000000000000000000034061500444254400301640ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_long.3stap000066400000000000000000000034141500444254400303300ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_pointer.3stap000066400000000000000000000034441500444254400310540ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_pointer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_short.3stap000066400000000000000000000034231500444254400305300ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_string.3stap000066400000000000000000000034031500444254400306750ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_string_n.3stap000066400000000000000000000035641500444254400312220ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_long_arg.3stap000066400000000000000000000032121500444254400276150ustar00rootroot00000000000000'\" t .\" Title: function::set_long_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_LONG_A" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_longlong_arg.3stap000066400000000000000000000031271500444254400305020ustar00rootroot00000000000000'\" t .\" Title: function::set_longlong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_LONGLO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_pointer_arg.3stap000066400000000000000000000032001500444254400303330ustar00rootroot00000000000000'\" t .\" Title: function::set_pointer_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_POINTE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_s32_arg.3stap000066400000000000000000000031271500444254400272720ustar00rootroot00000000000000'\" t .\" Title: function::set_s32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_S32_AR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_s64_arg.3stap000066400000000000000000000031341500444254400272750ustar00rootroot00000000000000'\" t .\" Title: function::set_s64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_S64_AR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_u32_arg.3stap000066400000000000000000000031341500444254400272720ustar00rootroot00000000000000'\" t .\" Title: function::set_u32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_U32_AR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_u64_arg.3stap000066400000000000000000000031411500444254400272750ustar00rootroot00000000000000'\" t .\" Title: function::set_u64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_U64_AR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_uint_arg.3stap000066400000000000000000000031661500444254400276450ustar00rootroot00000000000000'\" t .\" Title: function::set_uint_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_UINT_A" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_ulong_arg.3stap000066400000000000000000000032361500444254400300100ustar00rootroot00000000000000'\" t .\" Title: function::set_ulong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_ULONG_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_ulonglong_arg.3stap000066400000000000000000000031571500444254400306720ustar00rootroot00000000000000'\" t .\" Title: function::set_ulonglong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_ULONGL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_user_char.3stap000066400000000000000000000034011500444254400300000ustar00rootroot00000000000000'\" t .\" Title: function::set_user_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_C" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_user_int.3stap000066400000000000000000000033731500444254400276650ustar00rootroot00000000000000'\" t .\" Title: function::set_user_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_I" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_user_long.3stap000066400000000000000000000034011500444254400300220ustar00rootroot00000000000000'\" t .\" Title: function::set_user_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_L" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_user_pointer.3stap000066400000000000000000000034311500444254400305460ustar00rootroot00000000000000'\" t .\" Title: function::set_user_pointer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_P" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_user_short.3stap000066400000000000000000000034101500444254400302220ustar00rootroot00000000000000'\" t .\" Title: function::set_user_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_user_string.3stap000066400000000000000000000034131500444254400303740ustar00rootroot00000000000000'\" t .\" Title: function::set_user_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_user_string_arg.3stap000066400000000000000000000034101500444254400312220ustar00rootroot00000000000000'\" t .\" Title: function::set_user_string_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::set_user_string_n.3stap000066400000000000000000000035511500444254400307140ustar00rootroot00000000000000'\" t .\" Title: function::set_user_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sid.3stap000066400000000000000000000030641500444254400257360ustar00rootroot00000000000000'\" t .\" Title: function::sid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::signal_str.3stap000066400000000000000000000027371500444254400273320ustar00rootroot00000000000000'\" t .\" Title: function::signal_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SIGNAL_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sigset_mask_str.3stap000066400000000000000000000027551500444254400303660ustar00rootroot00000000000000'\" t .\" Title: function::sigset_mask_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SIGSET_MAS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sock_fam_num2str.3stap000066400000000000000000000027641500444254400304410ustar00rootroot00000000000000'\" t .\" Title: function::sock_fam_num2str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_FAM_N" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sock_fam_str2num.3stap000066400000000000000000000030121500444254400304240ustar00rootroot00000000000000'\" t .\" Title: function::sock_fam_str2num .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_FAM_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sock_prot_num2str.3stap000066400000000000000000000027601500444254400306560ustar00rootroot00000000000000'\" t .\" Title: function::sock_prot_num2str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_PROT_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sock_prot_str2num.3stap000066400000000000000000000027771500444254400306660ustar00rootroot00000000000000'\" t .\" Title: function::sock_prot_str2num .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_PROT_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sock_state_num2str.3stap000066400000000000000000000027641500444254400310160ustar00rootroot00000000000000'\" t .\" Title: function::sock_state_num2str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_STATE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sock_state_str2num.3stap000066400000000000000000000027711500444254400310140ustar00rootroot00000000000000'\" t .\" Title: function::sock_state_str2num .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_STATE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::speculate.3stap000066400000000000000000000031441500444254400271430ustar00rootroot00000000000000'\" t .\" Title: function::speculate .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPECULATE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::speculation.3stap000066400000000000000000000033151500444254400275040ustar00rootroot00000000000000'\" t .\" Title: function::speculation .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPECULATIO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sprint_backtrace.3stap000066400000000000000000000041431500444254400304740ustar00rootroot00000000000000'\" t .\" Title: function::sprint_backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_BAC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sprint_loadavg.3stap000066400000000000000000000030761500444254400301760ustar00rootroot00000000000000'\" t .\" Title: function::sprint_loadavg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_LOA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sprint_stack.3stap000066400000000000000000000044141500444254400276630ustar00rootroot00000000000000'\" t .\" Title: function::sprint_stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_STA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sprint_syms.3stap000066400000000000000000000043751500444254400275570ustar00rootroot00000000000000'\" t .\" Title: function::sprint_syms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_SYM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sprint_ubacktrace.3stap000066400000000000000000000045661500444254400306720ustar00rootroot00000000000000'\" t .\" Title: function::sprint_ubacktrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_UBA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sprint_ustack.3stap000066400000000000000000000044721500444254400300540ustar00rootroot00000000000000'\" t .\" Title: function::sprint_ustack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_UST" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::sprint_usyms.3stap000066400000000000000000000044011500444254400277320ustar00rootroot00000000000000'\" t .\" Title: function::sprint_usyms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_USY" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::stack.3stap000066400000000000000000000034071500444254400262650ustar00rootroot00000000000000'\" t .\" Title: function::stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::stack_size.3stap000066400000000000000000000027531500444254400273220ustar00rootroot00000000000000'\" t .\" Title: function::stack_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK_SIZE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::stack_unused.3stap000066400000000000000000000030451500444254400276460ustar00rootroot00000000000000'\" t .\" Title: function::stack_unused .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK_UNUS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::stack_used.3stap000066400000000000000000000030131500444254400272760ustar00rootroot00000000000000'\" t .\" Title: function::stack_used .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK_USED" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::start_stopwatch.3stap000066400000000000000000000030761500444254400304130ustar00rootroot00000000000000'\" t .\" Title: function::start_stopwatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::START_STOP" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::stop_stopwatch.3stap000066400000000000000000000030711500444254400302360ustar00rootroot00000000000000'\" t .\" Title: function::stop_stopwatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STOP_STOPW" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::stp_pid.3stap000066400000000000000000000031271500444254400266210ustar00rootroot00000000000000'\" t .\" Title: function::stp_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STP_PID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::str_replace.3stap000066400000000000000000000034471500444254400274670ustar00rootroot00000000000000'\" t .\" Title: function::str_replace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STR_REPLAC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::string_quoted.3stap000066400000000000000000000034371500444254400300520ustar00rootroot00000000000000'\" t .\" Title: function::string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRING_QUO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::string_to_fp.3stap000066400000000000000000000032471500444254400276570ustar00rootroot00000000000000'\" t .\" Title: function::string_to_fp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRING_TO_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::stringat.3stap000066400000000000000000000034561500444254400270170ustar00rootroot00000000000000'\" t .\" Title: function::stringat .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRINGAT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::strlen.3stap000066400000000000000000000030741500444254400264670ustar00rootroot00000000000000'\" t .\" Title: function::strlen .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRLEN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::strpos.3stap000066400000000000000000000034501500444254400265100ustar00rootroot00000000000000'\" t .\" Title: function::strpos .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRPOS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::strtol.3stap000066400000000000000000000033631500444254400265100ustar00rootroot00000000000000'\" t .\" Title: function::strtol .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRTOL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::substr.3stap000066400000000000000000000035641500444254400265060ustar00rootroot00000000000000'\" t .\" Title: function::substr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SUBSTR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::switch_file.3stap000066400000000000000000000034241500444254400274570ustar00rootroot00000000000000'\" t .\" Title: function::switch_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Output file switching Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SWITCH_FIL" "3stap" "April 2025" "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)\&. .PP The mechanism of switching files was changed by upstream commit 5b39471380a238469c8fc18136f12600e5e9aec7 \&. With this commit, the rotation only works if there is some actual systemtap output\&. .SH SEE ALSO\n .IR tapset::switchfile (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/function::symdata.3stap000066400000000000000000000036351500444254400266250ustar00rootroot00000000000000'\" t .\" Title: function::symdata .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMDATA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::symfile.3stap000066400000000000000000000031261500444254400266260ustar00rootroot00000000000000'\" t .\" Title: function::symfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMFILE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::symfileline.3stap000066400000000000000000000033311500444254400274740ustar00rootroot00000000000000'\" t .\" Title: function::symfileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMFILELIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::symline.3stap000066400000000000000000000031451500444254400266370ustar00rootroot00000000000000'\" t .\" Title: function::symline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMLINE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::symname.3stap000066400000000000000000000032221500444254400266240ustar00rootroot00000000000000'\" t .\" Title: function::symname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMNAME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::system.3stap000066400000000000000000000034631500444254400265060ustar00rootroot00000000000000'\" t .\" Title: function::system .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Shell command functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYSTEM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::target.3stap000066400000000000000000000034531500444254400264470ustar00rootroot00000000000000'\" t .\" Title: function::target .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TARGET" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::target_set_pid.3stap000066400000000000000000000032371500444254400301560ustar00rootroot00000000000000'\" t .\" Title: function::target_set_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TARGET_SET" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::target_set_report.3stap000066400000000000000000000030531500444254400307110ustar00rootroot00000000000000'\" t .\" Title: function::target_set_report .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TARGET_SET" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_ancestry.3stap000066400000000000000000000033351500444254400300320ustar00rootroot00000000000000'\" t .\" Title: function::task_ancestry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_ANCES" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_backtrace.3stap000066400000000000000000000032711500444254400301200ustar00rootroot00000000000000'\" t .\" Title: function::task_backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_BACKT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_cpu.3stap000066400000000000000000000030171500444254400267660ustar00rootroot00000000000000'\" t .\" Title: function::task_cpu .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_CPU" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_current.3stap000066400000000000000000000031561500444254400276650ustar00rootroot00000000000000'\" t .\" Title: function::task_current .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_CURRE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_cwd_path.3stap000066400000000000000000000027171500444254400277760ustar00rootroot00000000000000'\" t .\" Title: function::task_cwd_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_CWD_P" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_dentry_path.3stap000066400000000000000000000032561500444254400305250ustar00rootroot00000000000000'\" t .\" Title: function::task_dentry_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_DENTR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_egid.3stap000066400000000000000000000030441500444254400271070ustar00rootroot00000000000000'\" t .\" Title: function::task_egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EGID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_euid.3stap000066400000000000000000000030421500444254400271230ustar00rootroot00000000000000'\" t .\" Title: function::task_euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EUID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_exe_file.3stap000066400000000000000000000027051500444254400277620ustar00rootroot00000000000000'\" t .\" Title: function::task_exe_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EXE_F" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_execname.3stap000066400000000000000000000030001500444254400277540ustar00rootroot00000000000000'\" t .\" Title: function::task_execname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EXECN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_fd_lookup.3stap000066400000000000000000000031061500444254400301600ustar00rootroot00000000000000'\" t .\" Title: function::task_fd_lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_FD_LO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_gid.3stap000066400000000000000000000030141500444254400267370ustar00rootroot00000000000000'\" t .\" Title: function::task_gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_GID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_max_file_handles.3stap000066400000000000000000000031261500444254400314620ustar00rootroot00000000000000'\" t .\" Title: function::task_max_file_handles .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_MAX_F" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_nice.3stap000066400000000000000000000030141500444254400271120ustar00rootroot00000000000000'\" t .\" Title: function::task_nice .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NICE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_ns_egid.3stap000066400000000000000000000030561500444254400276120ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_EG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_ns_euid.3stap000066400000000000000000000030541500444254400276260ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_EU" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_ns_gid.3stap000066400000000000000000000031251500444254400274420ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_GI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_ns_pid.3stap000066400000000000000000000031031500444254400274470ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_PI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_ns_tid.3stap000066400000000000000000000031151500444254400274560ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_TI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_ns_uid.3stap000066400000000000000000000030251500444254400274570ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_UI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_open_file_handles.3stap000066400000000000000000000031211500444254400316310ustar00rootroot00000000000000'\" t .\" Title: function::task_open_file_handles .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_OPEN_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_parent.3stap000066400000000000000000000032071500444254400274710ustar00rootroot00000000000000'\" t .\" Title: function::task_parent .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_PAREN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_pid.3stap000066400000000000000000000030201500444254400267450ustar00rootroot00000000000000'\" t .\" Title: function::task_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_PID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_prio.3stap000066400000000000000000000030241500444254400271460ustar00rootroot00000000000000'\" t .\" Title: function::task_prio .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_PRIO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_start_time.3stap000066400000000000000000000031331500444254400303510ustar00rootroot00000000000000'\" t .\" Title: function::task_start_time .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_START" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_state.3stap000066400000000000000000000032131500444254400273150ustar00rootroot00000000000000'\" t .\" Title: function::task_state .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_STATE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_stime.3stap000066400000000000000000000036271500444254400273270ustar00rootroot00000000000000'\" t .\" Title: function::task_stime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_STIME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_tid.3stap000066400000000000000000000030161500444254400267560ustar00rootroot00000000000000'\" t .\" Title: function::task_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_TID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_time_string.3stap000066400000000000000000000031571500444254400305300ustar00rootroot00000000000000'\" t .\" Title: function::task_time_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_TIME_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_time_string_tid.3stap000066400000000000000000000032541500444254400313660ustar00rootroot00000000000000'\" t .\" Title: function::task_time_string_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_TIME_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_uid.3stap000066400000000000000000000030121500444254400267530ustar00rootroot00000000000000'\" t .\" Title: function::task_uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_UID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::task_utime.3stap000066400000000000000000000036211500444254400273230ustar00rootroot00000000000000'\" t .\" Title: function::task_utime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_UTIME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_filter_key.3stap000066400000000000000000000036131500444254400306520ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_filter_key .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_FIL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_get_state.3stap000066400000000000000000000030401500444254400304660ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_get_state .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_GET" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_local_addr.3stap000066400000000000000000000030661500444254400306030ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_local_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_LOC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_local_port.3stap000066400000000000000000000030621500444254400306510ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_local_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_LOC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_remote_addr.3stap000066400000000000000000000030711500444254400310000ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_remote_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_REM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_remote_port.3stap000066400000000000000000000030661500444254400310560ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_remote_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_REM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::text_str.3stap000066400000000000000000000032621500444254400270330ustar00rootroot00000000000000'\" t .\" Title: function::text_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TEXT_STR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::text_strn.3stap000066400000000000000000000037001500444254400272060ustar00rootroot00000000000000'\" t .\" Title: function::text_strn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TEXT_STRN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::thread_indent.3stap000066400000000000000000000037111500444254400277660ustar00rootroot00000000000000'\" t .\" Title: function::thread_indent .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::THREAD_IND" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::thread_indent_depth.3stap000066400000000000000000000037431500444254400311570ustar00rootroot00000000000000'\" t .\" Title: function::thread_indent_depth .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::THREAD_IND" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tid.3stap000066400000000000000000000027341500444254400257420ustar00rootroot00000000000000'\" t .\" Title: function::tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tokenize.3stap000066400000000000000000000046461500444254400270160ustar00rootroot00000000000000'\" t .\" Title: function::tokenize .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TOKENIZE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tz_ctime.3stap000066400000000000000000000036271500444254400270020ustar00rootroot00000000000000'\" t .\" Title: function::tz_ctime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TZ_CTIME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tz_gmtoff.3stap000066400000000000000000000030301500444254400271470ustar00rootroot00000000000000'\" t .\" Title: function::tz_gmtoff .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TZ_GMTOFF" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::tz_name.3stap000066400000000000000000000027661500444254400266240ustar00rootroot00000000000000'\" t .\" Title: function::tz_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TZ_NAME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::u32_arg.3stap000066400000000000000000000030561500444254400264220ustar00rootroot00000000000000'\" t .\" Title: function::u32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::U32_ARG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::u64_arg.3stap000066400000000000000000000030631500444254400264250ustar00rootroot00000000000000'\" t .\" Title: function::u64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::U64_ARG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::u_register.3stap000066400000000000000000000031511500444254400273240ustar00rootroot00000000000000'\" t .\" Title: function::u_register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::U_REGISTER" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::uaddr.3stap000066400000000000000000000034231500444254400262550ustar00rootroot00000000000000'\" t .\" Title: function::uaddr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UADDR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ubacktrace.3stap000066400000000000000000000037011500444254400272610ustar00rootroot00000000000000'\" t .\" Title: function::ubacktrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UBACKTRACE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ucallers.3stap000066400000000000000000000037121500444254400267710ustar00rootroot00000000000000'\" t .\" Title: function::ucallers .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UCALLERS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::udelay.3stap000066400000000000000000000030471500444254400264430ustar00rootroot00000000000000'\" t .\" Title: function::udelay .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UDELAY" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::uid.3stap000066400000000000000000000027301500444254400257370ustar00rootroot00000000000000'\" t .\" Title: function::uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UID" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::uint_arg.3stap000066400000000000000000000031201500444254400267600ustar00rootroot00000000000000'\" t .\" Title: function::uint_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UINT_ARG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ulong_arg.3stap000066400000000000000000000031621500444254400271330ustar00rootroot00000000000000'\" t .\" Title: function::ulong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ULONG_ARG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ulonglong_arg.3stap000066400000000000000000000031041500444254400300070ustar00rootroot00000000000000'\" t .\" Title: function::ulonglong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ULONGLONG_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::umodname.3stap000066400000000000000000000033151500444254400267630ustar00rootroot00000000000000'\" t .\" Title: function::umodname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UMODNAME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::usecs_to_string.3stap000066400000000000000000000033631500444254400303730ustar00rootroot00000000000000'\" t .\" Title: function::usecs_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USECS_TO_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_buffer_quoted.3stap000066400000000000000000000042521500444254400310470ustar00rootroot00000000000000'\" t .\" Title: function::user_buffer_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_BUFFE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_buffer_quoted_error.3stap000066400000000000000000000042151500444254400322570ustar00rootroot00000000000000'\" t .\" Title: function::user_buffer_quoted_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_BUFFE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_char.3stap000066400000000000000000000032401500444254400271260ustar00rootroot00000000000000'\" t .\" Title: function::user_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_CHAR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_char_error.3stap000066400000000000000000000032751500444254400303470ustar00rootroot00000000000000'\" t .\" Title: function::user_char_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_CHAR_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_char_warn.3stap000066400000000000000000000033411500444254400301570ustar00rootroot00000000000000'\" t .\" Title: function::user_char_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_CHAR_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int.3stap000066400000000000000000000032321500444254400270040ustar00rootroot00000000000000'\" t .\" Title: function::user_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int16.3stap000066400000000000000000000033051500444254400271540ustar00rootroot00000000000000'\" t .\" Title: function::user_int16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT16" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int16_error.3stap000066400000000000000000000033411500444254400303650ustar00rootroot00000000000000'\" t .\" Title: function::user_int16_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT16" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int32.3stap000066400000000000000000000033051500444254400271520ustar00rootroot00000000000000'\" t .\" Title: function::user_int32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT32" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int32_error.3stap000066400000000000000000000033411500444254400303630ustar00rootroot00000000000000'\" t .\" Title: function::user_int32_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT32" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int64.3stap000066400000000000000000000033051500444254400271570ustar00rootroot00000000000000'\" t .\" Title: function::user_int64 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT64" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int64_error.3stap000066400000000000000000000033411500444254400303700ustar00rootroot00000000000000'\" t .\" Title: function::user_int64_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT64" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int8.3stap000066400000000000000000000032761500444254400271040ustar00rootroot00000000000000'\" t .\" Title: function::user_int8 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT8" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int8_error.3stap000066400000000000000000000033331500444254400303070ustar00rootroot00000000000000'\" t .\" Title: function::user_int8_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT8_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int_error.3stap000066400000000000000000000032701500444254400302170ustar00rootroot00000000000000'\" t .\" Title: function::user_int_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT_E" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_int_warn.3stap000066400000000000000000000033341500444254400300360ustar00rootroot00000000000000'\" t .\" Title: function::user_int_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT_W" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_long.3stap000066400000000000000000000035001500444254400271470ustar00rootroot00000000000000'\" t .\" Title: function::user_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_LONG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_long_error.3stap000066400000000000000000000035351500444254400303700ustar00rootroot00000000000000'\" t .\" Title: function::user_long_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_LONG_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_long_warn.3stap000066400000000000000000000036011500444254400302000ustar00rootroot00000000000000'\" t .\" Title: function::user_long_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_LONG_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_mode.3stap000066400000000000000000000027661500444254400271510ustar00rootroot00000000000000'\" t .\" Title: function::user_mode .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_MODE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_short.3stap000066400000000000000000000032471500444254400273570ustar00rootroot00000000000000'\" t .\" Title: function::user_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_SHORT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_short_error.3stap000066400000000000000000000033031500444254400305610ustar00rootroot00000000000000'\" t .\" Title: function::user_short_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_SHORT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_short_warn.3stap000066400000000000000000000033471500444254400304070ustar00rootroot00000000000000'\" t .\" Title: function::user_short_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_SHORT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string.3stap000066400000000000000000000041001500444254400275130ustar00rootroot00000000000000'\" t .\" Title: function::user_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_n.3stap000066400000000000000000000043551500444254400300440ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_n_nofault.3stap000066400000000000000000000035261500444254400315730ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n_nofault .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_n_quoted.3stap000066400000000000000000000054071500444254400314240ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_n_warn.3stap000066400000000000000000000044011500444254400310630ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_nofault.3stap000066400000000000000000000033261500444254400312540ustar00rootroot00000000000000'\" t .\" Title: function::user_string_nofault .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_quoted.3stap000066400000000000000000000037501500444254400311060ustar00rootroot00000000000000'\" t .\" Title: function::user_string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_quoted_utf16.3stap000066400000000000000000000033031500444254400321250ustar00rootroot00000000000000'\" t .\" Title: function::user_string_quoted_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_quoted_utf32.3stap000066400000000000000000000033031500444254400321230ustar00rootroot00000000000000'\" t .\" Title: function::user_string_quoted_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_utf16.3stap000066400000000000000000000041421500444254400305460ustar00rootroot00000000000000'\" t .\" Title: function::user_string_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_utf32.3stap000066400000000000000000000041421500444254400305440ustar00rootroot00000000000000'\" t .\" Title: function::user_string_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_string_warn.3stap000066400000000000000000000042051500444254400305500ustar00rootroot00000000000000'\" t .\" Title: function::user_string_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_uint16.3stap000066400000000000000000000033441500444254400273440ustar00rootroot00000000000000'\" t .\" Title: function::user_uint16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT1" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_uint16_error.3stap000066400000000000000000000034001500444254400305460ustar00rootroot00000000000000'\" t .\" Title: function::user_uint16_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT1" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_uint32.3stap000066400000000000000000000033441500444254400273420ustar00rootroot00000000000000'\" t .\" Title: function::user_uint32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT3" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_uint32_error.3stap000066400000000000000000000034001500444254400305440ustar00rootroot00000000000000'\" t .\" Title: function::user_uint32_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT3" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_uint64.3stap000066400000000000000000000033441500444254400273470ustar00rootroot00000000000000'\" t .\" Title: function::user_uint64 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT6" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_uint64_error.3stap000066400000000000000000000034001500444254400305510ustar00rootroot00000000000000'\" t .\" Title: function::user_uint64_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT6" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_uint8.3stap000066400000000000000000000033351500444254400272650ustar00rootroot00000000000000'\" t .\" Title: function::user_uint8 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT8" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_uint8_error.3stap000066400000000000000000000033711500444254400304760ustar00rootroot00000000000000'\" t .\" Title: function::user_uint8_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT8" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_ulong.3stap000066400000000000000000000035511500444254400273420ustar00rootroot00000000000000'\" t .\" Title: function::user_ulong .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_ULONG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_ulong_error.3stap000066400000000000000000000036041500444254400305520ustar00rootroot00000000000000'\" t .\" Title: function::user_ulong_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_ULONG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_ulong_warn.3stap000066400000000000000000000036511500444254400303720ustar00rootroot00000000000000'\" t .\" Title: function::user_ulong_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_ULONG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_ushort.3stap000066400000000000000000000033061500444254400275400ustar00rootroot00000000000000'\" t .\" Title: function::user_ushort .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_USHOR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_ushort_error.3stap000066400000000000000000000033421500444254400307510ustar00rootroot00000000000000'\" t .\" Title: function::user_ushort_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_USHOR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::user_ushort_warn.3stap000066400000000000000000000034061500444254400305700ustar00rootroot00000000000000'\" t .\" Title: function::user_ushort_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_USHOR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::usrdev2kerndev.3stap000066400000000000000000000030011500444254400301170ustar00rootroot00000000000000'\" t .\" Title: function::usrdev2kerndev .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USRDEV2KER" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::ustack.3stap000066400000000000000000000034171500444254400264530ustar00rootroot00000000000000'\" t .\" Title: function::ustack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USTACK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::usymdata.3stap000066400000000000000000000036731500444254400270140ustar00rootroot00000000000000'\" t .\" Title: function::usymdata .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMDATA" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::usymfile.3stap000066400000000000000000000033031500444254400270100ustar00rootroot00000000000000'\" t .\" Title: function::usymfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMFILE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::usymfileline.3stap000066400000000000000000000033351500444254400276650ustar00rootroot00000000000000'\" t .\" Title: function::usymfileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMFILELI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::usymline.3stap000066400000000000000000000033221500444254400270210ustar00rootroot00000000000000'\" t .\" Title: function::usymline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMLINE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::usymname.3stap000066400000000000000000000032261500444254400270150ustar00rootroot00000000000000'\" t .\" Title: function::usymname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMNAME" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::vm_fault_contains.3stap000066400000000000000000000031311500444254400306650ustar00rootroot00000000000000'\" t .\" Title: function::vm_fault_contains .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::VM_FAULT_C" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/function::warn.3stap000066400000000000000000000032141500444254400261230ustar00rootroot00000000000000'\" t .\" Title: function::warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::WARN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/macro::json_output_array_numeric_value.3stap000066400000000000000000000040631500444254400331400ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_array_numeric_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_A" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/macro::json_output_array_string_value.3stap000066400000000000000000000040511500444254400330010ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_array_string_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_A" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/macro::json_output_data_end.3stap000066400000000000000000000031151500444254400306400ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_data_end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_D" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/macro::json_output_data_start.3stap000066400000000000000000000031311500444254400312250ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_data_start .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_D" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/macro::json_output_numeric_value.3stap000066400000000000000000000034401500444254400317400ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_numeric_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_N" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/macro::json_output_string_value.3stap000066400000000000000000000034271500444254400316110ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_string_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::.3stap000066400000000000000000000024501500444254400245160ustar00rootroot00000000000000'\" t .\" Title: probe:: .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::" "3stap" "April 2025" "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:: \- .SH "SYNOPSIS" .sp .nf .fi .SH "VALUES" .PP None systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioblock.end.3stap000066400000000000000000000052701500444254400266310ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK\&.END" "3stap" "April 2025" "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 \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIerror\fR .RS 4 0 on success .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIhw_segments\fR .RS 4 number of segments after physical and DMA remapping hardware coalescing is performed .RE .PP \fIphys_segments\fR .RS 4 number of segments in this bio after physical address coalescing is performed\&. .RE .PP \fIname\fR .RS 4 name of the probe point .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 \fIidx\fR .RS 4 offset into the bio vector array .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 \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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioblock.request.3stap000066400000000000000000000055611500444254400275560ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock.request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK\&.REQ" "3stap" "April 2025" "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 \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 \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIidx\fR .RS 4 offset into the bio vector array .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIopf\fR .RS 4 operations and flags .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 \fIname\fR .RS 4 name of the probe point .RE .PP \fIhw_segments\fR .RS 4 number of segments after physical and DMA remapping hardware coalescing is performed .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIbdev\fR .RS 4 target block device .RE .SH "CONTEXT" .PP The process makes block I/O request .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioblock_trace.bounce.3stap000066400000000000000000000057121500444254400305150ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock_trace.bounce .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK_TRACE" "3stap" "April 2025" "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 \fIname\fR .RS 4 name of the probe point .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .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 \fIopf\fR .RS 4 operations and flags .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 \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .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 \fIbdev\fR .RS 4 target block device .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .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 device for which a buffer bounce was needed\&. .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .SH "CONTEXT" .PP The process creating a block IO request\&. .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioblock_trace.end.3stap000066400000000000000000000056001500444254400300040ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock_trace.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK_TRACE" "3stap" "April 2025" "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 \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIq\fR .RS 4 request queue on which this bio was queued\&. .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIbdev\fR .RS 4 target block device .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_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .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 \fIopf\fR .RS 4 operations and flags .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 \fIrw\fR .RS 4 binary trace for read/write request .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 signals the transfer is done\&. .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioblock_trace.request.3stap000066400000000000000000000056221500444254400307320ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock_trace.request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK_TRACE" "3stap" "April 2025" "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 \fIbdev\fR .RS 4 target block device .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .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 \fIsize\fR .RS 4 total size in bytes .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .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 \fIopf\fR .RS 4 operations and flags .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 \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .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 makes block I/O request .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_add_request.3stap000066400000000000000000000035061500444254400321150ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_add_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "April 2025" "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 \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 .PP \fIq\fR .RS 4 Pointer to request queue\&. .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_add_request.kp.3stap000066400000000000000000000036221500444254400325250ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_add_request.kp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "April 2025" "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 \fIq\fR .RS 4 pointer to request queue .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 the request .RE .PP \fIdisk_major\fR .RS 4 Disk major number of the request .RE .PP \fIrq_flags\fR .RS 4 Request flags .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of the request .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_add_request.tp.3stap000066400000000000000000000036251500444254400325410ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_add_request.tp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "April 2025" "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 \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 request\&. .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 SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_completed_request.3stap000066400000000000000000000034771500444254400333500ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_completed_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "April 2025" "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 \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 the request .RE .PP \fIdisk_major\fR .RS 4 Disk major number of the request .RE .PP \fIrq_flags\fR .RS 4 Request flags .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of the request .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_next_request.3stap000066400000000000000000000031561500444254400323440ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_next_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_next_request.return.3stap000066400000000000000000000034161500444254400336610ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_next_request.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "April 2025" "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 \fIrq_flags\fR .RS 4 Request flags .RE .PP \fIdisk_minor\fR .RS 4 Disk minor 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 .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.elv_abort_request.3stap000066400000000000000000000035051500444254400336510ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.elv_abort_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "April 2025" "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 \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 request\&. .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) probe::ioscheduler_trace.elv_completed_request.3stap000066400000000000000000000035511500444254400344400ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Tapset_Reference/man3'\" t .\" Title: probe::ioscheduler_trace.elv_completed_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "April 2025" "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_flags\fR .RS 4 Request flags\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number 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 \fIrq\fR .RS 4 Address of request\&. .RE .SH "DESCRIPTION" .PP completed\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.elv_issue_request.3stap000066400000000000000000000035351500444254400336750ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.elv_issue_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "April 2025" "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 \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .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 .SH "DESCRIPTION" .PP scheduled\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.elv_requeue_request.3stap000066400000000000000000000036351500444254400342210ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.elv_requeue_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "April 2025" "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 \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 .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 "DESCRIPTION" .PP put back on the queue, when the hadware cannot accept more requests\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.plug.3stap000066400000000000000000000031761500444254400310770ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.plug .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "April 2025" "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 \fIrq_queue\fR .RS 4 request queue .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "DESCRIPTION" .PP ie, requests in the queue cannot be serviced by block driver\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.unplug_io.3stap000066400000000000000000000033401500444254400321220ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.unplug_io .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.unplug_timer.3stap000066400000000000000000000031621500444254400326350ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.unplug_timer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of the probe point .RE .PP \fIrq_queue\fR .RS 4 request queue .RE .SH "DESCRIPTION" .PP with a request queue expires\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.ForwDatagrams.3stap000066400000000000000000000034521500444254400303020ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.ForwDatagrams .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.FORWD" "3stap" "April 2025" "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 \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 \fIForwDatagrams\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_OUTFORWDATAGRAMS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.FragFails.3stap000066400000000000000000000034451500444254400274010ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.FragFails .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.FRAGF" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.FragOKs.3stap000066400000000000000000000034311500444254400270320ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.FragOKs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.FRAGO" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InAddrErrors.3stap000066400000000000000000000034741500444254400301030ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InAddrErrors .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INADD" "3stap" "April 2025" "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 \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 \fIInAddrErrors\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INADDRERRORS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InDiscards.3stap000066400000000000000000000034371500444254400275670ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InDiscards .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INDIS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InNoRoutes.3stap000066400000000000000000000034621500444254400276070ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InNoRoutes .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INNOR" "3stap" "April 2025" "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 \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 \fIInNoRoutes\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INNOROUTES) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InReceives.3stap000066400000000000000000000034321500444254400275730ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InReceives .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INREC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InUnknownProtos.3stap000066400000000000000000000035071500444254400306770ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InUnknownProtos .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INUNK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.OutRequests.3stap000066400000000000000000000034471500444254400300500ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.OutRequests .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.OUTRE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.ReasmReqds.3stap000066400000000000000000000034661500444254400276140ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.ReasmReqds .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.REASM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.ReasmTimeout.3stap000066400000000000000000000034451500444254400301610ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.ReasmTimeout .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.REASM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::irq_handler.entry.3stap000066400000000000000000000042121500444254400300650ustar00rootroot00000000000000'\" t .\" Title: probe::irq_handler.entry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IRQ_HANDLER\&" "3stap" "April 2025" "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 \fIhandler\fR .RS 4 interrupt handler function .RE .PP \fIthread_fn\fR .RS 4 interrupt handler function for threaded interrupts .RE .PP \fIaction\fR .RS 4 struct irqaction* for this interrupt num .RE .PP \fIdev_name\fR .RS 4 name of device .RE .PP \fIdir\fR .RS 4 pointer to the proc/irq/NN/name entry .RE .PP \fInext_irqaction\fR .RS 4 pointer to next irqaction for shared interrupts .RE .PP \fIflags_str\fR .RS 4 symbolic string representation of IRQ flags .RE .PP \fIthread\fR .RS 4 thread pointer for threaded interrupts .RE .PP \fIflags\fR .RS 4 Flags for IRQ handler .RE .PP \fIdev_id\fR .RS 4 Cookie to identify device .RE .PP \fIirq\fR .RS 4 irq number .RE .PP \fIthread_flags\fR .RS 4 Flags related to thread .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::irq_handler.exit.3stap000066400000000000000000000042751500444254400277060ustar00rootroot00000000000000'\" t .\" Title: probe::irq_handler.exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IRQ_HANDLER\&" "3stap" "April 2025" "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 \fIdir\fR .RS 4 pointer to the proc/irq/NN/name entry .RE .PP \fIflags_str\fR .RS 4 symbolic string representation of IRQ flags .RE .PP \fInext_irqaction\fR .RS 4 pointer to next irqaction for shared interrupts .RE .PP \fIflags\fR .RS 4 flags for IRQ handler .RE .PP \fIthread\fR .RS 4 thread pointer for threaded interrupts .RE .PP \fIirq\fR .RS 4 interrupt number .RE .PP \fIdev_id\fR .RS 4 Cookie to identify device .RE .PP \fIthread_flags\fR .RS 4 Flags related to thread .RE .PP \fIthread_fn\fR .RS 4 interrupt handler function for threaded interrupts .RE .PP \fIhandler\fR .RS 4 interrupt handler function that was executed .RE .PP \fIret\fR .RS 4 return value of the handler .RE .PP \fIaction\fR .RS 4 struct irqaction* .RE .PP \fIdev_name\fR .RS 4 name of device .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::json_data.3stap000066400000000000000000000036221500444254400264030ustar00rootroot00000000000000'\" t .\" Title: probe::json_data .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::JSON_DATA" "3stap" "April 2025" "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, @\fBjson_output_data_start\fR must be called\&. That call is followed by one or more of the following (one call for each data item): @\fBjson_output_string_value\fR, @\fBjson_output_numeric_value\fR, @\fBjson_output_array_string_value\fR, and @\fBjson_output_array_numeric_value\fR\&. Finally @\fBjson_output_data_end\fR must be called\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.create.3stap000066400000000000000000000034151500444254400275340ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.CR" "3stap" "April 2025" "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_pid\fR .RS 4 The PID of the newly created process .RE .PP \fInew_tid\fR .RS 4 The TID of the newly created task .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.exec.3stap000066400000000000000000000037251500444254400272210ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.exec .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.EX" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of the system call (\(lqexecve\(rq) (SystemTap v2\&.5+) .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 \fIfilename\fR .RS 4 The path to the new executable .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.exec_complete.3stap000066400000000000000000000037511500444254400311100ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.exec_complete .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.EX" "3stap" "April 2025" "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 \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 .PP \fIretstr\fR .RS 4 A string representation of errno (SystemTap v2\&.5+) .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.exit.3stap000066400000000000000000000032531500444254400272420ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.EX" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.release.3stap000066400000000000000000000037671500444254400277230ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.RE" "3stap" "April 2025" "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 \fIreleased_tid\fR .RS 4 TID of the task being released .RE .PP \fItask\fR .RS 4 A task handle to the process being released .RE .PP \fIreleased_pid\fR .RS 4 PID of the process being released .RE .PP \fIpid\fR .RS 4 Same as \fIreleased_pid\fR for compatibility (deprecated) .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.start.3stap000066400000000000000000000030201500444254400274160ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.start .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.ST" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.DelayedACKs.3stap000066400000000000000000000034451500444254400303430ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.DelayedACKs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.DE" "3stap" "April 2025" "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 \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 \fIDelayedACKs\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_DELAYEDACKS) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.ListenDrops.3stap000066400000000000000000000034751500444254400305430ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.ListenDrops .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.LI" "3stap" "April 2025" "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 \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 \fIListenDrops\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_LISTENDROPS) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.ListenOverflows.3stap000066400000000000000000000035141500444254400314340ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.ListenOverflows .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.LI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.TCPMemoryPressures.3stap000066400000000000000000000035321500444254400320220ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.TCPMemoryPressures .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.TC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.change_mac.3stap000066400000000000000000000031771500444254400277770ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.change_mac .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CHAN" "3stap" "April 2025" "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 \fIdev_name\fR .RS 4 The device that will have the MAC changed .RE .PP \fImac_len\fR .RS 4 The MAC length .RE .PP \fIold_mac\fR .RS 4 The current MAC address .RE .PP \fInew_mac\fR .RS 4 The new MAC address .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.change_mtu.3stap000066400000000000000000000030721500444254400300360ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.change_mtu .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CHAN" "3stap" "April 2025" "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 \fIold_mtu\fR .RS 4 The current MTU .RE .PP \fIdev_name\fR .RS 4 The device that will have the MTU changed .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.change_rx_flag.3stap000066400000000000000000000030311500444254400306460ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.change_rx_flag .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CHAN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.close.3stap000066400000000000000000000027161500444254400270350ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.close .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CLOS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.get_stats.3stap000066400000000000000000000027651500444254400277310ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.get_stats .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.GET_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.hard_transmit.3stap000066400000000000000000000032701500444254400305630ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.hard_transmit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.HARD" "3stap" "April 2025" "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 \fIdev_name\fR .RS 4 The device scheduled to transmit .RE .PP \fIprotocol\fR .RS 4 The protocol used in the transmission .RE .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 .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.ioctl.3stap000066400000000000000000000030061500444254400270330ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.ioctl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.IOCT" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.open.3stap000066400000000000000000000027131500444254400266660ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.OPEN" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.receive.3stap000066400000000000000000000031361500444254400273470ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.RECE" "3stap" "April 2025" "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 \fIprotocol\fR .RS 4 Protocol of received packet\&. .RE .PP \fIlength\fR .RS 4 The length of the receiving buffer\&. .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.register.3stap000066400000000000000000000027371500444254400275570ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.REGI" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.rx.3stap000066400000000000000000000030001500444254400263440ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.rx .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.RX" "3stap" "April 2025" "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 \fIprotocol\fR .RS 4 The packet protocol .RE .PP \fIdev_name\fR .RS 4 The device received the packet .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.set_promiscuity.3stap000066400000000000000000000033271500444254400311710ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.set_promiscuity .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.SET_" "3stap" "April 2025" "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 \fIdisable\fR .RS 4 If the device is leaving promiscuity mode .RE .PP \fIdev_name\fR .RS 4 The device that is entering/leaving promiscuity mode .RE .PP \fIenable\fR .RS 4 If the device is entering promiscuity mode .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.transmit.3stap000066400000000000000000000033141500444254400275640ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.transmit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.TRAN" "3stap" "April 2025" "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 \fIdev_name\fR .RS 4 The name of the device\&. e\&.g: eth0, ath1\&. .RE .PP \fIlength\fR .RS 4 The length of the transmit buffer\&. .RE .PP \fIprotocol\fR .RS 4 The protocol of this packet(defined in include/linux/if_ether\&.h)\&. .RE .PP \fItruesize\fR .RS 4 The size of the data to be transmitted\&. .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netdev.unregister.3stap000066400000000000000000000027571500444254400301240ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.unregister .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.UNRE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.arp.forward.3stap000066400000000000000000000064161500444254400306650ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.arp.forward .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.A" "3stap" "April 2025" "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 \fIar_tha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .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 \fIar_hrd\fR .RS 4 Format of hardware address .RE .PP \fIarphdr\fR .RS 4 Address of ARP header .RE .PP \fIar_pro\fR .RS 4 Format of protocol address .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIar_hln\fR .RS 4 Length of hardware address .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIar_pln\fR .RS 4 Length of protocol address .RE .PP \fIar_tip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target IP address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIar_sha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address .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 \fIpf\fR .RS 4 Protocol family \-\- always \(lqarp\(rq .RE .PP \fIar_data\fR .RS 4 Address of ARP packet data region (after the header) .RE .PP \fIar_sip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source IP address .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.arp.in.3stap000066400000000000000000000063701500444254400276260ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.arp.in .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.A" "3stap" "April 2025" "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 \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIar_sip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source IP address .RE .PP \fIar_data\fR .RS 4 Address of ARP packet data region (after the header) .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 \fIar_op\fR .RS 4 ARP opcode (command) .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 \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIar_pln\fR .RS 4 Length of protocol address .RE .PP \fIar_tip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target IP address .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIar_hln\fR .RS 4 Length of hardware address .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIarphdr\fR .RS 4 Address of ARP header .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIar_tha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIar_hrd\fR .RS 4 Format of hardware address .RE .PP \fIar_pro\fR .RS 4 Format of protocol address .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.arp.out.3stap000066400000000000000000000063731500444254400300320ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.arp.out .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.A" "3stap" "April 2025" "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_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIar_pln\fR .RS 4 Length of protocol address .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIar_tip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target IP address .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIar_hln\fR .RS 4 Length of hardware address .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .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 \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A 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_tha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address .RE .PP \fIarphdr\fR .RS 4 Address of ARP header .RE .PP \fIar_pro\fR .RS 4 Format of protocol address .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIar_sip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source IP address .RE .PP \fIar_data\fR .RS 4 Address of ARP packet data region (after the header) .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 \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 .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.forward.3stap000066400000000000000000000070201500444254400313270ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.forward .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "April 2025" "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 \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .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_vid\fR .RS 4 Protocol version identifier .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 \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .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 \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.local_in.3stap000066400000000000000000000070101500444254400314420ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.local_in .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "April 2025" "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 \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .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_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .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 \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.local_out.3stap000066400000000000000000000070071500444254400316510ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.local_out .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "April 2025" "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 \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .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 \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.post_routing.3stap000066400000000000000000000070111500444254400324170ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.post_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "April 2025" "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 \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .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 \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .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 \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.pre_routing.3stap000066400000000000000000000070021500444254400322200ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.pre_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "April 2025" "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 \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .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_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .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 \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 \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.forward.3stap000066400000000000000000000071231500444254400305070ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.forward .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "April 2025" "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 \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIiphdr\fR .RS 4 Address of IP header .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 \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .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 \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .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_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 \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.local_in.3stap000066400000000000000000000071251500444254400306250ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.local_in .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "April 2025" "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 \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 \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .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 \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .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 \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_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.local_out.3stap000066400000000000000000000070701500444254400310250ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.local_out .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "April 2025" "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 \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .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 \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.post_routing.3stap000066400000000000000000000071451500444254400316030ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.post_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "April 2025" "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 \fIsaddr\fR .RS 4 A string representing the source IP address .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 \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .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 \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIfamily\fR .RS 4 IP address family .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 \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK 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 \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.pre_routing.3stap000066400000000000000000000071051500444254400314000ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.pre_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "April 2025" "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 \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 \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fIpf\fR .RS 4 Protocol family \- either \*(Aqipv4\*(Aq or \*(Aqipv6\*(Aq .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .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 \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK 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 \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.readahead.3stap000066400000000000000000000035521500444254400277040ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.readahead .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "April 2025" "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.readahead \- NFS client reading multiple pages .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.readahead .fi .SH "VALUES" .PP \fIsize\fR .RS 4 number of pages attempted to read in this execution .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 \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIrpages\fR .RS 4 read size (in pages) .RE .PP \fIfile\fR .RS 4 filp argument .RE .SH "DESCRIPTION" .PP Fires when in readahead way, read several pages once .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.readpage.3stap000066400000000000000000000040511500444254400275510ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.readpage .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "April 2025" "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 \fIsb_flag\fR .RS 4 super block 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 \fIi_flag\fR .RS 4 file flags .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fIfile\fR .RS 4 file argument .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 .PP \fIrsize\fR .RS 4 read size (in bytes) .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.readpages.3stap000066400000000000000000000035521500444254400277410ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.readpages .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "April 2025" "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 \fIfile\fR .RS 4 filp argument .RE .PP \fIrpages\fR .RS 4 read size (in pages) .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIrsize\fR .RS 4 read size (in bytes) .RE .PP \fIsize\fR .RS 4 number of pages attempted to read in this execution .RE .PP \fInr_pages\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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.release_page.3stap000066400000000000000000000034171500444254400304220ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.release_page .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "April 2025" "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 \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIsize\fR .RS 4 release pages .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .SH "DESCRIPTION" .PP Fires when do a release operation on NFS\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.set_page_dirty.3stap000066400000000000000000000033201500444254400310010ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.set_page_dirty .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.S" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.write_begin.3stap000066400000000000000000000042231500444254400303000ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.write_begin .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "April 2025" "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 \fIsize\fR .RS 4 write bytes .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 \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 .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.write_end.3stap000066400000000000000000000041371500444254400277660ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.write_end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "April 2025" "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 \fI__page\fR .RS 4 the address of page .RE .PP \fIsize\fR .RS 4 write bytes .RE .PP \fIoffset\fR .RS 4 start address of this write operation .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 \fIsb_flag\fR .RS 4 super block flags .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.writepage.3stap000066400000000000000000000044341500444254400277750ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.writepage .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "April 2025" "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 \fIfor_reclaim\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs invoked from the page allocator .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIwsize\fR .RS 4 write size .RE .PP \fIsb_flag\fR .RS 4 super block flags .RE .PP \fIsize\fR .RS 4 number of pages to be written in this execution .RE .PP \fIfor_kupdate\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs a kupdate writeback .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fIi_flag\fR .RS 4 file flags .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIi_state\fR .RS 4 inode state flags .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.writepages.3stap000066400000000000000000000041361500444254400301570ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.writepages .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "April 2025" "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 \fIdev\fR .RS 4 device identifier .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 \fInr_to_write\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 \fIsize\fR .RS 4 number of pages attempted to be written in this execution .RE .PP \fIwsize\fR .RS 4 write size .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.aio_read.3stap000066400000000000000000000040421500444254400275510ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.aio_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.A" "3stap" "April 2025" "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 \fIpos\fR .RS 4 current position of file .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIino\fR .RS 4 inode number .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 \fIbuf\fR .RS 4 the address of buf in user space .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.aio_write.3stap000066400000000000000000000033361500444254400277750ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.aio_write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.A" "3stap" "April 2025" "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 \fIfile_name\fR .RS 4 file name .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIpos\fR .RS 4 offset of the file .RE .PP \fIbuf\fR .RS 4 the address of buf in user space .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.check_flags.3stap000066400000000000000000000027261500444254400302460ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.check_flags .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.C" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.flush.3stap000066400000000000000000000031001500444254400271210ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.flush .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.F" "3stap" "April 2025" "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 \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIndirty\fR .RS 4 number of dirty page .RE .PP \fImode\fR .RS 4 file mode .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.fsync.3stap000066400000000000000000000030311500444254400271250ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.fsync .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.F" "3stap" "April 2025" "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 \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIndirty\fR .RS 4 number of dirty pages .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.llseek.3stap000066400000000000000000000033031500444254400272640ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.llseek .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.L" "3stap" "April 2025" "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 \fIwhence\fR .RS 4 the position to seek from .RE .PP \fIoffset\fR .RS 4 the offset of the file will be repositioned .RE .PP \fIwhence_str\fR .RS 4 symbolic string representation of the position to seek from .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.lock.3stap000066400000000000000000000034131500444254400267370ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.lock .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.L" "3stap" "April 2025" "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 \fIfl_flag\fR .RS 4 lock flags .RE .PP \fIfl_start\fR .RS 4 starting offset of locked region .RE .PP \fIfl_type\fR .RS 4 lock type .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIfl_end\fR .RS 4 ending offset of locked region .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIcmd\fR .RS 4 cmd arguments .RE .PP \fIi_mode\fR .RS 4 file type and access rights .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.mmap.3stap000066400000000000000000000041351500444254400267430ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.mmap .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.M" "3stap" "April 2025" "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 \fIbuf\fR .RS 4 the address of buf in user space .RE .PP \fIcache_valid\fR .RS 4 cache related bit mask flag .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 \fIvm_end\fR .RS 4 the first byte after end address within vm_mm .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIvm_start\fR .RS 4 start address within vm_mm .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIvm_flag\fR .RS 4 vm flags .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.open.3stap000066400000000000000000000031441500444254400267510ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.O" "3stap" "April 2025" "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 \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIflag\fR .RS 4 file flag .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.read.3stap000066400000000000000000000031561500444254400267260ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.R" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.read_iter.3stap000066400000000000000000000037551500444254400277560ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.read_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.R" "3stap" "April 2025" "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 \fIpos\fR .RS 4 current position of file .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .PP \fIino\fR .RS 4 inode number .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 \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 \fIcache_valid\fR .RS 4 cache related bit mask flag .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.release.3stap000066400000000000000000000030301500444254400274220ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.R" "3stap" "April 2025" "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 \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fImode\fR .RS 4 file mode .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.sendfile.3stap000066400000000000000000000036161500444254400276050ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.sendfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.S" "3stap" "April 2025" "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 \fIcache_valid\fR .RS 4 cache related bit mask flag .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 \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.write.3stap000066400000000000000000000031641500444254400271440ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.W" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.write_iter.3stap000066400000000000000000000032511500444254400301640ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.write_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.W" "3stap" "April 2025" "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 \fIpos\fR .RS 4 offset of the file .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIdev\fR .RS 4 device identifier .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.commit.3stap000066400000000000000000000043651500444254400274650ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIversion\fR .RS 4 NFS version .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIsize\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\&.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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.commit_done.3stap000066400000000000000000000037241500444254400304700ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.commit_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIstatus\fR .RS 4 result of last operation .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIvalid\fR .RS 4 fattr\->valid, indicates which fields are valid .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIcount\fR .RS 4 number of bytes committed .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.commit_setup.3stap000066400000000000000000000041041500444254400306740ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.commit_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIsize\fR .RS 4 bytes in this commit .RE .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIcount\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 \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.create.3stap000066400000000000000000000034571500444254400274410ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIflag\fR .RS 4 indicates create mode (only for NFSv3 and NFSv4) .RE .PP \fIfh\fR .RS 4 file handle of parent dir .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.handle_exception.3stap000066400000000000000000000031341500444254400314770ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.handle_exception .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.lookup.3stap000066400000000000000000000036231500444254400275020ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIserver_ip\fR .RS 4 IP address of server .RE .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 \fIprot\fR .RS 4 transfer protocol .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIname_len\fR .RS 4 the length of file name .RE .PP \fIversion\fR .RS 4 NFS version .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.open.3stap000066400000000000000000000034351500444254400271330ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIflag\fR .RS 4 file flag .RE .PP \fIprot\fR .RS 4 transfer protocol .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 .SH "DESCRIPTION" .PP Allocate file read/write context information .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.read.3stap000066400000000000000000000036511500444254400271050ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIoffset\fR .RS 4 the file offset .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIcount\fR .RS 4 read bytes in this execution .RE .PP \fIversion\fR .RS 4 NFS version .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 .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.read_done.3stap000066400000000000000000000035601500444254400301110ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.read_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIprot\fR .RS 4 transfer protocol .RE .PP \fIcount\fR .RS 4 number of bytes read .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fIstatus\fR .RS 4 result of last operation .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.read_setup.3stap000066400000000000000000000035301500444254400303210ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.read_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIsize\fR .RS 4 read bytes in this execution .RE .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIcount\fR .RS 4 read bytes in this execution .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.release.3stap000066400000000000000000000034441500444254400276120ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIfilename\fR .RS 4 file name .RE .PP \fIflag\fR .RS 4 file flag .RE .PP \fIserver_ip\fR .RS 4 IP address of server .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 .SH "DESCRIPTION" .PP Release file read/write context information .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.remove.3stap000066400000000000000000000033461500444254400274700ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.remove .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIprot\fR .RS 4 transfer protocol .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 \fIfh\fR .RS 4 file handle of parent dir .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIfilename\fR .RS 4 file name .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.rename.3stap000066400000000000000000000036261500444254400274430ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.rename .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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_name\fR .RS 4 old file name .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fInew_name\fR .RS 4 new file name .RE .PP \fIold_fh\fR .RS 4 file handle of old parent dir .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fIold_filelen\fR .RS 4 length of old file name .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fInew_filelen\fR .RS 4 length of new file name .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.rename_done.3stap000066400000000000000000000036771500444254400304560ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.rename_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIversion\fR .RS 4 NFS version .RE .PP \fIold_fh\fR .RS 4 file handle of old parent dir .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fInew_fh\fR .RS 4 file handle of new parent dir .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.rename_setup.3stap000066400000000000000000000033771500444254400306660ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.rename_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.write.3stap000066400000000000000000000041731500444254400273240ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIsize\fR .RS 4 read bytes in this execution .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 \fIprot\fR .RS 4 transfer protocol .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIversion\fR .RS 4 NFS version .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 .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.write_done.3stap000066400000000000000000000037031500444254400303270ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.write_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \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 written .RE .PP \fIvalid\fR .RS 4 fattr\->valid, indicates which fields are valid .RE .PP \fIversion\fR .RS 4 NFS version .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 write RPC task is received or some write error occurs (timeout or socket shutdown)\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.write_setup.3stap000066400000000000000000000043531500444254400305440ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.write_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "April 2025" "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 \fIsize\fR .RS 4 bytes written in this execution .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 \fIprot\fR .RS 4 transfer protocol .RE .PP \fIcount\fR .RS 4 bytes written in this execution .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIserver_ip\fR .RS 4 IP address of server .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 .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.close.3stap000066400000000000000000000030271500444254400264760ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.close .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.CLOSE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.commit.3stap000066400000000000000000000034031500444254400266570ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.COMMIT" "3stap" "April 2025" "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 \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIflag\fR .RS 4 indicates whether this execution is a sync operation .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.create.3stap000066400000000000000000000036411500444254400266360ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.CREATE" "3stap" "April 2025" "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 \fItype\fR .RS 4 file type(regular,dir,device,fifo \&.\&.\&.) .RE .PP \fIiap_mode\fR .RS 4 file access mode .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIiap_valid\fR .RS 4 Attribute flags .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilelen\fR .RS 4 the length of file name .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.createv3.3stap000066400000000000000000000043611500444254400271070ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.createv3 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.CREATE" "3stap" "April 2025" "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 \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fIiap_mode\fR .RS 4 file access mode .RE .PP \fIverifier\fR .RS 4 file attributes (atime,mtime,mode)\&. It\*(Aqs used to reset file attributes for CREATE_EXCLUSIVE .RE .PP \fIfilename\fR .RS 4 file name .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 \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fItruncp\fR .RS 4 trunp arguments, indicates if the file shouldbe truncate .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.dispatch.3stap000066400000000000000000000032571500444254400271750ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.dispatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.DISPAT" "3stap" "April 2025" "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 \fIversion\fR .RS 4 nfs version .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIprog\fR .RS 4 program number .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIxid\fR .RS 4 transmission id .RE .PP \fIproc\fR .RS 4 procedure number .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.lookup.3stap000066400000000000000000000032461500444254400267050ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.LOOKUP" "3stap" "April 2025" "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 \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 .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.open.3stap000066400000000000000000000032671500444254400263400ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.OPEN" "3stap" "April 2025" "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 \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIaccess\fR .RS 4 indicates the type of open (read/write/commit/readdir\&.\&.\&.) .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.commit.3stap000066400000000000000000000035641500444254400276310ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "April 2025" "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 \fIsize\fR .RS 4 read bytes .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIcount\fR .RS 4 read bytes .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.create.3stap000066400000000000000000000035061500444254400276000ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "April 2025" "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 \fIproto\fR .RS 4 transfer protocol .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIfilelen\fR .RS 4 length of file name .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIfilename\fR .RS 4 file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.lookup.3stap000066400000000000000000000035501500444254400276450ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "April 2025" "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 \fIversion\fR .RS 4 nfs version .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIfh\fR .RS 4 file handle of parent dir (the first part is the length of the file handle) .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.read.3stap000066400000000000000000000037501500444254400272510ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "April 2025" "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 \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.remove.3stap000066400000000000000000000035061500444254400276320ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.remove .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "April 2025" "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 \fIproto\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 nfs version .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 \fIfilename\fR .RS 4 file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.rename.3stap000066400000000000000000000035341500444254400276050ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.rename .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "April 2025" "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 \fIfh\fR .RS 4 file handler of old path .RE .PP \fItlen\fR .RS 4 length of new file name .RE .PP \fItfh\fR .RS 4 file handler of new path .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fItname\fR .RS 4 new file name .RE .PP \fIflen\fR .RS 4 length of old file name .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.write.3stap000066400000000000000000000040341500444254400274640ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "April 2025" "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 \fIversion\fR .RS 4 nfs version .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .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 \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 \fIstable\fR .RS 4 argp\->stable .RE .PP \fIoffset\fR .RS 4 the offset of file .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.read.3stap000066400000000000000000000035751500444254400263140ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.READ" "3stap" "April 2025" "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 \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIfile\fR .RS 4 argument file, indicates if the file has been opened\&. .RE .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIcount\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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.rename.3stap000066400000000000000000000033521500444254400266410ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.rename .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.RENAME" "3stap" "April 2025" "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 \fIfilename\fR .RS 4 old file name .RE .PP \fIfh\fR .RS 4 file handler of old path .RE .PP \fItlen\fR .RS 4 length of new file name .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 .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.unlink.3stap000066400000000000000000000033041500444254400266670ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.unlink .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.UNLINK" "3stap" "April 2025" "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 \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fItype\fR .RS 4 file type (file or dir) .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIfilename\fR .RS 4 file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.write.3stap000066400000000000000000000035771500444254400265350ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.WRITE" "3stap" "April 2025" "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 \fIsize\fR .RS 4 read bytes .RE .PP \fIfile\fR .RS 4 argument file, indicates if the file has been opened\&. .RE .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIcount\fR .RS 4 read bytes .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.balance.3stap000066400000000000000000000030001500444254400277710ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.balance .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.B" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.cpu_off.3stap000066400000000000000000000033321500444254400300350ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.cpu_off .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.C" "3stap" "April 2025" "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 \fItask_next\fR .RS 4 the process replacing current .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_prev\fR .RS 4 the process leaving the cpu (same as current) .RE .PP \fIidle\fR .RS 4 boolean indicating whether current is the idle process .RE .SH "CONTEXT" .PP The process leaving the cpu\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.cpu_on.3stap000066400000000000000000000032331500444254400276770ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.cpu_on .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.C" "3stap" "April 2025" "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 \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_prev\fR .RS 4 the process that was previously running on this cpu .RE .SH "CONTEXT" .PP The resuming process\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.ctxswitch.3stap000066400000000000000000000042761500444254400304440ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.ctxswitch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.C" "3stap" "April 2025" "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_pid\fR .RS 4 The PID 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 \fInext_task_name\fR .RS 4 The name of the process to be switched in .RE .PP \fIprev_tid\fR .RS 4 The TID of the process to be switched out .RE .PP \fIprev_priority\fR .RS 4 The priority of the process to be switched out .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fInext_pid\fR .RS 4 The PID of the process to be switched in .RE .PP \fInexttsk_state\fR .RS 4 the state 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_priority\fR .RS 4 The priority of the process to be switched in .RE .PP \fIprev_task_name\fR .RS 4 The name of the process to be switched out .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.kthread_stop.3stap000066400000000000000000000030631500444254400311040ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.kthread_stop .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.K" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.kthread_stop.return.3stap000066400000000000000000000031041500444254400324160ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.kthread_stop.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.K" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.migrate.3stap000066400000000000000000000033231500444254400300440ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.migrate .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.M" "3stap" "April 2025" "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 \fIpid\fR .RS 4 PID of the task being migrated .RE .PP \fIcpu_to\fR .RS 4 the destination cpu .RE .PP \fIpriority\fR .RS 4 priority of the task being migrated .RE .PP \fIcpu_from\fR .RS 4 the original cpu .RE .PP \fItask\fR .RS 4 the process that is being migrated .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_exit.3stap000066400000000000000000000030661500444254400311270ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "April 2025" "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 \fIpid\fR .RS 4 PID of the process exiting .RE .PP \fIpriority\fR .RS 4 priority of the process exiting .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_fork.3stap000066400000000000000000000030651500444254400311160ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_fork .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_free.3stap000066400000000000000000000031431500444254400310730ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_free .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "April 2025" "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 \fIpriority\fR .RS 4 priority of the process getting freed .RE .PP \fIpid\fR .RS 4 PID of the process getting freed .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_wait.3stap000066400000000000000000000030411500444254400311130ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_wait .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "April 2025" "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 \fIname\fR .RS 4 name of the probe point .RE .PP \fIpid\fR .RS 4 PID of the process scheduler is waiting on .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.signal_send.3stap000066400000000000000000000030561500444254400307050ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.signal_send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.S" "3stap" "April 2025" "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 \fIname\fR .RS 4 name of the probe point .RE .PP \fIsignal_number\fR .RS 4 signal number .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.tick.3stap000066400000000000000000000031661500444254400273530ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.tick .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.T" "3stap" "April 2025" "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 \fIidle\fR .RS 4 boolean indicating whether current is the idle process .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The process whose accounting will be updated\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.wait_task.3stap000066400000000000000000000031371500444254400304050ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.wait_task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.W" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.wakeup.3stap000066400000000000000000000033571500444254400277170ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.wakeup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.W" "3stap" "April 2025" "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_pid\fR .RS 4 PID of the task being woken up .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_tid\fR .RS 4 tid of the task being woken up .RE .PP \fItask_state\fR .RS 4 state of the task being woken up .RE .PP \fItask_priority\fR .RS 4 priority of the task being woken up .RE .PP \fItask_cpu\fR .RS 4 cpu of the task being woken up .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.wakeup_new.3stap000066400000000000000000000034011500444254400305560ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.wakeup_new .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.W" "3stap" "April 2025" "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_cpu\fR .RS 4 cpu of the task woken up .RE .PP \fItask_tid\fR .RS 4 TID of the new task woken up .RE .PP \fItask_state\fR .RS 4 state of the task woken up .RE .PP \fItask_priority\fR .RS 4 priority of the new task .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_pid\fR .RS 4 PID of the new task woken up .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scsi.iocompleted.3stap000066400000000000000000000040441500444254400277040ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.iocompleted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IOCOMP" "3stap" "April 2025" "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 \fIgoodbytes\fR .RS 4 The bytes completed .RE .PP \fIchannel\fR .RS 4 The channel number .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 \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIdev_id\fR .RS 4 The scsi device id .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scsi.iodispatching.3stap000066400000000000000000000042431500444254400302260ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.iodispatching .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IODISP" "3stap" "April 2025" "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 \fIrequest_buffer\fR .RS 4 The request buffer address .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIrequest_bufflen\fR .RS 4 The request buffer length .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .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 \fIdev_id\fR .RS 4 The scsi device id .RE .PP \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scsi.iodone.3stap000066400000000000000000000040641500444254400266570ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.iodone .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IODONE" "3stap" "April 2025" "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 \fIchannel\fR .RS 4 The channel number .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\fR .RS 4 The data_direction specifies whether this command is from/to the device\&. .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 \fIscsi_timer_pending\fR .RS 4 1 if a timer is pending on this request .RE .PP \fIdev_id\fR .RS 4 The scsi device id .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scsi.ioentry.3stap000066400000000000000000000034031500444254400270670ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.ioentry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IOENTR" "3stap" "April 2025" "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 \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .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 \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 .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scsi.ioexecute.3stap000066400000000000000000000041721500444254400273740ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.ioexecute .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IOEXEC" "3stap" "April 2025" "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 \fIhost_no\fR .RS 4 The host number .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIrequest_bufflen\fR .RS 4 The data buffer buffer length .RE .PP \fItimeout\fR .RS 4 Request timeout in seconds .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIrequest_buffer\fR .RS 4 The data buffer address .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIretries\fR .RS 4 Number of times to retry request .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device\&. .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::scsi.set_state.3stap000066400000000000000000000034671500444254400274030ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.set_state .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.SET_ST" "3stap" "April 2025" "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 \fIhost_no\fR .RS 4 The host number .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIold_state\fR .RS 4 The current state of the device .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIstate\fR .RS 4 The new state of the device .RE .PP \fIstate_str\fR .RS 4 The new state of the device, as a string .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .PP \fIold_state_str\fR .RS 4 The current state of the device, as a string .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.check_ignored.3stap000066400000000000000000000032321500444254400304760ustar00rootroot00000000000000'\" t .\" Title: probe::signal.check_ignored .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "April 2025" "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 \fIpid_name\fR .RS 4 Name of the process receiving the signal .RE .PP \fIsig\fR .RS 4 The number of the signal .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 .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.check_ignored.return.3stap000066400000000000000000000030331500444254400320130ustar00rootroot00000000000000'\" t .\" Title: probe::signal.check_ignored.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "April 2025" "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 \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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.checkperm.3stap000066400000000000000000000035701500444254400276600ustar00rootroot00000000000000'\" t .\" Title: probe::signal.checkperm .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "April 2025" "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 \fIsi_code\fR .RS 4 Indicates the signal type .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\fR .RS 4 The number of the signal .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIpid_name\fR .RS 4 Name of the process receiving the signal .RE .PP \fIsinfo\fR .RS 4 The address of the siginfo structure .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.checkperm.return.3stap000066400000000000000000000030211500444254400311650ustar00rootroot00000000000000'\" t .\" Title: probe::signal.checkperm.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.do_action.3stap000066400000000000000000000035731500444254400276610ustar00rootroot00000000000000'\" t .\" Title: probe::signal.do_action .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.DO_A" "3stap" "April 2025" "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 \fIoldsigact_addr\fR .RS 4 The address of the old sigaction struct associated with the signal .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\fR .RS 4 The signal to be examined/changed .RE .PP \fIsa_mask\fR .RS 4 The new mask of the signal .RE .PP \fIsigact_addr\fR .RS 4 The address of the new sigaction struct associated with the signal .RE .PP \fIsa_handler\fR .RS 4 The new handler of the signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.do_action.return.3stap000066400000000000000000000030261500444254400311700ustar00rootroot00000000000000'\" t .\" Title: probe::signal.do_action.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.DO_A" "3stap" "April 2025" "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 \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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.flush.3stap000066400000000000000000000033111500444254400270310ustar00rootroot00000000000000'\" t .\" Title: probe::signal.flush .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.FLUS" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig_pid\fR .RS 4 The PID of the process associated with the task performing the flush .RE .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 .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.force_segv.3stap000066400000000000000000000032701500444254400300360ustar00rootroot00000000000000'\" t .\" Title: probe::signal.force_segv .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.FORC" "3stap" "April 2025" "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 \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 .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig\fR .RS 4 The number of the signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.force_segv.return.3stap000066400000000000000000000030121500444254400313460ustar00rootroot00000000000000'\" t .\" Title: probe::signal.force_segv.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.FORC" "3stap" "April 2025" "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 \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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.handle.3stap000066400000000000000000000041221500444254400271440ustar00rootroot00000000000000'\" t .\" Title: probe::signal.handle .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.HAND" "3stap" "April 2025" "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 \fIsig_mode\fR .RS 4 Indicates whether the signal was a user\-mode or kernel\-mode 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 \fIoldset_addr\fR .RS 4 The address of the bitmask array of blocked signals (deprecated in SystemTap 2\&.1) .RE .PP \fIka_addr\fR .RS 4 The address of the k_sigaction table associated with the signal .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig\fR .RS 4 The signal number that invoked the signal handler .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig_code\fR .RS 4 The si_code value of the siginfo signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.handle.return.3stap000066400000000000000000000030671500444254400304710ustar00rootroot00000000000000'\" t .\" Title: probe::signal.handle.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.HAND" "3stap" "April 2025" "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 \fIretstr\fR .RS 4 Return value as a string .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "DESCRIPTION" .PP (deprecated in SystemTap 2\&.1) .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.pending.3stap000066400000000000000000000034061500444254400273410ustar00rootroot00000000000000'\" t .\" Title: probe::signal.pending .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PEND" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsigset_add\fR .RS 4 The address of the user\-space signal set (sigset_t) .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.pending.return.3stap000066400000000000000000000030101500444254400306460ustar00rootroot00000000000000'\" t .\" Title: probe::signal.pending.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PEND" "3stap" "April 2025" "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 \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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.procmask.3stap000066400000000000000000000036151500444254400275360ustar00rootroot00000000000000'\" t .\" Title: probe::signal.procmask .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PROC" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of the probe point .RE .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 \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 \fIoldsigset_addr\fR .RS 4 The old address of the signal set (sigset_t) .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.procmask.return.3stap000066400000000000000000000030231500444254400310450ustar00rootroot00000000000000'\" t .\" Title: probe::signal.procmask.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PROC" "3stap" "April 2025" "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 \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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.send.3stap000066400000000000000000000041561500444254400266510ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "April 2025" "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 \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIshared\fR .RS 4 Indicates whether the signal is shared by the thread group .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 \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 .PP \fIsig\fR .RS 4 The number of the signal .RE .PP \fIsend2queue\fR .RS 4 Indicates whether the signal is sent to an existing sigqueue (deprecated in SystemTap 2\&.1) .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsi_code\fR .RS 4 Indicates the signal type .RE .SH "CONTEXT" .PP The signal\*(Aqs sender\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.send.return.3stap000066400000000000000000000055751500444254400301750ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.send_sig_queue.3stap000066400000000000000000000034271500444254400307170ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send_sig_queue .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "April 2025" "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 \fIsig_pid\fR .RS 4 The PID 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 \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsigqueue_addr\fR .RS 4 The address of the signal queue .RE .PP \fIpid_name\fR .RS 4 Name of the process to which the signal is queued .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.send_sig_queue.return.3stap000066400000000000000000000030351500444254400322300ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send_sig_queue.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.sys_tgkill.3stap000066400000000000000000000040561500444254400301030ustar00rootroot00000000000000'\" t .\" Title: probe::signal.sys_tgkill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYS_" "3stap" "April 2025" "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_pid\fR .RS 4 The PID of the thread receiving the kill signal .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\fR .RS 4 The specific kill signal sent to the process .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .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 .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.sys_tgkill.return.3stap000066400000000000000000000030621500444254400314150ustar00rootroot00000000000000'\" t .\" Title: probe::signal.sys_tgkill.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYS_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.sys_tkill.3stap000066400000000000000000000037431500444254400277360ustar00rootroot00000000000000'\" t .\" Title: probe::signal.sys_tkill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYS_" "3stap" "April 2025" "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 \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_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 .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig\fR .RS 4 The specific signal sent to the process .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.syskill.3stap000066400000000000000000000033761500444254400274150ustar00rootroot00000000000000'\" t .\" Title: probe::signal.syskill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYSK" "3stap" "April 2025" "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 \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 .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig\fR .RS 4 The specific signal sent to the process .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIpid_name\fR .RS 4 The name of the signal recipient .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.syskill.return.3stap000066400000000000000000000026421500444254400307260ustar00rootroot00000000000000'\" t .\" Title: probe::signal.syskill.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYSK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.systkill.return.3stap000066400000000000000000000030461500444254400311110ustar00rootroot00000000000000'\" t .\" Title: probe::signal.systkill.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYST" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 The return value to either __group_send_sig_info, .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::signal.wakeup.3stap000066400000000000000000000034541500444254400272140ustar00rootroot00000000000000'\" t .\" Title: probe::signal.wakeup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.WAKE" "3stap" "April 2025" "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 \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 .PP \fIresume\fR .RS 4 Indicates whether to wake up a task in a STOPPED or TRACED state .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_read.3stap000066400000000000000000000035501500444254400274730ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "April 2025" "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 \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fItype\fR .RS 4 Socket type value .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 beginning of receiving a message on a socket via the \fBsock_aio_read\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_read.return.3stap000066400000000000000000000040031500444254400310030ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_read.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "April 2025" "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 \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 \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 \fIname\fR .RS 4 Name of this probe .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIfamily\fR .RS 4 Protocol family 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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_write.3stap000066400000000000000000000035461500444254400277170ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "April 2025" "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 \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags 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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_write.return.3stap000066400000000000000000000040021500444254400312210ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_write.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "April 2025" "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 \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .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 \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIfamily\fR .RS 4 Protocol family 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 sending a message on a socket via the \fBsock_aio_write\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.close.3stap000066400000000000000000000033701500444254400270350ustar00rootroot00000000000000'\" t .\" Title: probe::socket.close .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CLOS" "3stap" "April 2025" "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 \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIprotocol\fR .RS 4 Protocol 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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.close.return.3stap000066400000000000000000000030741500444254400303540ustar00rootroot00000000000000'\" t .\" Title: probe::socket.close.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CLOS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.create.3stap000066400000000000000000000034051500444254400271720ustar00rootroot00000000000000'\" t .\" Title: probe::socket.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CREA" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of this probe .RE .PP \fIrequester\fR .RS 4 Requested by user process or the kernel (1 = kernel, 0 = user) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIfamily\fR .RS 4 Protocol family value .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.create.return.3stap000066400000000000000000000036521500444254400305140ustar00rootroot00000000000000'\" t .\" Title: probe::socket.create.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CREA" "3stap" "April 2025" "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 \fIerr\fR .RS 4 Error code if success == 0 .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIrequester\fR .RS 4 Requested by user process or the kernel (1 = kernel, 0 = user) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsuccess\fR .RS 4 Was socket creation successful? (1 = yes, 0 = no) .RE .PP \fIfamily\fR .RS 4 Protocol family value .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.read_iter.3stap000066400000000000000000000035551500444254400276730ustar00rootroot00000000000000'\" t .\" Title: probe::socket.read_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "April 2025" "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 \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .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 .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.read_iter.return.3stap000066400000000000000000000040101500444254400311740ustar00rootroot00000000000000'\" t .\" Title: probe::socket.read_iter.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "April 2025" "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 \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 \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 \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 .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.readv.3stap000066400000000000000000000035331500444254400270320ustar00rootroot00000000000000'\" t .\" Title: probe::socket.readv .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "April 2025" "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 \fIflags\fR .RS 4 Socket flags value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Message size in bytes .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 receiving a message on a socket via the \fBsock_readv\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.readv.return.3stap000066400000000000000000000037671500444254400303610ustar00rootroot00000000000000'\" t .\" Title: probe::socket.readv.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "April 2025" "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 \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIname\fR .RS 4 Name of this probe .RE .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 \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type 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_readv\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.receive.3stap000066400000000000000000000035261500444254400273550ustar00rootroot00000000000000'\" t .\" Title: probe::socket.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.RECE" "3stap" "April 2025" "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 \fIflags\fR .RS 4 Socket flags value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .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 SEE ALSO\n .IR tapset::socket (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.recvmsg.3stap000066400000000000000000000035401500444254400273750ustar00rootroot00000000000000'\" t .\" Title: probe::socket.recvmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.RECV" "3stap" "April 2025" "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 \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 \fIname\fR .RS 4 Name of this probe .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIfamily\fR .RS 4 Protocol family 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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.recvmsg.return.3stap000066400000000000000000000037701500444254400307200ustar00rootroot00000000000000'\" t .\" Title: probe::socket.recvmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.RECV" "3stap" "April 2025" "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 \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIname\fR .RS 4 Name of this probe .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 \fIstate\fR .RS 4 Socket state 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 \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_recvmsg\fR function\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.send.3stap000066400000000000000000000035031500444254400266570ustar00rootroot00000000000000'\" t .\" Title: probe::socket.send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.SEND" "3stap" "April 2025" "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 \fIsize\fR .RS 4 Size of message sent (in bytes) or error code if success = 0 .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .SH "CONTEXT" .PP The message sender .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.sendmsg.3stap000066400000000000000000000035471500444254400273760ustar00rootroot00000000000000'\" t .\" Title: probe::socket.sendmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.SEND" "3stap" "April 2025" "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 \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIflags\fR .RS 4 Socket flags 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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.sendmsg.return.3stap000066400000000000000000000037351500444254400307130ustar00rootroot00000000000000'\" t .\" Title: probe::socket.sendmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.SEND" "3stap" "April 2025" "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 \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .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 \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.write_iter.3stap000066400000000000000000000035531500444254400301100ustar00rootroot00000000000000'\" t .\" Title: probe::socket.write_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "April 2025" "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 \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIflags\fR .RS 4 Socket flags 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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.write_iter.return.3stap000066400000000000000000000040071500444254400314210ustar00rootroot00000000000000'\" t .\" Title: probe::socket.write_iter.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "April 2025" "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 \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 \fIname\fR .RS 4 Name of this probe .RE .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 \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was receive 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_write_iter\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.writev.3stap000066400000000000000000000035311500444254400272470ustar00rootroot00000000000000'\" t .\" Title: probe::socket.writev .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "April 2025" "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 \fIflags\fR .RS 4 Socket flags value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::socket.writev.return.3stap000066400000000000000000000037561500444254400305760ustar00rootroot00000000000000'\" t .\" Title: probe::socket.writev.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "April 2025" "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 \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Size of message sent (in bytes) or error code if success = 0 .RE .PP \fIprotocol\fR .RS 4 Protocol 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 \fIflags\fR .RS 4 Socket flags value .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::softirq.entry.3stap000066400000000000000000000032501500444254400272650ustar00rootroot00000000000000'\" t .\" Title: probe::softirq.entry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOFTIRQ\&.ENT" "3stap" "April 2025" "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 \fIaction\fR .RS 4 pointer to softirq handler just about to execute .RE .PP \fIvec\fR .RS 4 softirq_action vector .RE .PP \fIh\fR .RS 4 struct softirq_action* for current pending softirq .RE .PP \fIvec_nr\fR .RS 4 softirq vector number .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::softirq.exit.3stap000066400000000000000000000032531500444254400271000ustar00rootroot00000000000000'\" t .\" Title: probe::softirq.exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOFTIRQ\&.EXI" "3stap" "April 2025" "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 \fIvec\fR .RS 4 softirq_action vector .RE .PP \fIaction\fR .RS 4 pointer to softirq handler that just finished execution .RE .PP \fIvec_nr\fR .RS 4 softirq vector number .RE .PP \fIh\fR .RS 4 struct softirq_action* for just executed softirq .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_add_mod.3stap000066400000000000000000000033751500444254400301260ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_add_mod .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_add_nss.3stap000066400000000000000000000034571500444254400301530ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_add_nss .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_add_src.3stap000066400000000000000000000033551500444254400301340ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_add_src .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_clean.3stap000066400000000000000000000031141500444254400276100ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_clean .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_get.3stap000066400000000000000000000032321500444254400273060ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_get .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass0.3stap000066400000000000000000000031041500444254400264300ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass0 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS0" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass0.end.3stap000066400000000000000000000031351500444254400272010ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass0.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS0\" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass1.end.3stap000066400000000000000000000031211500444254400271750ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass1.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS1\" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass1a.3stap000066400000000000000000000031341500444254400265750ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass1a .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS1A" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass1b.3stap000066400000000000000000000030771500444254400266040ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass1b .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS1B" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass2.3stap000066400000000000000000000031241500444254400264340ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass2 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS2" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass2.end.3stap000066400000000000000000000031121500444254400271760ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass2.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS2\" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass3.3stap000066400000000000000000000031321500444254400264340ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass3 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS3" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass3.end.3stap000066400000000000000000000031171500444254400272040ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass3.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS3\" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass4.3stap000066400000000000000000000031511500444254400264360ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass4 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS4" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass4.end.3stap000066400000000000000000000031401500444254400272010ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass4.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS4\" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass5.3stap000066400000000000000000000031371500444254400264430ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass5 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS5" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass5.end.3stap000066400000000000000000000031031500444254400272010ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass5.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS5\" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass6.3stap000066400000000000000000000031031500444254400264350ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass6 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS6" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass6.end.3stap000066400000000000000000000030621500444254400272060ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass6.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS6\" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.system.3stap000066400000000000000000000031011500444254400267230ustar00rootroot00000000000000'\" t .\" Title: probe::stap.system .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.SYSTEM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.system.return.3stap000066400000000000000000000032301500444254400302440ustar00rootroot00000000000000'\" t .\" Title: probe::stap.system.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.SYSTEM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stap.system.spawn.3stap000066400000000000000000000031431500444254400300600ustar00rootroot00000000000000'\" t .\" Title: probe::stap.system.spawn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.SYSTEM" "3stap" "April 2025" "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 \fIret\fR .RS 4 the return value from posix_spawn .RE .PP \fIpid\fR .RS 4 the pid of the spawned process .RE .SH "DESCRIPTION" .PP Fires just after the call to posix_spawn\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::stapio.receive_control_message.3stap000066400000000000000000000034571500444254400326330ustar00rootroot00000000000000'\" t .\" Title: probe::stapio.receive_control_message .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPIO\&.RECE" "3stap" "April 2025" "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 \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 .PP \fItype\fR .RS 4 type of message being send; defined in runtime/transport/transport_msgs\&.h .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::staprun.insert_module.3stap000066400000000000000000000031541500444254400310050ustar00rootroot00000000000000'\" t .\" Title: probe::staprun.insert_module .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPRUN\&.INS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::staprun.remove_module.3stap000066400000000000000000000031561500444254400310000ustar00rootroot00000000000000'\" t .\" Title: probe::staprun.remove_module .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPRUN\&.REM" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::staprun.send_control_message.3stap000066400000000000000000000034251500444254400323320ustar00rootroot00000000000000'\" t .\" Title: probe::staprun.send_control_message .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPRUN\&.SEN" "3stap" "April 2025" "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 \fIdata\fR .RS 4 a ptr to a binary blob of data sent as the control message .RE .PP \fIlen\fR .RS 4 the length (in bytes) of the data blob .RE .PP \fItype\fR .RS 4 type of message being send; defined in runtime/transport/transport_msgs\&.h .RE .SH "DESCRIPTION" .PP Fires at the beginning of the send_request function\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.bind_new_program.3stap000066400000000000000000000035251500444254400322270ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.bind_new_program .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "April 2025" "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 \fIprogname\fR .RS 4 the name of new RPC program .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIold_prog\fR .RS 4 the number of old RPC program .RE .PP \fIvers\fR .RS 4 the version of new RPC program .RE .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 \fIold_vers\fR .RS 4 the version of old RPC program .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.call_async.3stap000066400000000000000000000037251500444254400310250ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.call_async .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "April 2025" "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 \fIprog\fR .RS 4 the RPC program number .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIvers\fR .RS 4 the RPC program version number .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 \fIservername\fR .RS 4 the server machine name .RE .PP \fIprocname\fR .RS 4 the procedure name in this RPC call .RE .PP \fIflags\fR .RS 4 flags .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.call_sync.3stap000066400000000000000000000037201500444254400306570ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.call_sync .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "April 2025" "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 \fIflags\fR .RS 4 flags .RE .PP \fIprocname\fR .RS 4 the procedure name in this RPC call .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIxid\fR .RS 4 current transmission id .RE .PP \fIdead\fR .RS 4 whether this client is abandoned .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIproc\fR .RS 4 the procedure number in this RPC call .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.clone_client.3stap000066400000000000000000000034121500444254400313440ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.clone_client .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "April 2025" "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 \fIprog\fR .RS 4 the RPC program number .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIauthflavor\fR .RS 4 the authentication flavor .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.create_client.3stap000066400000000000000000000034041500444254400315100ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.create_client .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "April 2025" "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 \fIauthflavor\fR .RS 4 the authentication flavor .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIport\fR .RS 4 the port number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.restart_call.3stap000066400000000000000000000034041500444254400313660ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.restart_call .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "April 2025" "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_priority\fR .RS 4 the task priority .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fItk_flags\fR .RS 4 the task flags .RE .PP \fItk_runstate\fR .RS 4 the task run status .RE .PP \fItk_pid\fR .RS 4 the debugging aid of task .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.shutdown_client.3stap000066400000000000000000000045341500444254400321250ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.shutdown_client .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "April 2025" "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 \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIom_ops\fR .RS 4 the count of operations .RE .PP \fIclones\fR .RS 4 the number of clones .RE .PP \fIom_bytes_recv\fR .RS 4 the count of bytes in .RE .PP \fIom_rtt\fR .RS 4 the RPC RTT jiffies .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fItasks\fR .RS 4 the number of references .RE .PP \fIauthflavor\fR .RS 4 the authentication flavor .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIrpccnt\fR .RS 4 the count of RPC calls .RE .PP \fIom_bytes_sent\fR .RS 4 the count of bytes out .RE .PP \fIom_queue\fR .RS 4 the jiffies queued for xmit .RE .PP \fInetreconn\fR .RS 4 the count of reconnections .RE .PP \fIom_execute\fR .RS 4 the RPC execution jiffies .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIom_ntrans\fR .RS 4 the count of RPC transmissions .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.delay.3stap000066400000000000000000000034151500444254400301350ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.delay .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "April 2025" "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 \fIxid\fR .RS 4 the transmission id in the RPC call .RE .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 \fItk_pid\fR .RS 4 the debugging id of the task .RE .PP \fIdelay\fR .RS 4 the time delayed .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.execute.3stap000066400000000000000000000033661500444254400305060ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.execute .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "April 2025" "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 \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 .PP \fIxid\fR .RS 4 the transmission id in the RPC call .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.new_task.3stap000066400000000000000000000033121500444254400306460ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.new_task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "April 2025" "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 \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 \fIprot\fR .RS 4 the IP protocol 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 SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.release_task.3stap000066400000000000000000000036071500444254400315040ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.release_task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "April 2025" "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 \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 \fIprog\fR .RS 4 the program number in the RPC call .RE .PP \fItk_flags\fR .RS 4 the flags of the task .RE .PP \fIxid\fR .RS 4 the transmission id in the RPC call .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.authorise.3stap000066400000000000000000000000501500444254400305370ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.create.3stap000066400000000000000000000031341500444254400300050ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "April 2025" "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 \fIprogname\fR .RS 4 the name of the program .RE .PP \fIpg_nvers\fR .RS 4 the number of supported versions .RE .PP \fIbufsize\fR .RS 4 the buffer size .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.destroy.3stap000066400000000000000000000037151500444254400302400ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.destroy .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "April 2025" "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 \fInetcnt\fR .RS 4 the count of received RPC requests .RE .PP \fIsv_prog\fR .RS 4 the number of the program .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_progname\fR .RS 4 the name of the program .RE .PP \fIsv_nrthreads\fR .RS 4 the number of concurrent threads .RE .PP \fIrpcbadauth\fR .RS 4 the count of requests drooped for authentication failure .RE .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIrpcbadfmt\fR .RS 4 the count of requests dropped for bad formats .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.drop.3stap000066400000000000000000000034511500444254400275100ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.drop .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "April 2025" "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_vers\fR .RS 4 the program version in the request .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_xid\fR .RS 4 the transmission id in the request .RE .PP \fIrq_prot\fR .RS 4 the IP protocol of the reqeust .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.process.3stap000066400000000000000000000036601500444254400302240ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.process .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "April 2025" "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_nrthreads\fR .RS 4 the number of concurrent threads .RE .PP \fIrq_proc\fR .RS 4 the procedure number in the request .RE .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIrq_vers\fR .RS 4 the program version in the request .RE .PP \fIrq_prog\fR .RS 4 the program number in the request .RE .PP \fIrq_xid\fR .RS 4 the transmission id in the request .RE .PP \fIrq_prot\fR .RS 4 the IP protocol of the reqeust .RE .PP \fIpeer_ip\fR .RS 4 the peer address where the request is from .RE .PP \fIsv_prog\fR .RS 4 the number of the program .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.recv.3stap000066400000000000000000000031751500444254400275060ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.recv .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "April 2025" "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_nrthreads\fR .RS 4 the number of concurrent threads .RE .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fItimeout\fR .RS 4 the timeout of waiting for data .RE .PP \fIsv_prog\fR .RS 4 the number of the program .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.register.3stap000066400000000000000000000033671500444254400303760ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "April 2025" "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 \fIprogname\fR .RS 4 the name of the program .RE .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIprog\fR .RS 4 the number of the program .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIport\fR .RS 4 the port 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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.send.3stap000066400000000000000000000034631500444254400275000ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "April 2025" "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_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 \fIrq_xid\fR .RS 4 the transmission id in the request .RE .PP \fIrq_prot\fR .RS 4 the IP protocol of the reqeust .RE .PP \fIpeer_ip\fR .RS 4 the peer address where the request is from .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::syscall_any.3stap000066400000000000000000000036641500444254400267700ustar00rootroot00000000000000'\" t .\" Title: probe::syscall_any .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Syscall Any Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SYSCALL_ANY" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::syscall_any.return.3stap000066400000000000000000000041021500444254400302720ustar00rootroot00000000000000'\" t .\" Title: probe::syscall_any.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Syscall Any Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SYSCALL_ANY\&" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcp.disconnect.3stap000066400000000000000000000035311500444254400273560ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.disconnect .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.DISCONN" "3stap" "April 2025" "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 \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsock\fR .RS 4 Network socket .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsport\fR .RS 4 TCP source port .RE .PP \fIflags\fR .RS 4 TCP flags (e\&.g\&. FIN, etc) .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .SH "CONTEXT" .PP The process which disconnects tcp .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcp.disconnect.return.3stap000066400000000000000000000030631500444254400306740ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.disconnect.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.DISCONN" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of this probe .RE .PP \fIret\fR .RS 4 Error code (0: no error) .RE .SH "CONTEXT" .PP The process which disconnects tcp .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcp.receive.3stap000066400000000000000000000040201500444254400266410ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.RECEIVE" "3stap" "April 2025" "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 \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIiphdr\fR .RS 4 IP header address .RE .PP \fIpsh\fR .RS 4 TCP PSH flag .RE .PP \fIack\fR .RS 4 TCP ACK flag .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .PP \fIfin\fR .RS 4 TCP FIN flag .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIurg\fR .RS 4 TCP URG flag .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIrst\fR .RS 4 TCP RST flag .RE .PP \fIsport\fR .RS 4 TCP source port .RE .PP \fIsyn\fR .RS 4 TCP SYN flag .RE .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcp.recvmsg.3stap000066400000000000000000000035241500444254400266750ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.recvmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.RECVMSG" "3stap" "April 2025" "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 \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsock\fR .RS 4 Network socket .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsize\fR .RS 4 Number of bytes to be received .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsport\fR .RS 4 TCP source port .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcp.recvmsg.return.3stap000066400000000000000000000035541500444254400302160ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.recvmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.RECVMSG" "3stap" "April 2025" "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 \fIsport\fR .RS 4 TCP source port .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .PP \fIsize\fR .RS 4 Number of bytes received or error code if an error occurred\&. .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .SH "CONTEXT" .PP The process which receives a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcp.sendmsg.3stap000066400000000000000000000031401500444254400266610ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.sendmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SENDMSG" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of this probe .RE .PP \fIsock\fR .RS 4 Network socket .RE .PP \fIsize\fR .RS 4 Number of bytes to send .RE .PP \fIfamily\fR .RS 4 IP address family .RE .SH "CONTEXT" .PP The process which sends a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcp.sendmsg.return.3stap000066400000000000000000000031131500444254400301770ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.sendmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SENDMSG" "3stap" "April 2025" "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 \fIsize\fR .RS 4 Number of bytes sent or error code if an error occurred\&. .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The process which sends a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcp.setsockopt.3stap000066400000000000000000000035611500444254400274260ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.setsockopt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SETSOCK" "3stap" "April 2025" "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 \fIsock\fR .RS 4 Network socket .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIoptstr\fR .RS 4 Resolves optname to a human\-readable format .RE .PP \fIoptlen\fR .RS 4 Used to access values for \fBsetsockopt\fR .RE .PP \fIoptname\fR .RS 4 TCP socket options (e\&.g\&. TCP_NODELAY, TCP_MAXSEG, etc) .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcp.setsockopt.return.3stap000066400000000000000000000030571500444254400307440ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.setsockopt.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SETSOCK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.ActiveOpens.3stap000066400000000000000000000034471500444254400301430ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.ActiveOpens .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.ACTI" "3stap" "April 2025" "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 \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 \fIActiveOpens\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_ACTIVEOPENS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.AttemptFails.3stap000066400000000000000000000034601500444254400303130ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.AttemptFails .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.ATTE" "3stap" "April 2025" "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 \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 \fIAttemptFails\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_ATTEMPTFAILS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.CurrEstab.3stap000066400000000000000000000034321500444254400276070ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.CurrEstab .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.CURR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.EstabResets.3stap000066400000000000000000000034371500444254400301460ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.EstabResets .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.ESTA" "3stap" "April 2025" "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 \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 \fIEstabResets\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_ESTABRESETS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.InSegs.3stap000066400000000000000000000034571500444254400271140ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.InSegs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.INSE" "3stap" "April 2025" "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 \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 (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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.OutRsts.3stap000066400000000000000000000034231500444254400273400ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.OutRsts .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.OUTR" "3stap" "April 2025" "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 \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 \fIOutRsts\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_OUTRSTS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.OutSegs.3stap000066400000000000000000000034221500444254400273050ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.OutSegs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.OUTS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.PassiveOpens.3stap000066400000000000000000000034571500444254400303430ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.PassiveOpens .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.PASS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.RetransSegs.3stap000066400000000000000000000034551500444254400301620ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.RetransSegs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.RETR" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.init.3stap000066400000000000000000000027741500444254400262320ustar00rootroot00000000000000'\" t .\" Title: probe::tty.init .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.INIT" "3stap" "April 2025" "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 \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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.ioctl.3stap000066400000000000000000000027601500444254400263740ustar00rootroot00000000000000'\" t .\" Title: probe::tty.ioctl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.IOCTL" "3stap" "April 2025" "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 \fIname\fR .RS 4 the file name .RE .PP \fIcmd\fR .RS 4 the ioctl command .RE .PP \fIarg\fR .RS 4 the ioctl argument .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.open.3stap000066400000000000000000000031721500444254400262210ustar00rootroot00000000000000'\" t .\" Title: probe::tty.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.OPEN" "3stap" "April 2025" "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 \fIinode_state\fR .RS 4 the inode state .RE .PP \fIinode_flags\fR .RS 4 the inode flags .RE .PP \fIinode_number\fR .RS 4 the inode number .RE .PP \fIfile_name\fR .RS 4 the file name .RE .PP \fIfile_flags\fR .RS 4 the file flags .RE .PP \fIfile_mode\fR .RS 4 the file mode .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.poll.3stap000066400000000000000000000027171500444254400262320ustar00rootroot00000000000000'\" t .\" Title: probe::tty.poll .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.POLL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.read.3stap000066400000000000000000000031331500444254400261700ustar00rootroot00000000000000'\" t .\" Title: probe::tty.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.READ" "3stap" "April 2025" "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 \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 .PP \fIfile_name\fR .RS 4 the file name lreated to the tty .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.receive.3stap000066400000000000000000000032751500444254400267060ustar00rootroot00000000000000'\" t .\" Title: probe::tty.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.RECEIVE" "3stap" "April 2025" "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 \fIcount\fR .RS 4 The amount of characters received .RE .PP \fIfp\fR .RS 4 The flag buffer .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .PP \fIcp\fR .RS 4 the buffer that was received .RE .PP \fIid\fR .RS 4 the tty id .RE .PP \fIname\fR .RS 4 the name of the module file .RE .PP \fIindex\fR .RS 4 The tty Index .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.register.3stap000066400000000000000000000030751500444254400271060ustar00rootroot00000000000000'\" t .\" Title: probe::tty.register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.REGISTE" "3stap" "April 2025" "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 \fIdriver_name\fR .RS 4 the driver name .RE .PP \fIname\fR .RS 4 the driver \&.dev_name name .RE .PP \fImodule\fR .RS 4 the module name .RE .PP \fIindex\fR .RS 4 the tty index requested .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.release.3stap000066400000000000000000000032101500444254400266710ustar00rootroot00000000000000'\" t .\" Title: probe::tty.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.RELEASE" "3stap" "April 2025" "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 \fIfile_mode\fR .RS 4 the file mode .RE .PP \fIfile_name\fR .RS 4 the file name .RE .PP \fIfile_flags\fR .RS 4 the file flags .RE .PP \fIinode_flags\fR .RS 4 the inode flags .RE .PP \fIinode_state\fR .RS 4 the inode state .RE .PP \fIinode_number\fR .RS 4 the inode number .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.resize.3stap000066400000000000000000000034261500444254400265630ustar00rootroot00000000000000'\" t .\" Title: probe::tty.resize .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.RESIZE" "3stap" "April 2025" "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 \fInew_row\fR .RS 4 the new row value .RE .PP \fIold_ypixel\fR .RS 4 the old ypixel .RE .PP \fInew_xpixel\fR .RS 4 the new xpixel value .RE .PP \fInew_col\fR .RS 4 the new col value .RE .PP \fIold_xpixel\fR .RS 4 the old xpixel .RE .PP \fIold_col\fR .RS 4 the old col value .RE .PP \fIname\fR .RS 4 the tty name .RE .PP \fIold_row\fR .RS 4 the old row value .RE .PP \fInew_ypixel\fR .RS 4 the new ypixel value .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.unregister.3stap000066400000000000000000000031141500444254400274430ustar00rootroot00000000000000'\" t .\" Title: probe::tty.unregister .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.UNREGIS" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::tty.write.3stap000066400000000000000000000030721500444254400264110ustar00rootroot00000000000000'\" t .\" Title: probe::tty.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.WRITE" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::udp.disconnect.3stap000066400000000000000000000036271500444254400273660ustar00rootroot00000000000000'\" t .\" Title: probe::udp.disconnect .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.DISCONN" "3stap" "April 2025" "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 \fIflags\fR .RS 4 Flags (e\&.g\&. FIN, etc) .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIsock\fR .RS 4 Network socket used by the process .RE .SH "CONTEXT" .PP The process which requests a UDP disconnection .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::udp.disconnect.return.3stap000066400000000000000000000035411500444254400306770ustar00rootroot00000000000000'\" t .\" Title: probe::udp.disconnect.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.DISCONN" "3stap" "April 2025" "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 \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 .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIfamily\fR .RS 4 IP address family .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 requested a UDP disconnection .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::udp.recvmsg.3stap000066400000000000000000000036101500444254400266730ustar00rootroot00000000000000'\" t .\" Title: probe::udp.recvmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.RECVMSG" "3stap" "April 2025" "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 \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 \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsock\fR .RS 4 Network socket used by the process .RE .SH "CONTEXT" .PP The process which received a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::udp.recvmsg.return.3stap000066400000000000000000000036031500444254400302130ustar00rootroot00000000000000'\" t .\" Title: probe::udp.recvmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.RECVMSG" "3stap" "April 2025" "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 \fIsport\fR .RS 4 UDP source port .RE .PP \fIdport\fR .RS 4 UDP destination port .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 \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIfamily\fR .RS 4 IP address family .RE .SH "CONTEXT" .PP The process which received a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::udp.sendmsg.3stap000066400000000000000000000036041500444254400266700ustar00rootroot00000000000000'\" t .\" Title: probe::udp.sendmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.SENDMSG" "3stap" "April 2025" "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 \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 \fIfamily\fR .RS 4 IP address family .RE .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsize\fR .RS 4 Number of bytes sent by the process .RE .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIsport\fR .RS 4 UDP source port .RE .SH "CONTEXT" .PP The process which sent a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::udp.sendmsg.return.3stap000066400000000000000000000031301500444254400302000ustar00rootroot00000000000000'\" t .\" Title: probe::udp.sendmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.SENDMSG" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.brk.3stap000066400000000000000000000031251500444254400256360ustar00rootroot00000000000000'\" t .\" Title: probe::vm.brk .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.BRK" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.kfree.3stap000066400000000000000000000032131500444254400261520ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kfree .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KFREE" "3stap" "April 2025" "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 \fIname\fR .RS 4 name of the probe point .RE .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 .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmalloc.3stap000066400000000000000000000035101500444254400265000ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmalloc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMALLOC" "3stap" "April 2025" "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 \fIbytes_req\fR .RS 4 requested Bytes .RE .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .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 \fIcaller_function\fR .RS 4 name of the caller function .RE .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate (in String format) .RE .PP \fIcall_site\fR .RS 4 address of the kmemory function .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmalloc_node.3stap000066400000000000000000000035611500444254400275130ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmalloc_node .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMALLOC_" "3stap" "April 2025" "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 \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_alloc\fR .RS 4 allocated Bytes .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .PP \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmem_cache_alloc.3stap000066400000000000000000000036101500444254400303050ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmem_cache_alloc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMEM_CAC" "3stap" "April 2025" "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 \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 \fIcaller_function\fR .RS 4 name of the caller function\&. .RE .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate(in string format) .RE .PP \fIcall_site\fR .RS 4 address of the function calling this kmemory function\&. .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmem_cache_alloc_node.3stap000066400000000000000000000036261500444254400313210ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmem_cache_alloc_node .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMEM_CAC" "3stap" "April 2025" "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 \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIbytes_alloc\fR .RS 4 allocated 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 \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate(in string format) .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmem_cache_free.3stap000066400000000000000000000032711500444254400301370ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmem_cache_free .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMEM_CAC" "3stap" "April 2025" "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 \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 .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.mmap.3stap000066400000000000000000000030701500444254400260110ustar00rootroot00000000000000'\" t .\" Title: probe::vm.mmap .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.MMAP" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.munmap.3stap000066400000000000000000000031041500444254400263520ustar00rootroot00000000000000'\" t .\" Title: probe::vm.munmap .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.MUNMAP" "3stap" "April 2025" "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 \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 munmap\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.oom_kill.3stap000066400000000000000000000031411500444254400266630ustar00rootroot00000000000000'\" t .\" Title: probe::vm.oom_kill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.OOM_KILL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.pagefault.3stap000066400000000000000000000033431500444254400270320ustar00rootroot00000000000000'\" t .\" Title: probe::vm.pagefault .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.PAGEFAUL" "3stap" "April 2025" "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 \fIwrite_access\fR .RS 4 indicates whether this was a write or read access; 1 indicates a write, while 0 indicates a read .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIaddress\fR .RS 4 the address of the faulting memory access; i\&.e\&. the address that caused the page fault .RE .SH "CONTEXT" .PP The process which triggered the fault .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.pagefault.return.3stap000066400000000000000000000033041500444254400303450ustar00rootroot00000000000000'\" t .\" Title: probe::vm.pagefault.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.PAGEFAUL" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.write_shared.3stap000066400000000000000000000033341500444254400275420ustar00rootroot00000000000000'\" t .\" Title: probe::vm.write_shared .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.WRITE_SH" "3stap" "April 2025" "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 \fIaddress\fR .RS 4 the address of the shared write .RE .PP \fIname\fR .RS 4 name of the probe point .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::vm.write_shared_copy.3stap000066400000000000000000000034461500444254400306000ustar00rootroot00000000000000'\" t .\" Title: probe::vm.write_shared_copy .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.WRITE_SH" "3stap" "April 2025" "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 \fIname\fR .RS 4 Name of the probe point .RE .PP \fIaddress\fR .RS 4 The address of the shared write .RE .PP \fIzero\fR .RS 4 boolean indicating whether it is a zero page (can do a clear instead of a copy) .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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.create.3stap000066400000000000000000000030471500444254400277330ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.C" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.destroy.3stap000066400000000000000000000027431500444254400301630ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.destroy .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.D" "3stap" "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.execute.3stap000066400000000000000000000031251500444254400301270ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.execute .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.E" "3stap" "April 2025" "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 \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .PP \fIwork\fR .RS 4 work_struct* being executed .RE .PP \fIwork_func\fR .RS 4 pointer to handler function .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.insert.3stap000066400000000000000000000031241500444254400277700ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.insert .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: April 2025 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.I" "3stap" "April 2025" "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 \fIwork\fR .RS 4 work_struct* being queued .RE .PP \fIwork_func\fR .RS 4 pointer to handler function .RE .PP \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man_pages/000077500000000000000000000000001500444254400233425ustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ansi.3stap000066400000000000000000000036751500444254400266700ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::ANSI 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::atomic.3stap000066400000000000000000000010771500444254400272040ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::ATOMIC 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-caller.3stap000066400000000000000000000014111500444254400306440ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-CALLER 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-envvar.3stap000066400000000000000000000011541500444254400307070ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-ENVVAR 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-symbols.3stap000066400000000000000000000050061500444254400310760ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-SYMBOLS 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-unwind.3stap000066400000000000000000000024321500444254400307120ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-UNWIND 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::context.3stap000066400000000000000000000165141500444254400274160ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::conversions-guru.3stap000066400000000000000000000027051500444254400312570ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONVERSIONS-GURU 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::conversions.3stap000066400000000000000000000101151500444254400302710ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONVERSIONS 3stap "April 2025" "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_or_user_string_quoted Retrieves and quotes string from kernel or user memory .IP See .IR function::kernel_or_user_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_or_user_string_quoted_utf32 Retrieves and quotes UTF-32 string from kernel or user memory .IP See .IR function::kernel_or_user_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_or_user_string_quoted_utf16 Retrieves and quotes UTF-16 string from kernel or user memory .IP See .IR function::kernel_or_user_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_or_user_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_or_user_string_quoted_utf32 (3stap), .BR .IR \%function::kernel_string_utf16 (3stap), .BR .IR \%function::kernel_string_quoted_utf16 (3stap), .BR .IR \%function::kernel_or_user_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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ctime.3stap000066400000000000000000000010031500444254400270160ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CTIME 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::dentry.3stap000066400000000000000000000003311500444254400272250ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::DENTRY 3stap "April 2025" "SystemTap Tapset Reference" .SH NAME tapset::dentry \- systemtap dentry tapset .SH DESCRIPTION .TP .SH SEE ALSO .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::dev.3stap000066400000000000000000000016301500444254400265010ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::DEV 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::errno.3stap000066400000000000000000000015031500444254400270470ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::ERRNO 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::floatingpoint.3stap000066400000000000000000000043151500444254400306030ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::FLOATINGPOINT 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::guru-delay.3stap000066400000000000000000000013431500444254400300020ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::GURU-DELAY 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::guru-signal.3stap000066400000000000000000000010641500444254400301610ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::GURU-SIGNAL 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::indent.3stap000066400000000000000000000015761500444254400272150ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::INDENT 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::inet.3stap000066400000000000000000000021511500444254400266610ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::INET 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::inet_sock.3stap000066400000000000000000000017431500444254400277060ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::INET_SOCK 3stap "April 2025" "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_dest_port Provide remote port number for a kernel socket .IP See .IR function::inet_get_dest_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. .P .TP .B inet_get_ip_dest Provide IP destination address string for a kernel socket .IP See .IR function::inet_get_ip_dest (3stap) for details. .SH SEE ALSO .BR .IR \%function::inet_get_local_port (3stap), .BR .IR \%function::inet_get_dest_port (3stap), .BR .IR \%function::inet_get_ip_source (3stap), .BR .IR \%function::inet_get_ip_dest (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ioblock.3stap000066400000000000000000000022421500444254400273450ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IOBLOCK 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ioscheduler.3stap000066400000000000000000000061601500444254400302340ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IOSCHEDULER 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ip.3stap000066400000000000000000000010371500444254400263340ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IP 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ipmib-filter-default.3stap000066400000000000000000000006661500444254400317400ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IPMIB-FILTER-DEFAULT 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ipmib.3stap000066400000000000000000000055551500444254400270350ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IPMIB 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::irq.3stap000066400000000000000000000027701500444254400265240ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IRQ 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::json.3stap000066400000000000000000000055241500444254400267020ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::JSON 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::kprocess.3stap000066400000000000000000000023571500444254400275630ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::KPROCESS 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::linuxmib-filter-default.3stap000066400000000000000000000007131500444254400324600ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LINUXMIB-FILTER-DEFAULT 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::linuxmib.3stap000066400000000000000000000017211500444254400275530ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LINUXMIB 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::livepatch.3stap000066400000000000000000000013011500444254400276750ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LIVEPATCH 3stap "April 2025" "SystemTap Tapset Reference" .SH NAME tapset::livepatch \- systemtap livepatch tapset .SH DESCRIPTION .TP .P .TP .B cve_count_metric Increment the count of key .IP See .IR function::cve_count_metric (3stap) for details. .P .TP .B cve_record_metric Set the value of key .IP See .IR function::cve_record_metric (3stap) for details. .P .TP .B cve_tmpdisable Disable the cve livepatch .IP See .IR function::cve_tmpdisable (3stap) for details. .SH SEE ALSO .BR .IR \%function::cve_count_metric (3stap), .BR .IR \%function::cve_record_metric (3stap), .BR .IR \%function::cve_tmpdisable (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::loadavg.3stap000066400000000000000000000012231500444254400273360ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LOADAVG 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::logging.3stap000066400000000000000000000030501500444254400273470ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LOGGING 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::memory.3stap000066400000000000000000000056221500444254400272400ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::MEMORY 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::netfilter.3stap000066400000000000000000000041461500444254400277240ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NETFILTER 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::networking.3stap000066400000000000000000000052351500444254400301170ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NETWORKING 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfs.3stap000066400000000000000000000100751500444254400265140ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFS 3stap "April 2025" "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.readahead NFS client reading multiple pages .IP See .IR probe::nfs.aop.readahead (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.readahead (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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfs_proc.3stap000066400000000000000000000065241500444254400275430ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFS_PROC 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfsd.3stap000066400000000000000000000060641500444254400266630ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFSD 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfsderrno.3stap000066400000000000000000000005731500444254400277300ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFSDERRNO 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::panic.3stap000066400000000000000000000013021500444254400270110ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PANIC 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::pn.3stap000066400000000000000000000007501500444254400263420ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PN 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::proc_mem.3stap000066400000000000000000000055071500444254400275330ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PROC_MEM 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::pstrace.3stap000066400000000000000000000005651500444254400273720ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PSTRACE 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::queue_stats.3stap000066400000000000000000000040121500444254400302620ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::QUEUE_STATS 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::random.3stap000066400000000000000000000005531500444254400272060ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::RANDOM 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::regex.3stap000066400000000000000000000012331500444254400270340ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::REGEX 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::registers.3stap000066400000000000000000000107351500444254400277400ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::REGISTERS 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::rlimit.3stap000066400000000000000000000006221500444254400272230ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::RLIMIT 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::rpc.3stap000066400000000000000000000067351500444254400265220ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::RPC 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::scheduler.3stap000066400000000000000000000060321500444254400277020ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SCHEDULER 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::scsi.3stap000066400000000000000000000025111500444254400266630ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SCSI 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::signal.3stap000066400000000000000000000143551500444254400272100ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SIGNAL 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::socket.3stap000066400000000000000000000122721500444254400272170ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SOCKET 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::speculative.3stap000066400000000000000000000015451500444254400302540ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SPECULATIVE 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::stap_staticmarkers.3stap000066400000000000000000000112641500444254400316320ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::STAP_STATICMARKERS 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::stopwatch.3stap000066400000000000000000000026221500444254400277410ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::STOPWATCH 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::string.3stap000066400000000000000000000033001500444254400272250ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::STRING 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::switchfile.3stap000066400000000000000000000005751500444254400300730ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SWITCHFILE 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::syscall_any.3stap000066400000000000000000000010341500444254400302420ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SYSCALL_ANY 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::syscalls.3stap000066400000000000000000000553561500444254400275760ustar00rootroot00000000000000." -*- nroff -*- .TH TAPSET::SYSCALLS 3stap "April 2025" "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.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.close fd .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_getitimer value_uaddr, which .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.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.faccessat2 dirfd, dirfd_str, flags, flags_str, mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.fadvise64 advice, advice_str, fd, len, offset .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.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.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.memfd_secret flags, flags_str .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.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.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.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.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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::system.3stap000066400000000000000000000005411500444254400272470ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SYSTEM 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::target_set.3stap000066400000000000000000000010741500444254400300660ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TARGET_SET 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::task.3stap000066400000000000000000000074201500444254400266700ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TASK 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::task_ancestry.3stap000066400000000000000000000006141500444254400305760ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TASK_ANCESTRY 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::task_time.3stap000066400000000000000000000055451500444254400277140ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TASK_TIME 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::tcp.3stap000066400000000000000000000032501500444254400265110ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TCP 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::tcpmib-filter-default.3stap000066400000000000000000000006751500444254400321160ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TCPMIB-FILTER-DEFAULT 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::tcpmib.3stap000066400000000000000000000047461500444254400272140ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TCPMIB 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::timestamp.3stap000066400000000000000000000015301500444254400277250ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TIMESTAMP 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::timestamp_gtod.3stap000066400000000000000000000016341500444254400307470ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TIMESTAMP_GTOD 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::timestamp_monotonic.3stap000066400000000000000000000034031500444254400320130ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TIMESTAMP_MONOTONIC 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::tokenize.3stap000066400000000000000000000007611500444254400275570ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TOKENIZE 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::tty.3stap000066400000000000000000000034621500444254400265500ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TTY 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::tzinfo.3stap000066400000000000000000000012721500444254400272360ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TZINFO 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ucontext-symbols.3stap000066400000000000000000000041151500444254400312630ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONTEXT-SYMBOLS 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ucontext-unwind.3stap000066400000000000000000000025011500444254400310740ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONTEXT-UNWIND 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::ucontext.3stap000066400000000000000000000010341500444254400275720ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONTEXT 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::uconversions-guru.3stap000066400000000000000000000031011500444254400314330ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONVERSIONS-GURU 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::uconversions.3stap000066400000000000000000000235331500444254400304660ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONVERSIONS 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/man_pages/tapset::udp.3stap000066400000000000000000000025511500444254400265160ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UDP 3stap "April 2025" "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-5.3/doc/SystemTap_Tapset_Reference/manpager000077500000000000000000000120411500444254400231260ustar00rootroot00000000000000#!/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-5.3/doc/SystemTap_Tapset_Reference/overload.py000077500000000000000000000061251500444254400236040ustar00rootroot00000000000000# 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-5.3/doc/SystemTap_Tapset_Reference/publicanize.sh000077700000000000000000000000001500444254400336532../Tapset_Reference_Guide/publicanize.shustar00rootroot00000000000000systemtap-5.3/doc/SystemTap_Tapset_Reference/sort-tapsets.xslt000066400000000000000000000012611500444254400247740ustar00rootroot00000000000000 systemtap-5.3/doc/SystemTap_Tapset_Reference/syscalls.3stap000066400000000000000000000553561500444254400242370ustar00rootroot00000000000000." -*- nroff -*- .TH TAPSET::SYSCALLS 3stap "April 2025" "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.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.close fd .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_getitimer value_uaddr, which .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.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.faccessat2 dirfd, dirfd_str, flags, flags_str, mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.fadvise64 advice, advice_str, fd, len, offset .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.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.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.memfd_secret flags, flags_str .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.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.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.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.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-5.3/doc/SystemTap_Tapset_Reference/syscalls.xmlpart000066400000000000000000001053511500444254400246630ustar00rootroot00000000000000 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 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 close fd compat_execve args, env_str, filename compat_execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str compat_getitimer value_uaddr, which 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 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 faccessat2 dirfd, dirfd_str, flags, flags_str, mode, mode_str, pathname, pathname_unquoted fadvise64 advice, advice_str, fd, len, offset 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 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 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 memfd_secret flags, flags_str 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 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 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 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 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-5.3/doc/SystemTap_Tapset_Reference/tapcheck.sh000077500000000000000000000035241500444254400235350ustar00rootroot00000000000000#!/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-5.3/doc/SystemTap_Tapset_Reference/tapsets.pdf000066400000000000000000057240411500444254400236030ustar00rootroot00000000000000%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.9) /CreationDate (D:20250429174517Z) >> endobj 2 0 obj << /N 3 /Length 3 0 R /Filter /FlateDecode >> stream xӌ1ŗf^s?OrRO' (P'*9` ?B{*q{6^|@)oΪr)5]:F+%{|UeXW]9AK3|YjT]~:cR{R Kj|^MTP .SK  ʂg^qP|* J 2/ 6CO70dm[JC{"(3 3"eŒ 90RVs S`AOz(8vVf 8;ex?F˰V ~KicΫ2bB/¼ 3fT2а(|qŁ#k7=M/7ۦ^lz6G^^`٦_煦Mh?;yFqak#7X LL{$ tU^ -> (QzF=z[F$>1f@ZEVRU[ r *iU&^u Tj-ʳi)$YghAڮ|vouRPp^$Vy09g6/yؤ;caGUz_??[k_;qK}Wn;q;qyAw{ w+{_}_ה/):|hE߯ԟR<˸J-R ~ԿWB);Y?AR7<߃>!2|fyaDȏy#,=ԩV4 dIݱ)תy0v üjo 9`z:I,/Yde8[%([ HY0$㥁 Jv]KZԥw^W J I:Qpݜ gmc¢3-awAjf}mjѾ?@ae9U;Em.I `sLb{H~g.V^E;<R+MJ5)RiOL5;j`K3:tF{j_42 R72K@PX8MڲȏfiߡA_g)lL+O;-U4Dsѻ5E؝!Vhmi?e8zX[!owdT k/.vh>GjisH6)Wh/X*ϻ$I{W)ߦ}'װS} 33 :GGG?2&IÃ2 iI3Xh/3j1@QViY󩚧uym-Y\%j9+Ӝa;}ڡU:aY9:wu]>-ȧ lBG%X, qU{:td]! -(qjVDҦ]@c r5[);'12Ŵ)29}S,r8's S|:_U `qh$%+' w9N(y@;=r=@0W)'|#d](1l8> d7Gau}0sDᬧhˀ4dG20zPsT%bJTQmg4y7J|#cYdP8#— -^ar?UzrhU X1X?)) ke"𮬐8 ZKX_KN  |0dVU0Z`+?o\ xaVXxxU)#43p}WT+C'6+BLGƼ,/~Gys^9Mzn͑2<ϩ>)%|eK Ot_V^vXGi ZR@i'NgF^y DsNj%uxb̃I=P(ŋZ- McYSvyL/ Qԫ{Aۦ3a$kȞ_x󇨖S ,*,j}7MKL&9Y>;Gk4 K4I[gT|pij=E ڮfqw.O@;K,Q [_3XbA7, ޵shg&kZO%k zE@(@aDOn{j4[;c/@4 ^|>@t0[wkQ}(Xt#]nix>I0 #ޙ `Aˆ]f= kQj(МG`VGw$5oԿf1C0M2 aPsv! mэ]hm'Yl`vVE}\B)+iHXkoOZ'R? U#򸏴Q$F`ѴmfhraW0ɥϲXgp}*w4S_VWxG 0%)+5RQ3I Ö3s ryU3B {j eaPzGb0*Sro^5aUSM0C NX5t-T(ƩWX;,pk˻ =ώfUceR 0W/b.[rw4q8&9>.6٩󼋗5|\q!y$Cdvbk86L8I&_Q)ԡ}~xDD.-J<#/KVRI5owݽ\ wS!4#ک :C zV[ yE/]UE`bd u7~+l Me|jQ(䷮fDv~^fWΑU<;5!wuQ\,8>iZff$OTIJk2|Ze&d Ϊ qc_1dGs%,vpۢ ɕ|`t%~&3jnXĽwTYh]y s?Gfj'cYf#aFTw WMҹpLrRR5Ai$dӷ$j'˔~Βl5֔qs[[vI"iNխ4y>W럎 }cI!*h1:s% V6J.ƅ _K@{2z ·N=F\#}Ӑn^ŭUCV6G-qN+Ҥ-ܽT[C`)fz ϦZ'}!~,ghN}>yC!aAՒl)ʫFv[-q9efYwg(GCĴ-ؤh䪲OSV>)~yql1ggIAhH<ϣ1Ck:rRI'֟_Eoie|F*X/|ρ7 !1S6Yui[tRzLG[JOʩH)ٴɲj8*@ڍsR!hy_.ykZO{)Y*Turf.:f ‹vV4o*gDHRݲRVƴ0U~cw2V2te<'~i~L[>GNC.ezЮ@kCˑ]{#.oW6|έmн/-GNQƳ+Q po|P.C=ށ8O;oDK3ҥ8dhˠ5 1S!~cYM) ÑpC֣aY@j9,χ EKH^KʎE,]c+2H-;i*aV\DNEts(On`^ч Sߓ^2T&DRrShjbrDگF =U 8iPNF]3DҔJKj|,zMuVf~BU_K1WV,ɧ?.w SvA#|h9IA0&K}m'Xk'Ԃ7r')Xlb7Ւ)i9Ie({ٱXb4JQ24Z@yXFTS,X$q#赓nYjߢ8(M ˺fzߛ]tB24gTK_ZݶYcI`6 +/fr%|lmO5,\^ Z ljveZlgRӉV[^R-XW#] 9B5X<=aB&vΦQzgB{M|hMn4'Ă?Ic@>5Y3>gS7~[%3n\?zR{R v9yuglD#DR+!VX +>M{uuZ".ۈ2HI'G]!.zB *X.QW@4#sJ)h%zN$"{5O 4Xї j剻 0[c^bs J -Ml&P&%;`@õ(V nxFo+яrmSFKBk}m{814t=k;n(`Yϣ= |p> {eK0gg!>|\ m |::M|7n$|;ûuxp#9HXw<խ4J=ŷ]>oCjVx>,XQJsx fş>O~)=$u,`al%O`)g|;l=JTGsZ/~M!yZI2 ; `_&'jBvyI4M04'fIƨM7 ^fٮ" Ŀ^&~&JXyb-os]&>;dz׻Înp.L0Ox^*ݯHSwFMk )mUvAx,??"2\5V]> R!Omho{Xul:>K, }Ce#8UU'+ܼƯL0/ȴJATs )gbQ!jJV ~I07υpo\ΌH"#4LSo28nYEb`9KA8E"o54)dz61F~/4mdA83*_h2ʳaI09c_InU !!֖! [^%1A^mVsFKQaň+a{J+P:$|J:a;4< 8+#p/DxM$ ΥYY >*Ys]t UHe4X1Rt=S(Kb/AI%|5GK̀t+YH}xoMΣv&<[8%(_.YRYoiiZ^faH37zE7(`⣨]QYohQ]/ъ0g&h׿u-y붞δ_/ko?8\OKZO߹һֿzO4.ZoYzu=W~;p +ڿڷdIq嚕k`%cu;vq϶Lcxf:{ϟ!4W^G ԺO}w;h.RƭSOV-mN4嶅+۾~u?s Zo-╫=뱇1a_];DcK3%[4:/_L4789߳ 7Z>kUi̤FZߺ%3kj]nJO4() endstream endobj 3 0 obj 6801 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 2025-04-29T17:45:17Z Apache FOP Version 2.9 1.4 DocBook XSL Stylesheets with Apache FOP 2025-04-29T17:45:17Z 2025-04-29T17:45:17Z endstream endobj 6 0 obj 1126 endobj 7 0 obj << /S /r >> endobj 8 0 obj << /Length 9 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 9 0 obj 177 endobj 10 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 8 0 R >> endobj 13 0 obj << /Length 14 0 R /Filter /FlateDecode >> stream xVMs8W1Se3cWN$o%pMf@@Ī"Ym0gc[G~(|&q&ѯ`t3SôGA@5BFvIi;;>GG?~" nkoCȧoEOg4)&~ozȝHutzz aOj]BL|WlF_$,ecOQ^Eٗt6P2 3mcFhMr3_=m9[q8u'a; 2CEj94m:з1ۗ`2"9e cE-q>XmpKuڳ\F*iX'"Q;(NM^ʂTGe%|E'EǺU*.'b߳Yw":`]d*YZec]9/ÇMaj븾`v6~F?d| J"4UdUο}@ܛ2f WwA޳.]?\n]`&(T$d)&Jdij2K(%LS۲S.:%Ka[7־6ͭ9+$Gg"m*Dg:I nDN 9n\R\5vUռ9VK\ vLbF_VI q4).˄(p#Jh\ &F`B-Baww[,f1Ƀg npj*\;ڋ08> endobj 16 0 obj << /S /D >> endobj 17 0 obj << /Length 18 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 18 0 obj 821 endobj 19 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 17 0 R >> endobj 20 0 obj << /Length 21 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 21 0 obj 448 endobj 22 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 20 0 R >> endobj 23 0 obj << /Length 24 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 24 0 obj 666 endobj 25 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 23 0 R >> endobj 26 0 obj << /Length 27 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 27 0 obj 546 endobj 28 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 26 0 R >> endobj 29 0 obj << /Length 30 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 30 0 obj 651 endobj 31 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 29 0 R >> endobj 32 0 obj << /Length 33 0 R /Filter /FlateDecode >> stream xUKo@Wr)ή/n}Rh, I$iɿ5`lZFx1o} RWZB'*A | .WP7qZG{j#θanqɮm:+4C5erƲ.Ѭlq l A W &"bX f**^5 &x)Ne9 &ҧ!t[ASIRHy9lXCy.ea(cޢB#SJ9*te%<ܫ 8*f5u*Q^dd0;%Svgu pi2zTIf %ާ$e˧C .X$8E9 A(¦ ++(ռS,rv9> endobj 35 0 obj << /Length 36 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 36 0 obj 481 endobj 37 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 35 0 R >> endobj 38 0 obj << /Length 39 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 39 0 obj 673 endobj 40 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 38 0 R >> endobj 41 0 obj << /Length 42 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 44 0 obj << /Length 45 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 47 0 obj << /Length 48 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 48 0 obj 575 endobj 49 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 47 0 R >> endobj 50 0 obj << /Length 51 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 51 0 obj 464 endobj 52 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 50 0 R >> endobj 53 0 obj << /Length 54 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 54 0 obj 538 endobj 55 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 53 0 R >> endobj 56 0 obj << /Length 57 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 57 0 obj 662 endobj 58 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 56 0 R >> endobj 59 0 obj << /Length 60 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 62 0 obj << /Length 63 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 65 0 obj << /Length 66 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 66 0 obj 484 endobj 67 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 65 0 R >> endobj 68 0 obj << /Length 69 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 69 0 obj 485 endobj 70 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 68 0 R >> endobj 71 0 obj << /Length 72 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 72 0 obj 549 endobj 73 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 71 0 R >> endobj 74 0 obj << /Length 75 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 77 0 obj << /Length 78 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 78 0 obj 528 endobj 79 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 77 0 R >> endobj 80 0 obj << /Length 81 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 81 0 obj 511 endobj 82 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 80 0 R >> endobj 83 0 obj << /Length 84 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 84 0 obj 493 endobj 85 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 83 0 R >> endobj 86 0 obj << /Length 87 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 87 0 obj 581 endobj 88 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 86 0 R >> endobj 89 0 obj << /Length 90 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 90 0 obj 496 endobj 91 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 89 0 R >> endobj 92 0 obj << /Length 93 0 R /Filter /FlateDecode >> stream xUKS0Wf@ö(X li}W_1gݵ>O+)`@9wL8Sc 90ĢXHxa]׸9u=ئ]C3:0/F3Gp*oMaQXiCFJD> endobj 95 0 obj << /Length 96 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 98 0 obj << /Length 99 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 99 0 obj 501 endobj 100 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 98 0 R >> endobj 101 0 obj << /Length 102 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 102 0 obj 577 endobj 103 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 101 0 R >> endobj 104 0 obj << /Length 105 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 105 0 obj 581 endobj 106 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 104 0 R >> endobj 107 0 obj << /Length 108 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 108 0 obj 580 endobj 109 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 107 0 R >> endobj 110 0 obj << /Length 111 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 111 0 obj 584 endobj 112 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 110 0 R >> endobj 113 0 obj << /Length 114 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 114 0 obj 499 endobj 115 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 113 0 R >> endobj 116 0 obj << /Length 117 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 117 0 obj 605 endobj 118 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 116 0 R >> endobj 119 0 obj << /Length 120 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 120 0 obj 657 endobj 121 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 119 0 R >> endobj 122 0 obj << /Length 123 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 123 0 obj 582 endobj 124 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 122 0 R >> endobj 125 0 obj << /Length 126 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 126 0 obj 573 endobj 127 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 125 0 R >> endobj 128 0 obj << /Length 129 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 131 0 obj << /Length 132 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 132 0 obj 477 endobj 133 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 131 0 R >> endobj 134 0 obj << /Length 135 0 R /Filter /FlateDecode >> stream xTMS0WR:3)@80I> endobj 137 0 obj << /Length 138 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 138 0 obj 495 endobj 139 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 137 0 R >> endobj 140 0 obj << /Length 141 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 141 0 obj 495 endobj 142 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 140 0 R >> endobj 143 0 obj << /Length 144 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 144 0 obj 586 endobj 145 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 143 0 R >> endobj 146 0 obj << /Length 147 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 147 0 obj 635 endobj 148 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 146 0 R >> endobj 149 0 obj << /Length 150 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 152 0 obj << /Length 153 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 153 0 obj 588 endobj 154 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 152 0 R >> endobj 155 0 obj << /Length 156 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 156 0 obj 606 endobj 157 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 155 0 R >> endobj 158 0 obj << /Length 159 0 R /Filter /FlateDecode >> stream xTn0+vm=p# 8Ñm1H2}Ib9SQG;;##@?.¤Վ=v XE\nYOSx^`XЬ>|~n!_pCn> endobj 161 0 obj << /Length 162 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 162 0 obj 607 endobj 163 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 161 0 R >> endobj 164 0 obj << /Length 165 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 165 0 obj 609 endobj 166 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 164 0 R >> endobj 167 0 obj << /Length 168 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 168 0 obj 502 endobj 169 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 167 0 R >> endobj 170 0 obj << /S /r /St 3 >> endobj 171 0 obj << /Type /Action /S /GoTo /D [19 0 R /XYZ 72.0 720.0 null] >> endobj 172 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 680.124 180.554 689.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 680.124 539.998 689.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 171 0 R /H /I >> endobj 174 0 obj << /Type /Action /S /GoTo /D [22 0 R /XYZ 72.0 720.0 null] >> endobj 175 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 668.124 205.685 677.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 174 0 R /H /I >> endobj 176 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.998 668.124 539.998 677.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 174 0 R /H /I >> endobj 177 0 obj << /Type /Action /S /GoTo /D [25 0 R /XYZ 72.0 720.0 null] >> endobj 178 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 656.124 200.66 665.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 177 0 R /H /I >> endobj 179 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 656.124 540.0 665.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 177 0 R /H /I >> endobj 180 0 obj << /Type /Action /S /GoTo /D [28 0 R /XYZ 72.0 720.0 null] >> endobj 181 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 644.124 228.44 653.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 644.124 539.999 653.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 183 0 obj << /Type /Action /S /GoTo /D [31 0 R /XYZ 72.0 720.0 null] >> endobj 184 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 632.124 221.2 641.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 183 0 R /H /I >> endobj 185 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.999 632.124 539.999 641.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 183 0 R /H /I >> endobj 186 0 obj << /Type /Action /S /GoTo /D [34 0 R /XYZ 72.0 720.0 null] >> endobj 187 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 620.124 205.1 629.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 620.124 540.0 629.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 189 0 obj << /Type /Action /S /GoTo /D [37 0 R /XYZ 72.0 720.0 null] >> endobj 190 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 608.124 227.87 617.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 189 0 R /H /I >> endobj 191 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 608.124 540.0 617.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 189 0 R /H /I >> endobj 192 0 obj << /Type /Action /S /GoTo /D [40 0 R /XYZ 72.0 720.0 null] >> endobj 193 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 596.124 208.99 605.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 192 0 R /H /I >> endobj 194 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.999 596.124 539.999 605.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 192 0 R /H /I >> endobj 195 0 obj << /Type /Action /S /GoTo /D [43 0 R /XYZ 72.0 720.0 null] >> endobj 196 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 584.124 232.88 593.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 195 0 R /H /I >> endobj 197 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 584.124 540.0 593.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 195 0 R /H /I >> endobj 198 0 obj << /Type /Action /S /GoTo /D [46 0 R /XYZ 72.0 720.0 null] >> endobj 199 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 572.124 236.77 581.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 198 0 R /H /I >> endobj 200 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 572.124 540.0 581.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 198 0 R /H /I >> endobj 201 0 obj << /Type /Action /S /GoTo /D [49 0 R /XYZ 72.0 720.0 null] >> endobj 202 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 560.124 230.11 569.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 201 0 R /H /I >> endobj 203 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 560.124 539.999 569.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 201 0 R /H /I >> endobj 204 0 obj << /Type /Action /S /GoTo /D [52 0 R /XYZ 72.0 720.0 null] >> endobj 205 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 548.124 197.33 557.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 204 0 R /H /I >> endobj 206 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 548.124 540.0 557.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 204 0 R /H /I >> endobj 207 0 obj << /Type /Action /S /GoTo /D [55 0 R /XYZ 72.0 720.0 null] >> endobj 208 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 536.124 205.11 545.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 536.124 539.999 545.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 207 0 R /H /I >> endobj 210 0 obj << /Type /Action /S /GoTo /D [58 0 R /XYZ 72.0 720.0 null] >> endobj 211 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 524.124 248.42 533.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 524.124 539.999 533.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 210 0 R /H /I >> endobj 213 0 obj << /Type /Action /S /GoTo /D [61 0 R /XYZ 72.0 720.0 null] >> endobj 214 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 512.124 200.11 521.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 512.124 539.999 521.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 216 0 obj << /Type /Action /S /GoTo /D [64 0 R /XYZ 72.0 720.0 null] >> endobj 217 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 500.124 215.1 509.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 500.124 539.999 509.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 216 0 R /H /I >> endobj 219 0 obj << /Type /Action /S /GoTo /D [67 0 R /XYZ 72.0 720.0 null] >> endobj 220 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 488.124 200.11 497.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 219 0 R /H /I >> endobj 221 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 488.124 539.999 497.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 219 0 R /H /I >> endobj 222 0 obj << /Type /Action /S /GoTo /D [70 0 R /XYZ 72.0 720.0 null] >> endobj 223 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 476.124 222.87 485.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 222 0 R /H /I >> endobj 224 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 476.124 540.0 485.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 222 0 R /H /I >> endobj 225 0 obj << /Type /Action /S /GoTo /D [73 0 R /XYZ 72.0 720.0 null] >> endobj 226 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 464.124 211.77 473.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 227 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 464.124 539.999 473.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 228 0 obj << /Type /Action /S /GoTo /D [76 0 R /XYZ 72.0 720.0 null] >> endobj 229 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 452.124 195.67 461.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 230 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 452.124 540.0 461.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 231 0 obj << /Type /Action /S /GoTo /D [79 0 R /XYZ 72.0 720.0 null] >> endobj 232 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 440.124 211.22 449.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 440.124 539.999 449.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 231 0 R /H /I >> endobj 234 0 obj << /Type /Action /S /GoTo /D [82 0 R /XYZ 72.0 720.0 null] >> endobj 235 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 428.124 225.11 437.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 234 0 R /H /I >> endobj 236 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 428.124 539.999 437.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 234 0 R /H /I >> endobj 237 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 720.0 null] >> endobj 238 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 416.124 218.44 425.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 416.124 540.0 425.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 237 0 R /H /I >> endobj 240 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 720.0 null] >> endobj 241 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 404.124 218.44 413.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 404.124 540.0 413.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 240 0 R /H /I >> endobj 243 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 720.0 null] >> endobj 244 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 392.124 236.22 401.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 392.124 540.0 401.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 243 0 R /H /I >> endobj 246 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 72.0 720.0 null] >> endobj 247 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 380.124 222.33 389.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 380.124 540.0 389.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 246 0 R /H /I >> endobj 249 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 72.0 720.0 null] >> endobj 250 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 368.124 239.55 377.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 249 0 R /H /I >> endobj 251 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 368.124 540.0 377.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 249 0 R /H /I >> endobj 252 0 obj << /Type /Action /S /GoTo /D [100 0 R /XYZ 72.0 720.0 null] >> endobj 253 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 356.124 233.44 365.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 356.124 539.999 365.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 252 0 R /H /I >> endobj 255 0 obj << /Type /Action /S /GoTo /D [103 0 R /XYZ 72.0 720.0 null] >> endobj 256 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 344.124 214.0 353.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 344.124 539.999 353.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 255 0 R /H /I >> endobj 258 0 obj << /Type /Action /S /GoTo /D [106 0 R /XYZ 72.0 720.0 null] >> endobj 259 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 332.124 214.0 341.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 332.124 539.999 341.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 261 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 72.0 720.0 null] >> endobj 262 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 320.124 209.56 329.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 263 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 320.124 539.999 329.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 264 0 obj << /Type /Action /S /GoTo /D [112 0 R /XYZ 72.0 720.0 null] >> endobj 265 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 308.124 215.11 317.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 264 0 R /H /I >> endobj 266 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 308.124 540.0 317.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 264 0 R /H /I >> endobj 267 0 obj << /Type /Action /S /GoTo /D [115 0 R /XYZ 72.0 720.0 null] >> endobj 268 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 296.124 209.56 305.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 267 0 R /H /I >> endobj 269 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 296.124 539.999 305.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 267 0 R /H /I >> endobj 270 0 obj << /Type /Action /S /GoTo /D [118 0 R /XYZ 72.0 720.0 null] >> endobj 271 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 284.124 214.56 293.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 284.124 540.0 293.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 270 0 R /H /I >> endobj 273 0 obj << /Type /Action /S /GoTo /D [121 0 R /XYZ 72.0 720.0 null] >> endobj 274 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 272.124 208.45 281.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 272.124 540.0 281.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 273 0 R /H /I >> endobj 276 0 obj << /Type /Action /S /GoTo /D [124 0 R /XYZ 72.0 720.0 null] >> endobj 277 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 260.124 207.34 269.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 276 0 R /H /I >> endobj 278 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 260.124 540.0 269.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 276 0 R /H /I >> endobj 279 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 72.0 720.0 null] >> endobj 280 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 248.124 209.56 257.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 279 0 R /H /I >> endobj 281 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 248.124 539.999 257.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 279 0 R /H /I >> endobj 282 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 72.0 720.0 null] >> endobj 283 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 236.124 227.87 245.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 282 0 R /H /I >> endobj 284 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 236.124 540.0 245.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 282 0 R /H /I >> endobj 285 0 obj << /Type /Action /S /GoTo /D [133 0 R /XYZ 72.0 720.0 null] >> endobj 286 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 224.124 201.22 233.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 285 0 R /H /I >> endobj 287 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 224.124 539.999 233.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 285 0 R /H /I >> endobj 288 0 obj << /Type /Action /S /GoTo /D [136 0 R /XYZ 72.0 720.0 null] >> endobj 289 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 212.124 195.67 221.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 212.124 540.0 221.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 288 0 R /H /I >> endobj 291 0 obj << /Type /Action /S /GoTo /D [139 0 R /XYZ 72.0 720.0 null] >> endobj 292 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 200.124 240.65 209.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 200.124 540.0 209.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 294 0 obj << /Type /Action /S /GoTo /D [142 0 R /XYZ 72.0 720.0 null] >> endobj 295 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 188.124 216.78 197.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 296 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 188.124 540.0 197.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 297 0 obj << /Type /Action /S /GoTo /D [145 0 R /XYZ 72.0 720.0 null] >> endobj 298 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 176.124 192.89 185.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 299 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 176.124 539.999 185.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 300 0 obj << /Type /Action /S /GoTo /D [148 0 R /XYZ 72.0 720.0 null] >> endobj 301 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 164.124 212.33 173.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 164.124 540.0 173.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 300 0 R /H /I >> endobj 303 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 72.0 720.0 null] >> endobj 304 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 152.124 228.99 161.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 303 0 R /H /I >> endobj 305 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 152.124 540.0 161.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 303 0 R /H /I >> endobj 306 0 obj << /Type /Action /S /GoTo /D [154 0 R /XYZ 72.0 720.0 null] >> endobj 307 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 140.124 192.89 149.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 306 0 R /H /I >> endobj 308 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 140.124 539.999 149.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 306 0 R /H /I >> endobj 309 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 72.0 720.0 null] >> endobj 310 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 128.124 210.66 137.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 128.124 540.0 137.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 309 0 R /H /I >> endobj 312 0 obj << /Type /Action /S /GoTo /D [160 0 R /XYZ 72.0 720.0 null] >> endobj 313 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 116.124 200.67 125.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 312 0 R /H /I >> endobj 314 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 116.124 540.0 125.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 312 0 R /H /I >> endobj 315 0 obj << /Type /Action /S /GoTo /D [163 0 R /XYZ 72.0 720.0 null] >> endobj 316 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 104.124 245.09 113.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 315 0 R /H /I >> endobj 317 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.998 104.124 539.998 113.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 315 0 R /H /I >> endobj 318 0 obj << /Type /Action /S /GoTo /D [166 0 R /XYZ 72.0 720.0 null] >> endobj 319 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 92.124 278.42 101.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 92.124 540.0 101.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 318 0 R /H /I >> endobj 321 0 obj << /Type /Action /S /GoTo /D [169 0 R /XYZ 72.0 720.0 null] >> endobj 322 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 80.124 223.44 89.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 323 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 80.124 540.0 89.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 324 0 obj << /Length 325 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 328 0 obj << /S /D /St 52 >> endobj 329 0 obj << /Length 330 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 330 0 obj 837 endobj 331 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 329 0 R >> endobj 332 0 obj << /Length 333 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 335 0 obj << /Length 336 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 336 0 obj 977 endobj 337 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 335 0 R >> endobj 338 0 obj << /Length 339 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 342 0 obj 949 endobj 343 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 341 0 R >> endobj 344 0 obj << /Length 345 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 345 0 obj 843 endobj 346 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 344 0 R >> endobj 347 0 obj << /Length 348 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 350 0 obj << /Length 351 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 351 0 obj 843 endobj 352 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 350 0 R >> endobj 353 0 obj << /Length 354 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 354 0 obj 946 endobj 355 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 353 0 R >> endobj 356 0 obj << /Length 357 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 357 0 obj 512 endobj 358 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 356 0 R >> endobj 359 0 obj << /Length 360 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 360 0 obj 626 endobj 361 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 359 0 R >> endobj 362 0 obj << /Length 363 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 363 0 obj 1251 endobj 364 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 362 0 R >> endobj 365 0 obj << /Length 366 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 366 0 obj 706 endobj 367 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 365 0 R >> endobj 368 0 obj << /Length 369 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 369 0 obj 792 endobj 370 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 368 0 R >> endobj 371 0 obj << /Length 372 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 372 0 obj 810 endobj 373 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 371 0 R >> endobj 374 0 obj << /Length 375 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 375 0 obj 713 endobj 376 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 374 0 R >> endobj 377 0 obj << /Length 378 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 378 0 obj 508 endobj 379 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 377 0 R >> endobj 380 0 obj << /Length 381 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 381 0 obj 508 endobj 382 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 380 0 R >> endobj 383 0 obj << /Length 384 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 386 0 obj << /Length 387 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 387 0 obj 595 endobj 388 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 386 0 R >> endobj 389 0 obj << /Length 390 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 392 0 obj << /Length 393 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 393 0 obj 553 endobj 394 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 392 0 R >> endobj 395 0 obj << /Length 396 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 396 0 obj 528 endobj 397 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 395 0 R >> endobj 398 0 obj << /Length 399 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 399 0 obj 530 endobj 400 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 398 0 R >> endobj 401 0 obj << /Length 402 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 404 0 obj << /Length 405 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 405 0 obj 532 endobj 406 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 404 0 R >> endobj 407 0 obj << /Length 408 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 408 0 obj 549 endobj 409 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 407 0 R >> endobj 410 0 obj << /Length 411 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 411 0 obj 605 endobj 412 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 410 0 R >> endobj 413 0 obj << /Length 414 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 414 0 obj 531 endobj 415 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 413 0 R >> endobj 416 0 obj << /Length 417 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 417 0 obj 565 endobj 418 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 416 0 R >> endobj 419 0 obj << /Length 420 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 420 0 obj 1001 endobj 421 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 419 0 R >> endobj 422 0 obj << /Length 423 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 423 0 obj 1109 endobj 424 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 422 0 R >> endobj 425 0 obj << /Length 426 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 426 0 obj 1117 endobj 427 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 425 0 R >> endobj 428 0 obj << /Length 429 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 429 0 obj 1217 endobj 430 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 428 0 R >> endobj 431 0 obj << /Length 432 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 432 0 obj 1109 endobj 433 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 431 0 R >> endobj 434 0 obj << /Length 435 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 437 0 obj << /Length 438 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 438 0 obj 726 endobj 439 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 437 0 R >> endobj 440 0 obj << /Length 441 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 443 0 obj << /Length 444 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 444 0 obj 522 endobj 445 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 443 0 R >> endobj 446 0 obj << /Length 447 0 R /Filter /FlateDecode >> stream xTr0w,^=@Ȼҙ.:㆙.LŲĈJlnWM:HtOR1(H<C4N bwV8L^_ q;5L%s1> endobj 449 0 obj << /Length 450 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 450 0 obj 576 endobj 451 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 449 0 R >> endobj 452 0 obj << /Length 453 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 455 0 obj << /Length 456 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 456 0 obj 600 endobj 457 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 455 0 R >> endobj 458 0 obj << /Length 459 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 461 0 obj << /Length 462 0 R /Filter /FlateDecode >> stream xUMs0W1$J'~h6._ohnsJjC,ðQ{uT]e@5jNz[;</4P4mO1?4W=9/A5rycJ,} endstream endobj 462 0 obj 609 endobj 463 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 461 0 R >> endobj 464 0 obj << /Length 465 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 465 0 obj 605 endobj 466 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 464 0 R >> endobj 467 0 obj << /Length 468 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 468 0 obj 747 endobj 469 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 467 0 R >> endobj 470 0 obj << /Length 471 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 471 0 obj 627 endobj 472 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 470 0 R >> endobj 473 0 obj << /Length 474 0 R /Filter /FlateDecode >> stream xUKs0W1JK6M;t0 @QA\ًC"7jgy5y%>eU;kklF@S 8$D]3!YuLFVϿ2y6Z&> endobj 476 0 obj << /Length 477 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 477 0 obj 507 endobj 478 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 476 0 R >> endobj 479 0 obj << /Length 480 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 480 0 obj 583 endobj 481 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 479 0 R >> endobj 482 0 obj << /Length 483 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 483 0 obj 474 endobj 484 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 482 0 R >> endobj 485 0 obj << /Length 486 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 486 0 obj 513 endobj 487 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 485 0 R >> endobj 488 0 obj << /Length 489 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 489 0 obj 512 endobj 490 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 488 0 R >> endobj 491 0 obj << /S /r /St 4 >> endobj 492 0 obj << /Type /Action /S /GoTo /D [331 0 R /XYZ 72.0 720.0 null] >> endobj 493 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 227.33 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 492 0 R /H /I >> endobj 494 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 492 0 R /H /I >> endobj 495 0 obj << /Type /Action /S /GoTo /D [334 0 R /XYZ 72.0 720.0 null] >> endobj 496 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 227.34 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 495 0 R /H /I >> endobj 497 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 495 0 R /H /I >> endobj 498 0 obj << /Type /Action /S /GoTo /D [337 0 R /XYZ 72.0 720.0 null] >> endobj 499 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 250.09 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 498 0 R /H /I >> endobj 500 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 498 0 R /H /I >> endobj 501 0 obj << /Type /Action /S /GoTo /D [340 0 R /XYZ 72.0 720.0 null] >> endobj 502 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 273.97 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 501 0 R /H /I >> endobj 503 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 501 0 R /H /I >> endobj 504 0 obj << /Type /Action /S /GoTo /D [343 0 R /XYZ 72.0 720.0 null] >> endobj 505 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 283.42 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 504 0 R /H /I >> endobj 506 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 504 0 R /H /I >> endobj 507 0 obj << /Type /Action /S /GoTo /D [346 0 R /XYZ 72.0 720.0 null] >> endobj 508 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 232.33 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 507 0 R /H /I >> endobj 509 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 507 0 R /H /I >> endobj 510 0 obj << /Type /Action /S /GoTo /D [349 0 R /XYZ 72.0 720.0 null] >> endobj 511 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 232.34 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 510 0 R /H /I >> endobj 512 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 510 0 R /H /I >> endobj 513 0 obj << /Type /Action /S /GoTo /D [352 0 R /XYZ 72.0 720.0 null] >> endobj 514 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 227.88 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 513 0 R /H /I >> endobj 515 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 513 0 R /H /I >> endobj 516 0 obj << /Type /Action /S /GoTo /D [355 0 R /XYZ 72.0 720.0 null] >> endobj 517 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 223.43 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 516 0 R /H /I >> endobj 518 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 516 0 R /H /I >> endobj 519 0 obj << /Type /Action /S /GoTo /D [358 0 R /XYZ 72.0 720.0 null] >> endobj 520 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 223.44 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 519 0 R /H /I >> endobj 521 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 519 0 R /H /I >> endobj 522 0 obj << /Type /Action /S /GoTo /D [361 0 R /XYZ 72.0 720.0 null] >> endobj 523 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 211.21 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 524 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 525 0 obj << /Type /Action /S /GoTo /D [364 0 R /XYZ 72.0 720.0 null] >> endobj 526 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 212.88 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 527 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 528 0 obj << /Type /Action /S /GoTo /D [367 0 R /XYZ 72.0 720.0 null] >> endobj 529 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 241.77 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 528 0 R /H /I >> endobj 530 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 528 0 R /H /I >> endobj 531 0 obj << /Type /Action /S /GoTo /D [370 0 R /XYZ 72.0 720.0 null] >> endobj 532 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 216.21 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 533 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 534 0 obj << /Type /Action /S /GoTo /D [373 0 R /XYZ 72.0 720.0 null] >> endobj 535 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 223.44 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 534 0 R /H /I >> endobj 536 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 534 0 R /H /I >> endobj 537 0 obj << /Type /Action /S /GoTo /D [376 0 R /XYZ 72.0 720.0 null] >> endobj 538 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 226.77 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 537 0 R /H /I >> endobj 539 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 537 0 R /H /I >> endobj 540 0 obj << /Type /Action /S /GoTo /D [379 0 R /XYZ 72.0 720.0 null] >> endobj 541 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 214.55 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 540 0 R /H /I >> endobj 542 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 540 0 R /H /I >> endobj 543 0 obj << /Type /Action /S /GoTo /D [382 0 R /XYZ 72.0 720.0 null] >> endobj 544 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 214.55 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 543 0 R /H /I >> endobj 545 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 543 0 R /H /I >> endobj 546 0 obj << /Type /Action /S /GoTo /D [385 0 R /XYZ 72.0 720.0 null] >> endobj 547 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 227.33 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 546 0 R /H /I >> endobj 548 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 546 0 R /H /I >> endobj 549 0 obj << /Type /Action /S /GoTo /D [388 0 R /XYZ 72.0 720.0 null] >> endobj 550 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 234.55 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 549 0 R /H /I >> endobj 551 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 549 0 R /H /I >> endobj 552 0 obj << /Type /Action /S /GoTo /D [391 0 R /XYZ 72.0 720.0 null] >> endobj 553 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 252.33 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 552 0 R /H /I >> endobj 554 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 552 0 R /H /I >> endobj 555 0 obj << /Type /Action /S /GoTo /D [394 0 R /XYZ 72.0 720.0 null] >> endobj 556 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 245.1 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 555 0 R /H /I >> endobj 557 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 555 0 R /H /I >> endobj 558 0 obj << /Type /Action /S /GoTo /D [397 0 R /XYZ 72.0 720.0 null] >> endobj 559 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 230.66 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 558 0 R /H /I >> endobj 560 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 558 0 R /H /I >> endobj 561 0 obj << /Type /Action /S /GoTo /D [400 0 R /XYZ 72.0 720.0 null] >> endobj 562 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 230.66 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 561 0 R /H /I >> endobj 563 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 561 0 R /H /I >> endobj 564 0 obj << /Type /Action /S /GoTo /D [403 0 R /XYZ 72.0 720.0 null] >> endobj 565 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 231.77 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 564 0 R /H /I >> endobj 566 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 564 0 R /H /I >> endobj 567 0 obj << /Type /Action /S /GoTo /D [406 0 R /XYZ 72.0 720.0 null] >> endobj 568 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 231.77 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 567 0 R /H /I >> endobj 569 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 567 0 R /H /I >> endobj 570 0 obj << /Type /Action /S /GoTo /D [409 0 R /XYZ 72.0 720.0 null] >> endobj 571 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 232.33 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 570 0 R /H /I >> endobj 572 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 570 0 R /H /I >> endobj 573 0 obj << /Type /Action /S /GoTo /D [412 0 R /XYZ 72.0 720.0 null] >> endobj 574 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 239.55 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 573 0 R /H /I >> endobj 575 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 573 0 R /H /I >> endobj 576 0 obj << /Type /Action /S /GoTo /D [415 0 R /XYZ 72.0 720.0 null] >> endobj 577 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 257.33 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 576 0 R /H /I >> endobj 578 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 576 0 R /H /I >> endobj 579 0 obj << /Type /Action /S /GoTo /D [418 0 R /XYZ 72.0 720.0 null] >> endobj 580 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 194.56 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 579 0 R /H /I >> endobj 581 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 579 0 R /H /I >> endobj 582 0 obj << /Type /Action /S /GoTo /D [421 0 R /XYZ 72.0 720.0 null] >> endobj 583 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 248.98 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 582 0 R /H /I >> endobj 584 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 582 0 R /H /I >> endobj 585 0 obj << /Type /Action /S /GoTo /D [424 0 R /XYZ 72.0 720.0 null] >> endobj 586 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 231.22 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 585 0 R /H /I >> endobj 587 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 585 0 R /H /I >> endobj 588 0 obj << /Type /Action /S /GoTo /D [427 0 R /XYZ 72.0 720.0 null] >> endobj 589 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 231.23 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 588 0 R /H /I >> endobj 590 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 588 0 R /H /I >> endobj 591 0 obj << /Type /Action /S /GoTo /D [430 0 R /XYZ 72.0 720.0 null] >> endobj 592 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 253.98 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 591 0 R /H /I >> endobj 593 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 591 0 R /H /I >> endobj 594 0 obj << /Type /Action /S /GoTo /D [433 0 R /XYZ 72.0 720.0 null] >> endobj 595 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 236.22 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 594 0 R /H /I >> endobj 596 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 594 0 R /H /I >> endobj 597 0 obj << /Type /Action /S /GoTo /D [436 0 R /XYZ 72.0 720.0 null] >> endobj 598 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 236.23 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 597 0 R /H /I >> endobj 599 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 597 0 R /H /I >> endobj 600 0 obj << /Type /Action /S /GoTo /D [439 0 R /XYZ 72.0 720.0 null] >> endobj 601 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 203.44 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 600 0 R /H /I >> endobj 602 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 600 0 R /H /I >> endobj 603 0 obj << /Type /Action /S /GoTo /D [442 0 R /XYZ 72.0 720.0 null] >> endobj 604 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 223.99 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 603 0 R /H /I >> endobj 605 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 603 0 R /H /I >> endobj 606 0 obj << /Type /Action /S /GoTo /D [445 0 R /XYZ 72.0 720.0 null] >> endobj 607 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 236.77 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 606 0 R /H /I >> endobj 608 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 606 0 R /H /I >> endobj 609 0 obj << /Type /Action /S /GoTo /D [448 0 R /XYZ 72.0 720.0 null] >> endobj 610 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 226.77 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 609 0 R /H /I >> endobj 611 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 609 0 R /H /I >> endobj 612 0 obj << /Type /Action /S /GoTo /D [451 0 R /XYZ 72.0 720.0 null] >> endobj 613 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 212.34 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 612 0 R /H /I >> endobj 614 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 612 0 R /H /I >> endobj 615 0 obj << /Type /Action /S /GoTo /D [454 0 R /XYZ 72.0 720.0 null] >> endobj 616 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 216.22 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 615 0 R /H /I >> endobj 617 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 615 0 R /H /I >> endobj 618 0 obj << /Type /Action /S /GoTo /D [457 0 R /XYZ 72.0 720.0 null] >> endobj 619 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 212.89 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 618 0 R /H /I >> endobj 620 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 618 0 R /H /I >> endobj 621 0 obj << /Type /Action /S /GoTo /D [460 0 R /XYZ 72.0 720.0 null] >> endobj 622 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 227.89 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 621 0 R /H /I >> endobj 623 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 621 0 R /H /I >> endobj 624 0 obj << /Type /Action /S /GoTo /D [463 0 R /XYZ 72.0 720.0 null] >> endobj 625 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 214.56 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 624 0 R /H /I >> endobj 626 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 624 0 R /H /I >> endobj 627 0 obj << /Type /Action /S /GoTo /D [466 0 R /XYZ 72.0 720.0 null] >> endobj 628 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 221.22 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 627 0 R /H /I >> endobj 629 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 627 0 R /H /I >> endobj 630 0 obj << /Type /Action /S /GoTo /D [469 0 R /XYZ 72.0 720.0 null] >> endobj 631 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 205.66 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 630 0 R /H /I >> endobj 632 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 630 0 R /H /I >> endobj 633 0 obj << /Type /Action /S /GoTo /D [472 0 R /XYZ 72.0 720.0 null] >> endobj 634 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 237.32 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 633 0 R /H /I >> endobj 635 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 633 0 R /H /I >> endobj 636 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 72.0 720.0 null] >> endobj 637 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 242.31 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 636 0 R /H /I >> endobj 638 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 636 0 R /H /I >> endobj 639 0 obj << /Type /Action /S /GoTo /D [478 0 R /XYZ 72.0 720.0 null] >> endobj 640 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 218.44 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 639 0 R /H /I >> endobj 641 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 639 0 R /H /I >> endobj 642 0 obj << /Type /Action /S /GoTo /D [481 0 R /XYZ 72.0 720.0 null] >> endobj 643 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 232.32 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 642 0 R /H /I >> endobj 644 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 642 0 R /H /I >> endobj 645 0 obj << /Type /Action /S /GoTo /D [484 0 R /XYZ 72.0 720.0 null] >> endobj 646 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 242.88 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 645 0 R /H /I >> endobj 647 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 645 0 R /H /I >> endobj 648 0 obj << /Type /Action /S /GoTo /D [487 0 R /XYZ 72.0 720.0 null] >> endobj 649 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 221.22 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 648 0 R /H /I >> endobj 650 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 648 0 R /H /I >> endobj 651 0 obj << /Type /Action /S /GoTo /D [490 0 R /XYZ 72.0 720.0 null] >> endobj 652 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 221.22 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 651 0 R /H /I >> endobj 653 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 651 0 R /H /I >> endobj 654 0 obj << /Length 655 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 655 0 obj 14801 endobj 656 0 obj [ 493 0 R 494 0 R 496 0 R 497 0 R 499 0 R 500 0 R 502 0 R 503 0 R 505 0 R 506 0 R 508 0 R 509 0 R 511 0 R 512 0 R 514 0 R 515 0 R 517 0 R 518 0 R 520 0 R 521 0 R 523 0 R 524 0 R 526 0 R 527 0 R 529 0 R 530 0 R 532 0 R 533 0 R 535 0 R 536 0 R 538 0 R 539 0 R 541 0 R 542 0 R 544 0 R 545 0 R 547 0 R 548 0 R 550 0 R 551 0 R 553 0 R 554 0 R 556 0 R 557 0 R 559 0 R 560 0 R 562 0 R 563 0 R 565 0 R 566 0 R 568 0 R 569 0 R 571 0 R 572 0 R 574 0 R 575 0 R 577 0 R 578 0 R 580 0 R 581 0 R 583 0 R 584 0 R 586 0 R 587 0 R 589 0 R 590 0 R 592 0 R 593 0 R 595 0 R 596 0 R 598 0 R 599 0 R 601 0 R 602 0 R 604 0 R 605 0 R 607 0 R 608 0 R 610 0 R 611 0 R 613 0 R 614 0 R 616 0 R 617 0 R 619 0 R 620 0 R 622 0 R 623 0 R 625 0 R 626 0 R 628 0 R 629 0 R 631 0 R 632 0 R 634 0 R 635 0 R 637 0 R 638 0 R 640 0 R 641 0 R 643 0 R 644 0 R 646 0 R 647 0 R 649 0 R 650 0 R 652 0 R 653 0 R ] endobj 657 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 656 0 R /Contents 654 0 R >> endobj 658 0 obj << /S /D /St 106 >> endobj 659 0 obj << /Length 660 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 660 0 obj 463 endobj 661 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 659 0 R >> endobj 662 0 obj << /Length 663 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 663 0 obj 497 endobj 664 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 662 0 R >> endobj 665 0 obj << /Length 666 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 666 0 obj 535 endobj 667 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 665 0 R >> endobj 668 0 obj << /Length 669 0 R /Filter /FlateDecode >> stream xTMO0Wxg${caYio6MI~4-?͛?1t0[#Pd2(N".b, gWMGiF7pwh'lj9|*O!zt1 endstream endobj 669 0 obj 506 endobj 670 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 668 0 R >> endobj 671 0 obj << /Length 672 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 672 0 obj 534 endobj 673 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 671 0 R >> endobj 674 0 obj << /Length 675 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 675 0 obj 498 endobj 676 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 674 0 R >> endobj 677 0 obj << /Length 678 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 680 0 obj << /Length 681 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 681 0 obj 516 endobj 682 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 680 0 R >> endobj 683 0 obj << /Length 684 0 R /Filter /FlateDecode >> stream xTn0+ΐH-z3"$0 [Ɣ#J]6/ݞH(> endobj 686 0 obj << /Length 687 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 687 0 obj 536 endobj 688 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 686 0 R >> endobj 689 0 obj << /Length 690 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 690 0 obj 537 endobj 691 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 689 0 R >> endobj 692 0 obj << /Length 693 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 693 0 obj 507 endobj 694 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 692 0 R >> endobj 695 0 obj << /Length 696 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 696 0 obj 527 endobj 697 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 695 0 R >> endobj 698 0 obj << /Length 699 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 699 0 obj 594 endobj 700 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 698 0 R >> endobj 701 0 obj << /Length 702 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 702 0 obj 511 endobj 703 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 701 0 R >> endobj 704 0 obj << /Length 705 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 705 0 obj 505 endobj 706 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 704 0 R >> endobj 707 0 obj << /Length 708 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 708 0 obj 627 endobj 709 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 707 0 R >> endobj 710 0 obj << /Length 711 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 711 0 obj 506 endobj 712 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 710 0 R >> endobj 713 0 obj << /Length 714 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 714 0 obj 505 endobj 715 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 713 0 R >> endobj 716 0 obj << /Length 717 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 717 0 obj 482 endobj 718 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 716 0 R >> endobj 719 0 obj << /Length 720 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 720 0 obj 509 endobj 721 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 719 0 R >> endobj 722 0 obj << /Length 723 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 725 0 obj << /Length 726 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 726 0 obj 554 endobj 727 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 725 0 R >> endobj 728 0 obj << /Length 729 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 729 0 obj 771 endobj 730 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 728 0 R >> endobj 731 0 obj << /Length 732 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 732 0 obj 858 endobj 733 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 731 0 R >> endobj 734 0 obj << /Length 735 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 735 0 obj 855 endobj 736 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 734 0 R >> endobj 737 0 obj << /Length 738 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 738 0 obj 479 endobj 739 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 737 0 R >> endobj 740 0 obj << /Length 741 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 741 0 obj 535 endobj 742 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 740 0 R >> endobj 743 0 obj << /Length 744 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 744 0 obj 587 endobj 745 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 743 0 R >> endobj 746 0 obj << /Length 747 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 747 0 obj 510 endobj 748 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 746 0 R >> endobj 749 0 obj << /Length 750 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 750 0 obj 677 endobj 751 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 749 0 R >> endobj 752 0 obj << /Length 753 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 755 0 obj << /Length 756 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 758 0 obj << /Length 759 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 759 0 obj 832 endobj 760 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 758 0 R >> endobj 761 0 obj << /Length 762 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 762 0 obj 602 endobj 763 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 761 0 R >> endobj 764 0 obj << /Length 765 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 765 0 obj 642 endobj 766 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 764 0 R >> endobj 767 0 obj << /Length 768 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 768 0 obj 610 endobj 769 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 767 0 R >> endobj 770 0 obj << /Length 771 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 771 0 obj 610 endobj 772 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 770 0 R >> endobj 773 0 obj << /Length 774 0 R /Filter /FlateDecode >> stream xUMo0+渑mJEE!ʁl@Zlfϯm0UMZ7ǀh8P419ba, 5oLlŸ)-Hy_}I)dmpFxSJߪU؁O U޴8BRw/Є!0c $z LTyQ2fP yX> endobj 776 0 obj << /Length 777 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 777 0 obj 538 endobj 778 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 776 0 R >> endobj 779 0 obj << /Length 780 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 782 0 obj << /Length 783 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 785 0 obj << /Length 786 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 786 0 obj 638 endobj 787 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 785 0 R >> endobj 788 0 obj << /Length 789 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 789 0 obj 641 endobj 790 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 788 0 R >> endobj 791 0 obj << /Length 792 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 794 0 obj << /Length 795 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 795 0 obj 661 endobj 796 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 794 0 R >> endobj 797 0 obj << /Length 798 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 800 0 obj << /Length 801 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 801 0 obj 499 endobj 802 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 800 0 R >> endobj 803 0 obj << /Length 804 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 804 0 obj 496 endobj 805 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 803 0 R >> endobj 806 0 obj << /Length 807 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 807 0 obj 500 endobj 808 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 806 0 R >> endobj 809 0 obj << /Length 810 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 810 0 obj 608 endobj 811 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 809 0 R >> endobj 812 0 obj << /Length 813 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 813 0 obj 491 endobj 814 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 812 0 R >> endobj 815 0 obj << /Length 816 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 816 0 obj 612 endobj 817 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 815 0 R >> endobj 818 0 obj << /Length 819 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 821 0 obj << /S /r /St 5 >> endobj 822 0 obj << /Type /Action /S /GoTo /D [661 0 R /XYZ 72.0 720.0 null] >> endobj 823 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 236.21 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 822 0 R /H /I >> endobj 824 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 822 0 R /H /I >> endobj 825 0 obj << /Type /Action /S /GoTo /D [664 0 R /XYZ 72.0 720.0 null] >> endobj 826 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 243.98 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 825 0 R /H /I >> endobj 827 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 697.5 539.998 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 825 0 R /H /I >> endobj 828 0 obj << /Type /Action /S /GoTo /D [667 0 R /XYZ 72.0 720.0 null] >> endobj 829 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 245.11 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 828 0 R /H /I >> endobj 830 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 828 0 R /H /I >> endobj 831 0 obj << /Type /Action /S /GoTo /D [670 0 R /XYZ 72.0 720.0 null] >> endobj 832 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 216.78 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 831 0 R /H /I >> endobj 833 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 831 0 R /H /I >> endobj 834 0 obj << /Type /Action /S /GoTo /D [673 0 R /XYZ 72.0 720.0 null] >> endobj 835 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 275.1 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 834 0 R /H /I >> endobj 836 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 661.5 539.998 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 834 0 R /H /I >> endobj 837 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 72.0 720.0 null] >> endobj 838 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 220.66 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 837 0 R /H /I >> endobj 839 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 837 0 R /H /I >> endobj 840 0 obj << /Type /Action /S /GoTo /D [679 0 R /XYZ 72.0 720.0 null] >> endobj 841 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 235.11 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 840 0 R /H /I >> endobj 842 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 840 0 R /H /I >> endobj 843 0 obj << /Type /Action /S /GoTo /D [682 0 R /XYZ 72.0 720.0 null] >> endobj 844 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 235.11 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 843 0 R /H /I >> endobj 845 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 843 0 R /H /I >> endobj 846 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 72.0 720.0 null] >> endobj 847 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 230.67 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 846 0 R /H /I >> endobj 848 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 846 0 R /H /I >> endobj 849 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 72.0 720.0 null] >> endobj 850 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 230.67 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 849 0 R /H /I >> endobj 851 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 849 0 R /H /I >> endobj 852 0 obj << /Type /Action /S /GoTo /D [691 0 R /XYZ 72.0 720.0 null] >> endobj 853 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 228.45 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 852 0 R /H /I >> endobj 854 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 852 0 R /H /I >> endobj 855 0 obj << /Type /Action /S /GoTo /D [694 0 R /XYZ 72.0 720.0 null] >> endobj 856 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 230.67 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 855 0 R /H /I >> endobj 857 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 855 0 R /H /I >> endobj 858 0 obj << /Type /Action /S /GoTo /D [697 0 R /XYZ 72.0 720.0 null] >> endobj 859 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 277.32 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 858 0 R /H /I >> endobj 860 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 858 0 R /H /I >> endobj 861 0 obj << /Type /Action /S /GoTo /D [700 0 R /XYZ 72.0 720.0 null] >> endobj 862 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 228.99 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 861 0 R /H /I >> endobj 863 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 861 0 R /H /I >> endobj 864 0 obj << /Type /Action /S /GoTo /D [703 0 R /XYZ 72.0 720.0 null] >> endobj 865 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 216.78 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 864 0 R /H /I >> endobj 866 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 864 0 R /H /I >> endobj 867 0 obj << /Type /Action /S /GoTo /D [706 0 R /XYZ 72.0 720.0 null] >> endobj 868 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 220.11 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 867 0 R /H /I >> endobj 869 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 867 0 R /H /I >> endobj 870 0 obj << /Type /Action /S /GoTo /D [709 0 R /XYZ 72.0 720.0 null] >> endobj 871 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 222.33 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 870 0 R /H /I >> endobj 872 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 870 0 R /H /I >> endobj 873 0 obj << /Type /Action /S /GoTo /D [712 0 R /XYZ 72.0 720.0 null] >> endobj 874 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 214.56 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 873 0 R /H /I >> endobj 875 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 873 0 R /H /I >> endobj 876 0 obj << /Type /Action /S /GoTo /D [715 0 R /XYZ 72.0 720.0 null] >> endobj 877 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 216.78 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 876 0 R /H /I >> endobj 878 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 876 0 R /H /I >> endobj 879 0 obj << /Type /Action /S /GoTo /D [718 0 R /XYZ 72.0 720.0 null] >> endobj 880 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 193.45 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 879 0 R /H /I >> endobj 881 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 879 0 R /H /I >> endobj 882 0 obj << /Type /Action /S /GoTo /D [721 0 R /XYZ 72.0 720.0 null] >> endobj 883 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 215.66 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 882 0 R /H /I >> endobj 884 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 882 0 R /H /I >> endobj 885 0 obj << /Type /Action /S /GoTo /D [724 0 R /XYZ 72.0 720.0 null] >> endobj 886 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 215.66 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 885 0 R /H /I >> endobj 887 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 885 0 R /H /I >> endobj 888 0 obj << /Type /Action /S /GoTo /D [727 0 R /XYZ 72.0 720.0 null] >> endobj 889 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 222.88 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 888 0 R /H /I >> endobj 890 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 888 0 R /H /I >> endobj 891 0 obj << /Type /Action /S /GoTo /D [730 0 R /XYZ 72.0 720.0 null] >> endobj 892 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 205.66 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 891 0 R /H /I >> endobj 893 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 891 0 R /H /I >> endobj 894 0 obj << /Type /Action /S /GoTo /D [733 0 R /XYZ 72.0 720.0 null] >> endobj 895 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 226.2 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 894 0 R /H /I >> endobj 896 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 894 0 R /H /I >> endobj 897 0 obj << /Type /Action /S /GoTo /D [736 0 R /XYZ 72.0 720.0 null] >> endobj 898 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 213.99 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 897 0 R /H /I >> endobj 899 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 897 0 R /H /I >> endobj 900 0 obj << /Type /Action /S /GoTo /D [739 0 R /XYZ 72.0 720.0 null] >> endobj 901 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 195.67 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 900 0 R /H /I >> endobj 902 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 900 0 R /H /I >> endobj 903 0 obj << /Type /Action /S /GoTo /D [742 0 R /XYZ 72.0 720.0 null] >> endobj 904 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 216.22 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 903 0 R /H /I >> endobj 905 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 903 0 R /H /I >> endobj 906 0 obj << /Type /Action /S /GoTo /D [745 0 R /XYZ 72.0 720.0 null] >> endobj 907 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 223.44 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 906 0 R /H /I >> endobj 908 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 906 0 R /H /I >> endobj 909 0 obj << /Type /Action /S /GoTo /D [748 0 R /XYZ 72.0 720.0 null] >> endobj 910 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 241.22 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 909 0 R /H /I >> endobj 911 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 909 0 R /H /I >> endobj 912 0 obj << /Type /Action /S /GoTo /D [751 0 R /XYZ 72.0 720.0 null] >> endobj 913 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 227.33 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 912 0 R /H /I >> endobj 914 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 912 0 R /H /I >> endobj 915 0 obj << /Type /Action /S /GoTo /D [754 0 R /XYZ 72.0 720.0 null] >> endobj 916 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 226.77 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 917 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 918 0 obj << /Type /Action /S /GoTo /D [757 0 R /XYZ 72.0 720.0 null] >> endobj 919 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 208.44 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 920 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 921 0 obj << /Type /Action /S /GoTo /D [760 0 R /XYZ 72.0 720.0 null] >> endobj 922 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 221.22 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 921 0 R /H /I >> endobj 923 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 921 0 R /H /I >> endobj 924 0 obj << /Type /Action /S /GoTo /D [763 0 R /XYZ 72.0 720.0 null] >> endobj 925 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 217.89 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 924 0 R /H /I >> endobj 926 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 924 0 R /H /I >> endobj 927 0 obj << /Type /Action /S /GoTo /D [766 0 R /XYZ 72.0 720.0 null] >> endobj 928 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 232.89 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 927 0 R /H /I >> endobj 929 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 927 0 R /H /I >> endobj 930 0 obj << /Type /Action /S /GoTo /D [769 0 R /XYZ 72.0 720.0 null] >> endobj 931 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 219.56 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 930 0 R /H /I >> endobj 932 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 930 0 R /H /I >> endobj 933 0 obj << /Type /Action /S /GoTo /D [772 0 R /XYZ 72.0 720.0 null] >> endobj 934 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 226.22 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 933 0 R /H /I >> endobj 935 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 933 0 R /H /I >> endobj 936 0 obj << /Type /Action /S /GoTo /D [775 0 R /XYZ 72.0 720.0 null] >> endobj 937 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 253.5 218.864 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 936 0 R /H /I >> endobj 938 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 253.5 539.998 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 936 0 R /H /I >> endobj 939 0 obj << /Type /Action /S /GoTo /D [778 0 R /XYZ 72.0 720.0 null] >> endobj 940 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 196.22 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 939 0 R /H /I >> endobj 941 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 939 0 R /H /I >> endobj 942 0 obj << /Type /Action /S /GoTo /D [781 0 R /XYZ 72.0 720.0 null] >> endobj 943 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 240.66 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 944 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 945 0 obj << /Type /Action /S /GoTo /D [784 0 R /XYZ 72.0 720.0 null] >> endobj 946 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 237.88 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 947 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 948 0 obj << /Type /Action /S /GoTo /D [787 0 R /XYZ 72.0 720.0 null] >> endobj 949 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 232.88 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 948 0 R /H /I >> endobj 950 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 948 0 R /H /I >> endobj 951 0 obj << /Type /Action /S /GoTo /D [790 0 R /XYZ 72.0 720.0 null] >> endobj 952 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 237.88 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 951 0 R /H /I >> endobj 953 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 951 0 R /H /I >> endobj 954 0 obj << /Type /Action /S /GoTo /D [793 0 R /XYZ 72.0 720.0 null] >> endobj 955 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 252.32 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 954 0 R /H /I >> endobj 956 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 181.5 539.998 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 954 0 R /H /I >> endobj 957 0 obj << /Type /Action /S /GoTo /D [796 0 R /XYZ 72.0 720.0 null] >> endobj 958 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 225.1 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 957 0 R /H /I >> endobj 959 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 957 0 R /H /I >> endobj 960 0 obj << /Type /Action /S /GoTo /D [799 0 R /XYZ 72.0 720.0 null] >> endobj 961 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 252.33 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 960 0 R /H /I >> endobj 962 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 960 0 R /H /I >> endobj 963 0 obj << /Type /Action /S /GoTo /D [802 0 R /XYZ 72.0 720.0 null] >> endobj 964 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 249.55 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 963 0 R /H /I >> endobj 965 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 145.5 539.998 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 963 0 R /H /I >> endobj 966 0 obj << /Type /Action /S /GoTo /D [805 0 R /XYZ 72.0 720.0 null] >> endobj 967 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 244.55 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 966 0 R /H /I >> endobj 968 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 966 0 R /H /I >> endobj 969 0 obj << /Type /Action /S /GoTo /D [808 0 R /XYZ 72.0 720.0 null] >> endobj 970 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 249.55 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 969 0 R /H /I >> endobj 971 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 121.5 539.998 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 969 0 R /H /I >> endobj 972 0 obj << /Type /Action /S /GoTo /D [811 0 R /XYZ 72.0 720.0 null] >> endobj 973 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 206.22 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 972 0 R /H /I >> endobj 974 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 972 0 R /H /I >> endobj 975 0 obj << /Type /Action /S /GoTo /D [814 0 R /XYZ 72.0 720.0 null] >> endobj 976 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 236.78 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 975 0 R /H /I >> endobj 977 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 975 0 R /H /I >> endobj 978 0 obj << /Type /Action /S /GoTo /D [817 0 R /XYZ 72.0 720.0 null] >> endobj 979 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 245.66 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 980 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 981 0 obj << /Type /Action /S /GoTo /D [820 0 R /XYZ 72.0 720.0 null] >> endobj 982 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 242.88 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 981 0 R /H /I >> endobj 983 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 981 0 R /H /I >> endobj 984 0 obj << /Length 985 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 985 0 obj 14802 endobj 986 0 obj [ 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 841 0 R 842 0 R 844 0 R 845 0 R 847 0 R 848 0 R 850 0 R 851 0 R 853 0 R 854 0 R 856 0 R 857 0 R 859 0 R 860 0 R 862 0 R 863 0 R 865 0 R 866 0 R 868 0 R 869 0 R 871 0 R 872 0 R 874 0 R 875 0 R 877 0 R 878 0 R 880 0 R 881 0 R 883 0 R 884 0 R 886 0 R 887 0 R 889 0 R 890 0 R 892 0 R 893 0 R 895 0 R 896 0 R 898 0 R 899 0 R 901 0 R 902 0 R 904 0 R 905 0 R 907 0 R 908 0 R 910 0 R 911 0 R 913 0 R 914 0 R 916 0 R 917 0 R 919 0 R 920 0 R 922 0 R 923 0 R 925 0 R 926 0 R 928 0 R 929 0 R 931 0 R 932 0 R 934 0 R 935 0 R 937 0 R 938 0 R 940 0 R 941 0 R 943 0 R 944 0 R 946 0 R 947 0 R 949 0 R 950 0 R 952 0 R 953 0 R 955 0 R 956 0 R 958 0 R 959 0 R 961 0 R 962 0 R 964 0 R 965 0 R 967 0 R 968 0 R 970 0 R 971 0 R 973 0 R 974 0 R 976 0 R 977 0 R 979 0 R 980 0 R 982 0 R 983 0 R ] endobj 987 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 986 0 R /Contents 984 0 R >> endobj 988 0 obj << /S /D /St 160 >> endobj 989 0 obj << /Length 990 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 990 0 obj 608 endobj 991 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 989 0 R >> endobj 992 0 obj << /Length 993 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 993 0 obj 613 endobj 994 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 992 0 R >> endobj 995 0 obj << /Length 996 0 R /Filter /FlateDecode >> stream xUMo0+ ƹWW[Z=U$A n o{"L~7s > endobj 998 0 obj << /Length 999 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 999 0 obj 571 endobj 1000 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 998 0 R >> endobj 1001 0 obj << /Length 1002 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 1002 0 obj 563 endobj 1003 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1001 0 R >> endobj 1004 0 obj << /Length 1005 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 1007 0 obj << /Length 1008 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 1008 0 obj 538 endobj 1009 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1007 0 R >> endobj 1010 0 obj << /Length 1011 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 1011 0 obj 539 endobj 1012 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1010 0 R >> endobj 1013 0 obj << /Length 1014 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 1016 0 obj << /Length 1017 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 1017 0 obj 1594 endobj 1018 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1016 0 R >> endobj 1019 0 obj << /Length 1020 0 R /Filter /FlateDecode >> stream xVKo0WH+oio"TU&N+׎@- |3S+s9> endobj 1022 0 obj << /Length 1023 0 R /Filter /FlateDecode >> stream xTn0w9#5 ήoJPu2WQ4<&afF8>G}w;b!@} , (ُqU7ʢkp &ⅷ:(Tm[cE6rp+%9I8Sbp2EnvuW}D9eoU__7 VsKā!\eS"QIss-M > endobj 1025 0 obj << /Length 1026 0 R /Filter /FlateDecode >> stream xTMO0WǎpkJ["q`Q."QX6©G<D=C 8X8u8.Yk8> endobj 1028 0 obj << /Length 1029 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 1029 0 obj 305 endobj 1030 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1028 0 R >> endobj 1031 0 obj << /Length 1032 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 1034 0 obj << /Length 1035 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 1035 0 obj 399 endobj 1036 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1034 0 R >> endobj 1037 0 obj << /Length 1038 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 1040 0 obj << /Length 1041 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 1041 0 obj 873 endobj 1042 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1040 0 R >> endobj 1043 0 obj << /Length 1044 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 1044 0 obj 447 endobj 1045 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1043 0 R >> endobj 1046 0 obj << /Length 1047 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 1047 0 obj 606 endobj 1048 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1046 0 R >> endobj 1049 0 obj << /Length 1050 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 1050 0 obj 725 endobj 1051 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1049 0 R >> endobj 1052 0 obj << /Length 1053 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 1053 0 obj 716 endobj 1054 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1052 0 R >> endobj 1055 0 obj << /Length 1056 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 1056 0 obj 707 endobj 1057 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1055 0 R >> endobj 1058 0 obj << /Length 1059 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 1059 0 obj 725 endobj 1060 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1058 0 R >> endobj 1061 0 obj << /Length 1062 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 1062 0 obj 795 endobj 1063 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1061 0 R >> endobj 1064 0 obj << /Length 1065 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 1065 0 obj 711 endobj 1066 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1064 0 R >> endobj 1067 0 obj << /Length 1068 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 1070 0 obj << /Length 1071 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 1071 0 obj 552 endobj 1072 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1070 0 R >> endobj 1073 0 obj << /Length 1074 0 R /Filter /FlateDecode >> stream xUn0+!bz0"4XKr}ؒc0ggvZm"+(a^F=@qb Y4,_Qcv?Ӱzm".T(D߳MB|/m, RR"/?MY;3GIOso8q3;mCepJqupBPc}ľ(M[?%y]+l 1' Jp |0LP%bLùnt2xl"6E %RJwUtEL:&ZZKz )AmXx|nƂ,VD |,L_@~e4uQR4};;fXB_;ҿqz]s<$> endobj 1076 0 obj << /Length 1077 0 R /Filter /FlateDecode >> stream xVMo0+ظJەVC{h&&A>VkC&@=m QF~<66,!F@P`> endobj 1079 0 obj << /Length 1080 0 R /Filter /FlateDecode >> stream xVn0+ԃbz0"$ZKL}D95 SXkfgKו^`.1F3q!Pe1 ~b?us_N?b4x/@gwj"|*m6M| WkeDx1? /~ȲnM'#ߝROVקᗻ}q9[wQAxGS~Jwv:L,\F=B(Vbㄤg|BnVvr,;%3Sfrщaj?{w+: <"dZ.ݖ2nU8~;mt #_҃6ytTiy~ӨXªC#ѽ\R%. :-SpiW PP5åYiaj+!֪+@>Fmqb] dLghQ70Od[5̑f2^P="whRㆂtڳprYg8*ȴeZs/ YS[n$}4N!e<Q7m6e?N7 !] r ]_TZe endstream endobj 1080 0 obj 631 endobj 1081 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1079 0 R >> endobj 1082 0 obj << /Length 1083 0 R /Filter /FlateDecode >> stream xVMo@+`!HMJ=XA!j> F] xSho`ub8H Tx@a^ ;f5b{|Rѕ ,[O ڻK/ I&"C>($<^U!^'H{_NӅgJPȘgqnnGePԩ:j+WX],noTw%4H41Qݼl endstream endobj 1083 0 obj 635 endobj 1084 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1082 0 R >> endobj 1085 0 obj << /Length 1086 0 R /Filter /FlateDecode >> stream xVMo0+`cJ+!*=$h$nɩ-D1zy܂{gPCwTAa;SM"ooo)$KLժΒΦ1#)aLtIĂ.>07p_4`  Ҩ#1`J شϺ`ӕV:P9 #_;[ ՜\9"FuQ)ـA-5l+>=n\@(z:W额1ZBk9N´Az^J^i޾[D̪Ǯ1 )dcA`b:1 F˵^M0K|IAo2MMV*j:}X{ u~v^:7HDVMQ-4 /pfHvǐ;! Zyݔz>:Fsc؜x!g<1?5 "OOv5q endstream endobj 1086 0 obj 637 endobj 1087 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1085 0 R >> endobj 1088 0 obj << /Length 1089 0 R /Filter /FlateDecode >> stream xUM0+{X{knJ-jUgA i1Io`g1PBl&nY QbݬS7u~yG6#>zQx>އ0 l/ R"0o&+Ѧ23_aR;tkR6}H> endobj 1091 0 obj << /Length 1092 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 1092 0 obj 530 endobj 1093 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1091 0 R >> endobj 1094 0 obj << /Length 1095 0 R /Filter /FlateDecode >> stream xUKs0W=DJBB9t3=x´$j+63lHJ1&XY߾w'W~цú CC)@Iyb+wlXĆ"%a=8tI7ojb{W1ؒ t2HOr/ qH nlk2T g::]phj\>ծ^Gm4.>J}~?-"C\"䔣` d#> )A,&;w^gl`I4J)޾Ud@53IQ<K *J)g;sSw*hW )]LYD -l.۠D\ٸ4Fc`"c^2-YuWPW sP TekKҍjM޵sig/Y:>$[?%1X?d:ogA{ 24.ɕ endstream endobj 1095 0 obj 530 endobj 1096 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1094 0 R >> endobj 1097 0 obj << /Length 1098 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 1098 0 obj 563 endobj 1099 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1097 0 R >> endobj 1100 0 obj << /Length 1101 0 R /Filter /FlateDecode >> stream xU[o0~ϯ8Do$$"x2Fj.IKn6BRHwCXt 0 Y `v>n&ݽA3xq6X 6 }QlAޕ$j_/SF+ts*]P|0 SS1[kZaۆ\pcQ0&ƍK|zad(I鴬j@ ^qYH"8(q^SQ#)b)#{1μj{нNqpK)LY8c7JS]sEsԼT5kXpF7]f}T\ ߯ʁ[i }5gS#FYo:gyaZ2՘jyw`_E3b6z.Siy`';]z@vVd9肴^w$UNgrII8m8ϟ)9"~ҳ?Eb4XܒB:K7Tze{dM3;9xRnŶ1ʤ1Q| Gվ .3 endstream endobj 1101 0 obj 653 endobj 1102 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1100 0 R >> endobj 1103 0 obj << /Length 1104 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 1104 0 obj 641 endobj 1105 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1103 0 R >> endobj 1106 0 obj << /Length 1107 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$$rW:L0!dd[+@WBئ=5%ݷ) =yc0:0D`gخȺ؏~A`?tip͈~U0IҲQl/AB*E!z^>@5d2u!'PW<7#:pP&05\TP}^.Wufjt7F%!d207_qrbl ]jP-ظi}JO#yؤMFz(zvWU6TP@2$E,eDcgt:a[,t>TSaM㸄 LJa*3Re"U[BﲘɑBzIʴhA6#7L:Wʢտ۩"F Ob.!z(WV]5fgIG,x*Ir#…)lɜuj> \ŒQntO> endobj 1109 0 obj << /Length 1110 0 R /Filter /FlateDecode >> stream xUMo0 WIlY=lXQc;Ejc \]QR&Nb#)!b@>q8amc 9鮉%)0Ax怢 O[1 &:gTG>Gh-ў2 Et>"B7 C^u)Lm&370tbOV&y> endobj 1112 0 obj << /Length 1113 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 1113 0 obj 403 endobj 1114 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1112 0 R >> endobj 1115 0 obj << /Length 1116 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 1118 0 obj << /Length 1119 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 1119 0 obj 528 endobj 1120 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1118 0 R >> endobj 1121 0 obj << /Length 1122 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 1122 0 obj 468 endobj 1123 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1121 0 R >> endobj 1124 0 obj << /Length 1125 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 1125 0 obj 665 endobj 1126 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1124 0 R >> endobj 1127 0 obj << /Length 1128 0 R /Filter /FlateDecode >> stream xU[o0~WTZ=_@6=Lꊴ^UIЂI1Yc PMD}Ίv>i;;Gw}=5<W>~ QH>#QPJ} > endobj 1130 0 obj << /Length 1131 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 1133 0 obj << /Length 1134 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 1134 0 obj 732 endobj 1135 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1133 0 R >> endobj 1136 0 obj << /Length 1137 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 1137 0 obj 621 endobj 1138 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1136 0 R >> endobj 1139 0 obj << /Length 1140 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 1140 0 obj 644 endobj 1141 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1139 0 R >> endobj 1142 0 obj << /Length 1143 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 1143 0 obj 730 endobj 1144 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1142 0 R >> endobj 1145 0 obj << /Length 1146 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 1146 0 obj 665 endobj 1147 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1145 0 R >> endobj 1148 0 obj << /Length 1149 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 1149 0 obj 376 endobj 1150 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1148 0 R >> endobj 1151 0 obj << /S /r /St 6 >> endobj 1152 0 obj << /Type /Action /S /GoTo /D [991 0 R /XYZ 72.0 720.0 null] >> endobj 1153 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 237.88 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1152 0 R /H /I >> endobj 1154 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1152 0 R /H /I >> endobj 1155 0 obj << /Type /Action /S /GoTo /D [994 0 R /XYZ 72.0 720.0 null] >> endobj 1156 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 242.88 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1157 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1158 0 obj << /Type /Action /S /GoTo /D [997 0 R /XYZ 72.0 720.0 null] >> endobj 1159 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 262.32 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1158 0 R /H /I >> endobj 1160 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1158 0 R /H /I >> endobj 1161 0 obj << /Type /Action /S /GoTo /D [1000 0 R /XYZ 72.0 720.0 null] >> endobj 1162 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 259.54 682.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 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1161 0 R /H /I >> endobj 1164 0 obj << /Type /Action /S /GoTo /D [1003 0 R /XYZ 72.0 720.0 null] >> endobj 1165 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 254.54 670.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.998 661.5 539.998 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1164 0 R /H /I >> endobj 1167 0 obj << /Type /Action /S /GoTo /D [1006 0 R /XYZ 72.0 720.0 null] >> endobj 1168 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 259.54 658.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.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1167 0 R /H /I >> endobj 1170 0 obj << /Type /Action /S /GoTo /D [1009 0 R /XYZ 72.0 720.0 null] >> endobj 1171 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 245.66 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1172 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1173 0 obj << /Type /Action /S /GoTo /D [1012 0 R /XYZ 72.0 720.0 null] >> endobj 1174 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 245.11 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1175 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1176 0 obj << /Type /Action /S /GoTo /D [1015 0 R /XYZ 72.0 720.0 null] >> endobj 1177 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 613.5 220.089 622.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.998 613.5 539.998 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1176 0 R /H /I >> endobj 1179 0 obj << /Type /Action /S /GoTo /D [1018 0 R /XYZ 72.0 720.0 null] >> endobj 1180 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 205.11 610.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 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1179 0 R /H /I >> endobj 1182 0 obj << /Type /Action /S /GoTo /D [1021 0 R /XYZ 72.0 720.0 null] >> endobj 1183 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 217.33 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1182 0 R /H /I >> endobj 1184 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1182 0 R /H /I >> endobj 1185 0 obj << /Type /Action /S /GoTo /D [1024 0 R /XYZ 72.0 720.0 null] >> endobj 1186 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 222.33 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1185 0 R /H /I >> endobj 1187 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1185 0 R /H /I >> endobj 1188 0 obj << /Type /Action /S /GoTo /D [1027 0 R /XYZ 72.0 720.0 null] >> endobj 1189 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 216.77 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1188 0 R /H /I >> endobj 1190 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1188 0 R /H /I >> endobj 1191 0 obj << /Type /Action /S /GoTo /D [1030 0 R /XYZ 72.0 720.0 null] >> endobj 1192 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 553.5 234.934 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1193 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 553.5 539.998 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1194 0 obj << /Type /Action /S /GoTo /D [1033 0 R /XYZ 72.0 720.0 null] >> endobj 1195 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 210.67 550.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 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1194 0 R /H /I >> endobj 1197 0 obj << /Type /Action /S /GoTo /D [1036 0 R /XYZ 72.0 720.0 null] >> endobj 1198 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 529.5 195.665 538.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.998 529.5 539.998 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1197 0 R /H /I >> endobj 1200 0 obj << /Type /Action /S /GoTo /D [1039 0 R /XYZ 72.0 720.0 null] >> endobj 1201 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 237.88 526.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 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1200 0 R /H /I >> endobj 1203 0 obj << /Type /Action /S /GoTo /D [1042 0 R /XYZ 72.0 720.0 null] >> endobj 1204 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 244.56 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1203 0 R /H /I >> endobj 1205 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1203 0 R /H /I >> endobj 1206 0 obj << /Type /Action /S /GoTo /D [1045 0 R /XYZ 72.0 720.0 null] >> endobj 1207 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 247.32 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1206 0 R /H /I >> endobj 1208 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1206 0 R /H /I >> endobj 1209 0 obj << /Type /Action /S /GoTo /D [1048 0 R /XYZ 72.0 720.0 null] >> endobj 1210 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 246.22 490.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 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1209 0 R /H /I >> endobj 1212 0 obj << /Type /Action /S /GoTo /D [1051 0 R /XYZ 72.0 720.0 null] >> endobj 1213 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 247.32 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1214 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1215 0 obj << /Type /Action /S /GoTo /D [1054 0 R /XYZ 72.0 720.0 null] >> endobj 1216 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 241.77 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1215 0 R /H /I >> endobj 1217 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1215 0 R /H /I >> endobj 1218 0 obj << /Type /Action /S /GoTo /D [1057 0 R /XYZ 72.0 720.0 null] >> endobj 1219 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 242.88 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1220 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1221 0 obj << /Type /Action /S /GoTo /D [1060 0 R /XYZ 72.0 720.0 null] >> endobj 1222 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 246.21 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1221 0 R /H /I >> endobj 1223 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1221 0 R /H /I >> endobj 1224 0 obj << /Type /Action /S /GoTo /D [1063 0 R /XYZ 72.0 720.0 null] >> endobj 1225 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 253.44 430.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 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1224 0 R /H /I >> endobj 1227 0 obj << /Type /Action /S /GoTo /D [1066 0 R /XYZ 72.0 720.0 null] >> endobj 1228 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 241.22 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1229 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1230 0 obj << /Type /Action /S /GoTo /D [1069 0 R /XYZ 72.0 720.0 null] >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 257.33 406.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 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1230 0 R /H /I >> endobj 1233 0 obj << /Type /Action /S /GoTo /D [1072 0 R /XYZ 72.0 720.0 null] >> endobj 1234 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 200.94 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1233 0 R /H /I >> endobj 1235 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1233 0 R /H /I >> endobj 1236 0 obj << /Type /Action /S /GoTo /D [1075 0 R /XYZ 72.0 720.0 null] >> endobj 1237 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 208.15 382.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 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1236 0 R /H /I >> endobj 1239 0 obj << /Type /Action /S /GoTo /D [1078 0 R /XYZ 72.0 720.0 null] >> endobj 1240 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 219.83 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1239 0 R /H /I >> endobj 1241 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1239 0 R /H /I >> endobj 1242 0 obj << /Type /Action /S /GoTo /D [1081 0 R /XYZ 72.0 720.0 null] >> endobj 1243 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 244.27 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1242 0 R /H /I >> endobj 1244 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1242 0 R /H /I >> endobj 1245 0 obj << /Type /Action /S /GoTo /D [1084 0 R /XYZ 72.0 720.0 null] >> endobj 1246 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 264.81 346.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 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1245 0 R /H /I >> endobj 1248 0 obj << /Type /Action /S /GoTo /D [1087 0 R /XYZ 72.0 720.0 null] >> endobj 1249 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 289.25 334.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 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1248 0 R /H /I >> endobj 1251 0 obj << /Type /Action /S /GoTo /D [1090 0 R /XYZ 72.0 720.0 null] >> endobj 1252 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 260.91 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1251 0 R /H /I >> endobj 1253 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 313.5 539.998 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1251 0 R /H /I >> endobj 1254 0 obj << /Type /Action /S /GoTo /D [1093 0 R /XYZ 72.0 720.0 null] >> endobj 1255 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 212.61 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1256 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1257 0 obj << /Type /Action /S /GoTo /D [1096 0 R /XYZ 72.0 720.0 null] >> endobj 1258 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 222.61 298.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 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1257 0 R /H /I >> endobj 1260 0 obj << /Type /Action /S /GoTo /D [1099 0 R /XYZ 72.0 720.0 null] >> endobj 1261 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 223.73 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1260 0 R /H /I >> endobj 1262 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1260 0 R /H /I >> endobj 1263 0 obj << /Type /Action /S /GoTo /D [1102 0 R /XYZ 72.0 720.0 null] >> endobj 1264 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 224.82 274.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 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1266 0 obj << /Type /Action /S /GoTo /D [1105 0 R /XYZ 72.0 720.0 null] >> endobj 1267 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 251.2 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1266 0 R /H /I >> endobj 1268 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1266 0 R /H /I >> endobj 1269 0 obj << /Type /Action /S /GoTo /D [1108 0 R /XYZ 72.0 720.0 null] >> endobj 1270 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 239.26 250.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 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1269 0 R /H /I >> endobj 1272 0 obj << /Type /Action /S /GoTo /D [1111 0 R /XYZ 72.0 720.0 null] >> endobj 1273 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 263.7 238.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 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1272 0 R /H /I >> endobj 1275 0 obj << /Type /Action /S /GoTo /D [1114 0 R /XYZ 72.0 720.0 null] >> endobj 1276 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 217.5 205.214 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1275 0 R /H /I >> endobj 1277 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 217.5 539.998 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1275 0 R /H /I >> endobj 1278 0 obj << /Type /Action /S /GoTo /D [1117 0 R /XYZ 72.0 720.0 null] >> endobj 1279 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 257.33 214.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.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1278 0 R /H /I >> endobj 1281 0 obj << /Type /Action /S /GoTo /D [1120 0 R /XYZ 72.0 720.0 null] >> endobj 1282 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 255.67 202.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 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1281 0 R /H /I >> endobj 1284 0 obj << /Type /Action /S /GoTo /D [1123 0 R /XYZ 72.0 720.0 null] >> endobj 1285 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 254.55 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1284 0 R /H /I >> endobj 1286 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1284 0 R /H /I >> endobj 1287 0 obj << /Type /Action /S /GoTo /D [1126 0 R /XYZ 72.0 720.0 null] >> endobj 1288 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 247.89 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1287 0 R /H /I >> endobj 1289 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 169.5 539.998 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1287 0 R /H /I >> endobj 1290 0 obj << /Type /Action /S /GoTo /D [1129 0 R /XYZ 72.0 720.0 null] >> endobj 1291 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 245.11 166.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 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1290 0 R /H /I >> endobj 1293 0 obj << /Type /Action /S /GoTo /D [1132 0 R /XYZ 72.0 720.0 null] >> endobj 1294 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 244.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1293 0 R /H /I >> endobj 1295 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1293 0 R /H /I >> endobj 1296 0 obj << /Type /Action /S /GoTo /D [1135 0 R /XYZ 72.0 720.0 null] >> endobj 1297 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 225.67 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1296 0 R /H /I >> endobj 1298 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1296 0 R /H /I >> endobj 1299 0 obj << /Type /Action /S /GoTo /D [1138 0 R /XYZ 72.0 720.0 null] >> endobj 1300 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 249.56 130.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 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1299 0 R /H /I >> endobj 1302 0 obj << /Type /Action /S /GoTo /D [1141 0 R /XYZ 72.0 720.0 null] >> endobj 1303 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 265.12 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1302 0 R /H /I >> endobj 1304 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1302 0 R /H /I >> endobj 1305 0 obj << /Type /Action /S /GoTo /D [1144 0 R /XYZ 72.0 720.0 null] >> endobj 1306 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 226.78 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1305 0 R /H /I >> endobj 1307 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1305 0 R /H /I >> endobj 1308 0 obj << /Type /Action /S /GoTo /D [1147 0 R /XYZ 72.0 720.0 null] >> endobj 1309 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 245.11 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1308 0 R /H /I >> endobj 1310 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1308 0 R /H /I >> endobj 1311 0 obj << /Type /Action /S /GoTo /D [1150 0 R /XYZ 72.0 720.0 null] >> endobj 1312 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 73.5 201.179 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1311 0 R /H /I >> endobj 1313 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 73.5 539.998 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1311 0 R /H /I >> endobj 1314 0 obj << /Length 1315 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 1315 0 obj 14737 endobj 1316 0 obj [ 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 1306 0 R 1307 0 R 1309 0 R 1310 0 R 1312 0 R 1313 0 R ] endobj 1317 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1316 0 R /Contents 1314 0 R >> endobj 1318 0 obj << /S /D /St 214 >> endobj 1319 0 obj << /Length 1320 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 1320 0 obj 489 endobj 1321 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1319 0 R >> endobj 1322 0 obj << /Length 1323 0 R /Filter /FlateDecode >> stream xUMs0+JC(vTOg21S,Iñ1&$ƃgc@rc ?:X  wnG>|AtxoO{{w 7bD~(nω[By6I)% &>!MUP$iiU}ykrԬkvkKA)hCp@PRJ^2+u}myHV6f9|J2,X"4~ɹodZ-+P)j ) 5c왍DQIiSry)b)#wA纞8Zr%,ҢQX2 b@Aujk>?UP:V, 5Ut=!\:ݩ!`6XlROO/TZw=X^X-YVQ|]q2yh:y*T ,E|8y3*}1s(pRz)Ra@gT X~=G&\$>:8 Ϟdשׁx endstream endobj 1323 0 obj 588 endobj 1324 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1322 0 R >> endobj 1325 0 obj << /Length 1326 0 R /Filter /FlateDecode >> stream xUr@}L,0I%)*Sv *0Kl}zXdk#9x<{ұp6w?8h2q?)> endobj 1328 0 obj << /Length 1329 0 R /Filter /FlateDecode >> stream xVn0+!bn-@{j=AL,4nReQ&a k wvv(}ub8dྍ1DbQ ,${ _Yg5:em_Ij;H88%m+>*1(e.iC2X=&[4 ɜ@ gRxf-E(pŹ1,~4+(l΋[ l6a߆MæX}w׏ ٞvN QHGƆ6vmg08ˑ9> endobj 1331 0 obj << /Length 1332 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 1332 0 obj 474 endobj 1333 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1331 0 R >> endobj 1334 0 obj << /Length 1335 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 1335 0 obj 488 endobj 1336 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1334 0 R >> endobj 1337 0 obj << /Length 1338 0 R /Filter /FlateDecode >> stream xUMo@+1SFF5VYjMEc޾yoGuimyb4OCA<(^}b< aoN |tn8vxF a\HpdK1\"c?aon]>P%X%镉]55MhguA ( AADr(Y-:i9gr. QMeJE7;% -Wo!ˢ >>}eS }:1/U:@F-hN$S$U._1v,]-[sw"I:w ֹĺ%^h3vG],g0YuRqbEnKLkXueZ?.U?7,9geO9e)~5]TCZroFy͏&fXH!< 9Ņ)şhǰaBOKfl"Q'"/쪽~x endstream endobj 1338 0 obj 556 endobj 1339 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1337 0 R >> endobj 1340 0 obj << /Length 1341 0 R /Filter /FlateDecode >> stream xTMo0 WQ,Y=ۊԠv!M@bq~?q\q`z|: xh0@." HY. %O0XV]kۇ@87௨õ+1%*7{q/#PݳFKC{ObɇAOWE:\H2~tՊ>X*Jj⿓UL*pgB鸭 ⭎Ae)nӲG20KO/kLr:CFT\ˑ V0o"'1\ZM\)zUZpM<źʖjFz{o)IŎ+^E7Fס~NNq;<=#ECˋPvzسap^]MVlӸQګ-){|/;v[dpkgè} `n_2Ǵ 2 h"ut& endstream endobj 1341 0 obj 470 endobj 1342 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1340 0 R >> endobj 1343 0 obj << /Length 1344 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 1344 0 obj 476 endobj 1345 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1343 0 R >> endobj 1346 0 obj << /Length 1347 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] 5I;]k_U^:/ňq,Wq?p93Ï("v?L!rbg<:Drr~ endstream endobj 1347 0 obj 496 endobj 1348 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1346 0 R >> endobj 1349 0 obj << /Length 1350 0 R /Filter /FlateDecode >> stream xTMo0 WQlI=ۊvM@bb~i[8=>#9-{0@cHD1)rp~q_YoV0KvsЕ#xfmxDC.{![$WpI-|^&AVu|+}.B~A2̑@ȵkCV@ڕwysw&ED@G6@hMXC3G}y&5yM A, .@AE48:Rw(:/Vkc2-iք9yA?J~lPwBiuN 6;Y> endobj 1352 0 obj << /Length 1353 0 R /Filter /FlateDecode >> stream xTM0W̱=;;vJmQ{خV%|$]od^..̷8mJ,(#)afa0xøcS|v!lVSxxdtxE%NŤ'ߕ6O_PFKC{ORA*,Np,ߗK)V+zgN*}UʪuNV3v9㶺4:="Ɨa7 ek,""{*<%w]n+ȷa\Mʅw8ث^ⴝø.\r9p#ZGcL0$ۉ.Rʴ3YƮ/BT3 endstream endobj 1353 0 obj 477 endobj 1354 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1352 0 R >> endobj 1355 0 obj << /Length 1356 0 R /Filter /FlateDecode >> stream xTKo0+J;slVm8YT6 c^ @=5f?< Km`T4dԂB{//[we ?*@\23SЇA!jCx>%ǯ!HZ&m% PdElUvt;Hm|$f7쪫KI1j Ӂ9 aY$M vW߹fGE'1h$FG>(e#C{`f6PTUi >H\Ӹk"sfYڢz6O[M*O ̉< ˠȓemS4=šڈ$1Ki%V}iwSVyVj#3ΩKwv#Swu]bN"K;֮]ZO{dz$rY'=wbmDXHhۇ\\~K&""1喬^(KQ\mq3~C ){bΏ{]$x6艢Y_DjR endstream endobj 1356 0 obj 549 endobj 1357 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1355 0 R >> endobj 1358 0 obj << /Length 1359 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 1359 0 obj 509 endobj 1360 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1358 0 R >> endobj 1361 0 obj << /Length 1362 0 R /Filter /FlateDecode >> stream xUMo@ﯘcsv1SDIl1XV}gc&My3t_X {0F ! 4- Kt;د-!|g`p=M҆Įc[!~ܗV+J WҺKBO7y:,5IY=?򃙝4MHz ogrAwQ j@K.ҫ/&tS8- QQE@!NJs5oW- `[,:s&a:Ǧ넗(cjnMdm(tXb!Q?ZA~'MKY6< 5AC2"h~|y .[懴lvy7N l*6:+Y2.eig m9-7B4bʻhzGkua7'YiE NI);W} endstream endobj 1362 0 obj 524 endobj 1363 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1361 0 R >> endobj 1364 0 obj << /Length 1365 0 R /Filter /FlateDecode >> stream xU]o0}W>=LևX,( P>g6@e-|>~ `}_AH }8`B$pDC , ^a3cgg?n!^6pݽFW px,F7$%!Y?YK))1*E!ݻFڝ IZ5!|NN}c]-l,N+HXhe =UhPbKYuA]Umh8E0^Υ8:҉CMT ?T;RiVФbrhKX4묪hr cdd("(9EYgO$GRRF4I3|:T+ݵꨭ źK2F<,61G (1kѯ9&[''nzAeP7(9LrtUePVYQeĔhc7)p&OSWCYdygSϋ?cK 9Bl~>9Z^/'0Q|rR*쪹{ endstream endobj 1365 0 obj 555 endobj 1366 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1364 0 R >> endobj 1367 0 obj << /Length 1368 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 1368 0 obj 408 endobj 1369 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1367 0 R >> endobj 1370 0 obj << /Length 1371 0 R /Filter /FlateDecode >> stream xX[W8~ϯ9-ePBPzr[I|p$vHߑbӧm ğfH0NěnG+<,e:.2m8(\C'X%?edm{lb؄QGߠQsab\x]RU7g1ĞNQ,_3QȷiB jñ5;xp]Wp/yP 6|o "c )i˰1$sh1M3ܱ(De2^ El]Q| E MiVqBpNw4x63o7;Ј>`Kj(!\Fuys8)x$HQxcj ,"۩-hVEFV6EN[ʊ|8 YpN,:lZTqt!P<"Vc]~5]ձe^,Vׇp/׿v2_>7*^#s endstream endobj 1371 0 obj 1327 endobj 1372 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1370 0 R >> endobj 1373 0 obj << /Length 1374 0 R /Filter /FlateDecode >> stream xX[w8~ϯ۶Pc˷^.BէTjE'F&_6iN&{ؿUl6L/}hRY3ESőhC_^]>@w[oAP4V~>GM@+`e' DvB1gE  #(FQ41v-sO$BSӯV0(ԠuF6哥s!LI):G؂V4cMz=_~]o.3MmkcMȺZtH'lWdJY/͏z >/̯Vp-9_9TiX)IxZQMy`LP3lb5`B>OJ3Z~|F)]5r{Xt$K@LofuR dμn0ZTr)H' SWu[~7\Ҳk6D b:y"`{SĻ}XK}ЎbW$V/kI ZYowoo[@XUMFW$} TL[4.:li3iU#imZU*b#ߟd)Ĩ>|/N ؕxڂ>K 2@+I\4 GkpW x>!x װ (]<>hq4נ?74'U3 ڇC0XȊx ʉ({YҰSO8R{5 mg+1-j%8VnE;4[úD3zy nFM?G2:8P/BjG4l,h""ĶY[&(*5FH!EiL2$&bF2Zbyk>ˡFU;{{N9Ѵ CJ,\m|ܱl&+k-}QhdyjESF%<9}kuJ}2 `5Z=V'۞A+hbyAbYVXɍEӛj3W*ʶG2` :9D\,H7(4;y(#0 pNW<"i^7 ,bw$h!X} أb쑛Fimquvs?j,.Bf>=Y.~gU 7, endstream endobj 1374 0 obj 1407 endobj 1375 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1373 0 R >> endobj 1376 0 obj << /Length 1377 0 R /Filter /FlateDecode >> stream xXKs8 WLRԻ$uMqCmk+SDI,rOI @Ha\// (NK<,Pd:.2m8 Z/|#Qoi\}k 2N~ir'\x?qVa\'/8hjB`oX$?ͷ ݇##L;ft~0w$?(Ԑ I~=C!<%ce! P֎0Ye<]WTg!r2cxtn&1-M);yFδڊچۮݷ@UQ9+*fa=JVrZ5C?Z3VicGTThQ3)dt]?Rg~V +QÒI$>$'2־iVE dĮx~Z9<9i9Mg"<0oWJn 0`4b|`X13RQB9} Vl81C_#]`-PD!fd8*z7' d<5wc  {l\, 2.`HEMvoU)ip@N7-AW,J&F S"![InJx4XNEBmTǫJ)l>> endobj 1379 0 obj << /Length 1380 0 R /Filter /FlateDecode >> stream xX[W8~ϯ9~д.KhIۇғJő~GoOό=>zXȄϙ䩒Y(,GkY_@ .Od.mW%2kbND&߾4eV|bRh=O{2|զ62<3/Dؑ|\}!.#4Aˌŏs~G?&Q']J$NHa+٦ʺGF1S^%y6e2? ^&*?#9wCچm9iXFZiXbZy %o%bI>!+%6'F=(G! V/?i/(/eZ֪H>"׈Ct,:ϖiQVlGvr( 3j*%_$G FUYJy8C|C4V D)O.滂ԷD<>#<_'G>7&y2ǥH"gL!`*q!R/,@(UQWܫEWn$ D CH[Bz@piOJP㌲r܌[}$hfs11 dRuWqʡ ð-bF9Nif[S:@M@8PBR];E'WXjO1`[v "m{8էmUׯkS1(@2׳|=vÖ\U m,+R*])ؾmpŻ7VU-WpvY!" NgAvM?%ѤPXQ3B~a]-tj6u-xY/ _n2)؉ے #%.goTpl xlKs;~Zuqw'+PRBO19^tvw;kăVNeWec]u~uWiѴ"Y>2Y k"di؇sL PE͹eP3Q1 7\])k2X(KÑlIʛJ1hD}fj@U'j_ j WY*,S${yv a4a&h*^ŨSՌKq6% ( =w$|R)v@/1҄qP-$&Cg :m@"4N' Z ⌔hAX0W4vZwH:I~_0mg)*>Lg,HWVўg皚CJJMq|efu?` R~^0O5*<8D9OΪ :3[ endstream endobj 1380 0 obj 1427 endobj 1381 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1379 0 R >> endobj 1382 0 obj << /Length 1383 0 R /Filter /FlateDecode >> stream xX[w8~ϯ۶P] xV#4t$v,ݧgƞFߌd,d_F~v,E#5lRT 0xO*E"vˌLzH{0 Dr,-7]j#s=>! ǎF=zfnI3@ ^$7k6_ݱlD|¥@ !Prm/x4as<[/R&  5) k嘦yZ}w D; zDkKіPR IKW$A@jOBvA}-.o)˴TH"׈0|;JSnَ6qi3@WikݻQ:!' T*\lIӘL;ie AޯtU;8D\*aժ$i@HtUҪD!3amX9*eu\QC+ o ):xltrc:"*aL)v&L ;-7(H27d5>VQ_k0_KMbWD)ÞtC=9q"iǶô[MaR\<"D nJ cUoW/߾y"hj8K!뷋s73#FJG ؁ w7uoHYu ݳSh!nW.on{)[(.$kydmyX~i%i+[:YQuoh`r7!Rs7]õ-x,{/̼ѹE{.@#&?p295_ӥ",ɳ_Uމ endstream endobj 1383 0 obj 1429 endobj 1384 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1382 0 R >> endobj 1385 0 obj << /Length 1386 0 R /Filter /FlateDecode >> stream xUMs0+ʭ~LzI0!xc 6tdǀqNMCoc8 (&ٴA|`. fԬHϟ7Kd=1upxL:BF:_<`ZE<ףx98+{w}󥎷. bu~s>G XZ_$?Iv7W8%_T"1.򙾺JҺEt4xZVSp&(eX Ao)N&͹8#@,NQ&NJ@:6/V[0x')}x'\,_Iij!@) 5cĥ߸3Jk(ΪIqR>NWџ8u"~B"DrD2.W8fHr<}5ɩ`Iv)!ۮf8P^Z8f'f4w<*̈=;ܯy׉SUy1͢gvkmʾ ۢY@g,U^3ve$OJϥ#(5C^t10{;9JCaG[-]5?-. endstream endobj 1386 0 obj 605 endobj 1387 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1385 0 R >> endobj 1388 0 obj << /Length 1389 0 R /Filter /FlateDecode >> stream xVr0w,H!Ȯ>&]4Ii#[JL 0Ht=ŀyQ"0_Yc 81\Cp͢@9 ZՇsڎ5D~ZEuB܅6o!+muF!|Rq)>AypWpv}VXg 8/Ps]?@n3bT*U'qirPS"KfnҙҼT*5f,u p™M)"#%ն9E{ :`$1BgYg2ת{4i7eqv!Iv&xB](ڈ S:F4you[,*(ωyeEͿ%: ԓQ5T%O`Kl,-5 pN*.dbh:?~L`ކ0c,4&r%BC[kHZ[0fNx:XQQچZH)u`AUsװWOTTbܫ# #*ʗӕf{OHv5nRf˧|\Ei#l:(9zX^Bo6:tdihm;6o()՟7jyqXu endstream endobj 1389 0 obj 670 endobj 1390 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1388 0 R >> endobj 1391 0 obj << /Length 1392 0 R /Filter /FlateDecode >> stream xVr0w,kIM0"xdKi0؀Gଚ}{5a@> 9,ζH߇s Y}P;#fwi;m_VI _kD5sjs-ҙ*6 9we<^N|߷喵ˇ4qRÑ2P((j֡Z l,R ["0?pPzHɱ?lq XNf)ꖪo1g$^Y>?aSEq~z-Xܤe&Ui98z: MQHڮvʞwӮOHi~+MniϦ*aPb%B[/p o6s({c&î8ؠ.'R%ɄjGGEq endstream endobj 1392 0 obj 673 endobj 1393 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1391 0 R >> endobj 1394 0 obj << /Length 1395 0 R /Filter /FlateDecode >> stream xUr@sL^XַC\(TH,b^d><$ $_bJKgzb@>3Tn1p!lbϨ׻?nm =ZYw;d5:Ԛw½ٷ/`ZEۡxy8 ~bM qx /uWv;}RS֝#INÆ5JDb= J:&Z"닋(+;g,c]pVF_Gށ gR*(4Qw8jfFaߜ>A2*t O+B]Ψ*ab=$%dtMʎl˽N)a\rMԛ FnDC%̖l$6UMұ~ AOU&qjkȖpu~ ],XlBUxoqQ~Yˀ)FG~> endobj 1397 0 obj << /Length 1398 0 R /Filter /FlateDecode >> stream xTMo@+]ͱRSFQ{H# uvc?S@1of13},J XMqP\q.Xhy_ac/hBY's8Ƅ{t,qLF )to=YZ> endobj 1400 0 obj << /Length 1401 0 R /Filter /FlateDecode >> stream xUr0w,eNNh5.Ҍ٦`#+N ]4189 (vb cy>0pE;93joڎ5Dۏ5|s2{q\K:N EFa W0 AZE<ףx8~3LkS]@0O- F[˳?:£/,I_岪$$U9M JVA+UX/*Tht\_\$i":eg9+nMI ]Vl`\N82/Bm`sN)vs.1F:8Ec~UјdEiv4[dR.Q2PAMs}ba\r+~R421~,̕\$[Es;D?RA[$BEl˗Pu+x+vex=ڗfm.L=ɞJGSH+c.6z4>RZծmdO8^Oq=e26]е<@mѦOZ $8:NlϬ endstream endobj 1401 0 obj 573 endobj 1402 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1400 0 R >> endobj 1403 0 obj << /Length 1404 0 R /Filter /FlateDecode >> stream xUMo@+/X6Vm Jidai0؀w&`yу7hv0xEiӅj0!z$.5 vg~T_>v!>ᗓ:9wFZ3Js_(k5qK'k{qpnsCF0I# ”!| .g{UU'q)RhTn)Qe~ AƧeME[2iNf6E؁*H$' JBwsA\.͹.<7) D5㙢<뙪cllYEKђhkq&ފ!- ݑ)긷aܖBZT ;"'S(? ʹNNi=nͲRqu~ m,ܤedUi։J ĞϒLܧl:)9"Y{/HiM)=b-!]/&8{"Q_PjbasU(Z.]_*/ endstream endobj 1404 0 obj 607 endobj 1405 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1403 0 R >> endobj 1406 0 obj << /Length 1407 0 R /Filter /FlateDecode >> stream xUMs0+ rkM'=4IiƃAi0`wŇbݧv0xAiYuAxs=`pE;#jH_>~l!?,987ƈzs1Bߔ6 w9>uQnĕ.!Xs&^0a= Ee7|u>[s_4JSYN J5+_BPc(99IwkVadIfQ,RSxVTk;*!}p&(e8 mMD.%Ţb\ NT0L~FZ}t ,Sxg-Sm˧,/gaD+_k-\ø r|#E*L3QXxZjHjvwޒ2ptNOqRϖ᯼:"~B"4DroNIvH D9)* V.d1RlzaVPIVO' ICX찂7SѨ8;>>D4Y>yjv8-eDǸ]ؿk&**NlXɩ7l5!J:qJw3JmCv-?tQ{=1[,{+jKM endstream endobj 1407 0 obj 638 endobj 1408 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1406 0 R >> endobj 1409 0 obj << /Length 1410 0 R /Filter /FlateDecode >> stream xUMs0+ rkM'=4IiFi0؀8&ౘӊ]9 ('vPlZ ]0Ipâ݀ 3zgڍ D9r27q&\G8W=!]ip|snk&t)^>Dpm/n>\\d67:5DY 4=A,M`gwZ_$?Er-(U^ (~TFDӲȧ,έ*!&} \0)[Ar™1,4qqΉP0oU p .gRv#Rx+Tje=FhIߐw`L HM(EnD!C-L*RkU|In&S_5bG*$"1my2p{haƓ(?b3Vs edxb_,&5QanͲVqqz ],dUEGonKȔ"YVI}Dr wiav%2>F6ʠۻ s)_mo쪽NH endstream endobj 1410 0 obj 633 endobj 1411 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1409 0 R >> endobj 1412 0 obj << /Length 1413 0 R /Filter /FlateDecode >> stream xVr0w4^ ];m:颙LH3 8}%I 6n6MsGW=؞GnBF@P`6DGԷp`7vodq?o3Epz̻TlnOw|]?I+}lBĨtha/ut $,+y_o,&eSIjbD>jŀb$l=˾*,(bө(>9IWk^*HgwR7z۱41<N% cb{ah-?ڣ oJŐp6V}>BC&FA8Dkj`zRH hؒ^T421O8k-TL8 B.eՐԟ;D"~Dh`rȯ{)t)LTGP OIv&CImҎfZ_E83}꼜ғqRCPhz[oR:{m"Ɂ?|8廥@jTСSSO;Tݎ.j _54 a ݔ*.ӢNs31XڥM eHnԛXJU!V58E B]}vqc9; Ů'!6ҨA^0?I (6WV՝Q`! endstream endobj 1413 0 obj 674 endobj 1414 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1412 0 R >> endobj 1415 0 obj << /Length 1416 0 R /Filter /FlateDecode >> stream xT]o0}WMZ=`ܽM[aST=tUEXKikiZ@8pWN_AȖj 2B"@(! ~3X_>~ ?WWׄN !`WUqECr$a 91LB7_e6VS] 8I6o!|NKI[_uҥYkPZI@4lW/ThH1ѩ[{~W릩̲ru"^Š jHЅa%a߈zp*[BeWk[7@W`f~cA9룻ȗyQ֮F1cc";ҨcJ8%P?3)az4be&㴤ju~r6o߀gP;hZ@YL̄oB}uVqE>YDd aogvm-m4ϋV.4B7SdZ{[ #?B/r㛉{bNOz)x0QE' ϿX endstream endobj 1416 0 obj 552 endobj 1417 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1415 0 R >> endobj 1418 0 obj << /Length 1419 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 1419 0 obj 635 endobj 1420 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1418 0 R >> endobj 1421 0 obj << /Length 1422 0 R /Filter /FlateDecode >> stream xTKs0+V3m:f<+1S0q+!S`i}|Zvp@{_EilE 1dZسpX,Dg쭟zSp{gѹC@DM\'8B$f ^1LvAw4[y45e ,Ucڋ;HQ}ׇ;XNqCi%)eʂ*&:UuyoԚuղ{^# cĈ Dn {G.wCCg?Ծ)?n 7ym,L>PiӔYf>![> YENNe@G$ВikQI/\HvG {. a\*Rke'ʜ<;N(_-h̋|Hy׳ug?jZqϨcƅۑ;`Ϋ6/s=KDLG R%wZf_ %n} ? zɜQ8x4I'+2pe endstream endobj 1422 0 obj 532 endobj 1423 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1421 0 R >> endobj 1424 0 obj << /Length 1425 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 1425 0 obj 337 endobj 1426 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1424 0 R >> endobj 1427 0 obj << /Length 1428 0 R /Filter /FlateDecode >> stream xVn@wH5,TvFq Fa`ؖ8yf|,  }CIa=uu=\[/^D<=Mk ~YEuh Vk'Y@Ȼ1@ DCi]fG!9 ATݧm-D߭/(ON;󶉯q٨Ƿ܎7.}T԰6`]I\:3;,P"msNPLe\‚v57BuLsw0pt,t/`ծ,q3Y@L1u=*ɟ:dh$-,LNԪ;uX-^<-uw~)H(cA2v331螈^8vC 0Q QtyCGYy{SiVDd̿n`o5X P©nơ̇aĺ2ӣV$:Md[_LƺppCJ+>œ1'x~!5^k9O}xv!?!1> endobj 1430 0 obj << /Length 1431 0 R /Filter /FlateDecode >> stream xV]O@}WGM,3ojujAM0 3|0ti5Bosj u1+@12, S(^x@\ +j=ju7R /GC]Zv3Hhgv|i[nKkaݱ8:xaVppw~7_<|vI ySWIVunU t[˫C왝Aq/(N_t:6BߌjlX (i1C@u8$ˡUf!$$ao,ja+"*;Em ژ#E\Pw q];5ho%T&fMRɆu\W6Lێ麔ۦ앃fdsx E  Üdad%(H7mr1-آ(u% 6y*tK{[ġ%8l:C&Y+.enY,oGDC6ODI#y2,)&"1ڑa 59?QS1fil{goxco endstream endobj 1431 0 obj 829 endobj 1432 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1430 0 R >> endobj 1433 0 obj << /Length 1434 0 R /Filter /FlateDecode >> stream xVr0w4D,v . A5+J&馉XsϽGУEq b0p|< (2 P$jFgiBd:o|1c܃'kH7oY!]F[W<^Z١OSmE .M˻{Z_>Y7>M]:7 tp:P`0BuQF+~}fE9lFB(vq~̱=O1a,%5L\M; Rl5W=q ]S҅Igz}e''-\M+ P)r(g2YTҢ;J$49~FQѠlV/.'cP1*4"˴~4K.eZhUsO.WPo/%:x׃MtBЙlE_-ŏowڥI.$:Ql`g Zv Qv > endobj 1436 0 obj << /Length 1437 0 R /Filter /FlateDecode >> stream xUMo@+H5`[U{e":րV] `K,=f޼< ]d̼]Q xԅh |"\H `}k n#ŻGtx:\KyӞx>$!PڐqD(>g^ fg_!I!}J:urXSϥt]'|:n}/^z %KxP77Ծ.T^Cm k3 X9>4?[£h`ΘM*!^M6A0jWem,@g eMgb[겥"2bqM:QXRʸ#ݠޖIi (E.ʜ&FNђ'˽1Ukl WʼzeEE}_LYxM^(P!f yz y:_&K+]qqũzeVyAuc5mW珣ʰOږ`ېlfm uqn ;y#ͨypHǡJs=_U{ h endstream endobj 1437 0 obj 576 endobj 1438 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1436 0 R >> endobj 1439 0 obj << /Length 1440 0 R /Filter /FlateDecode >> stream xVn0+EkMi"ѱKJ$iCJBLNMlCG|y@}8eWh3ѡg!4E]OڱѻiLd_^]ߠ@{n^yF"MF>@ ,V;jC'WD!9KՋwWW_awBiqP'y!j~b_KP<6ny1Sdܷͭ8?Fy/@ AP,\l~`'xj{Xlƨt=tc[ЋNBVVM r-FoTW$991Hiǣ^+ ~'id KN? V2!1%PjѠuecsPխh1@묮B#EaSj8;W- _d2G :kg&(C×,+ҙ1*uDCYC'.=g<4mzw6BBS,-I{V`>Sqlj\,;9)ղV4>D85(r`ku`}i:I0SH,9X Ń:ƺa`>j`jhxu ?Ӈu᝶ܙEƔEي\Ѱ* ?y¦Oǵ\[ySUhjXzEmXL+xKQ:i8;mg0 dDUܴq5^2ǧXA(9YU! endstream endobj 1440 0 obj 782 endobj 1441 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1439 0 R >> endobj 1442 0 obj << /Length 1443 0 R /Filter /FlateDecode >> stream xVn0+ ˇ$9hRCdɑ.c=D2LaI>x (Wfz=1C,nP0`}E͌~L a?ܣŻ=l6Ȗs'a 10׏l0̀ F8G _4ߺˑC aUq2Z̿[N &YE! ޛ݇u>co(5[hkMj_\1'i L`,ª/HK endstream endobj 1443 0 obj 583 endobj 1444 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1442 0 R >> endobj 1445 0 obj << /Length 1446 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 1446 0 obj 377 endobj 1447 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1445 0 R >> endobj 1448 0 obj << /Length 1449 0 R /Filter /FlateDecode >> stream xTMO@ﯘc{`;;ت a!Ē$?a;S˾y&`Ob݌=K >$87,%O0(ݻح ~!̚pMz }Mٗ3 !-bKr"Hgp)MC-V~{gS `6'u~d4ΙMY$rj4a őmE?=]_xQmYFPIHD,q!o(5'B1|<dTX/{YYyg@F`WUl⥚/VŪNqg % g REɆ3+F/ $9&U{estCnqizqf|E|@ NM70wLoA$Ij-q>XS`0/ÓF@\}E endstream endobj 1449 0 obj 478 endobj 1450 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1448 0 R >> endobj 1451 0 obj << /Length 1452 0 R /Filter /FlateDecode >> stream x͔n0EYCR, 3"(, a[ }e[kD2LGw @od&@KPPq"2&9P$ߠQt/~!`Iᕅ[ U3/c9Xq Oil׸?ٷtЦ򃵹,E#yrVõ;\ӂj-m7$B! a@' oc@,gEqd, 5-5TN߅ KCQ(A򻷪5ۦGL6Vki4|QH#K++$4OLdEAUV#|&O%:E B"y]Y^6bgE p6$tpkN9gWc #~jfp\=^9UÎ endstream endobj 1452 0 obj 475 endobj 1453 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1451 0 R >> endobj 1454 0 obj << /Length 1455 0 R /Filter /FlateDecode >> stream x͕Qo0+q{w}ܴM[Tij.N HZ!@(F|~` ?+o1F㐈5˘-@? 3f3vca X[)3k_ׁWl5Y!ܳ)-nƊѐp%$\Hߐfo!4,UF4Mƽc`_:- M5Tuq./lj@$ QP !ZG\|7R) [Tvx[wV>AWL7ȵ>qӾ]ա65Z&-4IuI(J%R-3˟\#\("uYkhWOUg;"뭃jnZ;^+s:xL57Y\9絞S6Tqz`/}2vFc-PKTuQ{uѿbΟh#y2:dlbo\U endstream endobj 1455 0 obj 516 endobj 1456 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1454 0 R >> endobj 1457 0 obj << /Length 1458 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 1458 0 obj 470 endobj 1459 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1457 0 R >> endobj 1460 0 obj << /Length 1461 0 R /Filter /FlateDecode >> stream xUMo0+m8JmVA4X$6,U}ǘܚy_<HmAg" ر`E;Fu>rUw=7݁x-BCiCxop8;YH^*I% ^ç8 qٚ"MKsBvE#Qe<"A STPPE&sdȦm_YceU?_0%"G GКjL#Ҥ,  eQe KMTD'ah Pnתl큪'2>*:# R ȅd> #Lʝ9ƣhW,|BGKÃ)BHj ͓&I[lnMK`.2Fd8"yҺjLjlIټ3gEidmx6BIFTUA%9nP&BLϱw8 EY!~bR8p!z*ϻ endstream endobj 1461 0 obj 532 endobj 1462 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1460 0 R >> endobj 1463 0 obj << /Length 1464 0 R /Filter /FlateDecode >> stream x͕Mo@9l ͱR[7+UD n}gظ&`ygߙac@q{c (: pc ~xGw>nDʍy>(DZ_EݡEO̦Gy2oE_+6 Ǐ"m,N{G-8% UaP9wdSmӼ6m;g+Cp&(eX:~O1G)M`%@akYغ6} Cg#%A\oP}z-V;hZ&H):ɷv/SM& B®hx-heu T&nlU%9z4_O`,ilD'X*Mq;[ ٠nG1}Vml|SuB2 ?Z̅?*K'vCvE7U[r&w]mO8˯Xƍ3>aү_ /JQx1~dyd.!dO  endstream endobj 1464 0 obj 580 endobj 1465 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1463 0 R >> endobj 1466 0 obj << /Length 1467 0 R /Filter /FlateDecode >> stream xTn0+mqJZUiTfXvH}6FO~f2H_pb`$(}X ,woob 91<n ^(|U!ܱ){)~6Vܠ+i%!]4ii\/czP򕕹$uwLlQ j}kh!В9wdS˶}⵻+g"ɥP8Ƈ`GR!"MҌ  %%3!+KU)C[E!Cʗ,}01 Z{+L|T7M T;S5Z&4S)Q!PT5+N"2\'Hёxp*[%9ftذϞv>/8 r:.bg3e#vQI)+Ԏ[:vh~~8s?'c0&c9>Z/쪿YĠ endstream endobj 1467 0 obj 509 endobj 1468 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1466 0 R >> endobj 1469 0 obj << /Length 1470 0 R /Filter /FlateDecode >> stream x͕Ko09~`ت*UDz+Yy-`/ͩ h1b@p6豋1Tb%[/7״/+*# ߣ[1.9j׃WjF!FI`ͩRMݡ$Dpi7١[HD_IwY_l6 ǟ&YMnCYpJ4nqipƠ∮"^^ 9fm+(l@ gRY1CD#o8s#;Ɵ_> endobj 1472 0 obj << /Length 1473 0 R /Filter /FlateDecode >> stream x͖Qo0=;ۀq7mmڪbD"&ْ 8MCxZ Q.s~8 WvPZ"zbxH(R ~_l>F7!t3US'9&&jnyS!D2P)dL mnwȋzm6o!}OlJ.^I3F)AŚʙ֎jHqjVEAMɑ]F򇹾lleML q`KDN&4> endobj 1475 0 obj << /Length 1476 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 1476 0 obj 513 endobj 1477 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1475 0 R >> endobj 1478 0 obj << /Length 1479 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 1479 0 obj 512 endobj 1480 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1478 0 R >> endobj 1481 0 obj << /S /r /St 7 >> endobj 1482 0 obj << /Type /Action /S /GoTo /D [1321 0 R /XYZ 72.0 720.0 null] >> endobj 1483 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 243.69 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1482 0 R /H /I >> endobj 1484 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1482 0 R /H /I >> endobj 1485 0 obj << /Type /Action /S /GoTo /D [1324 0 R /XYZ 72.0 720.0 null] >> endobj 1486 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 244.25 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1485 0 R /H /I >> endobj 1487 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1485 0 R /H /I >> endobj 1488 0 obj << /Type /Action /S /GoTo /D [1327 0 R /XYZ 72.0 720.0 null] >> endobj 1489 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 242.59 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1488 0 R /H /I >> endobj 1490 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1488 0 R /H /I >> endobj 1491 0 obj << /Type /Action /S /GoTo /D [1330 0 R /XYZ 72.0 720.0 null] >> endobj 1492 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 251.48 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1491 0 R /H /I >> endobj 1493 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1491 0 R /H /I >> endobj 1494 0 obj << /Type /Action /S /GoTo /D [1333 0 R /XYZ 72.0 720.0 null] >> endobj 1495 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 264.81 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1494 0 R /H /I >> endobj 1496 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1494 0 R /H /I >> endobj 1497 0 obj << /Type /Action /S /GoTo /D [1336 0 R /XYZ 72.0 720.0 null] >> endobj 1498 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 291.19 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1497 0 R /H /I >> endobj 1499 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1497 0 R /H /I >> endobj 1500 0 obj << /Type /Action /S /GoTo /D [1339 0 R /XYZ 72.0 720.0 null] >> endobj 1501 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 243.7 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1500 0 R /H /I >> endobj 1502 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1500 0 R /H /I >> endobj 1503 0 obj << /Type /Action /S /GoTo /D [1342 0 R /XYZ 72.0 720.0 null] >> endobj 1504 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 263.14 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1503 0 R /H /I >> endobj 1505 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1503 0 R /H /I >> endobj 1506 0 obj << /Type /Action /S /GoTo /D [1345 0 R /XYZ 72.0 720.0 null] >> endobj 1507 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 264.8 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1506 0 R /H /I >> endobj 1508 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1506 0 R /H /I >> endobj 1509 0 obj << /Type /Action /S /GoTo /D [1348 0 R /XYZ 72.0 720.0 null] >> endobj 1510 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 263.68 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1509 0 R /H /I >> endobj 1511 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1509 0 R /H /I >> endobj 1512 0 obj << /Type /Action /S /GoTo /D [1351 0 R /XYZ 72.0 720.0 null] >> endobj 1513 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 265.36 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1512 0 R /H /I >> endobj 1514 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1512 0 R /H /I >> endobj 1515 0 obj << /Type /Action /S /GoTo /D [1354 0 R /XYZ 72.0 720.0 null] >> endobj 1516 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 260.37 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1515 0 R /H /I >> endobj 1517 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1515 0 R /H /I >> endobj 1518 0 obj << /Type /Action /S /GoTo /D [1357 0 R /XYZ 72.0 720.0 null] >> endobj 1519 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 228.15 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1518 0 R /H /I >> endobj 1520 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1518 0 R /H /I >> endobj 1521 0 obj << /Type /Action /S /GoTo /D [1360 0 R /XYZ 72.0 720.0 null] >> endobj 1522 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 251.48 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1521 0 R /H /I >> endobj 1523 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1521 0 R /H /I >> endobj 1524 0 obj << /Type /Action /S /GoTo /D [1363 0 R /XYZ 72.0 720.0 null] >> endobj 1525 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 244.25 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1524 0 R /H /I >> endobj 1526 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1524 0 R /H /I >> endobj 1527 0 obj << /Type /Action /S /GoTo /D [1366 0 R /XYZ 72.0 720.0 null] >> endobj 1528 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 265.91 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1527 0 R /H /I >> endobj 1529 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1527 0 R /H /I >> endobj 1530 0 obj << /Type /Action /S /GoTo /D [1369 0 R /XYZ 72.0 720.0 null] >> endobj 1531 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 517.5 271.623 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1530 0 R /H /I >> endobj 1532 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 517.5 539.998 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1530 0 R /H /I >> endobj 1533 0 obj << /Type /Action /S /GoTo /D [1372 0 R /XYZ 72.0 720.0 null] >> endobj 1534 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 219.27 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1533 0 R /H /I >> endobj 1535 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1533 0 R /H /I >> endobj 1536 0 obj << /Type /Action /S /GoTo /D [1375 0 R /XYZ 72.0 720.0 null] >> endobj 1537 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 233.71 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1536 0 R /H /I >> endobj 1538 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1536 0 R /H /I >> endobj 1539 0 obj << /Type /Action /S /GoTo /D [1378 0 R /XYZ 72.0 720.0 null] >> endobj 1540 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 258.14 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1539 0 R /H /I >> endobj 1541 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1539 0 R /H /I >> endobj 1542 0 obj << /Type /Action /S /GoTo /D [1381 0 R /XYZ 72.0 720.0 null] >> endobj 1543 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 243.7 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1542 0 R /H /I >> endobj 1544 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1542 0 R /H /I >> endobj 1545 0 obj << /Type /Action /S /GoTo /D [1384 0 R /XYZ 72.0 720.0 null] >> endobj 1546 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 258.14 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1545 0 R /H /I >> endobj 1547 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 457.5 539.998 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1545 0 R /H /I >> endobj 1548 0 obj << /Type /Action /S /GoTo /D [1387 0 R /XYZ 72.0 720.0 null] >> endobj 1549 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 286.47 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1548 0 R /H /I >> endobj 1550 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1548 0 R /H /I >> endobj 1551 0 obj << /Type /Action /S /GoTo /D [1390 0 R /XYZ 72.0 720.0 null] >> endobj 1552 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 298.97 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1551 0 R /H /I >> endobj 1553 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1551 0 R /H /I >> endobj 1554 0 obj << /Type /Action /S /GoTo /D [1393 0 R /XYZ 72.0 720.0 null] >> endobj 1555 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 296.75 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1554 0 R /H /I >> endobj 1556 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1554 0 R /H /I >> endobj 1557 0 obj << /Type /Action /S /GoTo /D [1396 0 R /XYZ 72.0 720.0 null] >> endobj 1558 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 313.69 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1557 0 R /H /I >> endobj 1559 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1557 0 R /H /I >> endobj 1560 0 obj << /Type /Action /S /GoTo /D [1399 0 R /XYZ 72.0 720.0 null] >> endobj 1561 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 289.25 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1560 0 R /H /I >> endobj 1562 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1560 0 R /H /I >> endobj 1563 0 obj << /Type /Action /S /GoTo /D [1402 0 R /XYZ 72.0 720.0 null] >> endobj 1564 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 315.63 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1563 0 R /H /I >> endobj 1565 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1563 0 R /H /I >> endobj 1566 0 obj << /Type /Action /S /GoTo /D [1405 0 R /XYZ 72.0 720.0 null] >> endobj 1567 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 317.01 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1566 0 R /H /I >> endobj 1568 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1566 0 R /H /I >> endobj 1569 0 obj << /Type /Action /S /GoTo /D [1408 0 R /XYZ 72.0 720.0 null] >> endobj 1570 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 338.12 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1569 0 R /H /I >> endobj 1571 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1569 0 R /H /I >> endobj 1572 0 obj << /Type /Action /S /GoTo /D [1411 0 R /XYZ 72.0 720.0 null] >> endobj 1573 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 316.46 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1572 0 R /H /I >> endobj 1574 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1572 0 R /H /I >> endobj 1575 0 obj << /Type /Action /S /GoTo /D [1414 0 R /XYZ 72.0 720.0 null] >> endobj 1576 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 328.11 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1575 0 R /H /I >> endobj 1577 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1575 0 R /H /I >> endobj 1578 0 obj << /Type /Action /S /GoTo /D [1417 0 R /XYZ 72.0 720.0 null] >> endobj 1579 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 263.14 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1578 0 R /H /I >> endobj 1580 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1578 0 R /H /I >> endobj 1581 0 obj << /Type /Action /S /GoTo /D [1420 0 R /XYZ 72.0 720.0 null] >> endobj 1582 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 285.92 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1581 0 R /H /I >> endobj 1583 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1581 0 R /H /I >> endobj 1584 0 obj << /Type /Action /S /GoTo /D [1423 0 R /XYZ 72.0 720.0 null] >> endobj 1585 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 299.25 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1584 0 R /H /I >> endobj 1586 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1584 0 R /H /I >> endobj 1587 0 obj << /Type /Action /S /GoTo /D [1426 0 R /XYZ 72.0 720.0 null] >> endobj 1588 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 289.5 187.399 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1587 0 R /H /I >> endobj 1589 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 289.5 539.998 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1587 0 R /H /I >> endobj 1590 0 obj << /Type /Action /S /GoTo /D [1429 0 R /XYZ 72.0 720.0 null] >> endobj 1591 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 239.27 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1590 0 R /H /I >> endobj 1592 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 277.5 539.998 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1590 0 R /H /I >> endobj 1593 0 obj << /Type /Action /S /GoTo /D [1432 0 R /XYZ 72.0 720.0 null] >> endobj 1594 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 243.72 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1593 0 R /H /I >> endobj 1595 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1593 0 R /H /I >> endobj 1596 0 obj << /Type /Action /S /GoTo /D [1435 0 R /XYZ 72.0 720.0 null] >> endobj 1597 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 217.05 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1596 0 R /H /I >> endobj 1598 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1596 0 R /H /I >> endobj 1599 0 obj << /Type /Action /S /GoTo /D [1438 0 R /XYZ 72.0 720.0 null] >> endobj 1600 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 218.16 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1599 0 R /H /I >> endobj 1601 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1599 0 R /H /I >> endobj 1602 0 obj << /Type /Action /S /GoTo /D [1441 0 R /XYZ 72.0 720.0 null] >> endobj 1603 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 228.15 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1602 0 R /H /I >> endobj 1604 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1602 0 R /H /I >> endobj 1605 0 obj << /Type /Action /S /GoTo /D [1444 0 R /XYZ 72.0 720.0 null] >> endobj 1606 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 224.27 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1605 0 R /H /I >> endobj 1607 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1605 0 R /H /I >> endobj 1608 0 obj << /Type /Action /S /GoTo /D [1447 0 R /XYZ 72.0 720.0 null] >> endobj 1609 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 205.5 185.73 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1608 0 R /H /I >> endobj 1610 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 205.5 539.998 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1608 0 R /H /I >> endobj 1611 0 obj << /Type /Action /S /GoTo /D [1450 0 R /XYZ 72.0 720.0 null] >> endobj 1612 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 198.73 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1611 0 R /H /I >> endobj 1613 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1611 0 R /H /I >> endobj 1614 0 obj << /Type /Action /S /GoTo /D [1453 0 R /XYZ 72.0 720.0 null] >> endobj 1615 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 203.17 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1614 0 R /H /I >> endobj 1616 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1614 0 R /H /I >> endobj 1617 0 obj << /Type /Action /S /GoTo /D [1456 0 R /XYZ 72.0 720.0 null] >> endobj 1618 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 204.83 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1617 0 R /H /I >> endobj 1619 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1617 0 R /H /I >> endobj 1620 0 obj << /Type /Action /S /GoTo /D [1459 0 R /XYZ 72.0 720.0 null] >> endobj 1621 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 200.95 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1620 0 R /H /I >> endobj 1622 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1620 0 R /H /I >> endobj 1623 0 obj << /Type /Action /S /GoTo /D [1462 0 R /XYZ 72.0 720.0 null] >> endobj 1624 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 202.6 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1623 0 R /H /I >> endobj 1625 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1623 0 R /H /I >> endobj 1626 0 obj << /Type /Action /S /GoTo /D [1465 0 R /XYZ 72.0 720.0 null] >> endobj 1627 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 214.26 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1626 0 R /H /I >> endobj 1628 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1626 0 R /H /I >> endobj 1629 0 obj << /Type /Action /S /GoTo /D [1468 0 R /XYZ 72.0 720.0 null] >> endobj 1630 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 215.38 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1629 0 R /H /I >> endobj 1631 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1629 0 R /H /I >> endobj 1632 0 obj << /Type /Action /S /GoTo /D [1471 0 R /XYZ 72.0 720.0 null] >> endobj 1633 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 213.15 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1632 0 R /H /I >> endobj 1634 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1632 0 R /H /I >> endobj 1635 0 obj << /Type /Action /S /GoTo /D [1474 0 R /XYZ 72.0 720.0 null] >> endobj 1636 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 208.71 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1635 0 R /H /I >> endobj 1637 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1635 0 R /H /I >> endobj 1638 0 obj << /Type /Action /S /GoTo /D [1477 0 R /XYZ 72.0 720.0 null] >> endobj 1639 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 225.38 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1638 0 R /H /I >> endobj 1640 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1638 0 R /H /I >> endobj 1641 0 obj << /Type /Action /S /GoTo /D [1480 0 R /XYZ 72.0 720.0 null] >> endobj 1642 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 205.94 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1641 0 R /H /I >> endobj 1643 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1641 0 R /H /I >> endobj 1644 0 obj << /Length 1645 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 1645 0 obj 14263 endobj 1646 0 obj [ 1483 0 R 1484 0 R 1486 0 R 1487 0 R 1489 0 R 1490 0 R 1492 0 R 1493 0 R 1495 0 R 1496 0 R 1498 0 R 1499 0 R 1501 0 R 1502 0 R 1504 0 R 1505 0 R 1507 0 R 1508 0 R 1510 0 R 1511 0 R 1513 0 R 1514 0 R 1516 0 R 1517 0 R 1519 0 R 1520 0 R 1522 0 R 1523 0 R 1525 0 R 1526 0 R 1528 0 R 1529 0 R 1531 0 R 1532 0 R 1534 0 R 1535 0 R 1537 0 R 1538 0 R 1540 0 R 1541 0 R 1543 0 R 1544 0 R 1546 0 R 1547 0 R 1549 0 R 1550 0 R 1552 0 R 1553 0 R 1555 0 R 1556 0 R 1558 0 R 1559 0 R 1561 0 R 1562 0 R 1564 0 R 1565 0 R 1567 0 R 1568 0 R 1570 0 R 1571 0 R 1573 0 R 1574 0 R 1576 0 R 1577 0 R 1579 0 R 1580 0 R 1582 0 R 1583 0 R 1585 0 R 1586 0 R 1588 0 R 1589 0 R 1591 0 R 1592 0 R 1594 0 R 1595 0 R 1597 0 R 1598 0 R 1600 0 R 1601 0 R 1603 0 R 1604 0 R 1606 0 R 1607 0 R 1609 0 R 1610 0 R 1612 0 R 1613 0 R 1615 0 R 1616 0 R 1618 0 R 1619 0 R 1621 0 R 1622 0 R 1624 0 R 1625 0 R 1627 0 R 1628 0 R 1630 0 R 1631 0 R 1633 0 R 1634 0 R 1636 0 R 1637 0 R 1639 0 R 1640 0 R 1642 0 R 1643 0 R ] endobj 1647 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 1646 0 R /Contents 1644 0 R >> endobj 1648 0 obj << /S /D /St 268 >> endobj 1649 0 obj << /Length 1650 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 1650 0 obj 398 endobj 1651 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1649 0 R >> endobj 1652 0 obj << /Length 1653 0 R /Filter /FlateDecode >> stream xVMo@+T ^v[%UzJIdQm|؆uC ֘7c3 u!xem!qmaBuQ/cY}4*D/ i3FgUkָC|*n^ktC`2?Hx66zQ&-uwbyOg7wsD\0a]MZ}3~%Q"nV^'v1BXZf/2"JgK!mrWӣKm0BŘ,Y9LD)<D-,l~5ȋHIT4,ؾ+Yx~f<h#C" }TMlPeUh~mXVt7 9Ze}(]6~IT,fyj& ʼnYi|zɖI#XK8Qs(1u_ez#!4Zhy-D4̵”Uc[JrI21${kgܘ+!ir`<-db8Y=j[PQ֍z+}}ὓ+C젵vR?,?XU Y| endstream endobj 1653 0 obj 749 endobj 1654 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1652 0 R >> endobj 1655 0 obj << /Length 1656 0 R /Filter /FlateDecode >> stream xVMo0+خTUP)m{hӠMh60i/&Q&7f$Z1 C;6qeA"ꢾ/cY߽u& cã2«դX#75v#wbצߦ$P/<ݤ%K%LnsyG&uSLX_SrfVNtؾVV&B:"{◗Xa/[3 Cl)BXbM]$QM"@)!L&\*,lɶ-U%ZxyR57iIAБM cBmC$åtk= &RDmyV e傃`4G4\qi)6f^/bV'pf-$4IA\B2ʍ uv3kSVdYa2i{<L@w3S^] Zͼ.uB06/|"AnAFiz:U:}YrGM2AKK& K0@\%O(6&3D /V:R߳='U$*;un01ԩo\Tہuabi(Rcô>)F0z endstream endobj 1656 0 obj 777 endobj 1657 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1655 0 R >> endobj 1658 0 obj << /Length 1659 0 R /Filter /FlateDecode >> stream xUMs0+t&>AI; Lc9v,DlM-c@񺲋9d;ob $!|v vW6 Y//(|]"υl ~*m^-F!Ye2dwQZץ{Ue`~qw?_B2On^݂OV ]+IJ~3<$S"{[%1T>XX9 gRu .Ps(Gs.+31n6"b4_nU!RML ]MZ# HJ0H-/jSuO8yH|ʸ >x.t118+% #ViHif8{p">%`]5>1風մ0iA#FUz:k19G+@?Zk> endobj 1661 0 obj << /Length 1662 0 R /Filter /FlateDecode >> stream xUMo@+TvͱRZ7'=QD:Ҧ|lMy7ޣrT 0 0- nqW,we?C=T2"%4~4K^K=SAr> ϧz59򱙍9LY'tsD+UX̅?&c 0&9HGH$;{t( endstream endobj 1662 0 obj 559 endobj 1663 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1661 0 R >> endobj 1664 0 obj << /Length 1665 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 1667 0 obj << /Length 1668 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 1668 0 obj 450 endobj 1669 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1667 0 R >> endobj 1670 0 obj << /Length 1671 0 R /Filter /FlateDecode >> stream xTr0+t&JrLIoNg2ȱ'`+Y魉XgݷOn υ[x%c 90PZس[,{fwp!6+Er?X4xoćwd6J3o!0dn- !Tp>W?ɍ4p nngsHҲ:-duv|JkY$#G"֧*[QXMohpʙ@d UD-f8ʜs9$DSޥYϐ饽ni\[: FQJO^jlP%c"{ҩz23.hg1m,4m zhVNϤcmfaXYiWJ"5Tr`QJ+ > endobj 1673 0 obj << /Length 1674 0 R /Filter /FlateDecode >> stream xTMo0W̱]{\h*8 j k Q^f0x}THB*r;<^eFe]׻ZWw⤨|OF_["n66lO8Ri;+UZP!|*E|囵4*]v 3l)s1 r8)OR%R,8C?GJWpy! ^pFHA8#doUZTurY=R[DsCnDw 3mqbg]zJI̓2e4E;ԁ:g]g#^Rad}uQLg *=Mռ$Uk0}h8ͅ=x~@э 1İ"ah牙QdpsLOv=ٝ endstream endobj 1674 0 obj 510 endobj 1675 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1673 0 R >> endobj 1676 0 obj << /Length 1677 0 R /Filter /FlateDecode >> stream x͔O0+QGQ&$hdno[@a&҆|x};X bٖ@p9bA̧<0߅c0\(]tc^IE/7n|!!xQڦgU;[ endstream endobj 1677 0 obj 347 endobj 1678 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1676 0 R >> endobj 1679 0 obj << /Length 1680 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 1680 0 obj 508 endobj 1681 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1679 0 R >> endobj 1682 0 obj << /Length 1683 0 R /Filter /FlateDecode >> stream xTMS0WQWeYvd@1$8 +88V=^=Ӯgkvb!s.C0X5_ϱ n15> endobj 1685 0 obj << /Length 1686 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 1686 0 obj 463 endobj 1687 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 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;;kgӕwNqʙ@d!1.$rOaQ tH sOهCrgQ-\;U7eե"b<9=14RTC-Ο׽ fDxFS I3dJۥVݶ ?4TYҩ=<79z+`$bSm-ba:S4sґ q endstream endobj 1689 0 obj 460 endobj 1690 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1688 0 R >> endobj 1691 0 obj << /Length 1692 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 1692 0 obj 476 endobj 1693 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1691 0 R >> endobj 1694 0 obj << /Length 1695 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 1695 0 obj 459 endobj 1696 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1694 0 R >> endobj 1697 0 obj << /Length 1698 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 1698 0 obj 462 endobj 1699 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1697 0 R >> endobj 1700 0 obj << /Length 1701 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 1701 0 obj 460 endobj 1702 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1700 0 R >> endobj 1703 0 obj << /Length 1704 0 R /Filter /FlateDecode >> stream xUn@slFmJd54(lU A.`證y߼0{q@.좴t%@B> ; =kpÍWz;B3h.@VDU冰>޻OpדR@Z(IG@7LrqrM/Z+vsw}s :m!;2E}!ڪԈ({c,MGI1]vqُLpȩ E9ryVhbjLpɠM MnK`]&;yR;+2ʆAD6, Ck$C>c)HPDi·%e.$Q?|Os&٩2 #jyE-HCs"65Y@-IG3gtB=K S.g3aŽ&17M,/uLʔN2Ԍ(i=eŮs۩n?oO(%?}dO e)Ytr^(=!^U{oH endstream endobj 1704 0 obj 533 endobj 1705 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1703 0 R >> endobj 1706 0 obj << /Length 1707 0 R /Filter /FlateDecode >> stream xTQo0~lq6i&EeCWU,xI4B҄!-зb}wg h+af-&@KPIq"2&8[@hv?}n v/Kf%Cnn f!\GbA"rCX){)~VYZkb0\I/ n|sUY HUoo!>jY_#Gf xtGD:D[5Ukv./KWϗYpw9rd \ ( T7 }E))|ȊP/] AHaGU|Pb`F$7EWvwT{q4t)e!P? Q~dIv,"CQZz y6ޮi"^oznyM+lnZtDD]uHVA*ei)6iND 5İaZ%s~PkOMoDKvu endstream endobj 1707 0 obj 505 endobj 1708 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1706 0 R >> endobj 1709 0 obj << /Length 1710 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 1710 0 obj 484 endobj 1711 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1709 0 R >> endobj 1712 0 obj << /Length 1713 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 1713 0 obj 455 endobj 1714 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1712 0 R >> endobj 1715 0 obj << /Length 1716 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 1718 0 obj << /Length 1719 0 R /Filter /FlateDecode >> stream xUM0+{X[z-j+mV+J NwW$oh0E*b $!\=bݑջi6^1&\G|p#!MiuއλO0 dPR* +6Ǣ[}_ം7vENYǯ$u--$kwGDb_;[%R*Zce6EM.m-` gRWht ,K4 \ r,1I4t+H+⦀,omw,azF&IJ|߷&&WiQGK yАfKθ .+@ߢܘyީI9vjD {Z':>XgѿqO\VQ8 Sl^ńfUtT8T(!mJʨ(6|ky!؜+0:l6$*QGML̗eJ:,SG&eYP뇆ҙ'y'mGxzb_6R%]X^UB&? endstream endobj 1719 0 obj 565 endobj 1720 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1718 0 R >> endobj 1721 0 obj << /Length 1722 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 1722 0 obj 499 endobj 1723 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1721 0 R >> endobj 1724 0 obj << /Length 1725 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 1725 0 obj 453 endobj 1726 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1724 0 R >> endobj 1727 0 obj << /Length 1728 0 R /Filter /FlateDecode >> stream xTMo@+Jv]ǪRUFbI`0X^71;wׅ[fpهh( B {v~/6cz~E-!<>\G !!Oqk!NrMB.QLxW~n7d0k_^7Vפlzٯ"M--Dپzݪ,,WT&59c@0(GCKI%Ø>'umdU¿b*6!] "PHt)Q/9tT}|-V֒Etq"'9f9iPDFmL仢gK2;O[SyRBmM#RD w2oTtѺHvMќGdm`?@R gNbPt31l L@{=1\9 EF7brXP endstream endobj 1728 0 obj 519 endobj 1729 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1727 0 R >> endobj 1730 0 obj << /Length 1731 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 1731 0 obj 457 endobj 1732 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1730 0 R >> endobj 1733 0 obj << /Length 1734 0 R /Filter /FlateDecode >> stream xTn0+.)昢-C#B{HBY[,9ߥ~ȲI$AFOB}Ka ,6ǐ HRp~` }aF>~l!?Cዸ{`tx [.od&>Ǡ{ksI E.7_oc^!V_el'M|d;ďMM[6 r_:S-ugj]ץgY%$0J(eV Ɲ@1+ ?—P/o`^2XeǾN\ ,(1+&T7b IIKzpIQtNNUdI-G~]MlR6+ 7XYfKY+UiTP݆5|ᅎ=a!}zrp^0J( ertD3gWv5s endstream endobj 1734 0 obj 482 endobj 1735 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1733 0 R >> endobj 1736 0 obj << /Length 1737 0 R /Filter /FlateDecode >> stream xUM0+ۀ=vVR=lW+ *l ׆ D꡻0zy~/b0Ͻ=FA09DOX`ᆅ`7 Y=۱X/x_G&`5Z7w y/Phq+p_)%3.Q~jWxU#D߽j9elZ_fA;a!;UXP!"Z3}{kt-QB*2ِFKO'>2`ބg}nsS_P_@I_DʆwTfũqPU'j,ZzoLKpSAyq5v퓉+rz訥ZƕTU4'e;)jSԳUuA;JH[G]C] =?^w~;1O#(<;O7v endstream endobj 1737 0 obj 548 endobj 1738 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1736 0 R >> endobj 1739 0 obj << /Length 1740 0 R /Filter /FlateDecode >> stream xUMo@+Hz?e}Tꡒ(bP08i;&&yW}3o ϵ]xύ S B`> b=Qԧ] ~zGwxxzDFa}mBJ+ 8]jk^y7IW{+I@SGDb_+G%T4lwBO6+]R7y|N82d8Gbdˡ9T0fІ5ċC]Y=0 ySV}oL'JFJ~$Awa10.% #oQ0clj1~g,  4YOA~d Um˵ƹ @l:]`X!6U1c> endobj 1742 0 obj << /Length 1743 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 1743 0 obj 463 endobj 1744 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1742 0 R >> endobj 1745 0 obj << /Length 1746 0 R /Filter /FlateDecode >> stream xX]o6}[!Qb>dA;lXd5Ȓ"qw)ɲc&S k h{=nFϱ}Dd9( f! (y}ؿľQtoO6~lYf匠f_h !ZzsCq#f|ˇQ6\R8D1LKOڬ6/o\խ6G_r~^t:vFS Ej7Bj‡MuONJm0qV5kդ}tbI(![4XZ0µtX>:Fg(t*YӿQ[mеF=NXнEK)`cYmnxsj'd20hHߪX9v@`xR͕Y3H@B7@QUځ̾{G 2.`60# |<=> endobj 1748 0 obj << /Length 1749 0 R /Filter /FlateDecode >> stream x͒N0E c;n-X EXbQU(jDm GKʒ62֑Ǚs75u! ki3DŽMvwĪ>s]lvWx& ܓr;\%>hPUm9VNEPAZ.=})e( 8a0xLܾͮ:W\z -̺_a @QBA XmHT\QMgݔ26Q "E1L&nbWy߅6Z~ ۙFn8]1^؛Gz'VխoqD endstream endobj 1749 0 obj 307 endobj 1750 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1748 0 R >> endobj 1751 0 obj << /Length 1752 0 R /Filter /FlateDecode >> stream xXmo6_q` 7,h [)Fm!Hr-Yv̘RamX;?gDcp!$(}y3j6og;D?$Pu &8zҚ?M0 ε""QDq.󛏺Y}aZ7_`j?j76Sn? ]P#S=8QJE瘲*yY5"*Iy2HDڈB hP&|BCc<8HReN`VTU4_WP~g\:\P"~@0аz>uSd6,Pkp$0"0]lU\-d!?"m4ƺ,; NRy>/ͩ$gYToBr?vE=#}…ܜC]*o$tDR\(73 ueKF0  `U!yxQ`2i[fnV*".2e:;s}Xω4b%0!ݔ>7]*YJ+^\ޜ t He1-ʸHX|*Oˆux HJO8F:}ndr 5ba״prU4cn\=(7*%yp@SLhmИkT5G/,wg!gB{ܼ1{vt"AmWFn~2"20{*{-fvak(0J'c]6nxjpZ]2$0p2 % 5{XWn(:)yON6v8] 2yggX}(Ig6mwO> endobj 1754 0 obj << /Length 1755 0 R /Filter /FlateDecode >> stream x͒o0+q;^[ju\&;ALt81E*˒[d})8bɍ _bALp؇yFyt93*F~} uO"Fa6eսn^4"$ZA 8#XS SOȁ]i,iHMYPq1G#qgsӗ=~~W!&'^\NNJ6)ѡ?.?.hKESΔu*Ц^KId fiZ{UvT"qSgMGDlO(}ڮk9b~ӹMɩ {-9~@FGt&Ͷ>-rAǔX].+TmQ)܆sx-ATUCk,+ K5#BB;Ő 7ƭaJ\պR}\gg~wg$i<|6|H?e<Ԅ .& zEOpnp 5k dX=mVp 1I=~|3J pG\|?2" a!Aޫשׁ SI endstream endobj 1758 0 obj 1235 endobj 1759 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1757 0 R >> endobj 1760 0 obj << /Length 1761 0 R /Filter /FlateDecode >> stream x͒_O0)#3C4E<3SJ endstream endobj 1761 0 obj 291 endobj 1762 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1760 0 R >> endobj 1763 0 obj << /Length 1764 0 R /Filter /FlateDecode >> stream xXmo6_oI$d^m"`$"KDђ%ǴigƁ%ܑ:^d(v2C Fy[Lhtrp$0PtD7 Cv@4Y*CuUԆo:86&CZuwSQART'eBg34O#F)fҁVszhLuȅ]!XZ7662u|x\dwRqez2~U' HP'y C7+Т|*e/ p(PMTEvfߨl3d37UE,LapBCl%TI®`T|2Q0 'TcA壓Uw8F@o$z;OZ'1h}Ї]ݪ\ TK<R |ێB6*M;_,:^0w_\V|6 ~4bFaM ]Noz38k0X?̑ⓒ9TA1tD6@~۰Lhbw˖TjbHXv9E92pt1Cl=b#/+_Vi"&qhC]TG XmTW6T ԎD-PjźR_= 標s@`VuPHX2⸫oE*SXKZ5hgÁݐz`[r]:"g ˵T4^]O`/IDLrx (LeӁYu[ݦT; %> endobj 1766 0 obj << /Length 1767 0 R /Filter /FlateDecode >> stream xUMo0+PiwWZUURVBlbFkC>xo7yVKi[m1 qdt h8H=  /y~vkxRl>܎xMBЗ҆`30:XKR?"aIOdKx:j#9dyRuoGvT-vRv+P܁{w7{re&ꭡ8G6g|wYf"h@)L{YJڶ *;)(D ׹3>!!}dSE'e%UJg80V5JV\%(-sVXW1pw-)=łIGTbJ: V3t6aFA} 笂|ᔈq2H+m)w*y'mxTpCd7T!Zc2 *)d%SlZR =ajVkvoMs1Ef!#?LTk?P0򓣉HP|ɮ/  endstream endobj 1767 0 obj 553 endobj 1768 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1766 0 R >> endobj 1769 0 obj << /Length 1770 0 R /Filter /FlateDecode >> stream xXs8~_3Pߒzs7m'wM'A8L0 Vٲ8 ̷iď E>"$CbcH0ģ!F0ܣb_D={O6~ln?jBoa4& nr4\M'>4ͷR̤,a4z~/m "UD3p3]ҫ$gXbvlZSY:Уꤪ(]~~aC)lQةnjՁ֠ dj1Uw >"}R/O`3&!'4E;q@!D1hJJJC[E)O;iQRUyI#iUdP#duʣm5'ָYg.$eaqLwZّ߳4I4Q Cx Q,UxEbæk&V| vd(aUvcC*NExf+Sx 9Qby{",pM8)QB endstream endobj 1770 0 obj 1260 endobj 1771 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1769 0 R >> endobj 1772 0 obj << /Length 1773 0 R /Filter /FlateDecode >> stream xU]o0}WܷlJm iQPU &Bl!in,e-F{8<vJmp0pF:M}^ wN~"@53heD !MiC >0~aB<ϳD"(p'mXAA[;(]}DNþJ{Ğ8s\i;e),stM 0徘 [n7Ap22(V*o$ A !NWlMpcJA04|^2XkP&-%i>Xy^}iI4vU%( f6[KW3VQC˒گ#`6DH:Ƨޓ|3l$S ;hN=1Y`fGP~ʮ} endstream endobj 1773 0 obj 546 endobj 1774 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1772 0 R >> endobj 1775 0 obj << /Length 1776 0 R /Filter /FlateDecode >> stream xX[s8~WL۝i;Ɇ>42xbla{d"˶!O*DŽ"+s $CjQ0C|Df;]@`.1wډ3)&> =tv "Fbr3!J4]%R 1g04]o()맬XiT5JN~Sךlso?L@^{n @( !wLUs}tZx^gBἌ|V{GqX dx6ԩ @Gmu/ n> endobj 1778 0 obj << /Length 1779 0 R /Filter /FlateDecode >> stream xU]o0}WܷlJm iѐPU &6Nِ ncgN*]/,e3Lxiag eKz}bȄXIKȭ+pgJA04|^2YgP&m%Sjo3x [r/xeb\6vW\ Us{+ּe^y585Ká+yKPq7z͠[׬R mna&R^Ҳd[txP [*_ ^*`6Vٽx4ߐ:ofa6>Ξ$FsPd&b0Itf˙9J-0;xߧN endstream endobj 1779 0 obj 546 endobj 1780 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1778 0 R >> endobj 1781 0 obj << /Length 1782 0 R /Filter /FlateDecode >> stream xXRH}WIUEa7{$oR.YaBߧGec&B0t>݄ϩCr;Dt0p{]_p\Sj(kD׿,ˤPmjқ[/';П*6 דw>0 lC2!"Kaz __|TzU57yy Ӹn~ N~>٭`'E_粫! i ȎNIu⢤͛R,/jȼkEճZjƽU*!FzD0SA0⊂qNmpX1 yPBz7,x4Ez TY|e**u PTAHKv"mAY4mTۚzFaT5nב$0zrzv'nm9}N1¥RՐҦnmyU:.5,[o]A_y5~b̝j*Vl"w0ifS n(✢{_y{g 34')5yY/5y MYJw|'Q`gSNWIUC`좟wa37[Jvi>c$ 9< ϨCAG|xx8]n@ZOCL˶yUBUnxx$[V[UQT`$9!# liB†I~xBFIjڸz[Io8E$ƈZ}k\o|3l>6j,#?РEmu0F V!]6J> endobj 1784 0 obj << /Length 1785 0 R /Filter /FlateDecode >> stream xUMo0+ޱ=\ЮUe0Y+Sl5ʿ_{6$5Skf$#P4Ð19($:-!{Oޣ:@6@50hiPD,'FЇ`͗0zfaL,Ґ~ _qVNq}s>[eﯗ{o P҃tL6xIe=R(\jVAtZmNZB'E/fzq8?RڟhJ$!S:mɟ[pû3 Cw" ;Vl=Sg^lau%*ضr߮hNjY*ֈz :g6IHDɥ2+BD.ZykQzm;o%o8uEmW֥.>^\=}eryn3j;L]BvDl%x7{G3X HS |~?3oK(LG#bS_ endstream endobj 1785 0 obj 534 endobj 1786 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1784 0 R >> endobj 1787 0 obj << /Length 1788 0 R /Filter /FlateDecode >> stream xX]o6}[Z`a)}km nM )ERethok$h{! E>+0FQQ!*00ܣD={O6~ln'fB/_a4q& frGTZL.7ID r%JDsC%ꓶOUs_uhr~^w:]0qW@K(pv#0!|LT36/JK=#$2U{S=awj ]Gy.7F)fʕ)GouUdAo>j|3ml +!3/Ev)>'*vFcS@tk[^ij/>yΣWMeyU<]|J:agN9`) t95>@Qo,u Aﲬp ,ާ6EMa$@F 󻇕^;͇]VhB wu#|"ɳc2Ukt<ԴiMDIM,l}a8MU@P V6aF.i$ îف$GԻ(KXQ>YFab[ڮ2!vu>Ÿ]YScc9I l"V3`W}чSh=z yk4\Z'>+;d[.wa~H'cCN&;e%N ctn~i&yI"ݑeB7a>ɳocVy+cB.eJu}lYov$)`ud 'd, (qz?Fsp082/QX-wߥp*^|{>z9 endstream endobj 1788 0 obj 1223 endobj 1789 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1787 0 R >> endobj 1790 0 obj << /Length 1791 0 R /Filter /FlateDecode >> stream xU[o0}W|oݤژcZ&mRV=Tr\R.˿ ]pi/kC9>`@8Cxy@c!`O,4 Ѓ>#F35 BE?AɹS(Sx;gn&8!(Թ#HhIO$ vi q}ݕ;H8ӣ콱ծGX;GX@F)"?6RaTҬ⿦0^&iA60HC|+;odaK{.aX\@wR=fPڈu˭ g4=h O9ܮx.!!Yb*lPV  ؈\rV_𮔕U*OA'Kn# wED2HW}7HIx8P]]™ ~r\Z`;4z1Iӆ|]]ɮ#S`vQs݋ of5f⯋6X^ΥhZK#Ko9(],1th/-̜$Eu(WNU endstream endobj 1791 0 obj 530 endobj 1792 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1790 0 R >> endobj 1793 0 obj << /Length 1794 0 R /Filter /FlateDecode >> stream xX[o6~8om]bek 04EXT"DINCKĴi&0?~F~Ā{Dd:D~>Ĕ& W8ܣ>{;]~Z9y?h>TG$¸ZW_pPJ LTvY^t!yMyLh2Ɉ x -LIb|CGIR6TSgP';Am[|6/3XpM "Jh>yTVu "D8F&49e೿bfsLj"GsAi]5N2 3>9OAj./.G%|U/.߄`N]͆`DX\j Xͺ(z=k NЗIFڵdWmW [CTe%eEo<{^^m|҅Y`J*(Sl̺v{M0SwtT^ AD)i~Ys$#\"84v3N,}w?p\Мu-5T Wx1~y&+pz)>ѹ%H y]ꗺE9k5Vl[v=ko S`wȚ, >>>KcPx Pi"FpL/%Wk;n$&NrC1e|oYv= ' 8ٟL&眏۝%-VGX^hO;"4Ȕ;6FuhOC3 ay 3Tq =$7Apw|K䟊 8qֶRaBҔ r-#1} Y| SLW'4lpP |-訰F :]C"LȃmlBٶCnC Ju0Dl*nmݷT0Mx~J0F;Jl7 endstream endobj 1794 0 obj 1265 endobj 1795 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1793 0 R >> endobj 1796 0 obj << /Length 1797 0 R /Filter /FlateDecode >> stream xT]O0}8oj-ao~?lf"}Pc ȴH;nj 8InO ˁQKD>(Z:>0; Eauu'U(.'׈~oQo9s?.[}mʶv Zɝڛ=|JexP)ӴƠ~5!nJ)GsƈV\lGM#<*R6]Bܮ&8JAg['wveBʚO [+̤ėeYio6G#A*/]@YJ3׈/s\ˬzY>xЪ^}NTFiӯ|] Aǎs  μiwv/ endstream endobj 1797 0 obj 463 endobj 1798 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1796 0 R >> endobj 1799 0 obj << /Length 1800 0 R /Filter /FlateDecode >> stream xX]o6}oi)֢ah@D,)48ME6 ֹ<<L0kh?h.{pHo7-+upJ"պBjR*0uS}/^ kRTiR\e C2@0DZRD:JqGiRvU I yVs7ѯϡN϶d6kl+]ݵ{.)<\9G݅ETiUvap*q)n|o 3aֶhKoG7l`,4բm槆#ڧ<1np裡\*2x61[O00w )#> I:l1nK8"{*m0b}Q{}} E[x- 0_pcs<~ON}4pZ*mߞ%{Gf=U *~CN꾿Tx endstream endobj 1800 0 obj 1265 endobj 1801 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1799 0 R >> endobj 1802 0 obj << /Length 1803 0 R /Filter /FlateDecode >> stream xT]O0}ﯸojlKalAA(L#"ho 0ãJ ='fD.+.Y" 績[l3lgw!0D +ju_J]8FO(BB\Wp{WY?qQ@T{qo_lF_dS;)E|sx3 GTjMǗsL ;9T2%p9)IzK& =-gĉ Zix\9!B3)pԤ&u(yaUFK)Nbh 1ѻBw{5xUdͤzIL).t?dvcD:FG6:i)ߊDow~C o[:vtx|Çe`);a(񽝊 endstream endobj 1803 0 obj 466 endobj 1804 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1802 0 R >> endobj 1805 0 obj << /Length 1806 0 R /Filter /FlateDecode >> stream xXmo6_q WI>euq7 M(Q$E(Ɏmڴ;k Rh=w^ɇ{ 5aXcrS0IE\'{Ktys /_q5uO^x92PQ~~zQ MZHAD>7SYe &q՘W1mm/::]p I@!v+vpJBu5T Tuyc޽+LfykjU$/q~]vP-#hPP"JjW6 ,s@Y@\ꛕP;za "1(^(uYB$( tO=_1ܬnW=PfQS1\siu-eYϐUWo!C'q~)4mmW6)ZO{k 1 m^FZ٦9PI ,rP`AX|8ck"v!Ss,9\pD\^7m?E.,6.Z7m M6+t1GS'ٴ[$Q:1dAVud_okS{[}i0S"7~00)};~̦+K<5m(C1Lg_>mNqIJHRXà\7ۉ5Et9y18Ş!!o|E 89PXr"*nJLM7ǣIDOLC&UY𠃱5|uQ$kʑlIv U@t1}E\a}5qbjZ"uԨRH,_ O= qiUÐTUnqCHhh bY>j&HPmb֢ch\!#l(if4^mpuyebmBV͢=0IIh#/ &6OME&z ZO$n" O_PCXM AyMn1nԥ=.,z 5(:o9=%<PF(fkSjg׉[=$5> endobj 1808 0 obj << /Length 1809 0 R /Filter /FlateDecode >> stream x͔_o0)[6ie LGc?dy=Kk-gWNo뱌 endstream endobj 1809 0 obj 462 endobj 1810 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1808 0 R >> endobj 1811 0 obj << /Length 1812 0 R /Filter /FlateDecode >> stream xXnF}W[ MRIÎE S$Ml;KRוVja4 SXpG (~%R& %$.(ؿgQtwo~kD_Q9q7^v0 lZH R* &+ab!&\.&C"GsAm`=,]7eG:D[Z=&)ZYo9K?1>. +)ܼ33դ* o3,7otbEBa}-#tslj79T=1yU0.8QRy.{8tЗ_C$lq %Pfs=~N*[-*ͧe- WW4?(ޙlZ'quDaPAYLfG /Ue61ar,A6@aX:e\!"H @!~Lj/Iy0t>1]|w\']S+2VjMUh8_fOK-ryIauGš(?!_TӃcU=Һ_.ƖB_/,N,IC]}֙ \fJr@IƒH;ap]W܃.E(J^zC1 ].w8}I^'zdڿTDȩ7=.f#76{׿M#|6HH8l8l$h$Q#4F6*w72IU[K[#s"")r[_g |'W6nʧiPp8 F NythlRZvaeRF(VnC*0hX'bwqO NIZi8l̆aۼZ_fm(ˮqI|) P\[?w.w(k f:C@Rϩ°^> endobj 1814 0 obj << /Length 1815 0 R /Filter /FlateDecode >> stream x͔Qo0+[ZieC)I4-*b`bSpφhx\ ck_?T7Cɞ<56K7ZEF 1jFi׶>EBnﵚjÉ:O7F!#"ʞSBcnbNh.W߹:j G|zlklj6ЪF|ʎ =n0JvM-/tbYThD(auCj~8Ij4V&LS{mp(; 8˶92L.L SS+SS?rMl!1 &vf  HM쉅9mi 1EWg̘!Mls|YgSH/j8XNe_[X 5P 1zk"BB>e4=Iutû8РneVNʢi㢅U}-n,})ܛ:歟O|Y5dgkEXy>\^BIng졉,xд"LKY?V'& 3T@Cشeni|!C)5HӚq"p+?%Sۮ% mO0dߜK1joT.lwX]'yYQIIh& uѱ|HlD6$rcI%@6WC?++U;O ~Utg'Q`wKr|rЁmePZKHj\ ߰~g„ 8۹O|VChNygOS*q 拗 ;\γedE*(`]|n*EYxXI*`fUW[lc6>Գ_Ԟ@m%38}Z8)o.w|gU_] endstream endobj 1818 0 obj 1214 endobj 1819 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1817 0 R >> endobj 1820 0 obj << /Length 1821 0 R /Filter /FlateDecode >> stream xT]o }WܷEQo~̤nm:`i3~AǶꌏۊr\{y@>` zc>bl~fᎅnp9v+v9d Dgp=FB҆DCRXKc AQ@<^ܜ@ }MK}vkls7Z S(lgw7#{hJםt}r(SQ@(2U`~Q?d>CB(Xۼ4!^(M* l5(Т؁Yv4fϗ> endobj 1823 0 obj << /Length 1824 0 R /Filter /FlateDecode >> stream xUMs0+$@(tЩ= q̇}ib<}v}(!$Y=0  B>a WhXOt6'ޠs\xM:BUiCXx7c!~|Kp_JΤ03{EUۼɺT{?{VWVWg M#$jpD:t<* (YT]_]gdz[I0܏gQHMYp!'^ Sx/OD@pcA&#|U'-+;Utƭ3,2ЎcI1Lˆ*l>"2d#ǘ8;>w'k0 "/HΦ9 dhGi8D , ǮBىT*NKG,-S%_kǓhuljLڎe*(G)6#0GiQ;JMN@z8@tɊ8݇ӇA a>w3v.Mo񽜘^X EV> endobj 1826 0 obj << /Length 1827 0 R /Filter /FlateDecode >> stream xVMs0W-G``88j-CG㴑\\hLۏ'ko"^'nB^E7;N&@bDkQxX-'xX{n#ť.=ۨw7ϣ~QaXEoћ  2 !2Ĩp .^}Umm 4}} AC헣N@C θzX!(F1flLPVMR(eK6w:4R8"J&tHQ$tRkRCG6 |;{.! ҧ͞xei{w4E3@HDlD4AOP'fܪ=Il+YsG[FF!ZuerP#+j4o*Bv78Og| >om`O!пi& C_`碨Y=IF!][vPhhEAH|,\N@nFbzڼ,nɅZtܗϟH"H[#uSMׄba_>2ZVj>6`d./kqi:7WU)W;f'{O8o݁?PO;Y64 &wQv0L # endstream endobj 1827 0 obj 671 endobj 1828 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1826 0 R >> endobj 1829 0 obj << /Length 1830 0 R /Filter /FlateDecode >> stream xVMs0+ʱδ7L{H3+6u+Ē饉X۷at8q :p ,= $#»~O~xw»%tctqisO` vh_Tm> endobj 1832 0 obj << /Length 1833 0 R /Filter /FlateDecode >> stream xUMs0+ʱ:qô4!TpH+>aSAZ5{1xE*i1C,Qt\0`{?vGڇ(|o0(wO E+""qo汬df qu/އംWvU_'ǯ$][Hv;8%j!*1(b0f[nMMIoѿ]x(BLctaD89>0JS$~aW1 endstream endobj 1833 0 obj 585 endobj 1834 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1832 0 R >> endobj 1835 0 obj << /Length 1836 0 R /Filter /FlateDecode >> stream xUMs0+$@(dN{ LPf N0)X̢o}p("$8s|.a (=C#mvc!o6gDON^;Q!jCX;!n-㮔2 IafpoFE~u>7vP6a+HcB Á!W2[ JD]c2SVELT$.UTq(in.#rDj4 lT L54lc@ˆ " ߯.a([z"o{"> endobj 1838 0 obj << /Length 1839 0 R /Filter /FlateDecode >> stream xUM0W̱=$تCUvQ]!!DnSw 7oq |X #pbnq7Vq!ܼS㓍.m<NIjÐxއ/ IZ&P|!D@CaqMʝO0}en'U}ejU-īQ#n}umP`A)-b cSH]reۏ1-K.SP AyOR1\ HWU^ {aNYHGQN^߫|gR@ŀ GGB4AW+P|L?>2>[~(5N./ :BKeԘ4Wp0iϮwqQ`bγ Ͳt؏ui62[u(e(+T Tc=˂~ǫL8wִs=lfT) Z{>'| Ke_KWUx>`S1|a8sy.s!E8_YU?0 endstream endobj 1839 0 obj 607 endobj 1840 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1838 0 R >> endobj 1841 0 obj << /Length 1842 0 R /Filter /FlateDecode >> stream xWr0sL&zJR!Vrp\.^bl#XĊ=֘5#qa@sd.,!}ha8I 0;pBh_|..uFCx:xNAo*7ǕKjZ! $C}JC`UŻ~.J_y5bƪ=mk%[@c 6|}CV B*y͏Fmgj7Q\eEEߩ~1'"uUAǷc #M6 pދA*K~k0!? -e_!U^ d$'ID\+L ЎgZ4|N̏bz]3,HKw0vUZKy(PJ̭kn&!*s)6d|Aiє\1Ŭ6]ߚWWgNy;e\ihz# [aV+R,W\- emrF噴s/ f؊"[gҦެA* 4gA1|dꚭT!F݂-z ,Z#ČZf8H7ZE{Ľ6d: i!0zgݯvJO*k5 ؙ"ڝj o 3<kU xl$ij^,ءafwK[k_v}Hf'j g,$e^UOۻl q?G9i gp ^/oA@0d+w| endstream endobj 1842 0 obj 833 endobj 1843 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1841 0 R >> endobj 1844 0 obj << /Length 1845 0 R /Filter /FlateDecode >> stream xUr@} 㣳UrHY1 "O d /Jz{wP!E0!\=[a>ϩ#w~BNP"#ӆάg*o2t~QOxUJDpe^n|CY"0Ժ9!JCSEEu1neٴ_"bǛiQ|Y.yEzbP= &pw4czo<z8q}BMScx@%(YL~ʑKeÖ|AtIßPjvct6Ö,3szAKCaGYqrpU-x endstream endobj 1845 0 obj 590 endobj 1846 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1844 0 R >> endobj 1847 0 obj << /Length 1848 0 R /Filter /FlateDecode >> stream xUMs0W 8T$۲z) zP:؊c#Bg"ϋ޾ݧխEsf![(= s4ܲ_4`{fG~m!_,F#;pgz╵%/*7z[o?8@Ճ\RJp&͇_Tu$v܀ٺ唽jM~d;LihqBw80$BվCzРDD+:?/؅ *"^uZm{`3(G@hSML`L bLV=jT)td@⺮-pW|W&eOG6“e^K){N2Nldim< \>iHUQ<,ʎQW"؂'yI6Xi:+Guj> Ũ}4yTyOK@q]ͧ0%iH-86! _59TA=85 URO!KU<Ɲ4M+6/w#OPd6)Ma :6Ό@ p>ưaOnK) "M73j endstream endobj 1848 0 obj 572 endobj 1849 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 1847 0 R >> endobj 1850 0 obj << /S /r /St 8 >> endobj 1851 0 obj << /Type /Action /S /GoTo /D [1651 0 R /XYZ 72.0 720.0 null] >> endobj 1852 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 709.5 263.497 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1851 0 R /H /I >> endobj 1853 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 709.5 539.997 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1851 0 R /H /I >> endobj 1854 0 obj << /Type /Action /S /GoTo /D [1654 0 R /XYZ 72.0 720.0 null] >> endobj 1855 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 241.48 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1854 0 R /H /I >> endobj 1856 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1854 0 R /H /I >> endobj 1857 0 obj << /Type /Action /S /GoTo /D [1657 0 R /XYZ 72.0 720.0 null] >> endobj 1858 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 235.93 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1857 0 R /H /I >> endobj 1859 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1857 0 R /H /I >> endobj 1860 0 obj << /Type /Action /S /GoTo /D [1660 0 R /XYZ 72.0 720.0 null] >> endobj 1861 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 221.49 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1860 0 R /H /I >> endobj 1862 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1860 0 R /H /I >> endobj 1863 0 obj << /Type /Action /S /GoTo /D [1663 0 R /XYZ 72.0 720.0 null] >> endobj 1864 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 215.94 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1863 0 R /H /I >> endobj 1865 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1863 0 R /H /I >> endobj 1866 0 obj << /Type /Action /S /GoTo /D [1666 0 R /XYZ 72.0 720.0 null] >> endobj 1867 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 243.13 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1866 0 R /H /I >> endobj 1868 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1866 0 R /H /I >> endobj 1869 0 obj << /Type /Action /S /GoTo /D [1669 0 R /XYZ 72.0 720.0 null] >> endobj 1870 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 248.7 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1869 0 R /H /I >> endobj 1871 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1869 0 R /H /I >> endobj 1872 0 obj << /Type /Action /S /GoTo /D [1672 0 R /XYZ 72.0 720.0 null] >> endobj 1873 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 249.8 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1872 0 R /H /I >> endobj 1874 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 625.5 539.998 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1872 0 R /H /I >> endobj 1875 0 obj << /Type /Action /S /GoTo /D [1675 0 R /XYZ 72.0 720.0 null] >> endobj 1876 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 241.48 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1875 0 R /H /I >> endobj 1877 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1875 0 R /H /I >> endobj 1878 0 obj << /Type /Action /S /GoTo /D [1678 0 R /XYZ 72.0 720.0 null] >> endobj 1879 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 601.5 213.876 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1878 0 R /H /I >> endobj 1880 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 601.5 539.998 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1878 0 R /H /I >> endobj 1881 0 obj << /Type /Action /S /GoTo /D [1681 0 R /XYZ 72.0 720.0 null] >> endobj 1882 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 240.1 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1881 0 R /H /I >> endobj 1883 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1881 0 R /H /I >> endobj 1884 0 obj << /Type /Action /S /GoTo /D [1684 0 R /XYZ 72.0 720.0 null] >> endobj 1885 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 203.45 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1884 0 R /H /I >> endobj 1886 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1884 0 R /H /I >> endobj 1887 0 obj << /Type /Action /S /GoTo /D [1687 0 R /XYZ 72.0 720.0 null] >> endobj 1888 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 206.23 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1887 0 R /H /I >> endobj 1889 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1887 0 R /H /I >> endobj 1890 0 obj << /Type /Action /S /GoTo /D [1690 0 R /XYZ 72.0 720.0 null] >> endobj 1891 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 204.56 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1890 0 R /H /I >> endobj 1892 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1890 0 R /H /I >> endobj 1893 0 obj << /Type /Action /S /GoTo /D [1693 0 R /XYZ 72.0 720.0 null] >> endobj 1894 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 213.45 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1893 0 R /H /I >> endobj 1895 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1893 0 R /H /I >> endobj 1896 0 obj << /Type /Action /S /GoTo /D [1696 0 R /XYZ 72.0 720.0 null] >> endobj 1897 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 203.45 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1896 0 R /H /I >> endobj 1898 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1896 0 R /H /I >> endobj 1899 0 obj << /Type /Action /S /GoTo /D [1699 0 R /XYZ 72.0 720.0 null] >> endobj 1900 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 206.23 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1899 0 R /H /I >> endobj 1901 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1899 0 R /H /I >> endobj 1902 0 obj << /Type /Action /S /GoTo /D [1702 0 R /XYZ 72.0 720.0 null] >> endobj 1903 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 204.56 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1902 0 R /H /I >> endobj 1904 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1902 0 R /H /I >> endobj 1905 0 obj << /Type /Action /S /GoTo /D [1705 0 R /XYZ 72.0 720.0 null] >> endobj 1906 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 251.47 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1905 0 R /H /I >> endobj 1907 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1905 0 R /H /I >> endobj 1908 0 obj << /Type /Action /S /GoTo /D [1708 0 R /XYZ 72.0 720.0 null] >> endobj 1909 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 250.37 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1908 0 R /H /I >> endobj 1910 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1908 0 R /H /I >> endobj 1911 0 obj << /Type /Action /S /GoTo /D [1711 0 R /XYZ 72.0 720.0 null] >> endobj 1912 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 263.69 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1911 0 R /H /I >> endobj 1913 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1911 0 R /H /I >> endobj 1914 0 obj << /Type /Action /S /GoTo /D [1714 0 R /XYZ 72.0 720.0 null] >> endobj 1915 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 222.04 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1914 0 R /H /I >> endobj 1916 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1914 0 R /H /I >> endobj 1917 0 obj << /Type /Action /S /GoTo /D [1717 0 R /XYZ 72.0 720.0 null] >> endobj 1918 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 236.49 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1917 0 R /H /I >> endobj 1919 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1917 0 R /H /I >> endobj 1920 0 obj << /Type /Action /S /GoTo /D [1720 0 R /XYZ 72.0 720.0 null] >> endobj 1921 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 257.04 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1920 0 R /H /I >> endobj 1922 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1920 0 R /H /I >> endobj 1923 0 obj << /Type /Action /S /GoTo /D [1723 0 R /XYZ 72.0 720.0 null] >> endobj 1924 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 219.27 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1923 0 R /H /I >> endobj 1925 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1923 0 R /H /I >> endobj 1926 0 obj << /Type /Action /S /GoTo /D [1726 0 R /XYZ 72.0 720.0 null] >> endobj 1927 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 220.93 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1926 0 R /H /I >> endobj 1928 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1926 0 R /H /I >> endobj 1929 0 obj << /Type /Action /S /GoTo /D [1729 0 R /XYZ 72.0 720.0 null] >> endobj 1930 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 230.36 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1929 0 R /H /I >> endobj 1931 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1929 0 R /H /I >> endobj 1932 0 obj << /Type /Action /S /GoTo /D [1732 0 R /XYZ 72.0 720.0 null] >> endobj 1933 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 231.48 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1932 0 R /H /I >> endobj 1934 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1932 0 R /H /I >> endobj 1935 0 obj << /Type /Action /S /GoTo /D [1735 0 R /XYZ 72.0 720.0 null] >> endobj 1936 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 209.82 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1935 0 R /H /I >> endobj 1937 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1935 0 R /H /I >> endobj 1938 0 obj << /Type /Action /S /GoTo /D [1738 0 R /XYZ 72.0 720.0 null] >> endobj 1939 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 265.38 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1938 0 R /H /I >> endobj 1940 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1938 0 R /H /I >> endobj 1941 0 obj << /Type /Action /S /GoTo /D [1741 0 R /XYZ 72.0 720.0 null] >> endobj 1942 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 234.27 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1941 0 R /H /I >> endobj 1943 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1941 0 R /H /I >> endobj 1944 0 obj << /Type /Action /S /GoTo /D [1744 0 R /XYZ 72.0 720.0 null] >> endobj 1945 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 241.48 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1944 0 R /H /I >> endobj 1946 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1944 0 R /H /I >> endobj 1947 0 obj << /Type /Action /S /GoTo /D [1747 0 R /XYZ 72.0 720.0 null] >> endobj 1948 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 253.41 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1947 0 R /H /I >> endobj 1949 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1947 0 R /H /I >> endobj 1950 0 obj << /Type /Action /S /GoTo /D [1753 0 R /XYZ 72.0 720.0 null] >> endobj 1951 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 229.54 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1950 0 R /H /I >> endobj 1952 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1950 0 R /H /I >> endobj 1953 0 obj << /Type /Action /S /GoTo /D [1759 0 R /XYZ 72.0 720.0 null] >> endobj 1954 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 234.54 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1953 0 R /H /I >> endobj 1955 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1953 0 R /H /I >> endobj 1956 0 obj << /Type /Action /S /GoTo /D [1765 0 R /XYZ 72.0 720.0 null] >> endobj 1957 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 266.19 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1956 0 R /H /I >> endobj 1958 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1956 0 R /H /I >> endobj 1959 0 obj << /Type /Action /S /GoTo /D [1771 0 R /XYZ 72.0 720.0 null] >> endobj 1960 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 266.76 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1959 0 R /H /I >> endobj 1961 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 277.5 539.998 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1959 0 R /H /I >> endobj 1962 0 obj << /Type /Action /S /GoTo /D [1777 0 R /XYZ 72.0 720.0 null] >> endobj 1963 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 271.76 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1962 0 R /H /I >> endobj 1964 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1962 0 R /H /I >> endobj 1965 0 obj << /Type /Action /S /GoTo /D [1783 0 R /XYZ 72.0 720.0 null] >> endobj 1966 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 285.1 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1965 0 R /H /I >> endobj 1967 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1965 0 R /H /I >> endobj 1968 0 obj << /Type /Action /S /GoTo /D [1789 0 R /XYZ 72.0 720.0 null] >> endobj 1969 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 281.2 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1968 0 R /H /I >> endobj 1970 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1968 0 R /H /I >> endobj 1971 0 obj << /Type /Action /S /GoTo /D [1795 0 R /XYZ 72.0 720.0 null] >> endobj 1972 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 248.42 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1971 0 R /H /I >> endobj 1973 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1971 0 R /H /I >> endobj 1974 0 obj << /Type /Action /S /GoTo /D [1801 0 R /XYZ 72.0 720.0 null] >> endobj 1975 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 248.99 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1974 0 R /H /I >> endobj 1976 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1974 0 R /H /I >> endobj 1977 0 obj << /Type /Action /S /GoTo /D [1807 0 R /XYZ 72.0 720.0 null] >> endobj 1978 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 253.99 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1977 0 R /H /I >> endobj 1979 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1977 0 R /H /I >> endobj 1980 0 obj << /Type /Action /S /GoTo /D [1813 0 R /XYZ 72.0 720.0 null] >> endobj 1981 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 267.33 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1980 0 R /H /I >> endobj 1982 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1980 0 R /H /I >> endobj 1983 0 obj << /Type /Action /S /GoTo /D [1819 0 R /XYZ 72.0 720.0 null] >> endobj 1984 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 263.43 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1983 0 R /H /I >> endobj 1985 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1983 0 R /H /I >> endobj 1986 0 obj << /Type /Action /S /GoTo /D [1825 0 R /XYZ 72.0 720.0 null] >> endobj 1987 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 297.31 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1986 0 R /H /I >> endobj 1988 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1986 0 R /H /I >> endobj 1989 0 obj << /Type /Action /S /GoTo /D [1828 0 R /XYZ 72.0 720.0 null] >> endobj 1990 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 261.2 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1989 0 R /H /I >> endobj 1991 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1989 0 R /H /I >> endobj 1992 0 obj << /Type /Action /S /GoTo /D [1831 0 R /XYZ 72.0 720.0 null] >> endobj 1993 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 256.76 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1992 0 R /H /I >> endobj 1994 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1992 0 R /H /I >> endobj 1995 0 obj << /Type /Action /S /GoTo /D [1834 0 R /XYZ 72.0 720.0 null] >> endobj 1996 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 267.87 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1995 0 R /H /I >> endobj 1997 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1995 0 R /H /I >> endobj 1998 0 obj << /Type /Action /S /GoTo /D [1837 0 R /XYZ 72.0 720.0 null] >> endobj 1999 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 270.08 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1998 0 R /H /I >> endobj 2000 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1998 0 R /H /I >> endobj 2001 0 obj << /Type /Action /S /GoTo /D [1840 0 R /XYZ 72.0 720.0 null] >> endobj 2002 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 263.42 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2001 0 R /H /I >> endobj 2003 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2001 0 R /H /I >> endobj 2004 0 obj << /Type /Action /S /GoTo /D [1843 0 R /XYZ 72.0 720.0 null] >> endobj 2005 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 285.1 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2004 0 R /H /I >> endobj 2006 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2004 0 R /H /I >> endobj 2007 0 obj << /Type /Action /S /GoTo /D [1846 0 R /XYZ 72.0 720.0 null] >> endobj 2008 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 248.42 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2007 0 R /H /I >> endobj 2009 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2007 0 R /H /I >> endobj 2010 0 obj << /Type /Action /S /GoTo /D [1849 0 R /XYZ 72.0 720.0 null] >> endobj 2011 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 257.3 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2010 0 R /H /I >> endobj 2012 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2010 0 R /H /I >> endobj 2013 0 obj << /Length 2014 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 2014 0 obj 14441 endobj 2015 0 obj [ 1852 0 R 1853 0 R 1855 0 R 1856 0 R 1858 0 R 1859 0 R 1861 0 R 1862 0 R 1864 0 R 1865 0 R 1867 0 R 1868 0 R 1870 0 R 1871 0 R 1873 0 R 1874 0 R 1876 0 R 1877 0 R 1879 0 R 1880 0 R 1882 0 R 1883 0 R 1885 0 R 1886 0 R 1888 0 R 1889 0 R 1891 0 R 1892 0 R 1894 0 R 1895 0 R 1897 0 R 1898 0 R 1900 0 R 1901 0 R 1903 0 R 1904 0 R 1906 0 R 1907 0 R 1909 0 R 1910 0 R 1912 0 R 1913 0 R 1915 0 R 1916 0 R 1918 0 R 1919 0 R 1921 0 R 1922 0 R 1924 0 R 1925 0 R 1927 0 R 1928 0 R 1930 0 R 1931 0 R 1933 0 R 1934 0 R 1936 0 R 1937 0 R 1939 0 R 1940 0 R 1942 0 R 1943 0 R 1945 0 R 1946 0 R 1948 0 R 1949 0 R 1951 0 R 1952 0 R 1954 0 R 1955 0 R 1957 0 R 1958 0 R 1960 0 R 1961 0 R 1963 0 R 1964 0 R 1966 0 R 1967 0 R 1969 0 R 1970 0 R 1972 0 R 1973 0 R 1975 0 R 1976 0 R 1978 0 R 1979 0 R 1981 0 R 1982 0 R 1984 0 R 1985 0 R 1987 0 R 1988 0 R 1990 0 R 1991 0 R 1993 0 R 1994 0 R 1996 0 R 1997 0 R 1999 0 R 2000 0 R 2002 0 R 2003 0 R 2005 0 R 2006 0 R 2008 0 R 2009 0 R 2011 0 R 2012 0 R ] endobj 2016 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 2015 0 R /Contents 2013 0 R >> endobj 2017 0 obj << /S /D /St 335 >> endobj 2018 0 obj << /Length 2019 0 R /Filter /FlateDecode >> stream xUMs0+ޱ=D}i;7L{H3e1`:41YoW7g.B2HW A',0pv1]'r=ka{^!| :5x[)I*os}Egh$QLxoz[VˬC>@Sv;qfp> 0}uyTP""'u}7ENNjJ }l2HڏgQH~YJ{>=H Tɘ1T*9prz@U254TQ6h'$ Chj)ʵtKYHHI!0N'>2ϛJߓ|FN}A0}H٣laêЫL, BV @Pv*R7ѣX5E*Y;STM(VQi_dte|@rBY=2<\>d>~4xPΜa"~*>~@Tp7cHM3sm&,"Ncg\/oq endstream endobj 2019 0 obj 565 endobj 2020 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2018 0 R >> endobj 2021 0 obj << /Length 2022 0 R /Filter /FlateDecode >> stream xVMs0+dV%!ʱ:4QlScp$_ l1ɥ{X"`QcL욞D5ێD9̢.@ 2MA+:V1yBM`s^<$8Fa:x+-Tx"<"Q C ԭׯپ˴T;68 # [is>) ݜiO \=a0ZbXerty ȡٰHۅ\+, :i*gwf3V8ȧUvǟd2Q%2309%LCfw;DMAX'2m$EQ,^6{ң03q8N,v2͋fɽj!2p%ue*[Jg*EM:Lisn%ev2M铢4Eii]Ǯ(u'#rNΈz 4Mb.n o:hWB0R|?<^®_4t endstream endobj 2022 0 obj 717 endobj 2023 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2021 0 R >> endobj 2024 0 obj << /Length 2025 0 R /Filter /FlateDecode >> stream xUn0+b =u#44(dvFK8h6G% $a|fG.R1(HC \,~q~zB:_܅G /$|S!읏 !劸\(||™/A1+0/uΧ`T-Uik$a-I@q HWO2["Θȶ"HyHTҭ?'\>FԲ( I<΄GŘ5\*a ?_@C s[, NLH<ϳ&64˸DJ%}<淤jה)D 3Fz6s544_(;E4ud;l"L֥=uB: hgFО%T|;=\ƵugEot}rpzWl3IoWGhS ii6'_/sAZ ENʮ?: endstream endobj 2025 0 obj 517 endobj 2026 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2024 0 R >> endobj 2027 0 obj << /Length 2028 0 R /Filter /FlateDecode >> stream xVn0+rD1Ǧ C4F{HBXE) ߡ'Z &ac7oMy^'nʼ.FA00Dh- ^Oc=6D7[Wkpzw1"B7ǕKj(-~)eBs&݃*wuuۿURz oՠ[Nהl)@C &xP#@_=Uo SF˽׺l 4#sC|F9!Ym!͘%|$~A>U],vHA(t`L*gږ/E,etߥҔq? xg2֝- Jh4T^ XtF9C H?8eaF[}rIl-WtA L`( uXKUfY (':ṁLA"d`0IyLDypl/ol:Y&С%p V.tLa8dv8c-H,Us ltW[ȏRMir亿8x /fleNqG5)zM0[l60 ;Wqtu'#s#?u8n^YUw'} endstream endobj 2028 0 obj 679 endobj 2029 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2027 0 R >> endobj 2030 0 obj << /Length 2031 0 R /Filter /FlateDecode >> stream xUr@} 㣳UrHY1 H" )̰ RJC=~q`s_ۃ qlZSx>Q waX;w/+OãA{wwޙW ҹ = si@sbT؋BÛW/!J-G8“l,YY5GNG: (Fq)70*͍檌(QETgn.E0d4>Lbxv7amow@Vl40 ^#mq'/J*Fr.<§ACOr*. \i#?0s3 5Im;2ƪVL{*"4 7.CߴXF͞H =jZŀU0LDIaJˀTB٤3âNI5C [(Y$2o5մ|gSqbIIF8% Xt2ٚv\>MyiڥQq+ \< ngnUrbίnn)di3&ή< endstream endobj 2031 0 obj 603 endobj 2032 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2030 0 R >> endobj 2033 0 obj << /Length 2034 0 R /Filter /FlateDecode >> stream xVɒ0}LhTJ);J)M,`'f|ɌqY3SCs`}ܘ Al>DᚅEf17\v!ܞ৕X>[ 5ɪõ;k9_6 [zay 0[9!FPXp,N%[XY.j}\ej*e;T9ho!^gwPCRA1f1Jm^&* P~ FA6Q0&(P9Ðp](/J`ѤJJvf꥞. |k|uIѹl1Q.jzRʐfu^n:859r=}\')釗Sb'!)G @&AL VA8uXEXFDeZX(qZ 1b|T(*:ɤ߁1)~ =Jkj̙܃+ΰ?Q8/bD2 'yU*t?2F,QA7wF#AH`xTjeƬj;40TarI}ot(Jy9tnx;Ƭc+yMgS?،U6p3i`s 0_|yaW‡$ endstream endobj 2034 0 obj 653 endobj 2035 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2033 0 R >> endobj 2036 0 obj << /Length 2037 0 R /Filter /FlateDecode >> stream xUn0+%Q̱E[(CLB"ʦhz8:6 Skvg. u!)dEk1 #  w?~wkf`9tA#aXݧdl-(d\J#FQH }Mcir$VʾK1U}e.j}uʺw{ T7ТBO0 WG%ƘlMy6 U w&<1p(aWLhbb"oJŐk^YaUZ0jWRC*n+QE$yʫ*'IKѸ!M{0P8Κ?GW@tIy (] *MmƨtY]<MQkŽ2P +u7Fi pJ"9$-Լˋ9sFN*ɐcK2}4~@Z6q\'g5Y}7ĤEo@@hgņn^Arb.SFq`\<$^U7 endstream endobj 2037 0 obj 551 endobj 2038 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2036 0 R >> endobj 2039 0 obj << /Length 2040 0 R /Filter /FlateDecode >> stream xVMo@+Jv]6~*=Tqb40! ΂c^E޼, `H} q_WL7,l'XO?vl l/ᇗz_Bo a5Z7L_އa~wVZKe |p{\mw.ae\7([+vVϯkG߰f%djpP]=u5ZD;c"[ħcZ+7+eRVq84 @ &D3ags_ie ًS%)\:a MŰM{cXeQ<+u燼3CdiIfy-Xb&V!{1ͅd Qs4 2L]eEbr4j\"\OkۉRn~=c9v҇E-xZG}\/ha!_t5)ݧ8sWeQMcZW]]iNhzZ1.e2*JtE `JWbG<}øoݧ>ĭ_Wn'9j+3<鱤NA¨p"6\u@a߭ZgG;Ѿ 'Z?6)pomcdƿpdѷTbk]u_dfJ2 endstream endobj 2040 0 obj 640 endobj 2041 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2039 0 R >> endobj 2042 0 obj << /Length 2043 0 R /Filter /FlateDecode >> stream xUMs0+ʱ:qIiC@K`7 /Mm1ݷO;!ue.(Dm1O!@\D=7,-vǦ}|pwN`<<46{ YO~S0sZ&\!DACaûw`ZaAIdVvҙTc7Љbj"!|4rʐy&}!I:K\MW$]Wg1V`i*L!' JnrZ/*vRiֱ KO" eIηkb@Jf:Mt#!Di#)'e Y6߷GGe'AV^BJHi V} a+5Rc' ѰTy:-ohZ΀նG$ʨM)7-0:,OKK"@oexm/(s1܎0ICĜRFf.;;_U{@8 endstream endobj 2043 0 obj 611 endobj 2044 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2042 0 R >> endobj 2045 0 obj << /Length 2046 0 R /Filter /FlateDecode >> stream xVMs0+4rk3M'=x (6D&Ϳ Xx۷Q@{]A*{nm$ܠp3Xz=nƄrh56{~|Ef;i">JЇp܇A^)kG~xߢl9e,ۻ:ftwXB6nH[W ٩"VuY֗U&if"uҊsDb`QHm"qR\L]@tu Ht;Ҭ7s) -vH p [^Mf6Pu$i%R lh)DKHxOK$AhKZڒAiP<*]z]jRm}섃[p9R:2Gԃ]q>E;Yʖo=.;8%M}̰x)3wα[1|Ǿ]  #=sU3z s_PCE&_Y; m[/p]7] ?^k~`_EP$KbUu_&f endstream endobj 2046 0 obj 655 endobj 2047 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2045 0 R >> endobj 2048 0 obj << /Length 2049 0 R /Filter /FlateDecode >> stream xTMs0+VI>6vL=aC Wc۸=51x׈*,duqP"CX&e;Ś[H5VLWoU4(6¬JhG:[Y^e(lVoejtBiA#.篆X҄H9ߡrًa;wdnZv i??F!K$Zw 򪣚"Ɍ>*-\sL"?R~Lovܻ>Υb |4bEӧ y^AS.s`Ҁ#MYffar#(M.A&4kWp>f"b8bK:!Vy6 | {a{bgNߡ8p3J8bV‘޸2j2, endstream endobj 2049 0 obj 529 endobj 2050 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2048 0 R >> endobj 2051 0 obj << /Length 2052 0 R /Filter /FlateDecode >> stream xVMs0W=՗-;4Ӥig2$t\,]i&?H`sj޾g0 }fkO p70I- | sǪ{;6/KK^G3kSJ," ~@YQOIl^5ܽS)bIZ)Q)QK1ycjo;DfB nC k_mWHu0FѮ0,zVRDWS_#>!UCߠ0!>æ+_p@pV"( |U:{5 ^5zIba:vsQV*W=4ޣ>f~̣8IԂ\CP!aOWbC ]N̸F\4&asRTR(QGG9p5P#ل6@]pBlG\kȤ.N NtЋ\%y運ќKfBUiBj9 1~*] at{!;;z͐U˄>N,`{9ɋARaH/5RbwHׇOֆ́\k1mY-2/FT2r1 oG mdg9|6mFQ0oɸ~mQ'Cם£&f6z60|ӟ&͔040ft(2cÈLkF~3RD_gٶ endstream endobj 2052 0 obj 724 endobj 2053 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2051 0 R >> endobj 2054 0 obj << /Length 2055 0 R /Filter /FlateDecode >> stream x͖KW0|lyA V]X #A10g\_${ (GnPC{ }`p-E npGqܽ{N5d?£ջFkvv7)>|QnBjCB"vQWNMTVY(^[S9ڋV0Ƣ=ok$UiRq}!UQSJEuU.qIe.ȯ Ar™a8bD%٘ŹW<&1cSȓ3ȍ>  Q WAPDEQ} \-V[h&H-=$ 5T$AqVUal]$Uf]kWRc> endobj 2057 0 obj << /Length 2058 0 R /Filter /FlateDecode >> stream xVKs0+fN{$ 6S$'M}%vCzjb<v]Iy=N:NC B >5(w>mk܏ f׺W(bð>޻O -(`" B p\J5Iy{Wc<Ȗʲlk(ޡQ@q}T!*F1f0nIkdz_N@Gd#)aLl2^uۺpOJ.Le~ߔ uVEF907ld( Co=^=UsCőiԂf^&!Sgv'̖wJM|oh@-0N+]T*)8c(Fy 1fRLL^@+8\f@wŭTPH A@*eiIWJӝR2C.Q">.7}$˔Z⏓`\ ^`ރ6M%k,KnFsl9`ZeR,Wi 9W#54+2'7~^ f^nbL G04,y0FO I-?uM߰kL xas+vpmǾ\0AFk ꎿ~b endstream endobj 2058 0 obj 671 endobj 2059 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2057 0 R >> endobj 2060 0 obj << /Length 2061 0 R /Filter /FlateDecode >> stream xUMs0W=D]IeNiL ?LLy(i8YS~|we+xgNUw} 4=Su$d|B4UQ6틹.;fM캮̅ .9e1@bq pP]#d6&@ki,]""2$a袪:;ږ/}Uu(sL |/kdlN$baD6Vd'(@rZh\3ԝXz endstream endobj 2061 0 obj 555 endobj 2062 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2060 0 R >> endobj 2063 0 obj << /Length 2064 0 R /Filter /FlateDecode >> stream xTn0+b =5,4Y4Q~}Zxzjb7<kh# +a\1ܱpX_~A8> endobj 2066 0 obj << /Length 2067 0 R /Filter /FlateDecode >> stream xVR0}W#̀mYQJvZ.Ž a:Q!ﻒ؉y+ęYj}1xA*Ļol $X \b@>3r7=].n+< '5Zh`KE)nncB8)AULޕF p&(ev2)1eŀs}8JLU)RN-wݥ + ,%$ C+OE95UR>Q2R*Q (O_X]/j?A/bnXKFXsȁr&L> endobj 2069 0 obj << /Length 2070 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 2070 0 obj 529 endobj 2071 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2069 0 R >> endobj 2072 0 obj << /Length 2073 0 R /Filter /FlateDecode >> stream xVKS@+U`oʖ{݃z@$ DT=<=T4MW7׉[,@q0IE nq'XԻ_nmL/(nК݇׸We/b0FB4J+4Z>Dp>%jSY>(^YSAd+`^Քup*Rn NºznUhԔR *{szNW$lRIZqH,Cp&(eaиx2<4`C~9&Yi,l&?1BiVE'+.)D!f=q%A8qTCt+%*:a+-HS9eR jWX-5Ȯ1DźL Dg t8ǂǔ;7js1]3;N;Ln S%ǣXt4-G/`ҬjM^?pv7xH/xLЖ vIAsX*T/x0HC,MlW~M"yB1j*X[SB^oBP„{"u[Wh$SJo%Zf%m=> endobj 2075 0 obj << /Length 2076 0 R /Filter /FlateDecode >> stream xVMs0+i=t mI䘩- Ox,OZ ?H!_OA!B# (0{AsݜW` _{9hm7uj|Hw#`i'P$R* !+.컮+4fK{HlolM} e_I][H6:8%}*1(b-Vz2YKR.yMWִP:L 3A)Lm- %>Ha;e 2Zunڹj>LGxx":8:|b+(BdT̓4&;やP~fޒ# ^kPl}1z,Kee`7aXRӴu롭>7@\Z[YȫB@(5d ==3 YY0"%f3adEaq>0i7q=%2kS?5j~]QȾg 0ǫ5kUЄ0ᯄXZ9H*,Tg ߢyV3 ߺf[6,qimBґwQ6hW !d5BDWV[` endstream endobj 2076 0 obj 665 endobj 2077 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2075 0 R >> endobj 2078 0 obj << /Length 2079 0 R /Filter /FlateDecode >> stream xVr0w.BN$.,Ql&_+ଚ/::GWG{ (^GQ,A`p  Q{Omr7 }x ')mާplS+4Z>Dp> .ߝ(o|Qzkԙ`WSU6yBn#SW® R*,%)!&3{+Cp&(e884 #ņ?>@N$-Dž̓)!_ 3sa!ܜy^.%A\f싧XԮzO$ZZ> endobj 2081 0 obj << /Length 2082 0 R /Filter /FlateDecode >> stream xVr0Z&zBN$.,m_+"jb{,qѹ>Efy<6C#b恹A3 bVd?6&O's?5NnsnBțF:=1_iP /UL| endstream endobj 2082 0 obj 697 endobj 2083 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2081 0 R >> endobj 2084 0 obj << /Length 2085 0 R /Filter /FlateDecode >> stream xVv0lQ+="'9"Āp];nܙHÓÀqa8LS穱1lb%Cs;3kڎ dOZc{qjw-ιB_Tlλys E<*"?a uɋ$C._?@e+aVUUpKRq ʸSGDb]*S%T4¬|//ũʜ 3A),Pw(&,}e*)Bg.  aoHuy!)}!kw,_ĴPuB%|Ԡ~c RO\QE˵Q"aV@&>+FOAUKXd B*n QA0o]^Yiol &_S o=bϳ(Mpz=Ob1vYQ>$\- V8:N1uT&ysW3R tlK]-_Jnyū(ǣaqvȜc,mSE„}<+abS_kntQ~blx.i@}ou6?4^`[0J/ogVQv endstream endobj 2085 0 obj 673 endobj 2086 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2084 0 R >> endobj 2087 0 obj << /Length 2088 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 2088 0 obj 550 endobj 2089 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2087 0 R >> endobj 2090 0 obj << /Length 2091 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 2091 0 obj 340 endobj 2092 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2090 0 R >> endobj 2093 0 obj << /Length 2094 0 R /Filter /FlateDecode >> stream xTMO0WxvXiAVD ["$߯Bn@֓gτv:e8*c !w!K`y(.0X_q;#& \ۈ#_ҥt~)nK .r`EP  náϞl~pz O٩`tkl}hk}T nĩ*& $zQ7 wIl[onpuј2N9Q踟wAiϤZc0 j?@j[m僅vIl _=<4m)J 2zs~ݔjFa(Qu+>bLV-oNnx>!&r!VSMe]2|F(Jڸcck_ £S/I piKcؗTAJ! ޹҄ģ'k endstream endobj 2094 0 obj 468 endobj 2095 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2093 0 R >> endobj 2096 0 obj << /Length 2097 0 R /Filter /FlateDecode >> stream xTMO0Wc;VzV,Ihq,l­/[O37~d0+ae`$(}THL pCat/8=~1[B SrC↰f9-M," e JpIȷp}rU-\ b׸"?ةt|#13>( y:j$-+?޵wkz]ᚨД$KHf;eiJ{}UFJ3ԓpYWK ~VEQԮiiүaUհW{ÎTAf&#y ruDծ)!N!Psk2k"E:z^7'lS}BB> endobj 2099 0 obj << /Length 2100 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 ;WŮ牦 endstream endobj 2100 0 obj 474 endobj 2101 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2099 0 R >> endobj 2102 0 obj << /Length 2103 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(=?MTjBGv endstream endobj 2103 0 obj 466 endobj 2104 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2102 0 R >> endobj 2105 0 obj << /Length 2106 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 {2Uvi~ endstream endobj 2106 0 obj 471 endobj 2107 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2105 0 R >> endobj 2108 0 obj << /Length 2109 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 endstream endobj 2109 0 obj 511 endobj 2110 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2108 0 R >> endobj 2111 0 obj << /Length 2112 0 R /Filter /FlateDecode >> stream xTQO0~ﯸGI^ۭ]yDM|#.A AH {6pM}}K&>ss1FmHDeHp@3=K {x">Y cW&2f!u#m`y$Q(WҺKBjQJ 0#Ianl̀}NSȓr4"O$-GiSrș#AvbA_i(Ejw(#Psk"kjtmү8=xYFaJB<@A_՜JZs"F;H(֐|vBⷤq. Ŧ5A5bXV͸> endobj 2114 0 obj << /Length 2115 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 2117 0 obj << /Length 2118 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)mwfj?R) endstream endobj 2118 0 obj 465 endobj 2119 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2117 0 R >> endobj 2120 0 obj << /Length 2121 0 R /Filter /FlateDecode >> stream xTn0+ $%>|K6@oF0r$EKJr"?[Q g9 @jq0N¢dO=&HPz \ȸ X8 !g}Z;(s3"妴;yw endstream endobj 2121 0 obj 475 endobj 2122 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2120 0 R >> endobj 2123 0 obj << /Length 2124 0 R /Filter /FlateDecode >> stream xVMs0+ rG:әvii& 0sjb<^xvV+E (^'~Ptu6HvM,NIc4({Bt3&QQ]^1ZwEt>(̣Y,F!mRʄCW!Wԯ }v2Lϛʦn8~i||Tc)QXSW5 $:QVU91ц䶼L~ӪO$' 3 GdAq67s5!|3Scl1q.x9lTD'x؛zjW@EEIxgXemir;HiIJNx% e\I9>=_ܛIǼ 3OR؀f.}UYr-f.0g|T kb.L:t tr4%L'R^ޕEmԡ('S+eQ7zuBIZ޸ieW- }+lmZ3[9N211s[kbU} ityئ0E쾘nv~G% l}k~3CNSs~<5=U endstream endobj 2124 0 obj 703 endobj 2125 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2123 0 R >> endobj 2126 0 obj << /Length 2127 0 R /Filter /FlateDecode >> stream xVN@}W#He7{HR/TCUDTBm%!vT#o43s2;׉[.@qѮ0IxE nqޘo?M1=\y@kp} C4:ep (̂yhVj3J) b"v\]/S(YZS[e`ezQWSuH]<jF5T|UQ@eYwڐ$+nKLHiU7"9 gƄ)8CWcU|T|e"b cm23PdfY]2 ֱRzseNHB ( ڪ[f =j%*:>z)W?lؑ{H$j +M߇iW G'tρITj|si9XM=d$>I`pÁ1Q{Hw: 9*Oi%L־Rw^}m028<^0A%Q(v`ʪ' endstream endobj 2127 0 obj 772 endobj 2128 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2126 0 R >> endobj 2129 0 obj << /Length 2130 0 R /Filter /FlateDecode >> stream xVMs0W=D՗-+~3iLKEmԡ('S[e[,ON(ILk>>jږE> 7-] rLgLmQby^Y0 :JewU,$&x3NXq7VrѷlGVrA)a;w' AV endstream endobj 2130 0 obj 699 endobj 2131 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2129 0 R >> endobj 2132 0 obj << /Length 2133 0 R /Filter /FlateDecode >> stream xVn@}+汑`HQ^RUXCET'u\썟 3svه]΃@qѶ0IxE ŝ{cVvD{ ·4:Ep (Ft#$fR&Dp~FszwQMdaMut V7y_MY ǿ"uokepJsuUFVEYܚ[kCy*ʐT2oTڥs J _kL1Bj1}\li"b scmrg|Y]&!*W:·p2ؕYO^EIEN^*/6{QH-V73.H̖fMC~&bkMg|j(<:V?i{tC(5d!B]^N,TEZ̼Cv@\B.C*MjG3,UeLY9-&)e"Nc 5 aPB븧Ga +c#b|Gkk̳^}b گ,0ĴB &+ D |M_HN547")1'1"ͻشvpءPaֲe`Pҭ1A 4 6АSe2A{: y2O7Y[%־R[}m70a2:^0A%Q(w[ʪj endstream endobj 2133 0 obj 778 endobj 2134 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2132 0 R >> endobj 2135 0 obj << /Length 2136 0 R /Filter /FlateDecode >> stream xUKs0+B96m:C0!΁H8lSAE~.`@p`("X(nP[PDOnmD۬gPw(xweU1 >\($JMbF)eBAL!Mx05$֚`y:yJ_7Gy>28% ketB6(۪7dž,Қ&43E7Q1X"IXs5#\yZ|gEIE^T[8%*:q:)Hih8&eR(Z+,ZM0m{(vӤ,fWe].)Ě t:aZo=Ri;9y "ݼB9|CKי9aUlL`<^<ԍzFS%kᅩMG 0BY _7H4'cU4*  :ݛUVYrYq]mDze߾CI'w+R7yPFafh 1Gr,7셒GGG=>) endstream endobj 2136 0 obj 637 endobj 2137 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2135 0 R >> endobj 2138 0 obj << /Length 2139 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\~cU/ endstream endobj 2139 0 obj 545 endobj 2140 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2138 0 R >> endobj 2141 0 obj << /Length 2142 0 R /Filter /FlateDecode >> stream xUKo@+Hv_l\6z8 6eXe|ڙÀsa9,7ή1P1& wQ\h.qyxOfġչ@#]T3BߕmΧxRʄCtl mn9_w鬴,WxfQNš:U( Qe sy!̄bs*>HN8`cTTZr9T> Vs& 1TXoWQyWEOm TQK tʹ)V?RTŴH9deRϗZ+ Jx.8)ʡL4{ 2CC Mp?k#,̲/MC5Mg <> endobj 2144 0 obj << /Length 2145 0 R /Filter /FlateDecode >> stream xV]O0}ϯ I#U`xS@ \PȗXm"Q $D4f f0G(/~&y 0| oN#Xw=28%Uni,!]"[Ɵ4oۄ 'KBaU+>E!BJqk |f“PQ E6*VhoRIt-VxV(@v;$\7ڕvB9يͩ6pNo7y8{ycVχ endstream endobj 2145 0 obj 716 endobj 2146 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2144 0 R >> endobj 2147 0 obj << /Length 2148 0 R /Filter /FlateDecode >> stream xVKs0W=DöHg:Ni6H (M1֗e lzg*i9$p!' SIe G¤'r|'<|+]\ãɠ\ #XTbsw'BJJ8Bʶy.MyS!Q2Q*Ɏd>b )'h|ϖEVIjGgCvPx~X T NrZ9 XU1)~Zu4B>l`roSE4g BA0% Kbrgu@ .fl^yL[K5tr4!L'j+J|Rl\*\-(]K:bDLIZn{Ƭ+S^$",TF:8znMMD>"?Mk[mkV n;)\]}ՉZ(|Kݶm1 g_l;+;h=9^<_0ǏRB!JU?BDD endstream endobj 2148 0 obj 703 endobj 2149 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2147 0 R >> endobj 2150 0 obj << /Length 2151 0 R /Filter /FlateDecode >> stream xVn@}+1^e#EzI>T8^TuMX,8sfÀuf8K籱1kb%Cs;_,?vM}xk's(|unn:C] 8W@蛊:/=`d+H(LH8K9/]B.Oo!| w2L*ʪn8%j|de)XSO% $QVE~M )t4KK]S.Z}:r™@1#\AFB)cgbm<<6&k(t'=46Fo]еMKu"zK*o)MLj%JJ<زqqA\+j_?ZwH>g.JJI ,9X4K“e'Uρ)R0 i=Trzsi8-JJbv^_xC!{$~Sj3=]x4cD~e1jIe،@L#&D~522Qבi:Y/>0|;D_@OO_+ U{GKSU tF r{IHG&.Uh0Ox@KCwzAP!7[l,p{`x`H? :y7'{.i}k"6ڜcñepz`0JsU?݂ endstream endobj 2151 0 obj 769 endobj 2152 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2150 0 R >> endobj 2153 0 obj << /Length 2154 0 R /Filter /FlateDecode >> stream xVKs0W=D˒cLgiO{H3<-YE3Ȭiҽǀum8L}mc9uhb& \h3 7VOi3V&,ᇗx>zwh݇?^xם@苊{zo|`^ZiH(Lh}8k}uNhAu_IY ǯ&e\.28%k:FAD-&K'2/!fJc 9L*-qCh;ɹ٩q6ϣmAчҮԑ \N&2ȧ)QJ9t]S$q>ȍItHDRO|VD>)@J|-e^2%uTb=HPETajz)P."Q>k ;SDy!'0'ݚH  B Cs(;8 565#+U"\G.$q'!;>Tml4Ҝ@uPP`L)כt 삵}on]I;;822<(=zh endstream endobj 2154 0 obj 698 endobj 2155 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2153 0 R >> endobj 2156 0 obj << /Length 2157 0 R /Filter /FlateDecode >> stream xVn@}+汑^Y6RTTC(VGk[;Ŏ!^穉 93g}Py{]n: _[NЮwиWe/b0 >w t'4$bR&4DDp~F ys'lxYF_ϣL,:M/]h("gge )l?l:I#NOZMINZ&˗eZF!$FGƄ<1>qA$DϏx[j$r3IIc4\ Ƌt9?^Ushаv~|$3Pq.t57 ac˷>,19 !srb,[CVsy!Wqyv_WT=nSr|y( [\Q뫬HLksҪ6#HϠ_@y<CLYCI !(a=-*_JɩVՂF_y{I#n,eR ;wPM؛liaKQr %9:I M{GC L#z8! Urn7"A$L־RG}m-a20\07A%޶PDfUu?r endstream endobj 2157 0 obj 771 endobj 2158 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2156 0 R >> endobj 2159 0 obj << /Length 2160 0 R /Filter /FlateDecode >> stream xVo0~篸UZ=JդMۤIVM(qZҘvIhֆ}w"c7(͡XDw@qɶ 0IxE npcfOi?v&?ETEDWh=QGgA UF&E>(dJMRF)eBAJ![e5d_OVWY_K_V> endobj 2162 0 obj << /Length 2163 0 R /Filter /FlateDecode >> stream xVMo@+/X6~RVCU1 u}gacOMov-Js1PDobaLEnA[uw̛nmM; (| nz~x\/*6 y6 \($]i&12 &k,M25$Қ$^u_CWF`XfݎPґ;+uYm0W! $bq癫B endstream endobj 2163 0 obj 689 endobj 2164 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2162 0 R >> endobj 2165 0 obj << /Length 2166 0 R /Filter /FlateDecode >> stream xVmo0ίz~+UI6+Z?4DIH1ɚyIh|Z"<P tu6M,hnQ`{?YgڏpZouϽA UFa꽏0 q H(LH8s<8/ߺ8Y]^AoT0VzP6y/I> endobj 2168 0 obj << /Length 2169 0 R /Filter /FlateDecode >> stream x͖Mo@9R`HQVmJ58cp[wǀM|jb,}xgf_0x\Thc $wC󁹄{n(ڞ0`NY=&Dۋ%:Csw9=4ksK(,B]L ֥&~q>J㯬қ:Z ǯ$ynup:T aꪬ{CJϛm.' l/VqS8pjg> 0sK6.h*(ry S$ zKJ|7K]^˴lQud%|4а1Mq);hQ{Ij2W?phF4ON ǐ)"P$:l"aWr6bz߸kH(qx~ꉡ".w/ӔqMzpILK;=ڭ5]v yFߛ*0VFIUU~6aw򀺍JO;:C'tkȋd4AvIh1ʐnN/BP„)Xx.qqeŵBRzґmƟlvO[`7~dNyH0J;o/Us] endstream endobj 2169 0 obj 656 endobj 2170 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2168 0 R >> endobj 2171 0 obj << /Length 2172 0 R /Filter /FlateDecode >> stream xVMo0 Wö6bpR%5ةv~(N;qrZA_0]F ]KR`1 4Q"vkc|ʈhOwԸWe/b0fћl-mbR&$("_]U_Aqo }v2L/C|2O ]`TFDV_hX eUWs~nCm5Λ+V9 Q yceೱ6(,Lڔn)9`rhC>{}^U$%iV*ZvP:&Z*S 2.HLOR4.aE!-%IUD,_=c|k]jZ-Aãg'Nuχu3L{Rzzusi9=JTZ_q! BC2)U?f[O3k9tC(avGe_E>L&"L/ҙ?n I̩ƃނ;.m<>:DaռFU9JO 𢨍qL̼(KPk>o{`KdCz7?!10{(۔黙nILG[kZ̢oypKx`߈0]H 虫K endstream endobj 2172 0 obj 697 endobj 2173 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2171 0 R >> endobj 2174 0 obj << /Length 2175 0 R /Filter /FlateDecode >> stream xVn@}+1`HQ^RUXCUTu\썟 аga].@qѶ0IxE ŝO[1W?ݵ1<9A!w2B_UlfQ<Fa4}Vj3J) b"v?\]/S(YZSKi`ezQWSuH]<jF5T\ШQ ъ,[szjkm5dag4ժv3Bc>:Ϣu7#C64\ ˴, AyJ'$"'jdKw%*:qcg\I9>#̆L*RkWIe/waƒcFZ/@ZNOP _B]^N,TEZ̽Cطv@\9\"0&3Xnוc(J0e紘Ȧ`Wi ?_;d" aTڐUb.ja7={_Zy22Ĵ_@ V`&/2*_$S]ꘘ(bNb34яƦe¿CPEXMkϳXH@"O+N\Ѻp|&@'m3,1{;!n`2Al[ސR>0]cٙCI=[skR7Ts+S(8 5(\ endstream endobj 2175 0 obj 757 endobj 2176 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2174 0 R >> endobj 2177 0 obj << /Length 2178 0 R /Filter /FlateDecode >> stream xVKs0+ꉤHg:N3aC`Gv]19&~ /|~,P|E[eth"71+47(]{Bt6&=QQ]^ x*6 };S($(Lh0Dp_%\(]I*] /ѧd/S+GxGN5TTѢ@e.&!r]7R؀3"c.A'xL*/uB2;(]~Y ۨm?j.A(MБzrq˩'$cNɋUlV17;CzDRghH#F!3FZj,]fMfi 9L۞<]0 !P̠JK-iY;;u˩.< YMurUZ`ھXCEY@ZN|l0r}MPCgm|(BQN$:X>iV1"`|;>rVUVAzSۛ ,[R㘸yY>ϔ]xETTjr;)H_-l .vhwCQI}g~#?LHiaX{[(aUF endstream endobj 2178 0 obj 696 endobj 2179 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2177 0 R >> endobj 2180 0 obj << /S /r /St 9 >> endobj 2181 0 obj << /Type /Action /S /GoTo /D [2020 0 R /XYZ 72.0 720.0 null] >> endobj 2182 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 264.53 718.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 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2181 0 R /H /I >> endobj 2184 0 obj << /Type /Action /S /GoTo /D [2023 0 R /XYZ 72.0 720.0 null] >> endobj 2185 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 275.63 706.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 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2184 0 R /H /I >> endobj 2187 0 obj << /Type /Action /S /GoTo /D [2026 0 R /XYZ 72.0 720.0 null] >> endobj 2188 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 241.19 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2187 0 R /H /I >> endobj 2189 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2187 0 R /H /I >> endobj 2190 0 obj << /Type /Action /S /GoTo /D [2029 0 R /XYZ 72.0 720.0 null] >> endobj 2191 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 246.76 682.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 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2190 0 R /H /I >> endobj 2193 0 obj << /Type /Action /S /GoTo /D [2032 0 R /XYZ 72.0 720.0 null] >> endobj 2194 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 235.65 670.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 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2193 0 R /H /I >> endobj 2196 0 obj << /Type /Action /S /GoTo /D [2035 0 R /XYZ 72.0 720.0 null] >> endobj 2197 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 247.31 658.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.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2196 0 R /H /I >> endobj 2199 0 obj << /Type /Action /S /GoTo /D [2038 0 R /XYZ 72.0 720.0 null] >> endobj 2200 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 234.53 646.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 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2199 0 R /H /I >> endobj 2202 0 obj << /Type /Action /S /GoTo /D [2041 0 R /XYZ 72.0 720.0 null] >> endobj 2203 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 247.31 634.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 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2202 0 R /H /I >> endobj 2205 0 obj << /Type /Action /S /GoTo /D [2044 0 R /XYZ 72.0 720.0 null] >> endobj 2206 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 235.65 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2205 0 R /H /I >> endobj 2207 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2205 0 R /H /I >> endobj 2208 0 obj << /Type /Action /S /GoTo /D [2047 0 R /XYZ 72.0 720.0 null] >> endobj 2209 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 229.82 610.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 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2208 0 R /H /I >> endobj 2211 0 obj << /Type /Action /S /GoTo /D [2050 0 R /XYZ 72.0 720.0 null] >> endobj 2212 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 256.2 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2211 0 R /H /I >> endobj 2213 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 589.5 539.998 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2211 0 R /H /I >> endobj 2214 0 obj << /Type /Action /S /GoTo /D [2053 0 R /XYZ 72.0 720.0 null] >> endobj 2215 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 215.92 586.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 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2214 0 R /H /I >> endobj 2217 0 obj << /Type /Action /S /GoTo /D [2056 0 R /XYZ 72.0 720.0 null] >> endobj 2218 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 220.93 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2217 0 R /H /I >> endobj 2219 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2217 0 R /H /I >> endobj 2220 0 obj << /Type /Action /S /GoTo /D [2059 0 R /XYZ 72.0 720.0 null] >> endobj 2221 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 247.31 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2220 0 R /H /I >> endobj 2222 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2220 0 R /H /I >> endobj 2223 0 obj << /Type /Action /S /GoTo /D [2062 0 R /XYZ 72.0 720.0 null] >> endobj 2224 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 222.05 550.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 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2223 0 R /H /I >> endobj 2226 0 obj << /Type /Action /S /GoTo /D [2065 0 R /XYZ 72.0 720.0 null] >> endobj 2227 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 248.43 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2226 0 R /H /I >> endobj 2228 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2226 0 R /H /I >> endobj 2229 0 obj << /Type /Action /S /GoTo /D [2068 0 R /XYZ 72.0 720.0 null] >> endobj 2230 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 229.27 526.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 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2229 0 R /H /I >> endobj 2232 0 obj << /Type /Action /S /GoTo /D [2071 0 R /XYZ 72.0 720.0 null] >> endobj 2233 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 255.65 514.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 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2232 0 R /H /I >> endobj 2235 0 obj << /Type /Action /S /GoTo /D [2074 0 R /XYZ 72.0 720.0 null] >> endobj 2236 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 232.6 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2235 0 R /H /I >> endobj 2237 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2235 0 R /H /I >> endobj 2238 0 obj << /Type /Action /S /GoTo /D [2077 0 R /XYZ 72.0 720.0 null] >> endobj 2239 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 258.98 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2238 0 R /H /I >> endobj 2240 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2238 0 R /H /I >> endobj 2241 0 obj << /Type /Action /S /GoTo /D [2080 0 R /XYZ 72.0 720.0 null] >> endobj 2242 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 223.71 478.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 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2241 0 R /H /I >> endobj 2244 0 obj << /Type /Action /S /GoTo /D [2083 0 R /XYZ 72.0 720.0 null] >> endobj 2245 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 250.09 466.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 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2244 0 R /H /I >> endobj 2247 0 obj << /Type /Action /S /GoTo /D [2086 0 R /XYZ 72.0 720.0 null] >> endobj 2248 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 224.83 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2247 0 R /H /I >> endobj 2249 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2247 0 R /H /I >> endobj 2250 0 obj << /Type /Action /S /GoTo /D [2089 0 R /XYZ 72.0 720.0 null] >> endobj 2251 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 251.21 442.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 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2250 0 R /H /I >> endobj 2253 0 obj << /Type /Action /S /GoTo /D [2092 0 R /XYZ 72.0 720.0 null] >> endobj 2254 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 421.5 193.459 430.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.998 421.5 539.998 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2253 0 R /H /I >> endobj 2256 0 obj << /Type /Action /S /GoTo /D [2095 0 R /XYZ 72.0 720.0 null] >> endobj 2257 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 257.33 418.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 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2256 0 R /H /I >> endobj 2259 0 obj << /Type /Action /S /GoTo /D [2098 0 R /XYZ 72.0 720.0 null] >> endobj 2260 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 249.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2259 0 R /H /I >> endobj 2261 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2259 0 R /H /I >> endobj 2262 0 obj << /Type /Action /S /GoTo /D [2101 0 R /XYZ 72.0 720.0 null] >> endobj 2263 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 258.99 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2262 0 R /H /I >> endobj 2264 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2262 0 R /H /I >> endobj 2265 0 obj << /Type /Action /S /GoTo /D [2104 0 R /XYZ 72.0 720.0 null] >> endobj 2266 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 260.66 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2265 0 R /H /I >> endobj 2267 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2265 0 R /H /I >> endobj 2268 0 obj << /Type /Action /S /GoTo /D [2107 0 R /XYZ 72.0 720.0 null] >> endobj 2269 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 259.55 370.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.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2268 0 R /H /I >> endobj 2271 0 obj << /Type /Action /S /GoTo /D [2110 0 R /XYZ 72.0 720.0 null] >> endobj 2272 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 259.55 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2271 0 R /H /I >> endobj 2273 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2271 0 R /H /I >> endobj 2274 0 obj << /Type /Action /S /GoTo /D [2113 0 R /XYZ 72.0 720.0 null] >> endobj 2275 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 260.11 346.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 337.5 539.999 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2274 0 R /H /I >> endobj 2277 0 obj << /Type /Action /S /GoTo /D [2116 0 R /XYZ 72.0 720.0 null] >> endobj 2278 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 260.11 334.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 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2277 0 R /H /I >> endobj 2280 0 obj << /Type /Action /S /GoTo /D [2119 0 R /XYZ 72.0 720.0 null] >> endobj 2281 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 262.33 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2280 0 R /H /I >> endobj 2282 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2280 0 R /H /I >> endobj 2283 0 obj << /Type /Action /S /GoTo /D [2122 0 R /XYZ 72.0 720.0 null] >> endobj 2284 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 262.33 310.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 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2283 0 R /H /I >> endobj 2286 0 obj << /Type /Action /S /GoTo /D [2125 0 R /XYZ 72.0 720.0 null] >> endobj 2287 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 234.81 298.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.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2286 0 R /H /I >> endobj 2289 0 obj << /Type /Action /S /GoTo /D [2128 0 R /XYZ 72.0 720.0 null] >> endobj 2290 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 261.19 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2289 0 R /H /I >> endobj 2291 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 277.5 539.998 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2289 0 R /H /I >> endobj 2292 0 obj << /Type /Action /S /GoTo /D [2131 0 R /XYZ 72.0 720.0 null] >> endobj 2293 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 238.15 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2292 0 R /H /I >> endobj 2294 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2292 0 R /H /I >> endobj 2295 0 obj << /Type /Action /S /GoTo /D [2134 0 R /XYZ 72.0 720.0 null] >> endobj 2296 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 264.53 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2295 0 R /H /I >> endobj 2297 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2295 0 R /H /I >> endobj 2298 0 obj << /Type /Action /S /GoTo /D [2137 0 R /XYZ 72.0 720.0 null] >> endobj 2299 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 220.93 250.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.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2298 0 R /H /I >> endobj 2301 0 obj << /Type /Action /S /GoTo /D [2140 0 R /XYZ 72.0 720.0 null] >> endobj 2302 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 247.31 238.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 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2301 0 R /H /I >> endobj 2304 0 obj << /Type /Action /S /GoTo /D [2143 0 R /XYZ 72.0 720.0 null] >> endobj 2305 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 224.25 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2304 0 R /H /I >> endobj 2306 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2304 0 R /H /I >> endobj 2307 0 obj << /Type /Action /S /GoTo /D [2146 0 R /XYZ 72.0 720.0 null] >> endobj 2308 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 250.63 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2307 0 R /H /I >> endobj 2309 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 205.5 539.998 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2307 0 R /H /I >> endobj 2310 0 obj << /Type /Action /S /GoTo /D [2149 0 R /XYZ 72.0 720.0 null] >> endobj 2311 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 235.92 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2310 0 R /H /I >> endobj 2312 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2310 0 R /H /I >> endobj 2313 0 obj << /Type /Action /S /GoTo /D [2152 0 R /XYZ 72.0 720.0 null] >> endobj 2314 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 262.3 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2313 0 R /H /I >> endobj 2315 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2313 0 R /H /I >> endobj 2316 0 obj << /Type /Action /S /GoTo /D [2155 0 R /XYZ 72.0 720.0 null] >> endobj 2317 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 222.59 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2316 0 R /H /I >> endobj 2318 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2316 0 R /H /I >> endobj 2319 0 obj << /Type /Action /S /GoTo /D [2158 0 R /XYZ 72.0 720.0 null] >> endobj 2320 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 248.97 166.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.998 157.5 539.998 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2319 0 R /H /I >> endobj 2322 0 obj << /Type /Action /S /GoTo /D [2161 0 R /XYZ 72.0 720.0 null] >> endobj 2323 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 229.25 154.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 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2322 0 R /H /I >> endobj 2325 0 obj << /Type /Action /S /GoTo /D [2164 0 R /XYZ 72.0 720.0 null] >> endobj 2326 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 234.26 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2325 0 R /H /I >> endobj 2327 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2325 0 R /H /I >> endobj 2328 0 obj << /Type /Action /S /GoTo /D [2167 0 R /XYZ 72.0 720.0 null] >> endobj 2329 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 260.64 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2328 0 R /H /I >> endobj 2330 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2328 0 R /H /I >> endobj 2331 0 obj << /Type /Action /S /GoTo /D [2170 0 R /XYZ 72.0 720.0 null] >> endobj 2332 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 218.71 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2331 0 R /H /I >> endobj 2333 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2331 0 R /H /I >> endobj 2334 0 obj << /Type /Action /S /GoTo /D [2173 0 R /XYZ 72.0 720.0 null] >> endobj 2335 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 235.38 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2334 0 R /H /I >> endobj 2336 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2334 0 R /H /I >> endobj 2337 0 obj << /Type /Action /S /GoTo /D [2176 0 R /XYZ 72.0 720.0 null] >> endobj 2338 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 261.76 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2337 0 R /H /I >> endobj 2339 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2337 0 R /H /I >> endobj 2340 0 obj << /Type /Action /S /GoTo /D [2179 0 R /XYZ 72.0 720.0 null] >> endobj 2341 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 239.26 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2340 0 R /H /I >> endobj 2342 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2340 0 R /H /I >> endobj 2343 0 obj << /Length 2344 0 R /Filter /FlateDecode >> stream xO$u|^ 3ۀ/dBqu7ͨPƳI35|8*##qo,>wvwg/:~s˗_~x߾ݿ}~ƿOގw?_xK[ޏq\8w}Q?叿w׿>|~?_ˏ^7qwKTo}F}_"O?~Ow|~ӿ|>su}u?c?.)qJ!>C&A   LLLL"XE`&Mv"Ep!SN8@0%8A0 F(""""""""XE`&M6"E!CN"8A09=ޯN-RW'.Eꠚ,,,,,+YVdȲe#F,;Yvd9r$I,X!qebX)qe"QU,,,,,,+YVdYɲe#F,;Yvd9r I,X!yebX)yebE,e LLLE2˞#_շgs^X2_y}zH}}:R_}re9IJbYN,XS,KRIJ,,,,,,,,+YVdYɲe#F,;Yvd9r I,X!qebX)qebE,e LLLLdYɲe#F,;Yvdr A,'YNC,<2S,<2Xf,dddddddY1޺' [߽|0{sf=_qdpPT7T+IX'bZ,PYYY&Y&Y&Y&YVdy}@*fUꤺK}}@:nTORWr$)/R-Ir=K X .b',,,,,,,,+YVdȲe#F,;Yvd9r$I,X' ԧX b8,,,,,,kc?. Vg@,!!!))))UVl"D`.]"8Dp k `@ k _ E0D0D0D0D0E0Ec1ַׇW>|dh=ʳIuzTՍ H]5?Z,"k X)AAAIII,+YVdȲe#N,;Yd9r$IS,tAj\O\r.b Reeeeeeee%J,Y6ldɲe'N,Yd9r?H-k!XbP\c222222n8X ߘK||o0~6'IuzTՍ),T.ޮ7S,x.ެXxvMAAAIIII,+YVldȲe'N,;Yd9r$)qQobyƛ)a]oby$ƛueeeeeee%J,Y6ldȲe'N,Yd9r2ޮ7S,x3ޮ̌k LLE3֡_~ç/o/88NԯwlAuzB}cT⎍Z,w][ܱQ⎷ $$$J,+YVldȲe'N,Yd9r$)w;6j[v}⎍Z,w][ܱQeeeeeeee%J,Y6ldɲe'N,Yd9r⎍Z,wlbyc˻oE,wldddddddzqCYV^~ԯx|;Wklԯvة+CWlIu;uPMS,_ﳱS66S,_ﵱS6vj|NMAAAIII,+YVdȲe#N,;Yd9r$IS,_oıS86S,_oƱS86"7ة2222222ɲe%J,Y6dɲe'A,YNd9N;Xޫc׻ubz;vj LL_LQoPç?ˇc(wxSY>)j|iTNR]Iu l$?Iul('5T؆rS S S SMSMSMSZMj5fTvSMu0aTNS9H~PNk#y!5סTTTTTTTTVSLj3nTvS:Lu4iTrR]#Iu }('5PnaaaaiikPEP_>O ׍m'l@yX,AyZ0PNk@VSZ,'X^-S>rS:Mu$5`T׀AT׀rR] ZMj5fTvSM0aTNS 0PNk@9T׀rS S S S SMSMS=#ɤ!4||ß_Gޤ溭gכ?A&EyZ)ޤ(M0aTNSzm9TA$rj9Ii9baaaaiiiTK;vvX7'X^-TNS:I5RT 8I5NRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujAyj'IYH5 f1000444lO]{e?~ðh]fgKiyvyX,= ʇS:Mu4I rj9HZNR-'Bj)ZVSZMj3fTvS:Lu0aTNRT 8H5NRT$8I5 F!(ZMj5fTvSM0aTNS_QNk夺_QNkT+M5L5L5L5L5M5Mfɏyd2j-Lx>e<(O;寏rf8ZNw':zwF^HTTuTTTTTTVSZMj3fTvS:Lu0iT'ޝ݉OIwg>zwF^HܧTTTTTTTTVSLj3nTvS:Lu4iTIHTIXP;<deou4Գu8׷Q|-uWAZ>(*(O;]:Lu4iTA rj9IZNR-'Bj)ZMuWqɯ NuWAyX,_wWMu4I/ZNqT$8I5 F!(ZMj5fT6SM0aTNS:I5R̓T (>SwʧNS:Iu=PE9$?Iu=PE9('@ZM:%ǹO ^W/N:KTNS:Ivz; To'xIN /z;KrS S S SMSMSMSMSZMj3fTvSMu0aTNR%9NTo'xIN /z;KrS S S S SMSMSz>uDx{r =#I+Iu$)uP- Xg& $$$$J,+Y6ldȲe'N,Yd9rbZ,2P\HMAAAAIII,+YVldȲe#N,;Yd9r$IS,C0RzS,0RzEj\HMAAAIIkPE-O&w?>/\7| 7-SJz:RP$)k9bs@}Z!XRZ!5YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN\5˵VS,J rӀZ!5YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,XRZ!XRZu˵Cj LL\#*j<76|k|?xJ7j|-<-C%˛夺VVPNkmaaaiiiiTCsGN:QY>)_(?Iu 1('5ĠTrS S S SMSMSMSZMj5fTvSMu0aTNSbH~bPNk!y!5ĠTTTTTTTTVSLj3nTvS:Lu4iTrR]C Iu 1('5ĐbPnaaaaiikC=]_z;LENz;z;<-_oIv@S:MurR]%SNks"Iu,y!ZMjT)6mY>) ʫqZ4iT'Ò)'uX'Ò)'uX2夺KTTTTTTTVSZMj3fTvS:Lu0iT'Ò)'uX'Ò)'uXTaɔjjjjjjj})?j2[>C5[ֺu<]P>(_GsIwY>)?Iu.('5TB0000444jT׵owf|.y|P}<-7iTNR] Iu.$?Iu.('5TrS S S SMSMSMSZMj5fTvSMu0aTNSf]H~]PNkv!y!5TTTTTTTyȣa>gwյ޻?}ϯpu '/0n%n)˛j}T6SmLj7nTS:Mu4I);Iu=e'I);Iu=eG9(7000444jTR5Iy+W<-TNS:Iu=eG9$?Iu=eG9$/TTTTTTTTVSLj3nTvS:Lu4iTSvzʎrR]OQN); f!,z&9'y7rHӏ>ӏ?OOvDxsZw׺%f;yT׺%Iu[NrS:Mu$յnrR+6T׺%Iu[T׺%M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuZD9uK-QNkݒT׺%M5L5L5L5M5M5M}n]uֵ[׾m]uֵ[׾o]uֵ[~l]uֵ[~\8v};>kεsǹsܹQv}keֵk[>}n]ܺuֵ[׾n]uֵo[׾m]k߷غcڏk?ܺsϝkεcsܹy\}Z%_k)˛Ay!յ6rS S S S SMSMSMSZMj3fTvSMu0aTNSֆSNk'ᔓ!('յ6rS S S SMSMSMSZMj5fTvSMu0aTNSֆSNkm'ᔓZ.y!յ6rS S S SMSMSMSOFg}dO,>|?׺~Sk<f|ZGy|P~}@<-R]QNk:TTTTTTVSW|R~}@Z>(> Rwʯ:Lu4Ik:IuZ'Ik:IuZ'y!յkZMj5fTvSM0aTNSvT׮uڵrR]I^HuZGޭ5xȯOGΟ >}X~up:>8țSF^- 6S^H~p)lA`#O;w<,7aTNRlz?8x;?I~p`#70004444jT6SmLj7nTS:Mu$FNT9 6rS S S S SMSMS)fZ>(/QTTTTTTTTVSqumvf˫qZ4iT'G(''G('夺QTTTTTTTVSZMj3fTvS:Lu0iT'G(''G('T# jjjjjj!֞L׻ <|k뻑F%lay|R~79ȫBTTTTTTTTVSM6Y>)lA`#OMu4iT'9OORlz?9I~rjjjjjjj5jT6SmLj7nTS:Mu$FNT'9O O6rS S S SMSMSMS(?ON:^CrR]PnaaaiiiT~i'>x'_zߝ<,7aTNRT 8H5NRT$8I5 F!(ZMj5fTvSM0aTNS?TzrR]H^Hu=@g'#m zm+`#ߏ6jnFN#TTTTTTTVSlF^-ߍ6S~7rS:Mu$FN#TG9ޏ ޏ6rS S S SMSMSMSMSZMj3fTvSMu0aTNRlz?I~`#7000044S~dPޠ?//Oᄒ=>ck{wׇrɯ唧C9ay|R~}(T'TA rj9IZNR-TK!RL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I5RT 8H5NRT$(Tjjjjjjjj5jT6SmLj7nTS:Mu$Oygʇk@yZ)_OhI7'T0rS S S SMSMSMSMSZMj3fTvSMu0aTNR]Iu ('5 T0@Bk@VSZMj3fTvS:Lu0iTNR]Iu $?Iu ('5 T0rS S S SMSMS u<ˣOm/_ߨ95nL+CꤺK~TBT7r=$#XGd>r= #XcpdddddddYɲe%J,Y6dɲ A,YNd9r=#X'`>r="X_.b},,,,,,,,+YVdȲe#N,;Yvd9r$IS,#.RzEj\H-XG[& $$HC<7`[$z}}By|P>Lu0iTNR] C('յ4DTIu-TM5L5L5L5M5M5Mj5jT6SmMj7aTS:MuZ9B9#VPNkT M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu--TIu-/T %&jjjjjjP!OR < ޤ_}C^ЃS>fvdrR#9ގIvd aaaiiiTVSLj3nTS:Lu4iToGHN#c ?Ivdz;2B#c$70004444jT6SmLj7nTS:Mu$ۑ1Ivdz;2B#c$7000044ջC>=F%_ =>|P}`3ݰo0vöʌ]+3weL96eʱ)SMrlʔsS2ܔ)eSMRvebW&vebW&verW&werW]+veڮLەi2}W]+3veƮܕ2sWfnı)ǦL2qnĹ)LM(2Q6e_ cW&vebW&werW&weLݕ2uWʴ]+weLߕ2cWfʌ]+3weL2yl)L2pS&˦LMu^2+2+2+SI=Su_<=:U1MhZ)>pQ7˧kaAIka夺6PNkaZMj5jT6SM0aTNS:Iu-lTOR] ('յABkaZMj5fTvSM0aTNS6PNka夺6PNkaTM5L5L5L5L5M5M*ydecuou>ٟ}{A{CSސ<,7I7$'z{CrR!9ސTTTTTTTVSq=V>)y|P~{S~{TNS:Iꗽ7T9~{c?/e M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iꗽ7 '/{o@N_ ~{rS S S S SMSMSϪɐf=m31/ٞq'l@^W巽( O;巽( '/{Q@naaaiiiTukd'kͮAZ+yZ)_z%Mu4iTrR]COR]CIu $/jjjjjjjj5jT6SmMj7nTS:MuPNk@9!夺R]CM5L5L5L5L5M5M^s4 ǛӀ?}~V/3[xn+(_WmiyTS:MuaIv0'TogC^HvZMj5fTvSM0aTNSTogC~aIvz;{0000444jT6SmLj7nTS:Mu4I%'Ðz;{XrR=,9TTTTTTR*dt}s]ُ{˳y/˫NK6<,orR]~J^HumJVSZMj3fTvS:Lu0iTNR]RNkROR]RNkSIumfJVSZMj3fTvS:Lu0aTNR][RNkUOR][RNkV -Y)7000444ջMP瓡G\?|xǻ o~a f36º/glp]+37eʱ)SMrlʔsS2ܔ)eSMR6eJٕ]ؕ]ܕ]ܕ2uW]+veڮLߕ2}Wfʌ]+3veܕ2qlı)ǦL2qnĹ)LM(2QvebW&vebW&werW&werW]+veڮLە2}W]+3veƮܕ2sS&M<6eؔcS&M<7eܔɲ)eS&ˮLĮLĮLݳ17;vO^9gK<}o!O;IC&:IZR-TI$rj)Z baaaiiiiT8N>Jw`f|}0ZnTNRT&zDT&z„rR]OHZMj5fT6SM0aTNS:Iu=aB9'L$?Iu=aB9'L(' z7ycēY|kW۬[{#+=ܧ]r;h Y>)4y|P^HR-TTTTTTTTVS>lu'>Q7'ׇ?ʫuiNS:Muz`rR]lH~z`rR]lPN M5L5L5L5M5M5Mj5jT6SmMj7aTS:Muz`rR]lH~z`rR]lH^Hu=A)81hǯ|}}'}?h|7X^-SfS:Lu4IkrE9夺&W\I^HuM(70000444jTz9wʝIy/W<-7iTNR]+IuM$?IuM('5TrS S S SMSMSMSZMj5fTvSMu0aTNS&W\I~\QNkr%y!5TTTTTTT_/zyc'#ֳqO^q3)_VI^-_)O;ׇsrSz;hYrR I%'A˒eM5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu&rR][H~>rR][H^HumBVSZMj3fTvS:Lu0iT'^('յ 夺6T׆0R]Pnaaaaii5T1ړMn|빤+=WˇkNJ7'T%jjjjjjjj5jk/OPnkiy|-<,oOb?ɫ:Mu$8HuQB9=J$?IuQB9=J('յGaaaaiiiTVSmLj3nTS:Lu4iT%ڣDT%ڣrR]{Pnaaaiiw5o'd_~{wލpcf|˫yZwA rj9HZNR-'Bj)ZM]6׻ay|RzZ>(N4iT'Aqj'IqjRBQH5VSZMj3fTvS:Lu0aTNR]PNqOR]PNq e(7000444ջCc|5w}ѽۯ|y|_^^Pon_û??~/?_xwWw}ᄐ/oop}oxoO;wW| v66/ߝ/8k8 endstream endobj 2344 0 obj 14462 endobj 2345 0 obj [ 2182 0 R 2183 0 R 2185 0 R 2186 0 R 2188 0 R 2189 0 R 2191 0 R 2192 0 R 2194 0 R 2195 0 R 2197 0 R 2198 0 R 2200 0 R 2201 0 R 2203 0 R 2204 0 R 2206 0 R 2207 0 R 2209 0 R 2210 0 R 2212 0 R 2213 0 R 2215 0 R 2216 0 R 2218 0 R 2219 0 R 2221 0 R 2222 0 R 2224 0 R 2225 0 R 2227 0 R 2228 0 R 2230 0 R 2231 0 R 2233 0 R 2234 0 R 2236 0 R 2237 0 R 2239 0 R 2240 0 R 2242 0 R 2243 0 R 2245 0 R 2246 0 R 2248 0 R 2249 0 R 2251 0 R 2252 0 R 2254 0 R 2255 0 R 2257 0 R 2258 0 R 2260 0 R 2261 0 R 2263 0 R 2264 0 R 2266 0 R 2267 0 R 2269 0 R 2270 0 R 2272 0 R 2273 0 R 2275 0 R 2276 0 R 2278 0 R 2279 0 R 2281 0 R 2282 0 R 2284 0 R 2285 0 R 2287 0 R 2288 0 R 2290 0 R 2291 0 R 2293 0 R 2294 0 R 2296 0 R 2297 0 R 2299 0 R 2300 0 R 2302 0 R 2303 0 R 2305 0 R 2306 0 R 2308 0 R 2309 0 R 2311 0 R 2312 0 R 2314 0 R 2315 0 R 2317 0 R 2318 0 R 2320 0 R 2321 0 R 2323 0 R 2324 0 R 2326 0 R 2327 0 R 2329 0 R 2330 0 R 2332 0 R 2333 0 R 2335 0 R 2336 0 R 2338 0 R 2339 0 R 2341 0 R 2342 0 R ] endobj 2346 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 2345 0 R /Contents 2343 0 R >> endobj 2347 0 obj << /S /D /St 389 >> endobj 2348 0 obj << /Length 2349 0 R /Filter /FlateDecode >> stream xVN@}WcvozP^ԇ<4M<Ď>sfgg!`@8v9ࡵ1PDkbaLAwqcꞘOoݵ1=\y@[pu Cx w"8BTlOYhVj3J) b"v9\(ߦQ:h'SWxwGƵ28% kj[|TQ@eQڐ2 JRjYL 3ZcJS0^CgcUfE΀5Tt?B"Cd4t벹yNJRI(Iں[fvoDXZDRwhJfKGaL*RkW}?iX G'tρIBYAZ9y%VT's?!B"9@LU;la f_s@.MjG3,UeLY9-&)e"NcT&lG9Ui#hڐCeb;MGa+c#b|rbKuwnc̟E(TcjA{_%9zHnF16-EM;z",TإlgYi,$$1tg wCD{MGt{< ̇AB{tۍzz&kX۳ۘkl^/E xg(bwsʪ/բ endstream endobj 2349 0 obj 772 endobj 2350 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2348 0 R >> endobj 2351 0 obj << /Length 2352 0 R /Filter /FlateDecode >> stream xVMs0+ rG:әv L8(N_ߕ8>51޾c̝0]u v0Ix Ew' =5ݝ] (|1z*xL:WUy> ]($RQJPpHp沘6tU/5R+)o8~晴|QFD* jHԢŭ9?/6iY9n  LU'dŹLJ[d)*݊9 )roN;tdSDQdSy*rҒhk9i[1V) ?ţiHʤ"Q,Vh#-y98ƱFmaiװS85tizob>+[yMIPf9ƽ,ۭ=2\]Z#=L=z5X?Qy J , άO(1k[>rV6+Q8$,TشڔXǭgysqWLT]ɷQhrz(!^!x,~,~#_G[E7F?ܽM3aR}n7H/;۠ endstream endobj 2352 0 obj 692 endobj 2353 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2351 0 R >> endobj 2354 0 obj << /Length 2355 0 R /Filter /FlateDecode >> stream xVn0+ M (%z(hqP( %G_ߡ'lƧ&! #y3!PC:ZAD&F$!hpw?nĬvD{ wh1hu}SQGIZI(L(8p}tYMdaMu|oV7E_MY ǿ"u\lepJsupBFD+ʢ,n驭!eV)M,F]" 9LΘK~q0&1yQјsD>|*tYC16&`%Хi`qED;6j2|' ]UDQ䜩yK*jIxt|>r)G?lyHΤ"Q,U*Yg|]T5VO鞃jxsi9Jyf_@.2Q2v| E ,w eh8ˮGk*bqЄΓ_!;B&}f^~ΰ_;d~he>$Y/vjUbݼu3;Y>` 0ᵱzy1>#h&deiW@ V`&/8+yJ"9ؤZlVAiRLI`9qѼێ?٢¾i",TؘlYi,$0t)$ў@VadAC"CLhs |.`ӧf%lJDm=z?*a[A3+5I˦ endstream endobj 2355 0 obj 777 endobj 2356 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2354 0 R >> endobj 2357 0 obj << /Length 2358 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 CZVXY5J endstream endobj 2358 0 obj 403 endobj 2359 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2357 0 R >> endobj 2360 0 obj << /Length 2361 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~~Q: endstream endobj 2361 0 obj 837 endobj 2362 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2360 0 R >> endobj 2363 0 obj << /Length 2364 0 R /Filter /FlateDecode >> stream xTn0+qA۠Zԍb-Zؑ՞PH< g 192 Yc.!J ~3;kaqWA \׷sx@  aGO!P(y "AΌ O.}󤨲MeY/h/fNyVs"m IN# r\'U98x/Ok/lYZlb(@#b F9"uL[̎b#( 37C"El.smweڅKtPH^՗(f$lLql[䛛aխN !H]fW&s2NhԢCM"m\Kj[5k b$?53!UZJ*F"CĶz$TEuJ+Ct")*k+ =þ񢕽3Dnn6ʪGF endstream endobj 2364 0 obj 533 endobj 2365 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2363 0 R >> endobj 2366 0 obj << /Length 2367 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 ֒;cϞ'o쪹 endstream endobj 2367 0 obj 580 endobj 2368 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2366 0 R >> endobj 2369 0 obj << /Length 2370 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 2372 0 obj << /Length 2373 0 R /Filter /FlateDecode >> stream xUo0~篸VZ=i[iim )j;# IDqwq~tP|.$8w{ 1<KpE ; j-6saq¡p\"zONnp\8="Mqv>/0 a,-w/Dpe0ŏ?HuG&QY'¯p`yJr%VmKOFrb}}.XNJN^YU endstream endobj 2373 0 obj 582 endobj 2374 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2372 0 R >> endobj 2375 0 obj << /Length 2376 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 2378 0 obj << /Length 2379 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`Ƅ8xL{cU` endstream endobj 2379 0 obj 790 endobj 2380 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2378 0 R >> endobj 2381 0 obj << /Length 2382 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%cWk1cOpa|ʪi: endstream endobj 2382 0 obj 799 endobj 2383 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2381 0 R >> endobj 2384 0 obj << /Length 2385 0 R /Filter /FlateDecode >> stream xTMO0W̭pۉ?֪-jV] MKثv>vN֋gI(B!K`屇(&)6jF8RP'UyxD/rSḀu^eں:vi8L 2_i˳f1y.9Wy(N3 U; #"u蠐J)ɿmnPj\_cZ*WGv-&DL#d޲}jSd۲\vЉ :2Fyôqv]*/]ր٤UL7r}lu0!pib> endobj 2387 0 obj << /Length 2388 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!"{ol{ƪ/$! endstream endobj 2388 0 obj 526 endobj 2389 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2387 0 R >> endobj 2390 0 obj << /Length 2391 0 R /Filter /FlateDecode >> stream xTn0+.I}k6hu# $0\E["(%p,[vzj"&1,g| ({ :d9ea?8 MzBOVpupGG;hě`z ߔ6e! }"$gkYHDΔ$]| ]sye2{S2șSr6- b'ISFa!yā!}rK3w,emLlZFͬugшa !#rDy)vt* =gL9\g*fGW},$!AveԕMOU#ISDX)no;ryae5G$Dj^n;9N̈HJIW1 ϬO[_鼴Y VtP 13iWΕ"F).MsEUn+m,1ɠw}xQ:EîC7'-+="k]ʮ/I& endstream endobj 2391 0 obj 521 endobj 2392 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2390 0 R >> endobj 2393 0 obj << /Length 2394 0 R /Filter /FlateDecode >> stream xTn0+’Ňo)-Тn#ӶHtHENlNOM$$FpO ދ8E# (|"F~@+/[%$u*,Nt}u2#7 c|ϟ q#AP+='|VS_i~sSsJ;yklDOF]#jHw),TAg(huU>Lדlf[fEPϫʹ'"A .a;J~<Wڃ_jhvƪ dO > endobj 2396 0 obj << /Length 2397 0 R /Filter /FlateDecode >> stream xTn0+.)Q$}k6hu# $0\GB(%pNOM$$FpOUbSQ t<=E0x Êvp,6"3suhG7E!}@,!H$f*< .n_lZ7]>@5Sj-[1xH7mRA兊{y*F.8=5:w"!az^L]M< ,fgLspnKtO $MӐSNS)!T)bJJLѣͪ\LƜ$Hob]mx6GqER(%kڸfuckSTN[p8v-%q.G䶨9QFFp?[۪irfnMy4iKvzy+<3(61;?4zdNߴ"P$rMO_Y~ endstream endobj 2397 0 obj 521 endobj 2398 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2396 0 R >> endobj 2399 0 obj << /Length 2400 0 R /Filter /FlateDecode >> stream xVKs0+VU/4M&I0mq68m ɿ 0hNMcI+߮ c(te<2E̴IMWZtӠ@7ruO7m%AxxD &ȸB?6 s5(\KQ`ppW08LWDI Aq㻻`|[+]HYFۅJaÑNjK $JY''Q|rd/g^3oW `[ 9LP0N,0*sv׫-Y`r_l Mr5 /Q(,K2y4Q;8vەRw}DR3RTv~{uиFTIJ(R)_)R$ ")_!AbcnN^({5?oW|"`zY@4 c&t*WgA>͢ToɱMmU0mX29k~_n72>T}eSmGy %RڂX Bp m1Nk7T! nJ;R/σ)q3DyנY{:;_&l k_-<8>B}FZ@ƃy ?i fOwgCwxq7m6q}6')iVߤTbWFs?{7}/RZQbo݈$:o?̪~} endstream endobj 2400 0 obj 774 endobj 2401 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2399 0 R >> endobj 2402 0 obj << /Length 2403 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`m2aXGAfUpx endstream endobj 2403 0 obj 770 endobj 2404 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2402 0 R >> endobj 2405 0 obj << /Length 2406 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;+ޘU}[Y endstream endobj 2406 0 obj 752 endobj 2407 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2405 0 R >> endobj 2408 0 obj << /Length 2409 0 R /Filter /FlateDecode >> stream xVKs0+VU/4iǝIL{3E6LNMc-+oW4>[/kA8*f;$6k+iPaJ͈e5zWVэĢú@6Zغk G·~Q-\GQ=p~0asPi~ϯ<͋  'j71]b &̈́s6p [JJ<'B IqBE3+a.Z )J1 u%iVčA'\s[e/4HʱG`Md{IEWz²hT&)̴Iύ\>i :``,F&'Xzadi\E_)|y,*w7M&Lj83{B_sΉR{St>9SA ~V7b߈F<sl.C>&x\4b/;˝IF$VQivoyi NuZZ[I-WYPDzqR53.z̷]Ie: #.dzywB> @b\:)F4GTJ v)o//GWѯxcL%9Xut}Bnq`߈1a{w!Ifռ endstream endobj 2409 0 obj 783 endobj 2410 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2408 0 R >> endobj 2411 0 obj << /Length 2412 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{_4ѓ_/̪A"n endstream endobj 2412 0 obj 758 endobj 2413 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2411 0 R >> endobj 2414 0 obj << /Length 2415 0 R /Filter /FlateDecode >> stream xVKs0+VU/ʭiӎ;a0Čm ɿڀǠVgV~I5F@P`V"#j*»Ccc]nݳe xxTB&Ը;"?7 Oƥc|ni)GFJ}Qp60NoavQY=ӸrZ93B?Xw%2dYAT*]H1 U]MTW@b<6񂋋(DǓ>) 鐚)aLT*C>r7%&;Q*YkR91mO*5ʗ'_jO&77n^׻~39jbQc {?تON LYIh:%qBzODYU}z endstream endobj 2415 0 obj 780 endobj 2416 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2414 0 R >> endobj 2417 0 obj << /Length 2418 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:w>XUs | endstream endobj 2418 0 obj 768 endobj 2419 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2417 0 R >> endobj 2420 0 obj << /Length 2421 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 2423 0 obj << /Length 2424 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 2424 0 obj 767 endobj 2425 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2423 0 R >> endobj 2426 0 obj << /Length 2427 0 R /Filter /FlateDecode >> stream xVs@~ط\I;v&L3(F#؎}T<5Go[xP>܎hKڱ Vfv}K/(eL%nI2;U5?% endstream endobj 2427 0 obj 790 endobj 2428 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2426 0 R >> endobj 2429 0 obj << /Length 2430 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.=8'/8o̪y\Yx$ endstream endobj 2430 0 obj 764 endobj 2431 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2429 0 R >> endobj 2432 0 obj << /Length 2433 0 R /Filter /FlateDecode >> stream xVMs0+VU_ [i&_g<1]S}ZV<[ (4\b !f;$6…\0L͌(]k#|bGQq~[u B7 zFa8I%q5 .\ zW_aϒ哗I Co= ?YZ΂7M/Wǟ"y IV#U *5 %JydDaNH?uN -]p&(eο@hkΔMY.վivy3Hf1ηIhR(J1RRqHí>D+WkQG]DRnro^ 1~p&q\ ɍE"9A K`gLF=?y(_TTY9%wڛyK-W d:Ga !$~%L'RA:] w4H(7u5D*Gp,XTAVr~Ad]ǰ mɊ*'vV‡ie0 #ԺF5=[Ӽk'z9}B7e\0σuT fuaVȆn11AZJQi۠xCL Ǧ(Ivm ɺ\Thz*U/f_}Wi\}1ϋ>rݴr?w^Pjjh{zȴ-qkIoWV՜;~ endstream endobj 2433 0 obj 770 endobj 2434 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2432 0 R >> endobj 2435 0 obj << /Length 2436 0 R /Filter /FlateDecode >> stream xVR0}W[nHt(ƽql$8dYR)IF=nUAg6 BVaRp`-lJ,e=E=+k#E;рC3.HQ8/1gNΤM,G%ų',? UbjQv|(ͦGì,5KdD%4l $X (?Ȑj@W!L7-4Dk]sN$gUyH%D*9鰆 }g\0 MɊ,rH^qLkGi3uxk{v|D`q9.K+-s1M򭚢VȖ~1+W7MUZJ^Di_2П(6qa8KʹlEte5 JE߾Ge|z@{i/ww~yդ*1>MI6ߣToᢍrWx> endobj 2438 0 obj << /Length 2439 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ٺND^YU(i endstream endobj 2439 0 obj 790 endobj 2440 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2438 0 R >> endobj 2441 0 obj << /Length 2442 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)iYU[ endstream endobj 2442 0 obj 786 endobj 2443 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2441 0 R >> endobj 2444 0 obj << /Length 2445 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*g[_iV%T9T/ jJ/+ҩ&g87/zqjcd!D+&jXW6<a@Єdz6(i`Pĺַ5{[qn2( nr6>~ Vstj#*KIM`gp9ɋU숑;ٸ9"t/n]TTхvE'V}܎hs~Y2<s{'z=>2 JqZέOoL.Ϭߎ~tz]>\^\߷9B sF5hsu<0_p6a[6X烯1̪q endstream endobj 2445 0 obj 765 endobj 2446 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2444 0 R >> endobj 2447 0 obj << /Length 2448 0 R /Filter /FlateDecode >> stream xVMs0+VU_ -I;M'0!x0 w6hNMcvj|!\Y/[A8"f;$6+-|)53fJ- _GQn2SZ@Fɺ60 ~K(j\"g F?nnaz$K"'5 ?ؚJ|28)0T)9)Q]MpBD-=:Egg:WɌkr}$ˢbm3A) Tvjm0"΄sVPC pmR ,CPAG)Yp`-j%j6s^,/OOR?CDR#RTv~MTFǾTq)LR){tmf9҇mAhH0ͣ8,5TSd㵼ATG,)oz uFęOfx\„^eKT$7`(9DrFK4)w(LR5%yCks5KxŬ4sِj}R4:qD`ˎ7iXAx}2Ok4=`4^UZYȖ<(dHz6S+u7)֙N[Ol,nJp.úټ*bFb2^6 n({Y4gRoJs.o8uzW7l%8򽔚Yet{\~`Gʨ0J܃ά/| endstream endobj 2448 0 obj 772 endobj 2449 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2447 0 R >> endobj 2450 0 obj << /Length 2451 0 R /Filter /FlateDecode >> stream xVKs0+U/֤i'I'H@N}W`mSXb~i˳À}dpHJ@qަ0IVv `]1kVi7"MS8:w(MQo5)8W ]a蜄/.0 aJ-S^>D^9|"+eaT>@9 7b|&8ij3T#9)Q]>8V*K)< y)X0l;P 'g7᧓Z5\IGJ*ቡzhy[PVQo|mH.~Y1\ endstream endobj 2451 0 obj 745 endobj 2452 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2450 0 R >> endobj 2453 0 obj << /Length 2454 0 R /Filter /FlateDecode >> stream xVQo0~W҇z16m: *"( @6IH8|w}>yqPyit W' =T+Ѓ?zƲ+v4*  ߝGP_Ǹk G]P(<9B8R<pϛ[zUiAeR=B{9j|uȺ8nT)QX]M..XS2,hz ?! g. ƍ5f"B`|.ġ1k *dT u<ANjv54됡(Rj2TS+Y^=8{ H 7F' ͸KFͯhIld{ E/@aFyqrtr&fL˚Xa<%hLE> :QE/E,eU3͞ +go5 s_2^}%9'3JBr0c xfx+N_x5&%wGa:\.'2)Lm<]";pw0V;I7Y\wnۀΡv\\# ̎Ez2W>GB],rwfvE'VXa@4d}Y22FKS <-c=., y٤ڂέOOLo/^Ny2_.a8jAstڣlj[-է~`N(m(>i'?_ޙU}.o endstream endobj 2454 0 obj 756 endobj 2455 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2453 0 R >> endobj 2456 0 obj << /Length 2457 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Ţ(UqO(g Y݅9dI6a8u7I{q53 |!+Dp2E[PNM&w<„y#UmWʜs"9Ԯ G8CpG$ \鼩(74A5n6lj@VNX;=Qmn![I/vqXl !mcSF:\ 2tߺ?Vm R.q^L3&6AjmC2;Az!iȣEsjp%j2u/7Q%Ki|w]Yn(z6Yp6~Eq6_2]stt?+hK+AKM:ZоONF:9Inw>UsG endstream endobj 2457 0 obj 773 endobj 2458 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2456 0 R >> endobj 2459 0 obj << /Length 2460 0 R /Filter /FlateDecode >> stream xVKs0+U/1L&!x0 wӞvow%;Ct62vEI]7ZP`BEz{N۱v?ܡٹGir~;Vq\7ƒs:?( \OQ{{qp{4z .X-*+r/p'fW+Ow IŽ#յ.U( (\3}zZ2uuc*Ӑ3@Ar™a -@cSd!0+&8W}wL΋u^A<(R`1PFͰe>zd(J<ϳdM> endobj 2462 0 obj << /Length 2463 0 R /Filter /FlateDecode >> stream xVr0{kr* Ǥi&Ii{H2 al1}V`1 x,j>vyPO }zH+b L3j4c# ~YEҺDirXrĺ uX:(\WRsyh$_BaQ*}7"؉f|W]'IFw$kaǑ ٵJHX3uzbM'j^6 -<pfS0+@DgȄo9zpWTYfs!8E|2"MY/rI&rI,/ʴ ėks˸M.+yEnKLڨ\wHL5輡MHCG )C`iCp޺y1cO ֠)]nEfKQZjhTqc?{W_TœN^9BLaP1|;t2(Ѿr1;i<-i.-[VIEu)w8`i]ќiwP/%[tPA} Rۚ:b6=/ N@$` iV|%lZ 0߸krr掙9PUg@Ji[J:3enG0cӻ:67)5mƶc/ iL%7h;jWMU endstream endobj 2463 0 obj 739 endobj 2464 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2462 0 R >> endobj 2465 0 obj << /Length 2466 0 R /Filter /FlateDecode >> stream xVKs0WU/[VnMvL20!dcDlt,0nNMlIk߮sI!\9;Ay"z@8[-o4bv}~;3-wc} T0<;#@-<>Qi <7d (aϞ`˹d1 EQ(BH -(']'Suq*AeћKUY>p(a?̀SjO'3<ΘRQW] pl ZL's K>݆5RcF`p#v4Jd#)|)=[v|TyU֎O}.s)B)[k&Q5I_7a^SAwdnv8f5( L! Mn5qofKgU0KuoJ)`l9KYEC8 ʠM1l^L6`V']QṾ&(&u`!,)&mcĺ,Զ=*PV6_A!.qi[0ʚdgOqe2 尽$GO$]]6cFbSH/1I5GC7FW_9W:|w~|s98vexwZq`oG¨{~Y5_w$ endstream endobj 2466 0 obj 769 endobj 2467 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2465 0 R >> endobj 2468 0 obj << /Length 2469 0 R /Filter /FlateDecode >> stream xVr0{s* &M3L2I̴8XvX}Wm S1CJa@:57rHk1\ 1&Sjf,WyNPr _r5:-"Sq0s#h Kj>p8u6˸H xUqO2j2r/!lf#iDbw:T`BVggEZcu顚J#b'2L Tnv ;t3\ >7YŋutjmO!-UVlq<@%}I֝+(  }TFf%r|"ͯxQ04CRygcWyj E^*&)@*f'@Ö|`a1VO&f"`fQ@5F'5 sV+ӕsNgzN zTJd (X߬ALzW? #|In>`.Pעt%z]xX1qPNs]9"izk/1uE~_JZ+mblT;g~g|/,M8/eo=+X h^7);Dm50g;# .qev8nu}2N>OО(5h}c t7Ic( oLoG4c endstream endobj 2469 0 obj 781 endobj 2470 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2468 0 R >> endobj 2471 0 obj << /Length 2472 0 R /Filter /FlateDecode >> stream xTMO0 W#paiҥkĿ'mZH#NhEqHwc ?s)4lphE]`kQti 9 > endobj 2474 0 obj << /Length 2475 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غɻLg\ޙU!*\ endstream endobj 2475 0 obj 777 endobj 2476 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2474 0 R >> endobj 2477 0 obj << /Length 2478 0 R /Filter /FlateDecode >> stream xTn0+hE)ZtZ9Aڴ-J/r&a3`n1uwNES- }v6½OyzwX> endobj 2480 0 obj << /Length 2481 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~~‘كSIy|cV endstream endobj 2481 0 obj 638 endobj 2482 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2480 0 R >> endobj 2483 0 obj << /Length 2484 0 R /Filter /FlateDecode >> stream xTn0 }WVزa`5(TM 4k9|I$M"ᘤsH3HY\X`$t $Lp\K?hqY?b!|eWև/l'|S!,ǜ@oUKWGB˓~6…yQמ^A}'+!Xų.Ȯ$ h6m#Ӂ[Hz)KdjDۍ_eۢYn\]5EhɥPy)"1\hG8s)ͮ}zĞd-}  gM AlP2-yӇxU0L5̆d+~2?}9QP>46A$qcg:wpZqm{O.,;P ɵ(@*CsJ;(Mʆvd6|2H4D1ήp0{%i@MM+߿p endstream endobj 2484 0 obj 504 endobj 2485 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2483 0 R >> endobj 2486 0 obj << /Length 2487 0 R /Filter /FlateDecode >> stream xUMs0+$@(6M%0!t-׌ 8w,lcLzjKzOc}j9L5@q.$F׍?vdeeM,Ex a33 endstream endobj 2487 0 obj 663 endobj 2488 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2486 0 R >> endobj 2489 0 obj << /Length 2490 0 R /Filter /FlateDecode >> stream xVr0wiOU/.}3LxEv)p}cnKqpuуǀJs--@q>$Gرh= `JIuw{NA,zx׷!sjw (̽~'k8$k0YS> endobj 2492 0 obj << /Length 2493 0 R /Filter /FlateDecode >> stream xV[S0~W:4 7{3L[NNŬ2p$.Sv6!߹|nH!+^@rE1 QOv":<\>g(DyS7O#EF*x; G( Ax! \ìW5ot],]ֺٻ٧l-b MzI/|`HDbm=e J:DOVs}x{ٱC~eU,t;&r™a@LD| m:\릵*^serE8 x؈II΂씞ޛjYU[XP!Q2Q*I <やPt~EM,$NB$֌ܝ6ƶA 4%diQQ8T(") Ƨp$aaǶ`ܩ7 DcHIf7PG0Brsgi+X]kzN|=zvL m̜ek+ -u[x|M]2RkuS7vҗM Yznh KqECL7켫L㘄* d p> endobj 2495 0 obj << /Length 2496 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 2498 0 obj << /Length 2499 0 R /Filter /FlateDecode >> stream xVr0+v lY S,J_ _8 3tsGגgCH yl1!z@8FDaw]c ߝѹhhqVNc#^;W@ ý.p\@0^Z^V`1*B':y:E ]Ale}a_.'P]DWe$jp5Tb8YC֨riUF "JĦr4F6T9¾M|kR1& m݅]̬ʒּQ#EczYa*'ҕIKQ!cB75FIoZ DM2Qp o|tRCiH7'G* P6n* #BZG WHO(;ԯ(-Ǒc2UA nU؝0GS"ײ|! X98SȔk= u*ux{z< p}&YZH!NWK L™v;7zNզ]Gf*I`XX)k2IZY4GMyl 'cYJ&dՔ0!.v.ɪMcWUWxir]+=DK=77E}U<7`9Z4U1f?MS/~9۱Z0F:Rk]zT%Ef́I@4 Ei4u(l.vQ\W?XvO(#ș{0|fU7 endstream endobj 2499 0 obj 822 endobj 2500 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2498 0 R >> endobj 2501 0 obj << /Length 2502 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 2504 0 obj << /Length 2505 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>!x0v|n| endstream endobj 2505 0 obj 341 endobj 2506 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2504 0 R >> endobj 2507 0 obj << /Length 2508 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 2510 0 obj << /S /r /St 10 >> endobj 2511 0 obj << /Type /Action /S /GoTo /D [2350 0 R /XYZ 72.0 720.0 null] >> endobj 2512 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 265.64 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2511 0 R /H /I >> endobj 2513 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2511 0 R /H /I >> endobj 2514 0 obj << /Type /Action /S /GoTo /D [2353 0 R /XYZ 72.0 720.0 null] >> endobj 2515 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 225.93 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2514 0 R /H /I >> endobj 2516 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2514 0 R /H /I >> endobj 2517 0 obj << /Type /Action /S /GoTo /D [2356 0 R /XYZ 72.0 720.0 null] >> endobj 2518 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 252.31 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2517 0 R /H /I >> endobj 2519 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2517 0 R /H /I >> endobj 2520 0 obj << /Type /Action /S /GoTo /D [2359 0 R /XYZ 72.0 720.0 null] >> endobj 2521 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 673.5 244.283 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2520 0 R /H /I >> endobj 2522 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 673.5 539.998 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2520 0 R /H /I >> endobj 2523 0 obj << /Type /Action /S /GoTo /D [2362 0 R /XYZ 72.0 720.0 null] >> endobj 2524 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 250.11 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2523 0 R /H /I >> endobj 2525 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2523 0 R /H /I >> endobj 2526 0 obj << /Type /Action /S /GoTo /D [2365 0 R /XYZ 72.0 720.0 null] >> endobj 2527 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 249.56 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2526 0 R /H /I >> endobj 2528 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2526 0 R /H /I >> endobj 2529 0 obj << /Type /Action /S /GoTo /D [2368 0 R /XYZ 72.0 720.0 null] >> endobj 2530 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 253.44 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2529 0 R /H /I >> endobj 2531 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2529 0 R /H /I >> endobj 2532 0 obj << /Type /Action /S /GoTo /D [2371 0 R /XYZ 72.0 720.0 null] >> endobj 2533 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 261.77 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2532 0 R /H /I >> endobj 2534 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 625.5 539.998 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2532 0 R /H /I >> endobj 2535 0 obj << /Type /Action /S /GoTo /D [2374 0 R /XYZ 72.0 720.0 null] >> endobj 2536 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 269.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2535 0 R /H /I >> endobj 2537 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2535 0 R /H /I >> endobj 2538 0 obj << /Type /Action /S /GoTo /D [2377 0 R /XYZ 72.0 720.0 null] >> endobj 2539 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 277.33 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2538 0 R /H /I >> endobj 2540 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2538 0 R /H /I >> endobj 2541 0 obj << /Type /Action /S /GoTo /D [2380 0 R /XYZ 72.0 720.0 null] >> endobj 2542 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 262.89 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2541 0 R /H /I >> endobj 2543 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2541 0 R /H /I >> endobj 2544 0 obj << /Type /Action /S /GoTo /D [2383 0 R /XYZ 72.0 720.0 null] >> endobj 2545 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 254.55 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2544 0 R /H /I >> endobj 2546 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2544 0 R /H /I >> endobj 2547 0 obj << /Type /Action /S /GoTo /D [2386 0 R /XYZ 72.0 720.0 null] >> endobj 2548 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 251.22 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2547 0 R /H /I >> endobj 2549 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2547 0 R /H /I >> endobj 2550 0 obj << /Type /Action /S /GoTo /D [2389 0 R /XYZ 72.0 720.0 null] >> endobj 2551 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 257.88 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2550 0 R /H /I >> endobj 2552 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2550 0 R /H /I >> endobj 2553 0 obj << /Type /Action /S /GoTo /D [2392 0 R /XYZ 72.0 720.0 null] >> endobj 2554 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 256.22 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2553 0 R /H /I >> endobj 2555 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2553 0 R /H /I >> endobj 2556 0 obj << /Type /Action /S /GoTo /D [2395 0 R /XYZ 72.0 720.0 null] >> endobj 2557 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 266.21 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2556 0 R /H /I >> endobj 2558 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2556 0 R /H /I >> endobj 2559 0 obj << /Type /Action /S /GoTo /D [2398 0 R /XYZ 72.0 720.0 null] >> endobj 2560 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 264.55 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2559 0 R /H /I >> endobj 2561 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2559 0 R /H /I >> endobj 2562 0 obj << /Type /Action /S /GoTo /D [2401 0 R /XYZ 72.0 720.0 null] >> endobj 2563 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 262.6 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2562 0 R /H /I >> endobj 2564 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2562 0 R /H /I >> endobj 2565 0 obj << /Type /Action /S /GoTo /D [2404 0 R /XYZ 72.0 720.0 null] >> endobj 2566 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 235.95 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2565 0 R /H /I >> endobj 2567 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2565 0 R /H /I >> endobj 2568 0 obj << /Type /Action /S /GoTo /D [2407 0 R /XYZ 72.0 720.0 null] >> endobj 2569 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 234.83 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2568 0 R /H /I >> endobj 2570 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2568 0 R /H /I >> endobj 2571 0 obj << /Type /Action /S /GoTo /D [2410 0 R /XYZ 72.0 720.0 null] >> endobj 2572 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 252.04 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2571 0 R /H /I >> endobj 2573 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2571 0 R /H /I >> endobj 2574 0 obj << /Type /Action /S /GoTo /D [2413 0 R /XYZ 72.0 720.0 null] >> endobj 2575 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 241.49 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2574 0 R /H /I >> endobj 2576 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2574 0 R /H /I >> endobj 2577 0 obj << /Type /Action /S /GoTo /D [2416 0 R /XYZ 72.0 720.0 null] >> endobj 2578 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 246.5 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2577 0 R /H /I >> endobj 2579 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2577 0 R /H /I >> endobj 2580 0 obj << /Type /Action /S /GoTo /D [2419 0 R /XYZ 72.0 720.0 null] >> endobj 2581 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 242.6 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2580 0 R /H /I >> endobj 2582 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2580 0 R /H /I >> endobj 2583 0 obj << /Type /Action /S /GoTo /D [2422 0 R /XYZ 72.0 720.0 null] >> endobj 2584 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 271.5 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2583 0 R /H /I >> endobj 2585 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2583 0 R /H /I >> endobj 2586 0 obj << /Type /Action /S /GoTo /D [2425 0 R /XYZ 72.0 720.0 null] >> endobj 2587 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 249.28 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2586 0 R /H /I >> endobj 2588 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2586 0 R /H /I >> endobj 2589 0 obj << /Type /Action /S /GoTo /D [2428 0 R /XYZ 72.0 720.0 null] >> endobj 2590 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 250.39 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2589 0 R /H /I >> endobj 2591 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2589 0 R /H /I >> endobj 2592 0 obj << /Type /Action /S /GoTo /D [2431 0 R /XYZ 72.0 720.0 null] >> endobj 2593 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 259.28 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2592 0 R /H /I >> endobj 2594 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2592 0 R /H /I >> endobj 2595 0 obj << /Type /Action /S /GoTo /D [2434 0 R /XYZ 72.0 720.0 null] >> endobj 2596 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 269.27 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2595 0 R /H /I >> endobj 2597 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2595 0 R /H /I >> endobj 2598 0 obj << /Type /Action /S /GoTo /D [2437 0 R /XYZ 72.0 720.0 null] >> endobj 2599 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 260.39 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2598 0 R /H /I >> endobj 2600 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2598 0 R /H /I >> endobj 2601 0 obj << /Type /Action /S /GoTo /D [2440 0 R /XYZ 72.0 720.0 null] >> endobj 2602 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 278.16 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2601 0 R /H /I >> endobj 2603 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2601 0 R /H /I >> endobj 2604 0 obj << /Type /Action /S /GoTo /D [2443 0 R /XYZ 72.0 720.0 null] >> endobj 2605 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 301.5 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2604 0 R /H /I >> endobj 2606 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2604 0 R /H /I >> endobj 2607 0 obj << /Type /Action /S /GoTo /D [2446 0 R /XYZ 72.0 720.0 null] >> endobj 2608 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 254.82 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2607 0 R /H /I >> endobj 2609 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2607 0 R /H /I >> endobj 2610 0 obj << /Type /Action /S /GoTo /D [2449 0 R /XYZ 72.0 720.0 null] >> endobj 2611 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 254.84 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2610 0 R /H /I >> endobj 2612 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2610 0 R /H /I >> endobj 2613 0 obj << /Type /Action /S /GoTo /D [2452 0 R /XYZ 72.0 720.0 null] >> endobj 2614 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 243.16 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2613 0 R /H /I >> endobj 2615 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2613 0 R /H /I >> endobj 2616 0 obj << /Type /Action /S /GoTo /D [2455 0 R /XYZ 72.0 720.0 null] >> endobj 2617 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 250.94 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2616 0 R /H /I >> endobj 2618 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2616 0 R /H /I >> endobj 2619 0 obj << /Type /Action /S /GoTo /D [2458 0 R /XYZ 72.0 720.0 null] >> endobj 2620 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 229.83 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2619 0 R /H /I >> endobj 2621 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2619 0 R /H /I >> endobj 2622 0 obj << /Type /Action /S /GoTo /D [2461 0 R /XYZ 72.0 720.0 null] >> endobj 2623 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 234.84 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2622 0 R /H /I >> endobj 2624 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2622 0 R /H /I >> endobj 2625 0 obj << /Type /Action /S /GoTo /D [2464 0 R /XYZ 72.0 720.0 null] >> endobj 2626 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 236.5 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2625 0 R /H /I >> endobj 2627 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2625 0 R /H /I >> endobj 2628 0 obj << /Type /Action /S /GoTo /D [2467 0 R /XYZ 72.0 720.0 null] >> endobj 2629 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 258.16 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2628 0 R /H /I >> endobj 2630 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2628 0 R /H /I >> endobj 2631 0 obj << /Type /Action /S /GoTo /D [2470 0 R /XYZ 72.0 720.0 null] >> endobj 2632 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 252.05 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2631 0 R /H /I >> endobj 2633 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2631 0 R /H /I >> endobj 2634 0 obj << /Type /Action /S /GoTo /D [2473 0 R /XYZ 72.0 720.0 null] >> endobj 2635 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 217.5 227.21 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2634 0 R /H /I >> endobj 2636 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 217.5 539.998 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2634 0 R /H /I >> endobj 2637 0 obj << /Type /Action /S /GoTo /D [2476 0 R /XYZ 72.0 720.0 null] >> endobj 2638 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 258.99 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2637 0 R /H /I >> endobj 2639 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2637 0 R /H /I >> endobj 2640 0 obj << /Type /Action /S /GoTo /D [2479 0 R /XYZ 72.0 720.0 null] >> endobj 2641 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 242.33 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2640 0 R /H /I >> endobj 2642 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2640 0 R /H /I >> endobj 2643 0 obj << /Type /Action /S /GoTo /D [2482 0 R /XYZ 72.0 720.0 null] >> endobj 2644 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 239.55 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2643 0 R /H /I >> endobj 2645 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2643 0 R /H /I >> endobj 2646 0 obj << /Type /Action /S /GoTo /D [2485 0 R /XYZ 72.0 720.0 null] >> endobj 2647 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 250.65 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2646 0 R /H /I >> endobj 2648 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2646 0 R /H /I >> endobj 2649 0 obj << /Type /Action /S /GoTo /D [2488 0 R /XYZ 72.0 720.0 null] >> endobj 2650 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 233.69 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2649 0 R /H /I >> endobj 2651 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2649 0 R /H /I >> endobj 2652 0 obj << /Type /Action /S /GoTo /D [2491 0 R /XYZ 72.0 720.0 null] >> endobj 2653 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 228.14 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2652 0 R /H /I >> endobj 2654 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2652 0 R /H /I >> endobj 2655 0 obj << /Type /Action /S /GoTo /D [2494 0 R /XYZ 72.0 720.0 null] >> endobj 2656 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 269.8 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2655 0 R /H /I >> endobj 2657 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2655 0 R /H /I >> endobj 2658 0 obj << /Type /Action /S /GoTo /D [2497 0 R /XYZ 72.0 720.0 null] >> endobj 2659 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 224.82 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2658 0 R /H /I >> endobj 2660 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2658 0 R /H /I >> endobj 2661 0 obj << /Type /Action /S /GoTo /D [2500 0 R /XYZ 72.0 720.0 null] >> endobj 2662 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 237.58 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2661 0 R /H /I >> endobj 2663 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2661 0 R /H /I >> endobj 2664 0 obj << /Type /Action /S /GoTo /D [2503 0 R /XYZ 72.0 720.0 null] >> endobj 2665 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 227.04 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2664 0 R /H /I >> endobj 2666 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2664 0 R /H /I >> endobj 2667 0 obj << /Type /Action /S /GoTo /D [2506 0 R /XYZ 72.0 720.0 null] >> endobj 2668 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 85.5 191.81 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2667 0 R /H /I >> endobj 2669 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 85.5 539.998 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2667 0 R /H /I >> endobj 2670 0 obj << /Type /Action /S /GoTo /D [2509 0 R /XYZ 72.0 720.0 null] >> endobj 2671 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 232.88 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2670 0 R /H /I >> endobj 2672 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2670 0 R /H /I >> endobj 2673 0 obj << /Length 2674 0 R /Filter /FlateDecode >> stream xMu9;4s[ĻzGj. oFpPE2QmY{P>Q守|q\W,/k^^D{g,:~ c_?ÿ/g?;^_~y}g^og/vgҖc2\S^|͋׻O|?==}zӋzW_忾>>nor_yGb]Ӌ7_{ſ?_/>O/pw/.q9UyJw!qH ```````*'^O[J< )qx"8Dp q`  q` 'F( ECCCSSSSV"D`.]v"8Dp)Nbrqq#~|#FެkGCԳP]PIu<54Z,@j\C,,,,,,,+YVdȲe#N,;Yvd9r$IS,@j\Cr 54HMAAAAIII,+YVldȲe#N,;Yd9r$IS,@j\CO\Cr 54,,,,,,?^rW~qnvA~A}`:R_?ؤ3Ej\{S>rNZ,rP,,,,,,,+YV˲\?dNrmZ,v XReeeeeeee%J,Y6ldɲe'N,Yd9r˵Bj\-˵"kddddddddYɲe%F,Y6dɲ A,'YNd9rmZ,v O\-˵Bj\-& $$ˏ[1~04|W_՗_ϗ׷tRՍ Z uzH}ȐZ,X RZueeeeee%J,+Y6ldȲe'N,Yd9r˵:Aj\>rNZ,X Reeeeeeee%J,Y6ldɲe'N,Yd9rZ X RZ X P\& $$gY>}Ӄ{{Jz}/uRݥIT7E,Reeeeeeee%J׻ϘܨwqR']]AuzJ}RM,'YN"b>Z,R"2222222ɲe%J,Y6ldɲe'A,YNd9r_j\C}_j\K-22222 =y|z7O}Ӄq}n]ܺu׭k_}ۺmڷk߶?ֵ[~l]uֵ[~n]uεcDZsعq\8w};>εs\([>}l]غusֵ[׾n]uֵo[׾m]uֵ[׾o]uֵ[~l]uֵ;>kεcsܹy\ǟ;1`[71./vCpZwayX, ZniiiTc7|RފAy?-O;<,7aTNR]Km)'յVTr[Iu-ZrKVSZMj3fTvS:Lu0iT'ZK9Z+y!յ&rS S S S SMSMS}v|ˏ"WOT>s^_TK|mZ>(?ONy9,'5 TTTTTTTVS꼂\|RފAy?-O;<,7aTNR]Iu $?Iu ('5 PnaaaiiiiTVSmLj7nTS:Lu4Ik@9a夺H^Hu (7000044յ箊9Ǐz=lv}m NoGBwXfv,ZNR-TK!RL5L5L5L5L5M5M5Mj5u0l9z;:VY>)_J^-b%OMu4iT 8H5RT$8I5 F!(TTTTTTTVSZMj3fTvS:Lu0iT'Ayj'IyjTjS S S SMSMSMS]㈻*8aߏ#փ޽nP^O.^P7''夺^HZMj5fT6SM0aTNS:Iu /('5$5TrR] M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu^PNkx!IkxA9TrS S S SMSMSMS}.8'ay|J^}rW>rR-TK!RHS S S SMSMSMSZMj5fTvSMu0aTNSAqj'IqjRBQL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I5R̓T ,˛Qj|y<-70000444jT.cy'|v)H7'kAڥ yZnTNSzۥ 9v)@~mzۥ 9v)HnaaaiiiTVSLj3nTS:Lu4iTo$'.ORRTo /zۥ >˯7{2yrCr<,oOKTK10004444jTGl<-Y>)jNS:I5RT 8H5NRT$(Tjjjjjjjj5jT6SmLj7nTS:Mu$)ޛS^-7iT'Ak 夺H~C9=0#yjjjjjjj5jT6SmLj7nTS:Mu$յrR]{`$?Iu큡TIu큡TTTTTTjwQM~zƳQ?/|wo߾y{7()j|M%(O;a9夺JHZMjT*F͝~X7'X^-7iT'夺JPNk*!y!5TTTTTTTTVSLj3fTvS:Lu4iT'夺JPNk*A>JySp0x4ۯ}w3G`k/rw_|P~<-_?)˛S!rR]r$?IumȡT׆IumȡTTTTTTTVSx%Iy+W<-TNS:IumȡT׆OR]r('յ!GBkCZMj5fTvSM0aTNS6PNkC夺6PNkCT׆M5L5L5L5L5M5M<.x0O)ͯ|~_}?86f7^W7ݞѲfq{Vq{Vq{Vq{N鑛鑛uӣnzM6=ڦG}ӣozM16={k^q{\Vq{@Vq{$NW>xR|4F]R|4FTwGobY,XS,)RIJ,,,,,,,,,+YVdȲe#F,;Yvd9r$I,X!qebX)qe"Q2 YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YNC,<2OS,<2Xf,dddddddRrWY:7U?9^7xo޿tQ>^~nvc0r{݇F]^鑛Q7=GmӣmzM7=cclzM1|KZˏ)oOʯOWˇk2iy$յrR]K%/8SnaaaiiiiTVSmLj7nTS:Lu4Ik=6夺VgSNk6夺VnK^HuTTTTTTTTVSLj3fTvS:Lu4iT'甓Z.Ike:夺֩SNk:2=`Q~Ⱥ_?zͯȺN32ay|J>?Z>(?Iu}N9O)';ZMjTqV>)ojqX0iT'eZ4 Ik 夺H^Hu-/TTTTTTTTVSLj3nTvS:Lu4iTjIuTJ IuZEA>a#Sn#Ͽw <_{GsʛSlZWϦyZ)/Z Bjjjjjjj5jT6SmLj7nTS:Mu$8H5RT$8I5NRTjRbaaaiiiiTVSmLj7nTS:Lu4IyjAyj'f!,TTTTTTT <ۃA _?>}꿞]K8K NIAiyYn돜Qw^7U{Oyyʻkr@yX,jPnaaaaiiiT֏i|f˫qZ4iT'z3Ikr@9 JNkr@VSZMj3fTvS:Lu0aTNR̓T uފ!3<7S ύ<,o3<7rR}~aaaiiiiTVSmLj7nTS:Lu4II9>?s#'gx|^HVSZMj3fTvS:Lu0iTNR}~FN$gxn ύTṑjjjjj$2 Oo_~/~MG}2w7Y>)j| #(O;a9a夺FHZMjT*z;y;-O;<,oOGZnTNR]Iu #('5T0BBkAVSZMj3fTvS:Lu0iTNR]Iu #$?Iu #('5T0rS S S SMSMS}..ܧ0^\o?ɮ/޾~Wo|ݟo=.33<-_wIug@yTNS66PNk夺6=PNk T׆M5L5L5L5L5M5M5Mj5=?m' (˛΀j3<-7iTNR]8('յCTIumTM5L5L5L5M5M5Mj5jT6SmMj7aTS:MuڭB9+vPNk_T.M5L5L5L5M5M5M6WsԑoEnZ#__OW__>n0u{Qs>xQ@Z>$_+R(O;qrR]+R('յ"E0004444jTs(Jw%˛8@ɫ:Mu$յ"rR]+R('յ"rR]+R$/VPnaaaaiiiTVSmLj3nTS:Lu4iT׊IuH$յ"rR]+R('յ"rS S S SMSMSxE}q>\cw߾ީ_o޿ݍڶ#|˫-1iy|-ŠTR IbPNk)夺bHZMOۍIy/W[brS:Mu$յrR]K1$?Iu-ŠTR Iu-ŠTTTTTTTVSZMj3fTvS:Lu0iT'Z!Ik)夺bH^Hu-ŠTTTTTTT T`ӣWojw?˻pOHf|=Cj|=CK~{Ƈz{z{z{ToTTTTTTTTVS]aGF7"yX,gH^-H4iT'ޞh"9ޞoIHNgHN'HnaaaiiiTVSLj3nTS:Lu4iTonToq$C]$'#^ /z{lrgăӷoޝrom/o|:cK}i:nTOUJre9Ų,E,KR222222ɲe%J,Y6ldɲe'A,Yd9rebX!qebX)Q2XF! $$$$J,+Y6ldȲe'N,Yd9r<2C,<2OS,eBAAAAIIϦ wyF>6n}ۧW>^?rN^k݃I+y|P~JnTJIu$TJIu$ZIBVSZMj3fTvS:Lu0iTNR]+I('յDTJIu$TJM5L5L5L5M5M5Mj5jT6SmMj7aTS:MuZIB9$VPNk%TJM5L5L5L5M5M5Ml.Ϩf;T>)jNS:I:#rR]gRN\ 3r)70000444jT6SmLj7nTS:Mu4I\Iu+I\IuK93r)700044`3>=_ۯᨂ˛}A>SZM>|~Ϣ<,oOʯfW,rS:Mu$յ\rR]5$?Iu-נTr Iu-נTTTTTTTVSZMj3fTvS:Lu0iT'Z!Ik夺kH^Hu-נTTTTTTT-׸˯hn߮uwGnr[ǣWuAy;-O;<,oOGTNS:I6fToc&I6fToc& Ljjjjjjjj5jT6SmLj7nTS:Mu$5fTטITטrR]c&Iu(7000444jTVSmLj7nTS:Lu4IkD91'1夺LR]c&M5L5L5L5M5M5M٘.cv|z0̧cO_?zwxYGѡ/r? 9-O;of|-yT^Iuő$յrR]{q$/PnaaaiiiiTKiyZ)_<,oO$4iT յrR]{q$?IušT^Iuő(S4iT'u;Z#Ik夺PNkZMj5jT6SM0aTNS:IuۡT׺OR]v('յnGBklpt_Oah/yOC|ׯ i-:^ۃ ].NZ%yX,WSZMj3fTvS:Lu0iT'~8 rRp6l*ITy!gSAnaaaaiiiTVSmLj3nTS:Lu4iTo%'ۦAORmTo%'ۦAM5L5L5L5M5M5Mj5jT6SmMj7aTS:MumӠz4IMm 6[J-͖fKiRl)m6[0|sԑoX#~//~}귿 k kK5g;Iz3/y|PKwכyMu$rj9HZNR-'TK!RHR-TTTTTTTVSZMj3fTvS:Lu0iT'Aqj'IqjTjS S S SMSMSMSMSZMj3fTvSMu0aTNR̓T Nj~]on F>zzOv,߯W/|ٿ>~_:~k˿^_z}>/p}/x/h\V_e) L_p5]l% endstream endobj 2674 0 obj 14433 endobj 2675 0 obj [ 2512 0 R 2513 0 R 2515 0 R 2516 0 R 2518 0 R 2519 0 R 2521 0 R 2522 0 R 2524 0 R 2525 0 R 2527 0 R 2528 0 R 2530 0 R 2531 0 R 2533 0 R 2534 0 R 2536 0 R 2537 0 R 2539 0 R 2540 0 R 2542 0 R 2543 0 R 2545 0 R 2546 0 R 2548 0 R 2549 0 R 2551 0 R 2552 0 R 2554 0 R 2555 0 R 2557 0 R 2558 0 R 2560 0 R 2561 0 R 2563 0 R 2564 0 R 2566 0 R 2567 0 R 2569 0 R 2570 0 R 2572 0 R 2573 0 R 2575 0 R 2576 0 R 2578 0 R 2579 0 R 2581 0 R 2582 0 R 2584 0 R 2585 0 R 2587 0 R 2588 0 R 2590 0 R 2591 0 R 2593 0 R 2594 0 R 2596 0 R 2597 0 R 2599 0 R 2600 0 R 2602 0 R 2603 0 R 2605 0 R 2606 0 R 2608 0 R 2609 0 R 2611 0 R 2612 0 R 2614 0 R 2615 0 R 2617 0 R 2618 0 R 2620 0 R 2621 0 R 2623 0 R 2624 0 R 2626 0 R 2627 0 R 2629 0 R 2630 0 R 2632 0 R 2633 0 R 2635 0 R 2636 0 R 2638 0 R 2639 0 R 2641 0 R 2642 0 R 2644 0 R 2645 0 R 2647 0 R 2648 0 R 2650 0 R 2651 0 R 2653 0 R 2654 0 R 2656 0 R 2657 0 R 2659 0 R 2660 0 R 2662 0 R 2663 0 R 2665 0 R 2666 0 R 2668 0 R 2669 0 R 2671 0 R 2672 0 R ] endobj 2676 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 2675 0 R /Contents 2673 0 R >> endobj 2677 0 obj << /S /D /St 443 >> endobj 2678 0 obj << /Length 2679 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 2681 0 obj << /Length 2682 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.Vսm endstream endobj 2682 0 obj 517 endobj 2683 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2681 0 R >> endobj 2684 0 obj << /Length 2685 0 R /Filter /FlateDecode >> stream xTn0+."EZ-Л=$A bnѿzĒD2LzYΎ|fޛ0X'ac=&JPf Ā\&w,o0sa?XBo֕l9JB>e×B~6AnG9HaJ^g;ݔU,߷~M:UBNQ_2F4>63 $rK:vZ"ޔZM]-mes猿:- QP'J@Wcd e0agcNkKi} hSݦ*)Mσ0QRQ13RpLiSv3R+l꜑i/c\lkyoAB%\?6aG͍HI&YJQ=8OkXկa'hiBN{p3vrNW <\jZ'^eojxr endstream endobj 2685 0 obj 470 endobj 2686 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2684 0 R >> endobj 2687 0 obj << /Length 2688 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·GJj?* endstream endobj 2688 0 obj 594 endobj 2689 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2687 0 R >> endobj 2690 0 obj << /Length 2691 0 R /Filter /FlateDecode >> stream xTMo0W̱=IlsJmFC*THBWw|@h`o['xy-mL>$DeLpv!/{8}v!l7o9pϞ Ex Y%>Q!xQ!,Mʾ ^y,=ʂJ-iqtwHg2!}`iS%u: 7~LQ kԡ:tThQ5,vn^r7A*jmԍ DKq2:KM_S)1A#-JrK(Mf0 pk5ҐHMIn rUT;[mMig/ҏN/T#d&b[SG]~>P@lyb"k5&(/ACaFdO6E?Mf<}+5=E 7 ,kU_{ endstream endobj 2691 0 obj 464 endobj 2692 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2690 0 R >> endobj 2693 0 obj << /Length 2694 0 R /Filter /FlateDecode >> stream xTn0+ۀvRo"*%51)wl -,޶(=yoo ~Vj^zL1$DeLpB_}A8O9pIx XWnHe T -e_bMy,=ʂJNpwv[.@횼=]Ne Iѽg~jה͐jgp4=-z&B,:vgXl* GG(}uRoBDgQlyb"k5Y)S~Q3 =@[ry®>AO8PA82/5Sr3΢>XU endstream endobj 2694 0 obj 470 endobj 2695 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2693 0 R >> endobj 2696 0 obj << /Length 2697 0 R /Filter /FlateDecode >> stream xUn0+."ܚPԈ PdjKwK^XI9>X:0FԻ5pDHp~!/Us,[kB焇+hl _6Epo>GkCdZZH ox W.E N6__C9xd*xa}MȦo} kg>H Sw!"Lٔŭ;=oXt1YE\"rJo@{іεbQ]T㋾ a3Es,PP9*$"}"Cmt;/6UVT5$K%M$?  Gdන)88WHYk[ d> endobj 2699 0 obj << /Length 2700 0 R /Filter /FlateDecode >> stream xTMo0W̱=qJ=D$讳 H lK{jg3~`ƙܱ`$x (X8L؆8bX>[BWGur-&૊ aާݧBzdm> endobj 2702 0 obj << /Length 2703 0 R /Filter /FlateDecode >> stream xVKo@+B OVPzHF1 *<`mĶX4oo5<8~"CI<1 C yPdX0`s=#u=.DpCssvtʙ !6K}%-vzyBrfnQ(7WRkV[:N9eY[_KOyfmp F\W !:?[mdRUy'ErB(2$[(K ;OM!oQTJCt]=C'l47((BkYЁNt?ELwa]xQ[^d0h.)Rur(;ičY^+hK5iv !ˏP,ZztP*]QtYRXo٫d"$1zbF&j`Fnj{GvɮmMeTY)sb&xcSQmYIۚzQLba̞iZvJDFMl^M\OVaC.`t)( ҇#l;"> endobj 2705 0 obj << /Length 2706 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@Mɳ+h endstream endobj 2706 0 obj 484 endobj 2707 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2705 0 R >> endobj 2708 0 obj << /Length 2709 0 R /Filter /FlateDecode >> stream xVn0+%Q̭=0"$0Xڒc)p]RĢ@2Lzٝ DG (^gnPbw1HC,NIc (p=nگ~:؆h?Y(|o1c<}ԦWlD)n,:=JS!%)jmU,2m/evЩ`u:|I_EyfQ>8(#SSO R*:Qꇽ6$fUsD`3A)Vr@d2)II&\.MQ,V\6"\> endobj 2711 0 obj << /Length 2712 0 R /Filter /FlateDecode >> stream xTMo0W̱=qJ=T$.EZ ҏ1M`wQOM~3~` ?+a]`$x (,/Яqdߘc#BxVDU冰eSC!6B+Kp%NKys]l]4ۼ{{'vNv|e;]}H g5-ӃgHj;hQ M#l{orɻNВKBAu 菊8֭fNHp;+ W-T wy!*}qg["rD̬2TJq2CqUH'L[X$XRq*< mxhk QO"kS/!ɟ^5vlga\VGD]}AA]nڮv4.À?;Y1?ѵrɜBԑ>{e $5 endstream endobj 2712 0 obj 487 endobj 2713 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2711 0 R >> endobj 2714 0 obj << /Length 2715 0 R /Filter /FlateDecode >> stream xUn0+.IIs,9AZ%TSAпRzR4 s8Ճ鹰8(BLx,b/Оț{~S8;Bc=xrz⵳*6>t]yݳ2_jH no}FIw~q>L%,M_#􍠯bMlLQOCGegJu,&G̘ &D N4:˄@K ~F++{ PG]lЩ*H]gÜR^>8Opfix. FюC9ưa NfR‘7yv>O\ endstream endobj 2715 0 obj 543 endobj 2716 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2714 0 R >> endobj 2717 0 obj << /Length 2718 0 R /Filter /FlateDecode >> stream xUMo@+eskJU-F TÉJE}3oގum,wCqdp q? Y.V_>cpĻ#tE:\Kyӎ|W6ޗtGi' L H^G;0K6i(x7":Tr*VUkV5}t i꩗VMAD٘ϳ=?/*o:˗v^Sπ*%S-Arret"T(?]?FKʔ(ll brj\Rc6 gnzw틤hfl$&aM:UXf.$S(荒uxh)m?3W2FSkԎ'ycb(Ψvi'gCHsR4.NJ(ݏ=ӣ}]sKMUeBى>sH gIZ'~߃=;qPͨ<"_,jg] hoӟ/(YxR~psƮŚP endstream endobj 2718 0 obj 545 endobj 2719 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2717 0 R >> endobj 2720 0 obj << /Length 2721 0 R /Filter /FlateDecode >> stream xTMo0 WQAw]1xHlv;ߏvoq/zG&9;a! 4- s;aw!Gr=qD]冰fR*^GYHNwpaYҬ]svgv*UBJ!2􍤯y1;@"7Sݡ@3UQ-ݏڭy嚧*om:bN@K.BTҿhA+&ڠbߥ4cB2E+ P,g ,]ukQx;';kyQ֛#6XͭIeҒRTB*Q?Zb7S6> endobj 2723 0 obj << /Length 2724 0 R /Filter /FlateDecode >> stream xVKo0+B[+U{$ZyEcIWc`INMo>?9^W ymB<85Q?GA@~3nا1;Xr|wК݇cYs3 B>7+K|%<(G^!ք (Q TRn-5709N(ds]CF6,̫53Gc55Zc%VtU*F< w\v}C72}U1B u^1!Fu.b=2+>,S9 57:9y~tΪA endstream endobj 2724 0 obj 760 endobj 2725 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2723 0 R >> endobj 2726 0 obj << /Length 2727 0 R /Filter /FlateDecode >> stream xTMo0+?8ǪI*m$" ;+ݥ=5ߌ1 dcqd0WLw,Vsa_^!|no 7jP{Cy#ӵ!zxGHC42)ܔ29['> endobj 2729 0 obj << /Length 2730 0 R /Filter /FlateDecode >> stream xUn0+r(X4-C B{H@h[L)$Xܚ؆I<G5JsH6coc8`$GsC׸u+vO3ѡ(|nњ݇'s7o@車y(DQZ@h !uQhns6=D߼h/S;lOxGƝ28% kj.UhԔRыRV/syYڐ4N$' J&rt.v@&y.8W9xYG4vCeCijVH8T_/(DZBv2.g\ٱ"1! KxcOA#%4k^AYd'LOCGiU֦Ze~]]+!]t61f6uReev4auP:!' 5Sj:bpL`uJ8Ѧ;j{0,j&tS$2K& וS2SEBpbE5^"IU OkcK ,oSYrk,$Ƥdݯ3lo= F?<GsMV( ^cгo&1 endstream endobj 2730 0 obj 663 endobj 2731 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2729 0 R >> endobj 2732 0 obj << /Length 2733 0 R /Filter /FlateDecode >> stream xTn0+." rFhij8,J>K=[[ggwG&9uJ8`e!˄B@\ uwzwC8n +%tIxXn$^$|W!}@M\ɸ%n>\!Ʒo!d^JwV˯Fyc;pROCG-`J~>,>mBu Zr)z^ }-_SIYXJ O)`p7/EA\*orGEdJKcL=/TuS4#il꜑iO`N]H52#}O~+N҇B[nR휥H״O1ҷ>Qrq0!/(&*n 83b]5pWރ9}iHH{]j#N^oj|+ endstream endobj 2733 0 obj 479 endobj 2734 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2732 0 R >> endobj 2735 0 obj << /Length 2736 0 R /Filter /FlateDecode >> stream xVN@}Wc"NRQDT(n2XbSڿ;x*Q{sL֏ׁ.0kA!fZ M++7{@Dis VK4 &R ǯMT\m63:pJl~vpK)뤬78<,Tn4(ȯ g: #dA:Sz8qgK7l)wI>*)E.rA:l,˒"nM p ڎZܩvG>qC8~ɓhݢӱ_fr ׵@QbV1g%@~J8XqVN; F>##]a=[F ew-f#?岝n(LY*qh&IOJ0D"+E4) wj?OQ(`ܴ7CMD?]gMtH/z:/.۩MK6bشR>7g?QimX:q`ws%Kvqպ(~\V|lȷK>쁧 =)(Ȣv,}.NoGEk(>a|4c#Lד=,<^ZccYH:5S4ıTJ偪1ZH'f-M%;ao.Uy~ endstream endobj 2736 0 obj 731 endobj 2737 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2735 0 R >> endobj 2738 0 obj << /Length 2739 0 R /Filter /FlateDecode >> stream xTMs0W9D]} 3vθaCfWw ئ&ƃCo걫'&:u=0V2SH2 x`8?G"W8-`%Cn]/6l5KUnvËr+uT͇lS9DqݦD_U4٩tKu#oy_> endobj 2741 0 obj << /Length 2742 0 R /Filter /FlateDecode >> stream xVMs0+[9驙xC`#Lm w%ͥ1o>9~/! fk積Q`?D2 lA+tlMlO_&ioX8&/>Py'O܀ p˙>E'k;MYI\(Y?yW)Uzc7 ksowp` S}u[Q2Keq̒FzxeB#ph;e}6pchgq*l*L*%u,Q@z& @sE x7񪖻I "O`@U~zr8KVR+U-%4䡔HQqq)ۄ]gI:+y)Dg*hīe)e^$*1r`V |zТClR1B$%X@zPUYN羕J3PO[ 5Eo:eC2yͪ4ϠVhY|y]5rr'e! z=Ee41'Ci쩖(6[Fp nTm yzQRxcU)q=Flw2 L^kE|"mEa?裬9޾5^mW^ endstream endobj 2742 0 obj 800 endobj 2743 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2741 0 R >> endobj 2744 0 obj << /Length 2745 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 ~+*>ٝ endstream endobj 2745 0 obj 1388 endobj 2746 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2744 0 R >> endobj 2747 0 obj << /Length 2748 0 R /Filter /FlateDecode >> stream xUn0+.IskCQ#BzHC[-ٖ%%rNM,C$Vpy+;h#`vM U?g"pv 튵[};e$dz^O%P'9Ye m"=@MQJ͋muPs|3CckTSٹGA_|YtiRs_3hJ~͒')TJP> endobj 2750 0 obj << /Length 2751 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?5H endstream endobj 2751 0 obj 489 endobj 2752 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2750 0 R >> endobj 2753 0 obj << /Length 2754 0 R /Filter /FlateDecode >> stream xVn0+ EsKhE! Efl"J}Zl-C6Lr7Da@{b@rH6 ay>0p v lcO#i6!u6 k0Ӥ뀗ň}U(wBt֣?BBH]:zK0:>T0fzQK־ Hm}:UF$@O[ JJhE)VZb^MiGa7 粘,[,s]BO<%\l5ԵPC)Uu?L<ql$J}+J:% M{D.A(47ʌ RW\dOj[N+37 ~JQ7^ͮPFOߡ^ӬT?6Sv/pLj;SzRUq#'T$J*:֙ jz2 W҅wxE=}qpc_`!ppspUq endstream endobj 2754 0 obj 769 endobj 2755 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2753 0 R >> endobj 2756 0 obj << /Length 2757 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*2gV> endobj 2759 0 obj << /Length 2760 0 R /Filter /FlateDecode >> stream xVn0+hEsKHE !f,"r}Z,Ye6,r7yH٢@{a`~M:6s\H@y bf$~DF ?"ٺC.Xn7!r:j]b{\ lLvT4J r-_A7M_d?߮ss(2TR")//uō_}NPLeNPʅM)EGNVC3L7*BjPfh(BF6 nffMt(3tF^,JPq$XPN$>0evNGNU SǷG̫}=ɓ,%dHl+ZJt+#8rqnija:{$d:pzRZ^KMR22֞&BܟWjkA3l0a#0i2/*DCL冠(FSԺUJSMqDz!PIj#b(0ky]G];гm0}۸Yjkq^;Jt%K٪zoxQeңs0i.38 } CQذܭ㶈RCTtvYKN6:\/4fb5n :dl읕˝m>z~ 7Dp>[f|0F endstream endobj 2760 0 obj 769 endobj 2761 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2759 0 R >> endobj 2762 0 obj << /Length 2763 0 R /Filter /FlateDecode >> stream xUn0+%Q-EhE ! Ŧm"2Xj}z8$9% Xqvg>`@ྍ1PDtbaLbAnYpN n (|o0x&]QXݧd(mHI$4u7sviIZz{crԩ`u:%kp+RgvlU(ԡ:TaPSJE+JoeYkCʇfY#Έ2 gRM= FߘHa_>@N`nҺ5ԵPY:ccìBDWBxpyQ=T4%*FR.ݚiBޙbgJ㪴>fi r -shȡueave4CUZM@`ef-!t-9'G7%0;؏q?CI'N6Lmg8ˑ9}*aGרTª?  endstream endobj 2763 0 obj 581 endobj 2764 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2762 0 R >> endobj 2765 0 obj << /Length 2766 0 R /Filter /FlateDecode >> stream xTn0+pk'9Vj+P ʁBJQCkGz+đyֻLqA-*L&~Bq,\pt;bXBX/% X܃V};(6)ݣ!I!4pIni0Ϧ(pv3{JAWi8 _<}tn@ȵԾ:vADY-ӏ mxɿgq̗jLJNPIHDa3|23CF~LfܑPVt*]H<.Ɂ(ښ(r&I|TsBс1>%I5duM}4e^)8/i5<4C]bX݀0ݻ\1(yxaʅUudy endstream endobj 2766 0 obj 418 endobj 2767 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2765 0 R >> endobj 2768 0 obj << /Length 2769 0 R /Filter /FlateDecode >> stream xT0+J]wl{VR+D7N } I譻b3yL{m$À T4D ppBq{=|g%Cnn ֧l5!؇@HOֆ#eQbnެ]duk|aR%+Sn$}YMG{\SM=wj "~{Ƕolwhޤ361K w&S)>CJ=_Ϯ-7yG=)td76] (B92&bf 1DQLC> endobj 2771 0 obj << /Length 2772 0 R /Filter /FlateDecode >> stream xU[O0~ϯ8 KǼM]+4 UmDw4m.m&aV߹|$~PA*+y1[ w.X0?2?]r, ZNpkE=Sx s%ql]7*6 sܷ>}qQg;iJ\#xDp3Ey,LfZu_2?I湮28%{*J؈>;rm[_B=؜p&(eAPXpUۖ_&"xuFs@:Aq)xLI{h50k.If%UADIO){i_]^Ħ&A[~u.^-JIl$ qZjsCpU3u֓U=uG"7' HjR:㨲Fineb,1^|Vݏ+ GqKULc^z6 أ Օ'+sc/'ݱ}4_p}Q(,!h mϤ9 q(X΂iWH/s" -4Ɛ#mt|RC& cBvlF;D41^mҺ/×4FWmiYU?8 endstream endobj 2772 0 obj 678 endobj 2773 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2771 0 R >> endobj 2774 0 obj << /Length 2775 0 R /Filter /FlateDecode >> stream xT=O0+n|9`P1i"N8c; MH+[9{횹V[1 B,Gpp}gnTC MâkGp$ݐFgB𪴍_:ϗ^s _L-O( "1-,olg0?t 25~|T0pnʄLt$(IP琷zeZ7`Qk05^W /Uj(XdM1X͉S3ӆD!ё? 1Yrb~F嗿KaHyI4`\n} endstream endobj 2775 0 obj 339 endobj 2776 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2774 0 R >> endobj 2777 0 obj << /Length 2778 0 R /Filter /FlateDecode >> stream xUn0+%bvIJ[zHaX@IP(2m %G.l=5 sA`CqL8QNUslv[+~XwwŪӵKk1"X;u/#J}IG@y%)!<8*Tr ]T#+*VygqU02EC[>"FuDE&6΋挶`KDNe\:AF{5(=Mp/H 0$? 1Yq0( I3ҕn+nQF>C!s]$=qކgD2*]5ռRMN9yI%۔{q3#+2MG^@u. F? 2Y1.?tQUo:`n`0LBtQf`KAEZGjotI:r 뗵>xzpVm'ͯM0k(#2ͭk'I> endobj 2780 0 obj << /Length 2781 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?.'&XUsY endstream endobj 2781 0 obj 729 endobj 2782 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2780 0 R >> endobj 2783 0 obj << /Length 2784 0 R /Filter /FlateDecode >> stream xVMs0+{&QrkIgzh'O{3l1S  LpSXڅzvA<9/ 6xj|HሆP;svA`Cx\x 7 ca`!Eq A"F=(̶p7*,Y+u5jv(#%zS󫗬ۆ@uw0 (F´T_s0N1f&}<,t/*4#r "JĤq .@#!2D`NCSy(ӽ ${ls`6c*M,2PB`EUB,ߕIBHGH iRac.K|)^1BX8&QVgUGPa*ItF<IH5T9tmuVE\j_"%"^elZP)8l+=$%L<N}WZܶIgdP.4Pν#z+7[]~es?'GѵVzl|X(GF_i@y4~++Wĝt5֨vFQn}Ñ4[ | fHaMSOib@yDP0؄T#ѨeԀF^{Kp 6nC 9~eGiދ^Ȇ>l`7|1?2AGV՞c endstream endobj 2784 0 obj 768 endobj 2785 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2783 0 R >> endobj 2786 0 obj << /Length 2787 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 2789 0 obj << /Length 2790 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*fxcU7Rl endstream endobj 2790 0 obj 422 endobj 2791 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2789 0 R >> endobj 2792 0 obj << /Length 2793 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~"J endstream endobj 2793 0 obj 617 endobj 2794 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2792 0 R >> endobj 2795 0 obj << /Length 2796 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!ROj`o]?ϻ: endstream endobj 2796 0 obj 376 endobj 2797 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2795 0 R >> endobj 2798 0 obj << /Length 2799 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 2801 0 obj << /Length 2802 0 R /Filter /FlateDecode >> stream xTMS0W1PW+۲rkNIL b8N[=+l4zڧ]mv;c 4C.T )dfa1;=F?c]~:ƶ!l7C8p&.fM}rzVٯ'-f> endobj 2804 0 obj << /Length 2805 0 R /Filter /FlateDecode >> stream xTr0+4JB6i L`qcq:JcOOMAcWJs b CL"ʥvW,snr?%Cg4u+2 W aNާG !Yi:*хyZl6 _e`e: BP7=엏 r5T9P#hMؼ^v<{cː Dr&Ka yKa<(},)O2Ym֐S­,VYefPY¬vSܚ g]lRH8JT-WźTD'dwkΧ"UVaXv/z4BJ]5[AN΀"iDZ+WRzΜo*=>a>(;mOIP .=Zy91OV) iwF> endobj 2807 0 obj << /Length 2808 0 R /Filter /FlateDecode >> stream xTn0+.I}k@oFڴcԢ=\+⸷&%p'&iB0V*cO&HPz X nYBfBO { tMx Y'޲D+m[)e ͳTDIH6< nqr. ξ*!NMHz og1.Ӏ3 $rC5u-5ZDT)گ],(Sl9pR(DA{,WĪ=(/Ki}stEU^+`GȖUX&L﷪;2!s5\k\3oPʞjϸ$PskkL: sf"T#T]֏ŶΜ1$匚rDw9S[s#Pbh85Űr/ļ~ә@ȓ%՛] / 鋔 endstream endobj 2808 0 obj 472 endobj 2809 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2807 0 R >> endobj 2810 0 obj << /Length 2811 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ɉ[ $ endstream endobj 2811 0 obj 367 endobj 2812 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2810 0 R >> endobj 2813 0 obj << /Length 2814 0 R /Filter /FlateDecode >> stream xTM0Wq98umJ7R˪HK&F|a ΋f_{$,6 *CB ".5 019vca7Y3/%~fxϦgB]iCXۄ}A $OԒ(kD,W҅KBL(4f7z2A2V=B}Jz+!YZ_n𒤟ᵡ}K,Me ۑHr)b$C>VH B kLJsNPJ=u KnT IpAq4b[eUGu 3ֹXt5QN*_f习߅ymy;1OP(흝O7jPj endstream endobj 2814 0 obj 507 endobj 2815 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2813 0 R >> endobj 2816 0 obj << /Length 2817 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)YrrFzz endstream endobj 2817 0 obj 537 endobj 2818 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2816 0 R >> endobj 2819 0 obj << /Length 2820 0 R /Filter /FlateDecode >> stream xUˎ0+rI]>J',&#@DHĨ{ : l>;tf8( LpO)hlwOJn| /m%BsE`Wopλ}NΊI)EyŶJ{(VRDkz2<͗ɝVQVvdvxY4:\.w!>'P3Z+QsdtѦ"ͭ)m?3qS>QWlqAJ:W=DϠG;nQ>{{/G}OcYno, 6R+(9B>S:5eQdpY656en6WutC2Zkv9m_0o( 4^U޹ ̻ endstream endobj 2820 0 obj 595 endobj 2821 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2819 0 R >> endobj 2822 0 obj << /Length 2823 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 2825 0 obj << /Length 2826 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 5\ endstream endobj 2826 0 obj 566 endobj 2827 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2825 0 R >> endobj 2828 0 obj << /Length 2829 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 2831 0 obj << /Length 2832 0 R /Filter /FlateDecode >> stream xTˎ0+rX^?Z!uU:F#"$#WLuss}9EjMb$!f@avXǷ_[ ~%6A<{19m;;sEiG–s󴝺U  #rsjh"+9Q Ielbm )fDKuT_GU]N"4Z~?S"m~oӃ/傚TL y?+DQ֙*$/?UPgU տ21"EL4nW:p[BN뺜SgRⷱ=F"xc&Zbf~a;aώshBޡ*zlqV- endstream endobj 2832 0 obj 524 endobj 2833 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2831 0 R >> endobj 2834 0 obj << /Length 2835 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!WuqLY endstream endobj 2835 0 obj 521 endobj 2836 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2834 0 R >> endobj 2837 0 obj << /Length 2838 0 R /Filter /FlateDecode >> stream xTMo0 WQ-Ym6`e5CSF$F;4ieXH?>z8 0]A !c ,)Հ;Bkh"Pfa'|SN]^5:sǗxj%:#|@$!IOZGIJ\%\: 5Xni`) QK=G-_(Gj(dRJj}mj]uoτQ2H:tD=E_xۜx)gجǎQ:*L&֊k{1 ֞$a<_"u6_zVDB eƖuN$P3h1ⶪ6>ɞdzy+qW(61:?4ə~d.ʛpdiiy<}gU ꯐ endstream endobj 2838 0 obj 534 endobj 2839 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 2837 0 R >> endobj 2840 0 obj << /S /r /St 11 >> endobj 2841 0 obj << /Type /Action /S /GoTo /D [2680 0 R /XYZ 72.0 720.0 null] >> endobj 2842 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 243.43 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2841 0 R /H /I >> endobj 2843 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2841 0 R /H /I >> endobj 2844 0 obj << /Type /Action /S /GoTo /D [2683 0 R /XYZ 72.0 720.0 null] >> endobj 2845 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 242.89 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2844 0 R /H /I >> endobj 2846 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2844 0 R /H /I >> endobj 2847 0 obj << /Type /Action /S /GoTo /D [2686 0 R /XYZ 72.0 720.0 null] >> endobj 2848 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 230.66 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2847 0 R /H /I >> endobj 2849 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2847 0 R /H /I >> endobj 2850 0 obj << /Type /Action /S /GoTo /D [2689 0 R /XYZ 72.0 720.0 null] >> endobj 2851 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 241.21 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2850 0 R /H /I >> endobj 2852 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 673.5 539.998 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2850 0 R /H /I >> endobj 2853 0 obj << /Type /Action /S /GoTo /D [2692 0 R /XYZ 72.0 720.0 null] >> endobj 2854 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 221.78 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2853 0 R /H /I >> endobj 2855 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2853 0 R /H /I >> endobj 2856 0 obj << /Type /Action /S /GoTo /D [2695 0 R /XYZ 72.0 720.0 null] >> endobj 2857 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 246.78 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2856 0 R /H /I >> endobj 2858 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 649.5 539.998 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2856 0 R /H /I >> endobj 2859 0 obj << /Type /Action /S /GoTo /D [2698 0 R /XYZ 72.0 720.0 null] >> endobj 2860 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 257.59 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2859 0 R /H /I >> endobj 2861 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2859 0 R /H /I >> endobj 2862 0 obj << /Type /Action /S /GoTo /D [2701 0 R /XYZ 72.0 720.0 null] >> endobj 2863 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 283.97 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2862 0 R /H /I >> endobj 2864 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2862 0 R /H /I >> endobj 2865 0 obj << /Type /Action /S /GoTo /D [2704 0 R /XYZ 72.0 720.0 null] >> endobj 2866 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 242.59 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2865 0 R /H /I >> endobj 2867 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2865 0 R /H /I >> endobj 2868 0 obj << /Type /Action /S /GoTo /D [2707 0 R /XYZ 72.0 720.0 null] >> endobj 2869 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 268.97 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2868 0 R /H /I >> endobj 2870 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2868 0 R /H /I >> endobj 2871 0 obj << /Type /Action /S /GoTo /D [2710 0 R /XYZ 72.0 720.0 null] >> endobj 2872 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 238.16 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2871 0 R /H /I >> endobj 2873 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2871 0 R /H /I >> endobj 2874 0 obj << /Type /Action /S /GoTo /D [2713 0 R /XYZ 72.0 720.0 null] >> endobj 2875 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 264.54 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2874 0 R /H /I >> endobj 2876 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 577.5 539.998 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2874 0 R /H /I >> endobj 2877 0 obj << /Type /Action /S /GoTo /D [2716 0 R /XYZ 72.0 720.0 null] >> endobj 2878 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 218.72 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2877 0 R /H /I >> endobj 2879 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2877 0 R /H /I >> endobj 2880 0 obj << /Type /Action /S /GoTo /D [2719 0 R /XYZ 72.0 720.0 null] >> endobj 2881 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 242.59 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2880 0 R /H /I >> endobj 2882 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2880 0 R /H /I >> endobj 2883 0 obj << /Type /Action /S /GoTo /D [2722 0 R /XYZ 72.0 720.0 null] >> endobj 2884 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 268.97 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2883 0 R /H /I >> endobj 2885 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2883 0 R /H /I >> endobj 2886 0 obj << /Type /Action /S /GoTo /D [2725 0 R /XYZ 72.0 720.0 null] >> endobj 2887 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 225.38 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2886 0 R /H /I >> endobj 2888 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2886 0 R /H /I >> endobj 2889 0 obj << /Type /Action /S /GoTo /D [2728 0 R /XYZ 72.0 720.0 null] >> endobj 2890 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 251.76 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2889 0 R /H /I >> endobj 2891 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2889 0 R /H /I >> endobj 2892 0 obj << /Type /Action /S /GoTo /D [2731 0 R /XYZ 72.0 720.0 null] >> endobj 2893 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 230.94 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2892 0 R /H /I >> endobj 2894 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2892 0 R /H /I >> endobj 2895 0 obj << /Type /Action /S /GoTo /D [2734 0 R /XYZ 72.0 720.0 null] >> endobj 2896 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 257.32 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2895 0 R /H /I >> endobj 2897 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2895 0 R /H /I >> endobj 2898 0 obj << /Type /Action /S /GoTo /D [2737 0 R /XYZ 72.0 720.0 null] >> endobj 2899 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 237.6 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2898 0 R /H /I >> endobj 2900 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2898 0 R /H /I >> endobj 2901 0 obj << /Type /Action /S /GoTo /D [2740 0 R /XYZ 72.0 720.0 null] >> endobj 2902 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 263.98 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2901 0 R /H /I >> endobj 2903 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2901 0 R /H /I >> endobj 2904 0 obj << /Type /Action /S /GoTo /D [2743 0 R /XYZ 72.0 720.0 null] >> endobj 2905 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 217.05 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2904 0 R /H /I >> endobj 2906 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2904 0 R /H /I >> endobj 2907 0 obj << /Type /Action /S /GoTo /D [2746 0 R /XYZ 72.0 720.0 null] >> endobj 2908 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 243.43 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2907 0 R /H /I >> endobj 2909 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2907 0 R /H /I >> endobj 2910 0 obj << /Type /Action /S /GoTo /D [2749 0 R /XYZ 72.0 720.0 null] >> endobj 2911 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 262.6 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2910 0 R /H /I >> endobj 2912 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2910 0 R /H /I >> endobj 2913 0 obj << /Type /Action /S /GoTo /D [2752 0 R /XYZ 72.0 720.0 null] >> endobj 2914 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 288.98 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2913 0 R /H /I >> endobj 2915 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 421.5 539.998 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2913 0 R /H /I >> endobj 2916 0 obj << /Type /Action /S /GoTo /D [2755 0 R /XYZ 72.0 720.0 null] >> endobj 2917 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 237.62 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2916 0 R /H /I >> endobj 2918 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2916 0 R /H /I >> endobj 2919 0 obj << /Type /Action /S /GoTo /D [2758 0 R /XYZ 72.0 720.0 null] >> endobj 2920 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 264.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2919 0 R /H /I >> endobj 2921 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2919 0 R /H /I >> endobj 2922 0 obj << /Type /Action /S /GoTo /D [2761 0 R /XYZ 72.0 720.0 null] >> endobj 2923 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 232.62 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2922 0 R /H /I >> endobj 2924 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2922 0 R /H /I >> endobj 2925 0 obj << /Type /Action /S /GoTo /D [2764 0 R /XYZ 72.0 720.0 null] >> endobj 2926 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 224.84 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2925 0 R /H /I >> endobj 2927 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2925 0 R /H /I >> endobj 2928 0 obj << /Type /Action /S /GoTo /D [2767 0 R /XYZ 72.0 720.0 null] >> endobj 2929 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 251.22 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2928 0 R /H /I >> endobj 2930 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2928 0 R /H /I >> endobj 2931 0 obj << /Type /Action /S /GoTo /D [2770 0 R /XYZ 72.0 720.0 null] >> endobj 2932 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 254.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2931 0 R /H /I >> endobj 2933 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2931 0 R /H /I >> endobj 2934 0 obj << /Type /Action /S /GoTo /D [2773 0 R /XYZ 72.0 720.0 null] >> endobj 2935 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 229.82 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2934 0 R /H /I >> endobj 2936 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2934 0 R /H /I >> endobj 2937 0 obj << /Type /Action /S /GoTo /D [2776 0 R /XYZ 72.0 720.0 null] >> endobj 2938 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 325.5 189.038 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2937 0 R /H /I >> endobj 2939 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 325.5 539.998 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2937 0 R /H /I >> endobj 2940 0 obj << /Type /Action /S /GoTo /D [2779 0 R /XYZ 72.0 720.0 null] >> endobj 2941 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 218.99 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2940 0 R /H /I >> endobj 2942 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2940 0 R /H /I >> endobj 2943 0 obj << /Type /Action /S /GoTo /D [2782 0 R /XYZ 72.0 720.0 null] >> endobj 2944 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 221.77 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2943 0 R /H /I >> endobj 2945 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2943 0 R /H /I >> endobj 2946 0 obj << /Type /Action /S /GoTo /D [2785 0 R /XYZ 72.0 720.0 null] >> endobj 2947 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 216.77 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2946 0 R /H /I >> endobj 2948 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2946 0 R /H /I >> endobj 2949 0 obj << /Type /Action /S /GoTo /D [2788 0 R /XYZ 72.0 720.0 null] >> endobj 2950 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 218.99 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2949 0 R /H /I >> endobj 2951 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2949 0 R /H /I >> endobj 2952 0 obj << /Type /Action /S /GoTo /D [2791 0 R /XYZ 72.0 720.0 null] >> endobj 2953 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 265.5 200.633 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2952 0 R /H /I >> endobj 2954 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 265.5 539.998 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2952 0 R /H /I >> endobj 2955 0 obj << /Type /Action /S /GoTo /D [2794 0 R /XYZ 72.0 720.0 null] >> endobj 2956 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 244.56 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2955 0 R /H /I >> endobj 2957 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2955 0 R /H /I >> endobj 2958 0 obj << /Type /Action /S /GoTo /D [2797 0 R /XYZ 72.0 720.0 null] >> endobj 2959 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 241.5 194.552 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2958 0 R /H /I >> endobj 2960 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 241.5 539.998 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2958 0 R /H /I >> endobj 2961 0 obj << /Type /Action /S /GoTo /D [2800 0 R /XYZ 72.0 720.0 null] >> endobj 2962 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 216.78 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2961 0 R /H /I >> endobj 2963 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2961 0 R /H /I >> endobj 2964 0 obj << /Type /Action /S /GoTo /D [2803 0 R /XYZ 72.0 720.0 null] >> endobj 2965 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 216.22 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2964 0 R /H /I >> endobj 2966 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2964 0 R /H /I >> endobj 2967 0 obj << /Type /Action /S /GoTo /D [2806 0 R /XYZ 72.0 720.0 null] >> endobj 2968 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 219.55 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2967 0 R /H /I >> endobj 2969 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2967 0 R /H /I >> endobj 2970 0 obj << /Type /Action /S /GoTo /D [2809 0 R /XYZ 72.0 720.0 null] >> endobj 2971 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 246.76 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2970 0 R /H /I >> endobj 2972 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2970 0 R /H /I >> endobj 2973 0 obj << /Type /Action /S /GoTo /D [2812 0 R /XYZ 72.0 720.0 null] >> endobj 2974 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 181.5 263.505 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2973 0 R /H /I >> endobj 2975 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 181.5 539.998 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2973 0 R /H /I >> endobj 2976 0 obj << /Type /Action /S /GoTo /D [2815 0 R /XYZ 72.0 720.0 null] >> endobj 2977 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 214.55 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2976 0 R /H /I >> endobj 2978 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2976 0 R /H /I >> endobj 2979 0 obj << /Type /Action /S /GoTo /D [2818 0 R /XYZ 72.0 720.0 null] >> endobj 2980 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 210.11 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2979 0 R /H /I >> endobj 2981 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2979 0 R /H /I >> endobj 2982 0 obj << /Type /Action /S /GoTo /D [2821 0 R /XYZ 72.0 720.0 null] >> endobj 2983 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 259.55 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2982 0 R /H /I >> endobj 2984 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2982 0 R /H /I >> endobj 2985 0 obj << /Type /Action /S /GoTo /D [2824 0 R /XYZ 72.0 720.0 null] >> endobj 2986 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 287.32 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2985 0 R /H /I >> endobj 2987 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 133.5 539.998 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2985 0 R /H /I >> endobj 2988 0 obj << /Type /Action /S /GoTo /D [2827 0 R /XYZ 72.0 720.0 null] >> endobj 2989 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 263.44 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2988 0 R /H /I >> endobj 2990 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2988 0 R /H /I >> endobj 2991 0 obj << /Type /Action /S /GoTo /D [2830 0 R /XYZ 72.0 720.0 null] >> endobj 2992 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 231.77 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2991 0 R /H /I >> endobj 2993 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2991 0 R /H /I >> endobj 2994 0 obj << /Type /Action /S /GoTo /D [2833 0 R /XYZ 72.0 720.0 null] >> endobj 2995 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 227.33 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2994 0 R /H /I >> endobj 2996 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2994 0 R /H /I >> endobj 2997 0 obj << /Type /Action /S /GoTo /D [2836 0 R /XYZ 72.0 720.0 null] >> endobj 2998 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 228.44 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2997 0 R /H /I >> endobj 2999 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2997 0 R /H /I >> endobj 3000 0 obj << /Type /Action /S /GoTo /D [2839 0 R /XYZ 72.0 720.0 null] >> endobj 3001 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 258.42 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3000 0 R /H /I >> endobj 3002 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3000 0 R /H /I >> endobj 3003 0 obj << /Length 3004 0 R /Filter /FlateDecode >> stream xMGv=~i7mRg4ch &A@?b7ϪAV,h'=vן,//zyC{m/|Y~Y/~_Wۋտo?>B_篿Oط_Җclb2??||ׯχ7_ӛ޼7/_}ᄒ?{?__Ok{xyw&qH$"qx\˶K e`A Xv,KRD0D0D0D0E0E0E0E`*M6"E`!CN"8A06 c@x$1Q@0 F*U6l"D`.]"8Ep `n ` `޼J]R_Nr$IS,c26],c2XF(byAAAIII,+YVdȲe#N,;Yd9r$IS,s27],s2w"Y2 YYYY&Y&Y&Y~:3~q|όXx>wo_ՇwwVekǧEk/qwޒ.uߨSQT'YNb5RH-kP#XA E,נFj LLLdYɲe#F,Yvdr A,'YNb5R@H-kP#XAdddddddYɲe%J,Y6dɲ A,YNd9r j5z5Z,נ"kP#5YYYY&Y&Y&Yָ2|hBs-/r?TR']㽯AuzB]6,XM,.e˲e)bYX"eeeeeee%J{߲9lW)WJx+uRݥ>JT I,X&elbX.ebE,e LLLLdYɲe#F,;Yvdr A,'YNM,s27],s2Xf,dddddddyޒ#v?8ޱv^}486_.oRoR']ۄAuzJ=r I,X[cukbnZ,׭1P\HMAAAAIII,+YVldȲe#N,;Yd9r$IS,׭1R5],׭1R5Fj\HMAAAIII,+YVdȲe#N,;Yd9r$IS,׭1R5],׭1R5"222222ɲ}Do1'_{c>YWlTՍ)e]+oYZ,.e˲eŲ,E,K! $$$$J,+Y6ldȲe'N,Yd9r26M,c2v],eBAAAAIII,+YVldȲe#N,;Yd9r$IS,s27],s2Xf,b,,,,,,?s=旛W^~7??HxWq-uw=A꠺Q=>I]u{bnO:222222ɲe%J,Y6ldɲe'A,YNd9r=Aj\'@=Aj\'H-222222ɲe%J,Y6ldɲe'A,Yd9r=Aj\'@=Aj\'@]rݞ 5YYYY&Y&Y&YesZWj|-O;޲p%˛ZMj5jT6SM0aTNS:In+9p!I掆+9p!/zsWÕTTTTTTTTVSLj3nTvS:Lu4iTonw WrRJN77=\ p%7000044*ezyM2۟^> |~}Gx޿h=aj|얧Y7IuM]('5u|'5uTԅrR]SM5L5L5L5M5M5Mj5jT6SmMj7aTS:MuꚺPNk"NkB9TԅrS S S SMSMSMSMSZMj3fTvSMu0aTNR]SIuM]('5uTEBkB%qg2~]e9g/Quay|RnsT3 $S S SMSMSMSMSZMx?Woۨy%?QwʏsIB'yTNSPNq鷺X@9GPNVSZMj3fTvS:Lu0iTNR]O3T $Iu=рrR]4TS (700044Onpg3~"}= )^~=!Mj|=$MS&yX,7aTNS:IuA9<('u夺򐼐:ȃrS S S S SMSMSMSZMj3fTvSMu0aTNSTA鷺TA:ȃrS S S SMSMSMSZMj5fTvSMu0aTNSTA鷺TAR]yPnaaaiii7YVQ7o^}x T~=dU T(ߜz!oNF]ۓQ/z{2ꅜToOFɨ_ ޞz!70000444jT6SmLj7nTS:Mu4I'^Id/;ޞz!'ۓQ/z{2TTTTTTTVSZMj3fTvS:Lu0iT'ޞz!'ۓQz{2ꅜToOFr^Hd T@ɨTzbjh yZ)9B7M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuѨrR=NG^Ih/ToFjjjjjjjj5jT6SmMj7nTS:MuѨrR=BNG^Ih/ToFjjjjjj:\>} I9ƃWxAq}@yZ)?(Mu4iTס/:ETס/:EBM5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IEIuB9C_('uTס/jjjjjjjj5jT6SmLj7nTS:Mu$u 夺}|'u 夺}Tס/jjjjjwyq?7Z*<7̽܏:̺?xAC|P<-~H7';~HNyaaaaiiiTs?Iس+:CY>)_~H^-s?$OMu4iTs?$'wR=Ts?$'M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuyzNyTs?$7000444b#kݷ?Sq[2ݵSQNSQY>)_w*J^-OS:IuK9夺 Iu $/@jjjjjjjj5jT6SmLj7nTS:Mu$5THTrR] Iu (7000444jTVSmLj7nTS:Lu4IkD9;夺@R] M5L5L5L5M5M5MXlۃIP_cYXxJ& ]sR&yX,/[ɫ夺& 4HZMj5fT6SM0aTNS:IuM('5i|'5iTפrR]M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu4PNk Nk@9ITפrS S S SMSMSMS]UP͏?ek?~W:RJT7oRWrM"XIrK"XSI.b$,,,,,,,,+YVdȲe#N,;Yvd9r$IS,_Z,#R:vDj\@]r9"5YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN\H-Xw\H-Hr("5YYYY&Y&Y܁qg+$'2 sbsK_wIyp4Ayp4znǀ>hͻo_㕏O>np\PwʏY>)?Y(0aTNS:Iu=HrR]R|' eIu=HrR]RTTTTTTTVS=Y<|R~\P^-,㚅TNS:Iu=HrR]R|' eIu=HYBAʔjjjjjjjj5jT6SmMj7nTS:Muz2夺L9)SNAʒR]RTTTTTTToFXwy|0:7ݏ>s/8Ϝ[/s?")˛=1!ڠC9-:鷺6PNkTFM5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I56R][x('յGT6Ium䡜TVTTTTTTTVSLj3fTvS:Lu4iT'=>#Nk夺vPNkz3"˳#\:տ7wW{kF|?B]R?BTw?ݟwRIJ LLLdYɲe%F,Yvdr A,'YNbX&ebX.e"Q2222222ɲe%J,Y6dɲe'A,YNd927M,s2w],s,bE,eeeeee:\'_Z|k[^ڭX^-nyZ)YnTO}9oiyoI(WMu4I'Ô0夺~2L9 K^HudrS S S S SMSMSMSZMj3fTvSMu0aTNSFj;NYH5 f!,zdQG>ȳkͧ'Ƶ?~xUm3$O;g3IrR=!9π|' АTTTTTTTTVSLj3nTvS:Lu4iTrR=!9אT'l@^H|ƆZMj5fT6SM0aTNS:I|z>T'pHN38$')jjjjjwƃK|qk/}Kk.}Kk/}ڏKk?.Kk?qz%~eKՕ?2/UWRťKk>.}^Zyi륵־^Zviۥo־]Z\].ڏKk?/+k\r]quگq9uӥJKk>.}\ZyiGm>/.ӋݻL]'7 y|P~3ԅTNR-TFe'ղjIR-TK!RL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujlFj;NQH5 F10004444jT6SmLj7nTS:Mu$H57R͍Ts#I5wR͝TjRbaaaaiiksWet ãaλ?#H~|G<-(˛;:Lu4Ie#ղjHlZvR-;TK!RHS S S S SMSMSMSZMj3fTvSMu0aTNSFDwRTc'DI5 Jyjjjjjj5jT6SmLj7nTS:Mu$H57R͍Ts'I5wR͝TjRbaaaiiiktWeI|/}f(/q+=_P>(iy|/(˛TrR] Iu/$S S S SMSMSMSZMj3fTvSMu0aTNS_H_PNk|A9ZMj5jT6SM0aTNS:Iu/('5|'5TBBk|Aޜqg/gp~AF} W_R/TeƾPť]j`~p\YR})>.}\Zqi祵Kk_/}ڷKk.}?ڏKk?.Kk?/]Yخ}lW>+kGQ}+kǥKk>/}^ZKk_/}ڷKk.}Kk?.ڏKk?/ves]Yܯ}W>+kre\Y,>.}\Zyi祵˳ǃ+ۧ?/p֭ʰǣWZJ,[G%׭iTNR]UPN wR]UPN IuTAVSZMj3fTvS:Lu0aTNR]UPN wR]UPN *(70004444jT6SmLj7nTS:Mu$uP夺TA:BB M5L5L5L5L5M5Mu -3Oċ:~D?b܎v>GkLʛѰ_ΏkLʫS^7f6SmLj7nTS:Mu$XIu=VT`)'X 'RnaaaiiiiTVSmLj7nTS:Lu4I z,夺K9'J^Hu=rS S S S SMSMSMSZMj3fTvSMu0aTNSK9'Jz,多TjRM-͖fKiRl޳>G]Ov}o>ӻ7kw3y}m9بX^-W!*YnTS:MujHu`C9l$Iu`C9l('uaaaaiiiTW!빕W!IqBy|P~\P4iT'l('u;l('u 夺NTTTTTTTVSZMj3fTvS:Lu0iT'l('u;l('uT 6jjjjjjj}TeoFWm~]=UhvUޏˉ,+<FQ>(oiyoI0aTNSQFQNkE9aT0rS S S S SMSMSMSZM(_fyX,by|P>vrS:Mu$5T0JT0rR](Iu (7000444jTVSmLj7nTS:Lu4IkE9a;a夺QR](M5L5L5L5M5M5MüT(iS:Lu4iTצ@Ium |'յ)rR]%/6RnaaaiiiiTO{|9oiyoI(WMu4IkS 夺6RNkS 夺6J^Hum TTTTTTTTVSLj3fTvS:Lu4iT'Fjn;NjRBYH5*W|toFWD{iQZ>( x!O;7{/ayTS:Mu$۽rR x!'۽rR 弐^ VSz^ yX,W7{/iNS:Mu^ 9r^ 9^ VSZMj3fTvS:Lu0aTNR x!'۽_wR x!'۽_ jjjjjjj}TeϻqީuD<l/~OP2^npPP)?S7'GAy|PLj3nTvS:Lu4iTטrR]c>Iu('5擼QnaaaaiiiTVSmLj3nTS:Lu4iTטrR]c>wR]c>Iu('5TTTTTTTVSZMj3fTvS:Lu0iT'1夺|鷺|I^Hu(7U-͖fKiRl<֭jֿÏ?||~|ty k{2#AS~'<,oOrR-TNe'RHR-TK1000444jTVSmLj7nTS:Lu4IjlNj;F!(TTTTTTTTVSLj3nTvS:Lu4iTs#H57R͍Ts'I5wRBYH5;nzƧc^oo|wB˶>xɻyZ)?C7'}Mj3fTvSMu0aTNR-TFe#ղjIZ Bjjjjjjjj5jT6SmLj7nTS:Mu$H56RTc'I5vRBQH5 F1000444jTVSmLj7nTS:Lu4IjnNj;f!մRl)m6[J-͖fKi'O?t7Z(xY>)?OZ>(?O<-7aTS:MuIITNTNR}:rS S S SMSMSMSMSZMj3fTvSMu0aTNR=OTϓ%'${I<BIjjjjjjjj5jT6SmLj7nTS:Mu$${I<Tϓ%'${I<^rS S S SMSMS]7U9~lUϟd?[m^}ay|RފAy-OMu0aTNSV[I[QNkl%y!5TTTTTTTTVSLj3nTvS:Lu4iT؊rR]c+Iu('5[QnaaaaiiiTVSmLj3nTS:Lu4iT؊rR]c+wR]c+Iu('5TTTTTTk)_%4iTrR]s(Iu͡('5CQnaaaaiiiTVSmLj3nTS:Lu4iTrR]s(wR]s(Iu͡('5TTTTTTQ̡؟CoT&}ku*&I(&y|H~n<-'sznTύbQ 0004444jTFmJ6IwF1f|mZnTNR]I(&9$'sTύbjjjjjjjj5jT6SmLj7nTS:Mu$szn|'sznTύbjjjjjtU9nwG?~3_ox曏?_yoϏcR_?xw#-f|HKj|HKrR=C?u<-Y>)rS:Lu0iTNR-TFe'ղjIR-TK!RL5L5L5L5M5M5Mj5靘Iy+W}<-TNS:I56RTc#I5vRTc'(Tjjjjjjjj5jT6SmMj7nTS:MujnFj;NYH5 f1000044s5<ޔ=sƼ돯?nbkϾwzY>)?(ʻvS:Lu0aTNR]('յkLT׮1Iu5FVSz\FCzY>)?(4iT_T׮1IuT׮1 ]cjjjjjjjj5jT6SmLj7nTS:Mu$յkrR]$IuT׮1IuTTTTTT׮*|0?߾]sW>=a7ܽU}X,Rs!onB\I/aaaiiiTRs!Rs!on[j.aS:Mu-5rRN\I/Toojjjjjjjj5jT6SmMj7nTS:Mu-5rRBN\I/Toojjjjjj-5wy`|pÃo_|}wi~\fxWiy<6fjVSZMj3fTvS:Lu0iTNR]PNtwR]PNtIunBVSZMj3fTvS:Lu0aTNR]PNtwR]PNt M(7000444՛MK_>1V2pu :Y>)ߋAy-'5 ~cN߲{?,+]eS>(?~˦<-gJ7'TNR=q+9ϸ|'[ ϸTTTTTTTTVS=qnu+[N[f|-rS:Mujl[ITq 9>=rR}zdM鵷}ăW얧Y7'X^-7iT'('u#夺nTmAR-TmAVSzn :گ fy|P~n <-7iTNR}9>m -rR}9>m TTTTTTTVSZMj3fTvS:Lu0iT'>m T]wR}9>m R}̍`n?o_>͍>';j{>iy{>ayTNSZ6R-TNe'ղjIR-TK10004444jT6SmLj7nTS:Mu$H56RTc#I5vRTjRbaaaaiiiTVSmLj3nTS:Lu4iTs#H57R͝Ts'I5 f!,TTTTTToAwy`??yWMy-N$Ɂiy|M$˛zN$'sryjjjjjjj5jkrP"2kr yZ)_f|M$4iTɁzN$'sr 9 M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu99T;IHN@rS S S SMSMSǯ3jn/񭸼W^(~?,/nzO~߿_;տo||y~K_篿Oط_0&_vю/s{9\'_]H endstream endobj 3004 0 obj 14691 endobj 3005 0 obj [ 2842 0 R 2843 0 R 2845 0 R 2846 0 R 2848 0 R 2849 0 R 2851 0 R 2852 0 R 2854 0 R 2855 0 R 2857 0 R 2858 0 R 2860 0 R 2861 0 R 2863 0 R 2864 0 R 2866 0 R 2867 0 R 2869 0 R 2870 0 R 2872 0 R 2873 0 R 2875 0 R 2876 0 R 2878 0 R 2879 0 R 2881 0 R 2882 0 R 2884 0 R 2885 0 R 2887 0 R 2888 0 R 2890 0 R 2891 0 R 2893 0 R 2894 0 R 2896 0 R 2897 0 R 2899 0 R 2900 0 R 2902 0 R 2903 0 R 2905 0 R 2906 0 R 2908 0 R 2909 0 R 2911 0 R 2912 0 R 2914 0 R 2915 0 R 2917 0 R 2918 0 R 2920 0 R 2921 0 R 2923 0 R 2924 0 R 2926 0 R 2927 0 R 2929 0 R 2930 0 R 2932 0 R 2933 0 R 2935 0 R 2936 0 R 2938 0 R 2939 0 R 2941 0 R 2942 0 R 2944 0 R 2945 0 R 2947 0 R 2948 0 R 2950 0 R 2951 0 R 2953 0 R 2954 0 R 2956 0 R 2957 0 R 2959 0 R 2960 0 R 2962 0 R 2963 0 R 2965 0 R 2966 0 R 2968 0 R 2969 0 R 2971 0 R 2972 0 R 2974 0 R 2975 0 R 2977 0 R 2978 0 R 2980 0 R 2981 0 R 2983 0 R 2984 0 R 2986 0 R 2987 0 R 2989 0 R 2990 0 R 2992 0 R 2993 0 R 2995 0 R 2996 0 R 2998 0 R 2999 0 R 3001 0 R 3002 0 R ] endobj 3006 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 3005 0 R /Contents 3003 0 R >> endobj 3007 0 obj << /S /D /St 497 >> endobj 3008 0 obj << /Length 3009 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$ (Rt~lYUZL endstream endobj 3009 0 obj 587 endobj 3010 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3008 0 R >> endobj 3011 0 obj << /Length 3012 0 R /Filter /FlateDecode >> stream x͔=O0wa9;_ $Ra5NbI:ﱝVbw~=av,\HR sĢXHydqc\۱kcp\TNLVkKs#$}1,OUi :uN?{L7|9<$=C*Od1( "1V7U8ږnJΨv J(L[" cthT] F59] jeLV*0hۣ\N7OG9(?b)m.'GlM\ C&olӯ·7t endstream endobj 3012 0 obj 339 endobj 3013 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3011 0 R >> endobj 3014 0 obj << /Length 3015 0 R /Filter /FlateDecode >> stream xVKs0+'xr{t3=$9Xr_GM{jKOix`sن%a?C$nYo `툲q߶;9wsgЅCxt=ʻ 0,wsͧ mI b^+}e!0Ow0}R }e^65.¡PS=a $#fʕ eL0~C-2]Hq~KɲO(1&&}\hO [J.LjEy*k%QeXk'til&$;20(2v򫭐모zj'#8I"w!Ivv{wQȎV- bSEC.oqoI[̒M9^y^Tpl3XeDK8((J..p1 :kTЀ6+覤sXYY#S(+A!*ӅؤES G"Fbպv9% 0k.j@Rжj!hZ@"d_\F&Norq ,#3P;ᶵs^=:фע,~r(;RPg*T.$/J-BdTIpBY~Ffxbw1]zvh\0ѷJ~{G endstream endobj 3015 0 obj 727 endobj 3016 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3014 0 R >> endobj 3017 0 obj << /Length 3018 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 a3ғgV^?- endstream endobj 3018 0 obj 722 endobj 3019 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3017 0 R >> endobj 3020 0 obj << /Length 3021 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\2oJLFarb|aV) endstream endobj 3021 0 obj 647 endobj 3022 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3020 0 R >> endobj 3023 0 obj << /Length 3024 0 R /Filter /FlateDecode >> stream xUn0+5M"[Eb)ش"ZBhjdhi1xܠB{l 웘hnQ?cxi?&O= _/]. QHOBK+" C-h"x.Qwgߊ$IL}W*KU0Rn5!p)Ҩz_?1)Q(BcH)]U|YE>k ۖPe5HN82LZaTk=j `0 `81=aR3c%AU%/*zhx WF*LD?˪d^tLDRL_&@`$ШerhpCY\f Z[k„{#vKS-mZ-?8Q[w9nYIi=pSgzIs3:U4^̊ Uv;.WZS dv]Dm\D24_sF}7s Vy ;uԻo{wgp|,lr9 2^nEEm^- ˦%{=yy'^gԵk1Ѯx;2J wD=߸W endstream endobj 3024 0 obj 668 endobj 3025 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3023 0 R >> endobj 3026 0 obj << /Length 3027 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 3027 0 obj 610 endobj 3028 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3026 0 R >> endobj 3029 0 obj << /Length 3030 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`1Oj?~ endstream endobj 3030 0 obj 625 endobj 3031 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3029 0 R >> endobj 3032 0 obj << /Length 3033 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 3035 0 obj << /Length 3036 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';6)y endstream endobj 3036 0 obj 726 endobj 3037 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3035 0 R >> endobj 3038 0 obj << /Length 3039 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.o7Ϊ{4 endstream endobj 3039 0 obj 640 endobj 3040 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3038 0 R >> endobj 3041 0 obj << /Length 3042 0 R /Filter /FlateDecode >> stream x͔=k0w!Iז-D!d0vbɔJ)tlO<>av-IRyENcp9bQ ,> endobj 3044 0 obj << /Length 3045 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;?Z0 endstream endobj 3045 0 obj 553 endobj 3046 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3044 0 R >> endobj 3047 0 obj << /Length 3048 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-" '_/j?| endstream endobj 3048 0 obj 604 endobj 3049 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3047 0 R >> endobj 3050 0 obj << /Length 3051 0 R /Filter /FlateDecode >> stream xTAo0+ޱ={Zm[jBIh~6i-D>sQ@AH.jFA0I 4&,qpap]9c0HG_g1h~!?6MGZN &=p.nuPJy7>C-y۲ ~te4S80$UuL-3%CyOVx Enڄҫ;gտt< endstream endobj 3051 0 obj 525 endobj 3052 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3050 0 R >> endobj 3053 0 obj << /Length 3054 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 3056 0 obj << /Length 3057 0 R /Filter /FlateDecode >> stream xVKo0 WmYmiA (N,(iOk )|P| tAc B`>k+vi;*N6= ?.QWk o QX{_bxS+/!")rbqG UReRq7|-,`9/>uǯ$FNq$S"' J1gΌ!bbE"&_:\s165+0}qWE F:{9ltMG;;!ER%E!nd5UL0%#B5ӑpqȓ1JQ02lr}iLE8EWJb8;xjQD+j޶3J&Ò5Q]",G\AWv[<:@Sa+A&1aS~_= oh Iz(j a+u F#77yNjVjf_UvȈ$)OHjZ> endobj 3059 0 obj << /Length 3060 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$:{ʽ; endstream endobj 3060 0 obj 641 endobj 3061 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3059 0 R >> endobj 3062 0 obj << /Length 3063 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 3065 0 obj << /Length 3066 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 3068 0 obj << /Length 3069 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 #9zDLRt endstream endobj 3069 0 obj 602 endobj 3070 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3068 0 R >> endobj 3071 0 obj << /Length 3072 0 R /Filter /FlateDecode >> stream xU]o0}WVZk0ۦ}H{sZbT IF=(>pl B2ȷA=`B4EY8pCbWq{:@?Z#x p#q 7UB|L_"YZN F^pVt 7Nu &3ekʼ4۵>B-){c=}}>w?AFɼ^VQ$w|RmޔcIhKe ɡQkt fmkܫ&+ԑzn9(+yQt?p8Qשz\G<9 D4x⿲ڊ endstream endobj 3072 0 obj 563 endobj 3073 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3071 0 R >> endobj 3074 0 obj << /Length 3075 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!҃[7fYm)W endstream endobj 3075 0 obj 663 endobj 3076 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3074 0 R >> endobj 3077 0 obj << /Length 3078 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\OqL4F3q[ endstream endobj 3078 0 obj 311 endobj 3079 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3077 0 R >> endobj 3080 0 obj << /Length 3081 0 R /Filter /FlateDecode >> stream xTMO0W$Xiw=Tġ 'CBJ8I^7~dg.(Mp<9D A ,\p3t3cc8xkf_xbr#-B~EO!ڼJKKk{E:}æ5wMVw4j^vuDQrj$Ձ;< ʺNvFDogeP'NCy6I: >>"eҴ~[M&&SXY%x\ b{2(RJ'z6EYgH3 \PkIᐎ¤#O (O.r$h.Cue] +㺁,pYƕ&`qOClNN& 3dW]/y/Ǚr<d7"d~ endstream endobj 3081 0 obj 479 endobj 3082 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3080 0 R >> endobj 3083 0 obj << /Length 3084 0 R /Filter /FlateDecode >> stream xTKo0W193bǴFH"RxW66oRMby|/kD 9 2` [ 1(pp=7,z({G%R[d~>'gD]q[29~]ʮ~nyЁ GÐK)!:.3}/>6.(M 2Xi'>/F'l|8Sy0YUզ `@J_y79_&ո0դ,ʤ0[dEfyylbf?tS|:TvjZ"o4=V/Hg5xVǍn[Rs wV u{_}헛;繉փ$<$ ہ9ZL+\΅!NʡU?7`M endstream endobj 3084 0 obj 453 endobj 3085 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3083 0 R >> endobj 3086 0 obj << /Length 3087 0 R /Filter /FlateDecode >> stream xU]S0}WG}0 帳>ZfT@7Omrr1xFwH"C,,:4P3G}:Cg ڣp]^#!g/ QXx$J%8 "!rkziAv)4 u5$߶> NfyW躅$]_dw&yϯ_7 ǯ$ >=X $ӕJcILt9' w409%2"\N/kբ?. fiO")䍮jjUB*<F LTYd=XU[CjCFC(Cg*ǡ]YtOzy=QTm >U U=hWJuNu{&?S~V)V-/Y3N|s0Eq`$jrT-YmB; ֶ@m8l8X,Z'|( o\?=RrYXf jZjZQC\c 'fNg'' `)da[?$s]ł >}-?)F?Tq!S2ϿIaD7Vų/7V\O- endstream endobj 3087 0 obj 655 endobj 3088 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3086 0 R >> endobj 3089 0 obj << /Length 3090 0 R /Filter /FlateDecode >> stream xTn0+rH֢ Лk=$AZ#T[(%C-^T$3g ?(a]O#@q1$> endobj 3092 0 obj << /Length 3093 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`gƬ߱vV endstream endobj 3093 0 obj 1249 endobj 3094 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3092 0 R >> endobj 3095 0 obj << /Length 3096 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 3096 0 obj 904 endobj 3097 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3095 0 R >> endobj 3098 0 obj << /Length 3099 0 R /Filter /FlateDecode >> stream xUMs0+ $|k39a$al3ؙSc[҃]===-׭kTa ; 1$> endobj 3101 0 obj << /Length 3102 0 R /Filter /FlateDecode >> stream xUMs0W1˖ĭ~FLǃx 6 l &ٻzzZ?G (^~P|=A$C pIxpEÀ-OۧOmX(|%h6"B7 S}.rE&nqE!Ϛ E> endobj 3104 0 obj << /Length 3105 0 R /Filter /FlateDecode >> stream xUMs0+JB [; 3=$cdG`gWm&``WOOO˳ǀykoRqXs1p .n!`ozKq{ Q(|Mkӹ{o5#B7 [S}oi$J(\كC}mb IB >!xD1J)%p:˲9:+ P麍O$g~͐9$i\P6`/o%hαDPHL6ܗN3$"p8`6&v03#r ]k]AxdPե)d\ yi^||;Yta3\Z*\:#!Q2R*Q K{yIԴߙ0? 24ns]=$rKH&Ύzq!sN;l*K4zc&EPmϺZ`raq"8-7]7kn: \;If']n®fju =p*ɐIS btf#f4u %4-&TZ^)>ğc}M6QM>/W(o=XI endstream endobj 3105 0 obj 619 endobj 3106 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3104 0 R >> endobj 3107 0 obj << /Length 3108 0 R /Filter /FlateDecode >> stream xUɒ0+8sEmIܒRU9LQ/ $iy\2c2uSP 5U; !ĂOxpE7;fdgڏ-D-| '~xm>pGDFa㽋7`IZ. Z]oM EI\` ;b}>%} ŪNˢ(Unc?DLyïY1 Ǘ$ Ccv?a{Q2 aAK_XUw endstream endobj 3108 0 obj 577 endobj 3109 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3107 0 R >> endobj 3110 0 obj << /Length 3111 0 R /Filter /FlateDecode >> stream xUn0+rH֢M\! բm!ZlInP- zi"&!g6J}1P77VkR;#gi6:[d.r:Å39Bߔo6·ywrEk4ܷ EU,(B( 'b'hF)eBUևlUyVBJS5e7Fټ޲N@?E,P`O(LSqBGĈIy> endobj 3113 0 obj << /Length 3114 0 R /Filter /FlateDecode >> stream xUM0+ lrknPhp mwWe]bg6Nc1PׇVmQ;c_;Ӷ!vvI GD#]˵Kg1p)(lF!؜P!}.h"oAe4(,C 'bGhF)eBU6t]YZ@ Sֶe7F٢ڲJ@?E,\PU`G(LKqBGĀٯ|u*L**WSVhu*7ל'5HN8H> &Ep Etݿwx\ 5nu Clvʳonɳԑv,6ajp$Y,\\۔Ȩ9<ʨCf".ZSD"4}|n3IE|awzE&f)1i84yz̢ܙ&,@ lXP v-SPfm1`g7Z1oG)%L/ү7hul_;# XVe04:{me/6~#\?!XWҺJzf41hSCWuJYF1n["GWfվ endstream endobj 3114 0 obj 620 endobj 3115 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3113 0 R >> endobj 3116 0 obj << /Length 3117 0 R /Filter /FlateDecode >> stream xUˎ0w,Z!u.fF N@Ɛ{ W΄$\˳ǀ⵰8s1PD07Q5/}b_?=S6ur7 q^f:x&DFa}_}`M/-W EQCHC|}e| IBT >#6{?$dR&p:esUV%ɱU%I&gj~9~]P`'(4Pf|T!HbrK\,i*3B^nN 19#j ܒdPV)d94yuVZLRA`R^Xf .h@"FQÖ~Z,E}%iv'ÄO$ehvڏf{: t!'NW3^wIguYBUN)0$L;2j˵Ɏ8' |wLIBڃ3lA=4膖n?J6;ƍ,G0ՀW2NS Hk]!:Xf.]$ۗdT:KzxO1h[C7%s%l$x|!kXU{D; endstream endobj 3117 0 obj 624 endobj 3118 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3116 0 R >> endobj 3119 0 obj << /Length 3120 0 R /Filter /FlateDecode >> stream xUn0+rH֢ [=$A D-ԖJNPS69Ϛ9b@2s1PD2X/^RĦ}z< O+*# ?DscxB6U%>}QH\*1FǠ_-]6(W9YHI42Y|j!vmt"`Ivkl G uZ (,αBРHboJyו9(Ar™@q'gB,;L"4,<7 l _BTPn+Hx f(J$ҨjWujhB$\wpE.LDL$eX]nڲ9pA&GĆ$ j'syk m]CSgBN&,dф;_0窌3N$DŽ\s9]fV6LWŋ-3 ;\x*Un0_㵜rNhJ@eVlj2mKzytW1h Cw%sť DO^6'/שׁC! endstream endobj 3120 0 obj 622 endobj 3121 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3119 0 R >> endobj 3122 0 obj << /Length 3123 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_|iycU endstream endobj 3123 0 obj 765 endobj 3124 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3122 0 R >> endobj 3125 0 obj << /Length 3126 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ΕH'Wf?1 endstream endobj 3126 0 obj 673 endobj 3127 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3125 0 R >> endobj 3128 0 obj << /Length 3129 0 R /Filter /FlateDecode >> stream xVn0+ KR ܺ#=Hc(ڔCI .\;G3OͣﹽC@p% xBx{ϩu6ϑ(n"Z!C A!]jxZOrAhEagםH]A%; F!~ vV$IBrF)eN{]vu[X}:v,f?t'SR#ű@84P`$\\|WFo:Uy4,!ᄳA*8 s$ɏ¹8 ȟ O^uJqs+iv5qXXl6+;`JPeeJ>fZь"/.{_ɪ2ͳ$C)ݍUaMGJ 帿JYO67?mԒB9TB {R5#V~7-MJzJ~qp T@opHv;̮r^OfX;̻ғ(2" ~yrrˍ4%Fv6e$Ƽ~fvg Vl~+KOGn';0읲1}r?֪^rDF::7LGLha'~a%yP{xv>7u+ 'jSLz5L$ٞ|WY(zQN{-d+݃U5`)c$>{ui'ű;kiB8>ã gsJFIxJcqj?gN endstream endobj 3129 0 obj 825 endobj 3130 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3128 0 R >> endobj 3131 0 obj << /Length 3132 0 R /Filter /FlateDecode >> stream xUMs0+ $N fj 8r %Zc9y (s(a}N @qAb~\#\GѶA5N݈}5ym Ѷ^Q?"#o "]q>އ[ps+B4h4ܸCx2O-Di qTF[bG]&hF)eBY6t]&YZ@ [ֱ_ždw&ٲW-YOʅ˾Uv 'Bs>* $,l^YiչܰJڤ gE}zBdSJcKr0MҭɦPɐvG µ3@(EIN(OhC1 Qژ :,j&|ϰ;75&|")Ck7|̷Mˎ2B7$)WVͭl+ Ee־J|\o 6yvxV&L'j϶X9hvq"of0΄?^F48}tytyWKF) 6dnD031Dž:1iubߩ> Hvu˗tp5K1hSC7%3T. }|Gmo;`w endstream endobj 3132 0 obj 620 endobj 3133 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3131 0 R >> endobj 3134 0 obj << /Length 3135 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އΗfƪ/" endstream endobj 3135 0 obj 620 endobj 3136 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3134 0 R >> endobj 3137 0 obj << /Length 3138 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% T?ykzeVcr endstream endobj 3138 0 obj 751 endobj 3139 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3137 0 R >> endobj 3140 0 obj << /Length 3141 0 R /Filter /FlateDecode >> stream xVKS0Wd,[Vnt7;=ø<#H +v'z)d"0+c 9.Ģ ?NZ[ M_o?wTwiOʹ6[ΣVW~m>ˋWgcCн+4:&8lQ_& B"0{pۛTb4ڔy5z>@a堟^m m=+ʚ-{ W~(FZ. MaU#,u>kpٵ'iQIpx9ND=r$vu p,^ՙc҉0J+T$ؓWf}Ye endstream endobj 3141 0 obj 752 endobj 3142 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3140 0 R >> endobj 3143 0 obj << /Length 3144 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?sL98 ɣ?fU}+ endstream endobj 3144 0 obj 941 endobj 3145 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3143 0 R >> endobj 3146 0 obj << /Length 3147 0 R /Filter /FlateDecode >> stream xVn0+ KQ{nZ1CD,J!I[驭7qƜ>~ׯyEdӡz~G:+mj=Ue9JG7w9 (%t\MNd?EZ&qQPo6qupdճf> endobj 3149 0 obj << /Length 3150 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*=4B)/̪{$\ endstream endobj 3150 0 obj 604 endobj 3151 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3149 0 R >> endobj 3152 0 obj << /Length 3153 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.rҽx & endstream endobj 3153 0 obj 625 endobj 3154 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3152 0 R >> endobj 3155 0 obj << /Length 3156 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 eƬr( endstream endobj 3156 0 obj 646 endobj 3157 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3155 0 R >> endobj 3158 0 obj << /Length 3159 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.=ʙ0JxE endstream endobj 3159 0 obj 601 endobj 3160 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3158 0 R >> endobj 3161 0 obj << /Length 3162 0 R /Filter /FlateDecode >> stream xUr0+2,Pc;fH2 6dگUtн:::~ PіC  b. h ;~ƶ}ڧm[Clgw.9ӵ|D+nEkbK5BZkMna2O5DQApG&'F)eB,CI+/dw&ټW-YGʅuv /FsʌS5E#]fC_IZ2Uks昤 gE}\La叆*2=z >&%nr8FۃrD<)(Q] /7(#q4%J)/n;ER *bVqëbM\uwo"LDRmR~ׇKˎ 8C%D|4:^w<۽b[&?֫}vE'{kakt!LJyS nа-] =~urti?FB}X-$> endobj 3164 0 obj << /Length 3165 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!`:fzcU endstream endobj 3165 0 obj 637 endobj 3166 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3164 0 R >> endobj 3167 0 obj << /Length 3168 0 R /Filter /FlateDecode >> stream xUr0w/kx$! cflp;~}xbY5ےu'{e8D;("CK}(5Ωgi6:eo1><{M.[NwōB}Zy(փ\*1F]V;4K b*"``}H"%ьRʄN'Yև,<+aK[5_V#Leͯ^6 Ǐ" c%N<* $&,Ҭ1I &'#;9Wy-~4% 1׵-n*/l 8RPvNQ&(J pz|_ejh@\Xl, ha'24ocv6z& ߐ@cAu[isƞh.-KLT_Қ0Y-";\3gH~; >3>1P-~%FMң͆a-L?jȀ 0z޼:w]ʇaKQǭ%_+)F0)o3B%z}zƪ/:%m endstream endobj 3168 0 obj 621 endobj 3169 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3167 0 R >> endobj 3170 0 obj << /S /r /St 12 >> endobj 3171 0 obj << /Type /Action /S /GoTo /D [3010 0 R /XYZ 72.0 720.0 null] >> endobj 3172 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 251.77 718.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 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3171 0 R /H /I >> endobj 3174 0 obj << /Type /Action /S /GoTo /D [3013 0 R /XYZ 72.0 720.0 null] >> endobj 3175 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 697.5 200.086 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3174 0 R /H /I >> endobj 3176 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 697.5 539.998 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3174 0 R /H /I >> endobj 3177 0 obj << /Type /Action /S /GoTo /D [3016 0 R /XYZ 72.0 720.0 null] >> endobj 3178 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 203.44 694.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.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3177 0 R /H /I >> endobj 3180 0 obj << /Type /Action /S /GoTo /D [3019 0 R /XYZ 72.0 720.0 null] >> endobj 3181 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 205.66 682.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 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3180 0 R /H /I >> endobj 3183 0 obj << /Type /Action /S /GoTo /D [3022 0 R /XYZ 72.0 720.0 null] >> endobj 3184 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 231.22 670.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 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3183 0 R /H /I >> endobj 3186 0 obj << /Type /Action /S /GoTo /D [3025 0 R /XYZ 72.0 720.0 null] >> endobj 3187 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 202.32 658.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 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3186 0 R /H /I >> endobj 3189 0 obj << /Type /Action /S /GoTo /D [3028 0 R /XYZ 72.0 720.0 null] >> endobj 3190 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 197.89 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3189 0 R /H /I >> endobj 3191 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3189 0 R /H /I >> endobj 3192 0 obj << /Type /Action /S /GoTo /D [3031 0 R /XYZ 72.0 720.0 null] >> endobj 3193 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 205.65 634.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 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3192 0 R /H /I >> endobj 3195 0 obj << /Type /Action /S /GoTo /D [3034 0 R /XYZ 72.0 720.0 null] >> endobj 3196 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 195.67 622.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 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3195 0 R /H /I >> endobj 3198 0 obj << /Type /Action /S /GoTo /D [3037 0 R /XYZ 72.0 720.0 null] >> endobj 3199 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 206.78 610.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 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3198 0 R /H /I >> endobj 3201 0 obj << /Type /Action /S /GoTo /D [3040 0 R /XYZ 72.0 720.0 null] >> endobj 3202 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 202.88 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3201 0 R /H /I >> endobj 3203 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3201 0 R /H /I >> endobj 3204 0 obj << /Type /Action /S /GoTo /D [3043 0 R /XYZ 72.0 720.0 null] >> endobj 3205 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 577.5 231.626 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3204 0 R /H /I >> endobj 3206 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 577.5 539.998 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3204 0 R /H /I >> endobj 3207 0 obj << /Type /Action /S /GoTo /D [3046 0 R /XYZ 72.0 720.0 null] >> endobj 3208 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 216.22 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3207 0 R /H /I >> endobj 3209 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3207 0 R /H /I >> endobj 3210 0 obj << /Type /Action /S /GoTo /D [3049 0 R /XYZ 72.0 720.0 null] >> endobj 3211 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 210.11 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3210 0 R /H /I >> endobj 3212 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3210 0 R /H /I >> endobj 3213 0 obj << /Type /Action /S /GoTo /D [3052 0 R /XYZ 72.0 720.0 null] >> endobj 3214 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 214.0 550.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.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3213 0 R /H /I >> endobj 3216 0 obj << /Type /Action /S /GoTo /D [3055 0 R /XYZ 72.0 720.0 null] >> endobj 3217 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 233.44 538.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 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3216 0 R /H /I >> endobj 3219 0 obj << /Type /Action /S /GoTo /D [3058 0 R /XYZ 72.0 720.0 null] >> endobj 3220 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 220.67 526.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.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3219 0 R /H /I >> endobj 3222 0 obj << /Type /Action /S /GoTo /D [3061 0 R /XYZ 72.0 720.0 null] >> endobj 3223 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 252.88 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3222 0 R /H /I >> endobj 3224 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3222 0 R /H /I >> endobj 3225 0 obj << /Type /Action /S /GoTo /D [3064 0 R /XYZ 72.0 720.0 null] >> endobj 3226 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 219.0 502.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 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3225 0 R /H /I >> endobj 3228 0 obj << /Type /Action /S /GoTo /D [3067 0 R /XYZ 72.0 720.0 null] >> endobj 3229 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 245.67 490.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 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3228 0 R /H /I >> endobj 3231 0 obj << /Type /Action /S /GoTo /D [3070 0 R /XYZ 72.0 720.0 null] >> endobj 3232 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 242.34 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3231 0 R /H /I >> endobj 3233 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3231 0 R /H /I >> endobj 3234 0 obj << /Type /Action /S /GoTo /D [3073 0 R /XYZ 72.0 720.0 null] >> endobj 3235 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 277.88 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3234 0 R /H /I >> endobj 3236 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3234 0 R /H /I >> endobj 3237 0 obj << /Type /Action /S /GoTo /D [3076 0 R /XYZ 72.0 720.0 null] >> endobj 3238 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 241.78 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3237 0 R /H /I >> endobj 3239 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3237 0 R /H /I >> endobj 3240 0 obj << /Type /Action /S /GoTo /D [3079 0 R /XYZ 72.0 720.0 null] >> endobj 3241 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 433.5 240.43 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3240 0 R /H /I >> endobj 3242 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 433.5 539.998 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3240 0 R /H /I >> endobj 3243 0 obj << /Type /Action /S /GoTo /D [3082 0 R /XYZ 72.0 720.0 null] >> endobj 3244 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 211.22 430.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.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3243 0 R /H /I >> endobj 3246 0 obj << /Type /Action /S /GoTo /D [3085 0 R /XYZ 72.0 720.0 null] >> endobj 3247 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 409.5 309.778 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3246 0 R /H /I >> endobj 3248 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 409.5 539.998 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3246 0 R /H /I >> endobj 3249 0 obj << /Type /Action /S /GoTo /D [3088 0 R /XYZ 72.0 720.0 null] >> endobj 3250 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 255.1 406.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 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3249 0 R /H /I >> endobj 3252 0 obj << /Type /Action /S /GoTo /D [3091 0 R /XYZ 72.0 720.0 null] >> endobj 3253 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 232.32 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3252 0 R /H /I >> endobj 3254 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3252 0 R /H /I >> endobj 3255 0 obj << /Type /Action /S /GoTo /D [3094 0 R /XYZ 72.0 720.0 null] >> endobj 3256 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 269.53 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3255 0 R /H /I >> endobj 3257 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 373.5 539.998 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3255 0 R /H /I >> endobj 3258 0 obj << /Type /Action /S /GoTo /D [3097 0 R /XYZ 72.0 720.0 null] >> endobj 3259 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 293.96 370.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 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3258 0 R /H /I >> endobj 3261 0 obj << /Type /Action /S /GoTo /D [3100 0 R /XYZ 72.0 720.0 null] >> endobj 3262 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 230.09 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3261 0 R /H /I >> endobj 3263 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3261 0 R /H /I >> endobj 3264 0 obj << /Type /Action /S /GoTo /D [3103 0 R /XYZ 72.0 720.0 null] >> endobj 3265 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 223.44 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3264 0 R /H /I >> endobj 3266 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3264 0 R /H /I >> endobj 3267 0 obj << /Type /Action /S /GoTo /D [3106 0 R /XYZ 72.0 720.0 null] >> endobj 3268 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 230.66 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3267 0 R /H /I >> endobj 3269 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3267 0 R /H /I >> endobj 3270 0 obj << /Type /Action /S /GoTo /D [3109 0 R /XYZ 72.0 720.0 null] >> endobj 3271 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 302.87 322.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 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3270 0 R /H /I >> endobj 3273 0 obj << /Type /Action /S /GoTo /D [3112 0 R /XYZ 72.0 720.0 null] >> endobj 3274 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 328.98 310.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.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3273 0 R /H /I >> endobj 3276 0 obj << /Type /Action /S /GoTo /D [3115 0 R /XYZ 72.0 720.0 null] >> endobj 3277 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 328.98 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3276 0 R /H /I >> endobj 3278 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3276 0 R /H /I >> endobj 3279 0 obj << /Type /Action /S /GoTo /D [3118 0 R /XYZ 72.0 720.0 null] >> endobj 3280 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 241.21 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3279 0 R /H /I >> endobj 3281 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 277.5 539.998 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3279 0 R /H /I >> endobj 3282 0 obj << /Type /Action /S /GoTo /D [3121 0 R /XYZ 72.0 720.0 null] >> endobj 3283 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 232.88 274.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 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3282 0 R /H /I >> endobj 3285 0 obj << /Type /Action /S /GoTo /D [3124 0 R /XYZ 72.0 720.0 null] >> endobj 3286 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 235.66 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3285 0 R /H /I >> endobj 3287 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3285 0 R /H /I >> endobj 3288 0 obj << /Type /Action /S /GoTo /D [3127 0 R /XYZ 72.0 720.0 null] >> endobj 3289 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 245.66 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3288 0 R /H /I >> endobj 3290 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3288 0 R /H /I >> endobj 3291 0 obj << /Type /Action /S /GoTo /D [3130 0 R /XYZ 72.0 720.0 null] >> endobj 3292 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 267.88 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3291 0 R /H /I >> endobj 3293 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3291 0 R /H /I >> endobj 3294 0 obj << /Type /Action /S /GoTo /D [3133 0 R /XYZ 72.0 720.0 null] >> endobj 3295 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 293.99 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3294 0 R /H /I >> endobj 3296 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3294 0 R /H /I >> endobj 3297 0 obj << /Type /Action /S /GoTo /D [3136 0 R /XYZ 72.0 720.0 null] >> endobj 3298 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 293.99 214.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 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3297 0 R /H /I >> endobj 3300 0 obj << /Type /Action /S /GoTo /D [3139 0 R /XYZ 72.0 720.0 null] >> endobj 3301 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 261.77 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3300 0 R /H /I >> endobj 3302 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 193.5 539.998 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3300 0 R /H /I >> endobj 3303 0 obj << /Type /Action /S /GoTo /D [3142 0 R /XYZ 72.0 720.0 null] >> endobj 3304 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 261.77 190.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.998 181.5 539.998 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3303 0 R /H /I >> endobj 3306 0 obj << /Type /Action /S /GoTo /D [3145 0 R /XYZ 72.0 720.0 null] >> endobj 3307 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 261.2 178.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 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3306 0 R /H /I >> endobj 3309 0 obj << /Type /Action /S /GoTo /D [3148 0 R /XYZ 72.0 720.0 null] >> endobj 3310 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 285.63 166.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.998 157.5 539.998 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3309 0 R /H /I >> endobj 3312 0 obj << /Type /Action /S /GoTo /D [3151 0 R /XYZ 72.0 720.0 null] >> endobj 3313 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 221.76 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3312 0 R /H /I >> endobj 3314 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3312 0 R /H /I >> endobj 3315 0 obj << /Type /Action /S /GoTo /D [3154 0 R /XYZ 72.0 720.0 null] >> endobj 3316 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 246.19 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3315 0 R /H /I >> endobj 3317 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3315 0 R /H /I >> endobj 3318 0 obj << /Type /Action /S /GoTo /D [3157 0 R /XYZ 72.0 720.0 null] >> endobj 3319 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 246.75 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3318 0 R /H /I >> endobj 3320 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3318 0 R /H /I >> endobj 3321 0 obj << /Type /Action /S /GoTo /D [3160 0 R /XYZ 72.0 720.0 null] >> endobj 3322 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 215.11 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3321 0 R /H /I >> endobj 3323 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3321 0 R /H /I >> endobj 3324 0 obj << /Type /Action /S /GoTo /D [3163 0 R /XYZ 72.0 720.0 null] >> endobj 3325 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 225.11 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3324 0 R /H /I >> endobj 3326 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3324 0 R /H /I >> endobj 3327 0 obj << /Type /Action /S /GoTo /D [3166 0 R /XYZ 72.0 720.0 null] >> endobj 3328 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 249.54 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3327 0 R /H /I >> endobj 3329 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3327 0 R /H /I >> endobj 3330 0 obj << /Type /Action /S /GoTo /D [3169 0 R /XYZ 72.0 720.0 null] >> endobj 3331 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 225.11 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3330 0 R /H /I >> endobj 3332 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3330 0 R /H /I >> endobj 3333 0 obj << /Length 3334 0 R /Filter /FlateDecode >> stream xM]Ǖ9~s#d1ƒIDS }=y 6ql[R>$\;/~gyߞ򏏝{yCgm|Qß>7߬c?]o?}<{x_\>ߟ}r}_7r_xyK}~Ͽ-/8.:EU_W??߇߿~gq]#*?rgT~ˋuO_~ͻ?~|^~ϯ>iusQ^~Y,yJ!qxB|`9A X ````````*"]C&qJ)S'q` ' q`Q@G!  LLL"XE`&Mv"Ep!CN y` ' y`YD0D0D0D0E0E0E]?eh>\A<޼᳏|<2_ռwKݥAuzJ] Օ!u#F,;Yvdr A,'YN\s2rMʤ5+Z,״ "k^&5YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN\4rҠ>rMӤ5OZ,DMj LLLdYɲe%F,Yvdr A,'YNbFmRA}I-ku5r,i4I$}>IsŜu_ʋuviħ8i[=ygP_Q꠺Q=ԕ!u;&F,;Yvd9r I,XbgR嚟I-k~u5?,,,,,,,,+YVdȲe#F,;Yvd9r$I,XbgPbgR嚟I-k~&5YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN\3rϠ>rϤ5?嚟IMA4I$}>IsO1g&c9kg>~0@k/Z|Bv)e$uzH}$ITw/$jldɲe'A,YNd9re9IJbY,XS,)e)bYXBAAAIII,+YVdȲe#N,;Yd9r$IS,82S,82N"Q2 YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,X!yebX)yebE,e O'i4YOsE8'aP$__}ow3|Ry'(!Nԗ:nTO'YNbY,XC,)re9Ų,E,K! $$$$J,+Y6ldȲe'N,Yd9rZ,82NS,(bE,eeeeeeee%J,Y6ldȲe'N,Yd9r<2C,<2O"Y2Xf! $$Q=yK_~[/>n}R)K+C/R']vPM,Yvdr A,'YNb)I-ԧXcJRe)b)I-AAAIII,+YVdȲe#N,;Yd9r$IS,1%rSuLIj\ǔ.b)IMAAAIIII,+YVldȲe'N,;Yd9r$)똒b)I-똒b)A]rS,,i4I$}>7O(O_7w]~AcݦSb'Iu AuzJ] ՕjldȲe'N,;Yd9r$)Q-R-r]%XK.b.Ւ,,,,,,,,+YVy ՍTՍ)u/TW:&I,'YN\jI-R-O\jI-R-r]%5YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN\jI-R-O\jI-R-XK& $$$>ȧQ=~"7|߿$hipc zr?5ZqJ!^wh!6"E!CN"8Azk~ ;7f x/k?mYV"XE`&Mv"8Dp!SN^JX1^ڎ ^/ڏE0D0D0D0E0E0E0E`*M6"E`!CN"8Az~ cwXCCe&2IɤdnQy|t{݌?ԻmFz%1AVbNbbrSLj3nTS:Lu4iTA rj9IZNR-'Bj)ZMںKp٤k&yZ)_[8f|m$4iT u夺R$u夺ST׍jVSZMj3fTvS:Lu0iTNR]WQN5OR]׭QN5Iu]F~>Q/_z7o?]x>6 }_~}_}|o?o^G?gp@iy|=)yX,OS:I@z} TDJN"!/z} RrS S S SMSMSMSMSZMj3fTvSMu0aTNRTDJN"!?I@z} RrR> yjjjjjjj5jT6SmLj7nTS:Mu$HOR>)9^TDJnaaaii"u䃼'Yww]EY<ˣOY>)oj:Lu0aTNR],IuM$?IuM('5`QnaaaiiiiTVSmLj7nTS:Lu4IkE9 夺&X`I^HuM(70000444jT6SmLj7nTS:Mu4IkE9 ' 夺&X`Qnaaaii]U`pվ|/^|qO8Ny=,˛V,ʻvS:Lu0aTNR]S1IuM$?IuM('5ꚊQnaaaiiiiT֋1QwvZwayX,byTNSbꚊQNk*F9TTrS S S S SMSMSMSZMj3fTvSMu0aTNSbꚊI~ꚊQNk*F9bwU=S=gݏNUϭ*ScmUszhq_m}Zckϭ[k?~}9v־;k_/ڗsg˹});k_ڗuk׭[k߶־m}Z}kڏ[k?~lZsgY8v>sgY8w>ΝQv>׭[k_־m}Z}k[k?~lZsk米y};k繳y};keg}ϭ޾C.`=|/~y?^woyݗfvayX,by|P>OMuzC夺PF97QN eR]o(TTTTTTTTVSLj3fTvS:Lu4iT'7QN ePF97QN ejjjjjjj5jT6SmLj7nTS:Mu$2IuLT('2 7Qnaaaiii7~64w(֭jm8`ݪ&y|ݪ&yX,[$ʇS:Mu4I\z+'rQN\z+ZMe%X?'~ɫuciy|/yXnTNSE9rI~z+夺%y!V.M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IurR]o墜T[('V. rQnaaaaiizƃGW4ͷ_~|󷻻?;׹K4'埿v'oNoIZNR-TK!RL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I5RT 8H5NRT$(Tjjjjjjjj5jT6SmLj7nTS:Mu$u夺n$u夺nT #jjjjjX.g>K?>zVxyw[[U۪NV5v~nUUjlZckϭ;k_/ڗcg˹Yr}9w־/egKZZZZZZZZukڷo[k߶־o}Z}kڏ[k?~nYܪv>cgY8w>ΝQv>׭[k_־m}Zmk3Vckڏ[k?~nY}Yv|:wުvުvު>>>>>>Ꮅ9_^~__w_~S8)j|]uJT%.᠜T%꺄C0000444jTϾY>)j|:Mu4IIu]!IIu]A9K8(7000444jTVSmLj7nTS:Lu4IyjIyj'f!,TTTTTTT uMzU7߫G\>hw_~D,by|P>O.^ '5QT?TDEB&jjjjjjjj5jT6SmLj7nTS:Mu$5QTDETDrR]IuMT(7000444jTVSmLj7nTS:Lu4IkB9' 夺&*R]M5L5L5L5M5M5Mu5 R?_j R`___>x5/vy=-O;7may|R~F^-7444jTVSmLj7nTS:Lu4IqjIqj'F!(TTTTTTTTVSLj3nTvS:Lu4iT [.x _~߆-~7~E^,$-WRK7'ԒWˇ%z 'pPN%R]/TTTTTTTTVSLj3nTvS:Lu4iT IuCTK8('IuC0000444jT6SmLj7nTS:Mu4I%z 'pPN%z zsW]^M~$KZ)ّv_(_~I<-_~I<,oOʻvS:Lu0iTNR]Ǒ('uITq$IuGTq$M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu:D9H#QN8Tq$M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IuGTq$IuGTq$ Hjjjj͖fKǑZΧ0>]v]~-_gZ{q>_?~^}|}i_ϛҧ=)ZgC!_fzjNS:I5RT 8H5NRT$(Tjjjjjjjj5jT6SmLj7nTS:Mu${=p^vG;|zYTsR']:E, Reeeeeeee%J,Y6ldɲe'N,Yd9r H-k~ XbfP\2222222ɲe%J,Y6ldɲe'A,YNd9rH-k:)k6 XɀbReeeeeeU-`_KsG#ʸS{2NI ȫ8Nze:Mu:GO9T9zIu:GO9sVSZMj3fTvS:Lu0aTNR])'u^T9zIu:GOVSZMj3fTvS:Lu0iT's:GO9s:G/y!urS S S S SMSMS]|0ɧP>߾߿w_?\u˛_YW嗿(O;aaaaiiiTVSmLj3nTS:Lu4iT 8Hum$8I5NR]?TRZMj5jT6SM0aTNS:I5R̓T ݣ#ay|R~=R^-_ve8O3N~=R7'#AeHyZnTNSv=J~=RNkH9#ZMj5jT6SM0aTNS:Iu)'յ{$յ{TQBkH~~Y}^K{{lO=~㫧ų/loliyI(WTNR]('urR]('u@BkDVSZMj3fTvS:Lu0iTNR] IuM$?IuM('5 T$rS S S SMSMSMSZMj5fTvSMu0aTNS&AI~QNk$y!5 TTTTTTTq`4|?@^(3q_n3 zϰay|R3,y|P3,S:Mu$u夺.$u夺.Tejjjjjjj5jT6SmLj7nTS:Mu$u夺.$u夺.LrS S S SMSMSMSMSZMj3fTvSMu0aTNR]IPN2 Iu]&A9$$/.TTTTTTTt鮪e<./_zM|s ڃ/q?I;嗿gS7'嗿gS^-OS:Iu/T"Iu/T" Ejjjjjjjj5jT6SmLj7nTS:Mu$urR]Nj$?Iu/T"Iu/TTTTTTTVSZMj3fTvS:Lu0iT'E:^$Ix夺I^Hu/TTTTTTT讪em޿/?||_USmYG_NIeFy|P~٩Qw/;5Mj3nTS:Lu4iTNrR];5OR];5Iu('յSTTTTTTTVSZMj3fTvS:Lu0iT'夺vjvjکI^Hu(7000444ϯklW/|e{ϧWûsy+3{Z>(_BIw׭PrS:Mu:K9ûRNT]M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IuޥT]IuޥT] ûjjjjjj͎.q>^A?}?lA͎`#O;7;<,o4iTow9z#IvG`#70004444jT6SmLj7nTS:Mu$FN;Tow9Rlz#?A~߽֨yὼ(D_G|P>NN<,˛Su?夺G$u?夺GTHjjjjjjj5jz{;˫~ZwayXnTNS*H~PNk"y!5PTTTTTTTTVSLj3nTvS:Lu4iT@rR]Iu T('5PPnaaaaii>*%}T㲳1|mzJIzJj|=A%yZ)_OPInT'夺f;f;PNkCVSZMj3fTvS:Lu0aTNR]Iuv$?Iuv('5ۑPnaaaiiiiTVSmLj7nTS:Lu4IkC9夺f;H^Huv(7000044`Ӿzѧ4~y4 Iwj IwS;yXnTA rj9IZNR-TK!RHS S S SMSMSMSZMj5fTvSMu0aTNSAqj'IqjRBQL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I5R̓T )/z; M5L5L5L5M5M5M5Mj5՛aaFwoyX, 6jNS:Iv0`#'aFNÀToVSZMj3fTvS:Lu0iTNRlz; z~0`#'aFNÀTTTTTTowy0Kȗ~x|✗Y|Gʇk@yZ)?fPnaaaiiiiTs'oiyI(WMu4Ik@9Y夺fH^Hu(70000444jT6SmLj7nTS:Mu4Ik@9Y'Y夺fPnaaaii7O 5\.ޟ|v-OקG;S%W{N^TTVSLj3nTvS:Lu4iTΔrR];SIuL)'յ3ڙRnaaaaiiiTVSmLj3nTS:Lu4iTΔrR];SOR];SIuL)'յ3TTTTTTo~J}׌;Ϯ;o|t+zïuΙ|~[:*|~<-ïI0aTNS޻N9SN딓zTץjjjjjjjj5jï_g;+ay|R~= y|P~= yZnTNSAqj'IQH5 F!(ZMj5jT6SM0aTNS:Iu]H9K%?Iu]H9K%/.UTTTTTTTkzx8{*0<,oOʯO@^-z2T?=9~z2rRdɐG30vöp fºz^6˽pSz^)sr/ܔTƮLĮLLLݕ2uWʴ]+weLߕ2cWfʌ]+3weL2;!M=[)sq/ܔn\x cW&vebW&verW&werW]+veڮLەi2}W]+3veƮܕ2sWfn\oS 7e7(nĽpSzS^)sq/ܕ]ؕ]ܕ]j>}e7ێ\uǧ>uoI^-Iw$M0aTNSPT*zBrR]OH^Hu=BVS~v9jԝ|MY>)_?xZ>(_?x<-7iTNR]OPN OR]OPN Iu=BVSZMj3fTvS:Lu0aTNR]OPN OR]OPN  'T(7000444/k =߼x>W3M[Z>(iy|:Lu4I}$'>z}GrR>y!>jjjjjjjj5j_￞Sf|˫:Mu$8Hz}THN}$'>VSZMj3fTvS:Lu0iTNR̓T )jNS:Iu /('5TrR] ZMj5fT6SM0aTNS:Iu /('5$5TrR] M5L5L5L5M5M]^s>bWg}c<}p9F^-zN͡<,7aTNR='zIB^6rS S S SMSMSMSMSZMC/yZ)9I͡ZnTNRTolz{I^6rR=aaaaiiiTVSmLj3nTS:Lu4iTolz{I^6rR=TTTTTTסSyg<Ͼ|FyR\K?Ǯino?}<{{G|>O_O\?xyK}~ϿQ܋^.;z1\*(כ77}?e~ endstream endobj 3334 0 obj 14616 endobj 3335 0 obj [ 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 3313 0 R 3314 0 R 3316 0 R 3317 0 R 3319 0 R 3320 0 R 3322 0 R 3323 0 R 3325 0 R 3326 0 R 3328 0 R 3329 0 R 3331 0 R 3332 0 R ] endobj 3336 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 3335 0 R /Contents 3333 0 R >> endobj 3337 0 obj << /S /D /St 551 >> endobj 3338 0 obj << /Length 3339 0 R /Filter /FlateDecode >> stream xUr0wԪw1΍gH22a#}xj;]5BǺWGGGg{i8D;HŸB󁻄{Qo]R;"kF?Ӿm!?<;;ƈ{kg=#B7 y|َrIpR\ًfWוI<8B0}@lqc%2!YmGUZ%l}6f"`In5S6qzCـJ ќ2PBLժ.yHJmLaZNl gռfýƍ;r_ _t !|L+u ¬PV1`A#ݯMXAx`M3JRJv62-PuBF}dσ^sEVY'wWaw02sIΫ9AS`ITgg=I)6.K$jCfoMeav/L^d@8q9v76x0hxi@땡k鏽p|L҃n#kZȈ؞w1OSFGk̋5Q0(`a}I ( Tšx.Pv:|D1hWCCɜV7%s'm$<}3 endstream endobj 3339 0 obj 637 endobj 3340 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3338 0 R >> endobj 3341 0 obj << /Length 3342 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% KUu_ʌ endstream endobj 3342 0 obj 621 endobj 3343 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3341 0 R >> endobj 3344 0 obj << /Length 3345 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!HbjU:aVk(AԠ܇& ܷ (< :΋}}hpBF=(?!7 K8;ٝOETOH9 tYBU'Q2~k?, }edҽ%rƉx^s =t:vC9W?1I:0CUh k"#c{fü2`XĦ9%2(6dRJztW1hWCCɜV7%slğ\W}3< endstream endobj 3345 0 obj 637 endobj 3346 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3344 0 R >> endobj 3347 0 obj << /Length 3348 0 R /Filter /FlateDecode >> stream xUMs0+ $|k3a$! cflp;aCm7&`[gizP|Q!d=AcpIpE]mviWxywu㭷y(D\*dM!mSEqB71Ts@lc)fR&p:IE QM~F ߙd˖_;e?YjAba%P2P`".ž6c^4.I j˸}a< s? &3@ݔIK ]&afDEIVݯy\3r0P0 3(ؔEviugO$e}ďUߚ 3LiRhD2L]CS3gk+V5a#nϦN|gsZqƉ }xs0hY~GYp%>),K')ߦ*emp Vʹܡ8XI! 7T_+%Ǐ(~%S?q%~S2/e]%ztx˼ endstream endobj 3348 0 obj 620 endobj 3349 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3347 0 R >> endobj 3350 0 obj << /Length 3351 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$|k0Cflp8nOMгv<{ (KH!y@r)D< \ FѾA5wI݈m3m ~zGw{hMx3"Mq>F/h=J%~VvhW7 y i\` c QJ/Yu'UV%D4U9H3$n5S6qԇ}'DsˌC%EgVuiCWX[V{(8Gq1l`Ӹ-;\K5)!|*X8@Y֤#>NL2ߩsL%IIN%yW^ˬC Q J됫^3=V"]i=.Άޙ |&C%OM춪SՓ9\SP)4L_bR0vOLlw>d>8 8tѻMP[< XhhhY@k؏x|dF3B>CbԏGkgݼ&^Xz9%nHڒI=腂#߀sv?i~U2_v҅0J%8NzeUd endstream endobj 3351 0 obj 636 endobj 3352 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3350 0 R >> endobj 3353 0 obj << /Length 3354 0 R /Filter /FlateDecode >> stream xUKs0+Ԫo1- 39$ a#xCm&`[gӷճÀ⻶ 8{HŸC󁻄{Vo]S;#kfOo['urWq^]ox\/7ō:x(QZ. nE!Me|Q@U>"zubR&$pJ0:jm?3oL_d?4Yx=CـJ 192T`".M]jգ60>'B*p9LиN`!g O/˥w~KUe*NKC~?JM44K_yq(Ӳ7 NHO#\MV(IdKo{Wr_AC]l,)IOt@%TE4)V)7hؤ23N\G# %f4d4 T8.=|6;FYo3\.iH{l!c\-wpBvrRgafq\2+|Ca\zt%bѮL8/ЯJ& Dn"^>}2 endstream endobj 3354 0 obj 625 endobj 3355 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3353 0 R >> endobj 3356 0 obj << /Length 3357 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> endobj 3359 0 obj << /Length 3360 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 3362 0 obj << /Length 3363 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 3365 0 obj << /Length 3366 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(/o̪dq endstream endobj 3366 0 obj 762 endobj 3367 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3365 0 R >> endobj 3368 0 obj << /Length 3369 0 R /Filter /FlateDecode >> stream xUKs0W1eKN3x$qmXL ͩ H]}Z= (QC : 1$}g ߃"%D4C< ; QXxy+B44Cʋ$EYR'PY#_A$QJP$r_u^dl~G ߘd_3e?4YjAb%P2PAD|lí˪6I &;#4h'<$W /sKR/Fsc$"?2WQ\zWsFF#b6&cQ,V7IUmwo"LDR9ۅ|_[[qJhH(Lzq9zmO4:u7 ~H+*/Xք 4$K|ZqƉx~qP }Kj> endobj 3371 0 obj << /Length 3372 0 R /Filter /FlateDecode >> stream xUK0+渑[>ҍjEId d߱y$Sw!/7'wirS1?w nh `fFfgkv=trWq]gxgDFa|8x(l\*0 "xhV:w $QVb|.  μl<"/aKU57oLg #4{@breƩE3]VTzTZQfp&Pj70%yĕ1\ kIUBvY8EY Hs0 Yo l%bBǸZ+SFN5U92(dRJiůKmrZ_ NFI0<_^YU, endstream endobj 3372 0 obj 628 endobj 3373 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3371 0 R >> endobj 3374 0 obj << /Length 3375 0 R /Filter /FlateDecode >> stream xUM0Wq9$H=,UH DuP;vH )=u7l?<7ǀ{o8[1D8X nh `{O팍}ާ]BWxyOfpZw7)>| Q'i$TJ(!CmbIA #6yɉQJ˲):/ dW麵$3f[% Ǐ$. g<%Vy.3N*ItNJj]B|N84nư`tv3\ [M]AnU'FCUFg` AKRHXxd3e$ C<ޯUyՙ b0%#BY3a).2v'fD@|0~?UEA2&yW]L8tUA]vO*4"„W"u|gVqƉ`]1<ɈǶ뷔Q I[{]#ޛ~o@z`L6e?8_niIb54ǖJtx(eSP-| "Y'.)|B/7Ooԛ#~B1xZ9,oJ]' $OA(^Io}N& endstream endobj 3375 0 obj 651 endobj 3376 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3374 0 R >> endobj 3377 0 obj << /Length 3378 0 R /Filter /FlateDecode >> stream xVKo0 WX5=Ro[vk`(DM v*;-GI~aIIGJ~ P!y$D> endobj 3380 0 obj << /Length 3381 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ƅ`.q 2!< endstream endobj 3381 0 obj 847 endobj 3382 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3380 0 R >> endobj 3383 0 obj << /Length 3384 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`ʺGjEG/7fվwE2 endstream endobj 3384 0 obj 684 endobj 3385 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3383 0 R >> endobj 3386 0 obj << /Length 3387 0 R /Filter /FlateDecode >> stream xXKo6WJQJm.aؔǦ)Y=t73,bs+/$h}X[(AI>6YH Er^elڄC/{^:u|\u '24=4J3(%vPhrZ1#JpvkE:_-x:E쐮mdQ;5J$-3(s&<՝u-g)ӨEYNAqn߈P $,yZ} mKi81Y?E 12 d Md1oQ\N PH. rMe5>iOAr38m`8vh9<`[Jf#g{>=luM [96)#:;%X;3qZu>>hf1OX WGi-ZaڜڶDO^AcftTxVl5xたl)H&:p3 b54^-deMG(mϺ~ ;Oq7w@Ƞa@)#'e=0ͪΫz[ˊ:pme{/кpNV܀̀8\$pzzB{A-FG2DTƍ9NQ%+Fu&;C3C!u COAxn3 )9nHGb,l:Y,XoLѓ"=+G\bDhç~f@*Xf1!ÜK.[;s)a-e9LZd]T)5ݜrsw Vuӽe)>g*OlؼZK%g9};*?>E{ endstream endobj 3387 0 obj 1229 endobj 3388 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3386 0 R >> endobj 3389 0 obj << /Length 3390 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 3390 0 obj 970 endobj 3391 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3389 0 R >> endobj 3392 0 obj << /Length 3393 0 R /Filter /FlateDecode >> stream xUn0+rHѷ@on *ӎ-$wHDLg8=z (K(!μc89X 7^k_R;"u}ڵ Drw-p㵷i} rEa!\ۋ&L=DQAi0O-`c$dR&p:;qyPH&g?7K@?E\yK, s,3UjItY)+'}^cڊtb|N86.H0+&ae[A]rMR yaWX"Pt+V,)(Mڼ{΋CT>!hj-y2Wy{m*-x)$n,uO )`h"CP\Z|@c0Nk9aSօQN>Fg?o ^ endstream endobj 3393 0 obj 625 endobj 3394 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3392 0 R >> endobj 3395 0 obj << /Length 3396 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 zQ5߿Ӧ endstream endobj 3396 0 obj 832 endobj 3397 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3395 0 R >> endobj 3398 0 obj << /Length 3399 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 3399 0 obj 618 endobj 3400 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3398 0 R >> endobj 3401 0 obj << /Length 3402 0 R /Filter /FlateDecode >> stream xUMs0+J+@ȷvt7Od<6318c(МiyvpQa{tLB~2x`vS5۶x9'u8|u SkW8O!uҢb\ZI̓tQCBo]e n$K Sa:KؓL |g+~ՔU.\}*"(24TI$9e:&؛sVxs.wkF6 EB䴪W LQ Ť`9vITXie 14;Iц!V> Li(SFſ 1 t3|>0#^#<"_Uqv] "ƒŴ(sh`gW,$M͓uΜP sθnwxH XG]mva7lщVDW0aɅHgrtܨmlY> endobj 3404 0 obj << /Length 3405 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+S goIo̪  endstream endobj 3405 0 obj 747 endobj 3406 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3404 0 R >> endobj 3407 0 obj << /Length 3408 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+S ų7f~ endstream endobj 3408 0 obj 747 endobj 3409 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3407 0 R >> endobj 3410 0 obj << /Length 3411 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= f2;{ͨ?+ endstream endobj 3411 0 obj 885 endobj 3412 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3410 0 R >> endobj 3413 0 obj << /Length 3414 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%J} S endstream endobj 3414 0 obj 632 endobj 3415 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3413 0 R >> endobj 3416 0 obj << /Length 3417 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 3417 0 obj 649 endobj 3418 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3416 0 R >> endobj 3419 0 obj << /Length 3420 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]Y endstream endobj 3420 0 obj 632 endobj 3421 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3419 0 R >> endobj 3422 0 obj << /Length 3423 0 R /Filter /FlateDecode >> stream xUKs0+ԪPn1-gzH2eŒ- !S0]}v< ( H!@rbQ <$fIJ8.%r כ 1%btDz!Ŧ4YZu02'[m9(R$NILίz4!AIށv?)G$ &T_l v*+9$X>907j1F t|qO|<~C(yJnI+h֪HFS~8R۵)yDMJ y> YV[2)CQBz*u1hWbCE7%s( $|"~XU} endstream endobj 3423 0 obj 649 endobj 3424 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3422 0 R >> endobj 3425 0 obj << /Length 3426 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 3428 0 obj << /Length 3429 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$ӏioi> endobj 3431 0 obj << /Length 3432 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 3434 0 obj << /Length 3435 0 R /Filter /FlateDecode >> stream xUKs0+ԪDn1-grH2eŒ- S0]}v< ( ȄC : )ĢxHxpkE36>}P!B\ SM ڸ"7zjPT$t-> endobj 3437 0 obj << /Length 3438 0 R /Filter /FlateDecode >> stream xVKs0+hCN3=t&gz3D2ͯ NrjblZiW>}|1\"9{18pbA'<@}[=vmMҹholWxz7}W(lKKr}G ?c$aٵbIAj-,>RDN"5yYhX&V~^(3ʮZ|퐭9~#Ҫjèu(9F茑$1eh52|N8H2l HaF38sI@iT47ʠ!5 )k؊@WIY K60 -9Q'?EY\ B I8¾V$jg_D@|P]٫ PQ jgWS0[5 l5w .#uŬ$L?v}R:9qƉqkPM{y"\i5.mvfҕA};}g: UT]vL1̼OPfzOXO endstream endobj 3438 0 obj 739 endobj 3439 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3437 0 R >> endobj 3440 0 obj << /Length 3441 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] $~< e[ endstream endobj 3441 0 obj 754 endobj 3442 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3440 0 R >> endobj 3443 0 obj << /Length 3444 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).Mn77V endstream endobj 3444 0 obj 795 endobj 3445 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3443 0 R >> endobj 3446 0 obj << /Length 3447 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 3449 0 obj << /Length 3450 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 3450 0 obj 638 endobj 3451 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3449 0 R >> endobj 3452 0 obj << /Length 3453 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(|DcTϾYU endstream endobj 3453 0 obj 660 endobj 3454 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3452 0 R >> endobj 3455 0 obj << /Length 3456 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ԫ|xwsU7I\ endstream endobj 3456 0 obj 550 endobj 3457 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3455 0 R >> endobj 3458 0 obj << /Length 3459 0 R /Filter /FlateDecode >> stream xUn0+W⸻C]H]ʀh $dR&p:JydiQ+LYcDL[M񫈳Є;}@35ơ E#]nnP&OyZ%Cp&Pi\,0#sm 6͌s5N0&{72l6_ەzZTQA`UQ^lW$E 'D`4 ZȌ ?ċE~d: Iˎ:$ =pv[BDkg(CiS.(+."7NkH?)MQ„}"u)yFn.$~keSbĪk77aY׍*y1iw~Q ܙ]=d<G4 5sK,#:8 ;8Tl *`- &Wh|2(]Y%Pךxş$bM5yx<|(|9kv`U_$ endstream endobj 3459 0 obj 664 endobj 3460 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3458 0 R >> endobj 3461 0 obj << /Length 3462 0 R /Filter /FlateDecode >> stream xUKo0W+qۮ!6R` ZH 'N )۶xx1xM4;A}pMmtO]Wڴm5_Ej N"TWX *c\Щ$1Iykls9$' $r5 NYfa-P@]-o*e ؚmv<p( QNni+ g8`4 ZZ\D6-}6%Ծo,޳U{! endstream endobj 3462 0 obj 665 endobj 3463 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3461 0 R >> endobj 3464 0 obj << /Length 3465 0 R /Filter /FlateDecode >> stream xUKo0W̑J[ׯvoڇz(UBB(߱@og/ pm@q$lǟ euR> endobj 3467 0 obj << /Length 3468 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 פo74/W endstream endobj 3468 0 obj 670 endobj 3469 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3467 0 R >> endobj 3470 0 obj << /Length 3471 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{ɻU?,b endstream endobj 3471 0 obj 668 endobj 3472 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3470 0 R >> endobj 3473 0 obj << /Length 3474 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}MrΪ endstream endobj 3474 0 obj 649 endobj 3475 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3473 0 R >> endobj 3476 0 obj << /Length 3477 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 aA8[YUW endstream endobj 3477 0 obj 707 endobj 3478 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3476 0 R >> endobj 3479 0 obj << /Length 3480 0 R /Filter /FlateDecode >> stream xUKo0W׏${>C,1 GQI޶%g_וyϭ ±!p͍4_QbVi76&M6pe#Zppw3B?6 k{}j'kTS\G;xUE!H*CVh?BgD1J)8XٲJ(ޗj|F#㟌ϥtIf,B=R QRF$ /HS]i+9L Xʥ0$Bܒi~d:U`J%{*vf]͕ƄIIJ5eZvDKuU?8Im 27YD@|Pmoźޙ!MBk-Q;Ϧ?G1 wՔҾhH*>qWeMbbAqTM@P5He &_7!rY{+K'>zӠX9n 0,tFM~YO~N_L9FOC> f#☢ȇ@QCBu\W{V?p-5u>N"X+XE <1]ɨ,^+Lmms5:w̪H endstream endobj 3480 0 obj 665 endobj 3481 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3479 0 R >> endobj 3482 0 obj << /Length 3483 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?" [ endstream endobj 3483 0 obj 663 endobj 3484 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3482 0 R >> endobj 3485 0 obj << /Length 3486 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ۼ6$' r)Lio,8WRܣ L 1b/6P`[ƄEIJ5eZvDP뀇-־IR\[ "sb>&|")CٶzgpN 5 BB8[&"i,-ECR/$'."7QWIHL>Q„}"u)Ej.$MN`|;gn4:}1YXn1 wܚ}^Txc"6G%y :ƸӶ`*N<)8 _.j剁 EOFoezYDL}msU6߀pta;{}0+ endstream endobj 3486 0 obj 660 endobj 3487 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3485 0 R >> endobj 3488 0 obj << /Length 3489 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|(˗!=]Pvz`Ue- endstream endobj 3489 0 obj 668 endobj 3490 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3488 0 R >> endobj 3491 0 obj << /Length 3492 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. Q# endstream endobj 3492 0 obj 661 endobj 3493 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3491 0 R >> endobj 3494 0 obj << /Length 3495 0 R /Filter /FlateDecode >> stream xUn0+W݌!͎6R2` I \IRi `0xl4UAxs=p5 lcgԎWmm;;xpo kprt-YOō8_(^Z Zk_abxYl!LְNYT``>gR&p:J)UIAxMQcLEůrǯ"C*+ y1U(2(enRBI$' TFkĤ&Z\ʷi1t!f";;&N׶aHEyVX5IyP}|F=~F/'ziMt>'&\")C6ٿe26IёBJXR/V g \]F"ؙZ? 5yn/tQV,&7촋V;*&ME0"rF u&_eD"MA*"abh$]kv`u+Jlt;sH'yL}lfz% ՑHM9b*`Yn`[f%r2Cmj7v&G'hEyx8|(ǩ|)Qq`U_$ endstream endobj 3495 0 obj 651 endobj 3496 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3494 0 R >> endobj 3497 0 obj << /Length 3498 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_?!hlj`U endstream endobj 3498 0 obj 647 endobj 3499 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3497 0 R >> endobj 3500 0 obj << /S /r /St 13 >> endobj 3501 0 obj << /Type /Action /S /GoTo /D [3340 0 R /XYZ 72.0 720.0 null] >> endobj 3502 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 249.54 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3501 0 R /H /I >> endobj 3503 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3501 0 R /H /I >> endobj 3504 0 obj << /Type /Action /S /GoTo /D [3343 0 R /XYZ 72.0 720.0 null] >> endobj 3505 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 225.11 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3504 0 R /H /I >> endobj 3506 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3504 0 R /H /I >> endobj 3507 0 obj << /Type /Action /S /GoTo /D [3346 0 R /XYZ 72.0 720.0 null] >> endobj 3508 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 249.54 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3507 0 R /H /I >> endobj 3509 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3507 0 R /H /I >> endobj 3510 0 obj << /Type /Action /S /GoTo /D [3349 0 R /XYZ 72.0 720.0 null] >> endobj 3511 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 220.11 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3510 0 R /H /I >> endobj 3512 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3510 0 R /H /I >> endobj 3513 0 obj << /Type /Action /S /GoTo /D [3352 0 R /XYZ 72.0 720.0 null] >> endobj 3514 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 244.54 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3513 0 R /H /I >> endobj 3515 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3513 0 R /H /I >> endobj 3516 0 obj << /Type /Action /S /GoTo /D [3355 0 R /XYZ 72.0 720.0 null] >> endobj 3517 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 239.54 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3516 0 R /H /I >> endobj 3518 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3516 0 R /H /I >> endobj 3519 0 obj << /Type /Action /S /GoTo /D [3358 0 R /XYZ 72.0 720.0 null] >> endobj 3520 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 240.1 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3519 0 R /H /I >> endobj 3521 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3519 0 R /H /I >> endobj 3522 0 obj << /Type /Action /S /GoTo /D [3361 0 R /XYZ 72.0 720.0 null] >> endobj 3523 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 222.33 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3522 0 R /H /I >> endobj 3524 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3522 0 R /H /I >> endobj 3525 0 obj << /Type /Action /S /GoTo /D [3364 0 R /XYZ 72.0 720.0 null] >> endobj 3526 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 246.76 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3525 0 R /H /I >> endobj 3527 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3525 0 R /H /I >> endobj 3528 0 obj << /Type /Action /S /GoTo /D [3367 0 R /XYZ 72.0 720.0 null] >> endobj 3529 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 247.32 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3528 0 R /H /I >> endobj 3530 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3528 0 R /H /I >> endobj 3531 0 obj << /Type /Action /S /GoTo /D [3370 0 R /XYZ 72.0 720.0 null] >> endobj 3532 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 224.55 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3531 0 R /H /I >> endobj 3533 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3531 0 R /H /I >> endobj 3534 0 obj << /Type /Action /S /GoTo /D [3373 0 R /XYZ 72.0 720.0 null] >> endobj 3535 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 248.98 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3534 0 R /H /I >> endobj 3536 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3534 0 R /H /I >> endobj 3537 0 obj << /Type /Action /S /GoTo /D [3376 0 R /XYZ 72.0 720.0 null] >> endobj 3538 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 249.54 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3537 0 R /H /I >> endobj 3539 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3537 0 R /H /I >> endobj 3540 0 obj << /Type /Action /S /GoTo /D [3379 0 R /XYZ 72.0 720.0 null] >> endobj 3541 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 227.33 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3540 0 R /H /I >> endobj 3542 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3540 0 R /H /I >> endobj 3543 0 obj << /Type /Action /S /GoTo /D [3382 0 R /XYZ 72.0 720.0 null] >> endobj 3544 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 237.33 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3543 0 R /H /I >> endobj 3545 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3543 0 R /H /I >> endobj 3546 0 obj << /Type /Action /S /GoTo /D [3385 0 R /XYZ 72.0 720.0 null] >> endobj 3547 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 270.66 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3546 0 R /H /I >> endobj 3548 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3546 0 R /H /I >> endobj 3549 0 obj << /Type /Action /S /GoTo /D [3388 0 R /XYZ 72.0 720.0 null] >> endobj 3550 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 269.55 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3549 0 R /H /I >> endobj 3551 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3549 0 R /H /I >> endobj 3552 0 obj << /Type /Action /S /GoTo /D [3391 0 R /XYZ 72.0 720.0 null] >> endobj 3553 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 262.32 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3552 0 R /H /I >> endobj 3554 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3552 0 R /H /I >> endobj 3555 0 obj << /Type /Action /S /GoTo /D [3394 0 R /XYZ 72.0 720.0 null] >> endobj 3556 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 260.66 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3555 0 R /H /I >> endobj 3557 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3555 0 R /H /I >> endobj 3558 0 obj << /Type /Action /S /GoTo /D [3397 0 R /XYZ 72.0 720.0 null] >> endobj 3559 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 259.55 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3558 0 R /H /I >> endobj 3560 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3558 0 R /H /I >> endobj 3561 0 obj << /Type /Action /S /GoTo /D [3400 0 R /XYZ 72.0 720.0 null] >> endobj 3562 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 285.66 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3561 0 R /H /I >> endobj 3563 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3561 0 R /H /I >> endobj 3564 0 obj << /Type /Action /S /GoTo /D [3403 0 R /XYZ 72.0 720.0 null] >> endobj 3565 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 285.66 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3564 0 R /H /I >> endobj 3566 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3564 0 R /H /I >> endobj 3567 0 obj << /Type /Action /S /GoTo /D [3406 0 R /XYZ 72.0 720.0 null] >> endobj 3568 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 253.44 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3567 0 R /H /I >> endobj 3569 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3567 0 R /H /I >> endobj 3570 0 obj << /Type /Action /S /GoTo /D [3409 0 R /XYZ 72.0 720.0 null] >> endobj 3571 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 253.44 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3570 0 R /H /I >> endobj 3572 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3570 0 R /H /I >> endobj 3573 0 obj << /Type /Action /S /GoTo /D [3412 0 R /XYZ 72.0 720.0 null] >> endobj 3574 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 252.32 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3573 0 R /H /I >> endobj 3575 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 421.5 539.998 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3573 0 R /H /I >> endobj 3576 0 obj << /Type /Action /S /GoTo /D [3415 0 R /XYZ 72.0 720.0 null] >> endobj 3577 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 230.11 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3576 0 R /H /I >> endobj 3578 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3576 0 R /H /I >> endobj 3579 0 obj << /Type /Action /S /GoTo /D [3418 0 R /XYZ 72.0 720.0 null] >> endobj 3580 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 254.54 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3579 0 R /H /I >> endobj 3581 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 397.5 539.998 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3579 0 R /H /I >> endobj 3582 0 obj << /Type /Action /S /GoTo /D [3421 0 R /XYZ 72.0 720.0 null] >> endobj 3583 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 230.11 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3582 0 R /H /I >> endobj 3584 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3582 0 R /H /I >> endobj 3585 0 obj << /Type /Action /S /GoTo /D [3424 0 R /XYZ 72.0 720.0 null] >> endobj 3586 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 254.54 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3585 0 R /H /I >> endobj 3587 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 373.5 539.998 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3585 0 R /H /I >> endobj 3588 0 obj << /Type /Action /S /GoTo /D [3427 0 R /XYZ 72.0 720.0 null] >> endobj 3589 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 230.11 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3588 0 R /H /I >> endobj 3590 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3588 0 R /H /I >> endobj 3591 0 obj << /Type /Action /S /GoTo /D [3430 0 R /XYZ 72.0 720.0 null] >> endobj 3592 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 254.54 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3591 0 R /H /I >> endobj 3593 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 349.5 539.998 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3591 0 R /H /I >> endobj 3594 0 obj << /Type /Action /S /GoTo /D [3433 0 R /XYZ 72.0 720.0 null] >> endobj 3595 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 225.11 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3594 0 R /H /I >> endobj 3596 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3594 0 R /H /I >> endobj 3597 0 obj << /Type /Action /S /GoTo /D [3436 0 R /XYZ 72.0 720.0 null] >> endobj 3598 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 249.54 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3597 0 R /H /I >> endobj 3599 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3597 0 R /H /I >> endobj 3600 0 obj << /Type /Action /S /GoTo /D [3439 0 R /XYZ 72.0 720.0 null] >> endobj 3601 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 227.33 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3600 0 R /H /I >> endobj 3602 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3600 0 R /H /I >> endobj 3603 0 obj << /Type /Action /S /GoTo /D [3442 0 R /XYZ 72.0 720.0 null] >> endobj 3604 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 251.76 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3603 0 R /H /I >> endobj 3605 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3603 0 R /H /I >> endobj 3606 0 obj << /Type /Action /S /GoTo /D [3445 0 R /XYZ 72.0 720.0 null] >> endobj 3607 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 252.32 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3606 0 R /H /I >> endobj 3608 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 289.5 539.998 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3606 0 R /H /I >> endobj 3609 0 obj << /Type /Action /S /GoTo /D [3448 0 R /XYZ 72.0 720.0 null] >> endobj 3610 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 229.55 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3609 0 R /H /I >> endobj 3611 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3609 0 R /H /I >> endobj 3612 0 obj << /Type /Action /S /GoTo /D [3451 0 R /XYZ 72.0 720.0 null] >> endobj 3613 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 253.98 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3612 0 R /H /I >> endobj 3614 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3612 0 R /H /I >> endobj 3615 0 obj << /Type /Action /S /GoTo /D [3454 0 R /XYZ 72.0 720.0 null] >> endobj 3616 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 254.54 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3615 0 R /H /I >> endobj 3617 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 253.5 539.998 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3615 0 R /H /I >> endobj 3618 0 obj << /Type /Action /S /GoTo /D [3457 0 R /XYZ 72.0 720.0 null] >> endobj 3619 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 241.5 299.979 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3618 0 R /H /I >> endobj 3620 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 241.5 539.998 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3618 0 R /H /I >> endobj 3621 0 obj << /Type /Action /S /GoTo /D [3460 0 R /XYZ 72.0 720.0 null] >> endobj 3622 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 246.2 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3621 0 R /H /I >> endobj 3623 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3621 0 R /H /I >> endobj 3624 0 obj << /Type /Action /S /GoTo /D [3463 0 R /XYZ 72.0 720.0 null] >> endobj 3625 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 239.55 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3624 0 R /H /I >> endobj 3626 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3624 0 R /H /I >> endobj 3627 0 obj << /Type /Action /S /GoTo /D [3466 0 R /XYZ 72.0 720.0 null] >> endobj 3628 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 246.77 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3627 0 R /H /I >> endobj 3629 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3627 0 R /H /I >> endobj 3630 0 obj << /Type /Action /S /GoTo /D [3469 0 R /XYZ 72.0 720.0 null] >> endobj 3631 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 257.32 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3630 0 R /H /I >> endobj 3632 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3630 0 R /H /I >> endobj 3633 0 obj << /Type /Action /S /GoTo /D [3472 0 R /XYZ 72.0 720.0 null] >> endobj 3634 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 248.99 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3633 0 R /H /I >> endobj 3635 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3633 0 R /H /I >> endobj 3636 0 obj << /Type /Action /S /GoTo /D [3475 0 R /XYZ 72.0 720.0 null] >> endobj 3637 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 251.77 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3636 0 R /H /I >> endobj 3638 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3636 0 R /H /I >> endobj 3639 0 obj << /Type /Action /S /GoTo /D [3478 0 R /XYZ 72.0 720.0 null] >> endobj 3640 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 261.77 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3639 0 R /H /I >> endobj 3641 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 157.5 539.998 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3639 0 R /H /I >> endobj 3642 0 obj << /Type /Action /S /GoTo /D [3481 0 R /XYZ 72.0 720.0 null] >> endobj 3643 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 237.87 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3642 0 R /H /I >> endobj 3644 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3642 0 R /H /I >> endobj 3645 0 obj << /Type /Action /S /GoTo /D [3484 0 R /XYZ 72.0 720.0 null] >> endobj 3646 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 231.22 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3645 0 R /H /I >> endobj 3647 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3645 0 R /H /I >> endobj 3648 0 obj << /Type /Action /S /GoTo /D [3487 0 R /XYZ 72.0 720.0 null] >> endobj 3649 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 238.44 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3648 0 R /H /I >> endobj 3650 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3648 0 R /H /I >> endobj 3651 0 obj << /Type /Action /S /GoTo /D [3490 0 R /XYZ 72.0 720.0 null] >> endobj 3652 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 248.99 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3651 0 R /H /I >> endobj 3653 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3651 0 R /H /I >> endobj 3654 0 obj << /Type /Action /S /GoTo /D [3493 0 R /XYZ 72.0 720.0 null] >> endobj 3655 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 240.66 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3654 0 R /H /I >> endobj 3656 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3654 0 R /H /I >> endobj 3657 0 obj << /Type /Action /S /GoTo /D [3496 0 R /XYZ 72.0 720.0 null] >> endobj 3658 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 243.44 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3657 0 R /H /I >> endobj 3659 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3657 0 R /H /I >> endobj 3660 0 obj << /Type /Action /S /GoTo /D [3499 0 R /XYZ 72.0 720.0 null] >> endobj 3661 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 261.21 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3660 0 R /H /I >> endobj 3662 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3660 0 R /H /I >> endobj 3663 0 obj << /Length 3664 0 R /Filter /FlateDecode >> stream xOdǙ=?E/'}㟗l; B$šL7#k8SdgeS#5Y3~Zyފ_O_~?iO**um}ݱ?ǿ?~C/O_WO_]O 9zmǧ?~_?~isJ4_7???ݿ|||w}w_>J_RϿuHÏO?G/_~[ot␸K ^U&ףH `- X+ ````````&&q/qHwijJ$%Kq` H Q@0*F""""""""D`.]v"8Dp)S.\"@0, `V YA0l5o?o[+QowzmRԥ <*%uT7ԣPTAuPM,Y.\b'0R@]rOa=HMAAAIIII,Yq3EPBuR=AuzI=+Սj\drH-{H#X1b5PWܣ2222222ɲe#F,;Yvd9r I,'Y.\drH-{u=ȑZ,(Gj22222ɲsZ}~9n\G볜w<]ՄANqDžQ=>P'C"uj%C~PTwԣRݨROd9r"EK,!ze-bYX"ebYXJAAAIII,Y)\ԽRݨRBuR=A5YN\drebX!Q2XF(bU,eT LLLLldȲe'N,Yd9r$I,Y.C,<2"Y2Xfˬb,,,,,,,EOuk+Sj,T'CuPTw{!X)E,CjS rO1& $$$F,-.K^nTOG:Rσꠚ,'Y.\drO1=ŀbH-{u=Ő,,,,,,,,Y6ldɲe'A,Yd9r"EK,<2C,e"Y2Xf% $$)SZ{b~4!mEAuzI=+Ս)*T'ze=IJbYE,kZIJVU,k% $$$F,~\?.P՝% uzJBT"E,X!qebE,e*Q2XF% $$$F,Y6dɲ A,'YNd9r"%yebXf,bE,eV*Y222222ɲsZܾ|8w_>? #*ϓx@|_|9 qx^^A帀}O1wTWz=&Mv"Ep!CN"Dp8@m1z5. cKnW&Mv"E!CN"Dpo^AmKԫq Q/ 6C``````稵(ߛJw{YMu2eTJNg%'ֳ}Y+޷TTTTTTTT6SD{ju%oE yX-_߷Y>)H yZnT.S]1-5洐jjjjjjj3fTvSMu0aTNSLu"շk!'շkTvTWR}rS S S SMSMSMS jˋRdtWZ_j#^\լf|!uPwIu:('=됼uPnaaaaiiiTZW~XwZ,byZnT.S]guH^Hu:('=렜TrS S S SMSMSMSmLj3nTS:Lu4iT.S]guH^Hu:('=됼uPnaaaiiiջYG{YǫϗyFE7˧{Ay!ս 夺7>rS S S SMSMSMSMSmL=w!|P>n|V˛妺Lu"8Huo|B9O$/7>T'D0000444fTvSM0aTNSLu2Eyjf!,TjVRJYM5L5L5L5M5M8Szb6{/?8a5%{<-[(f.S]Hu/zTIu/zT+E/jjjjjjjj3f9\OrEiWf@+yZnT.S]AqjRBQH5*F%ըTTTTTTT6SmLj7nTS:Mu4eTAyjTjRBYI5+f5000444)o=_ f^4yqyXREOWf9NTL y!өWrR=|!z:YJnaaaiiiiT>|!_>-uW[(\y%oO+Jjjjjjjjj3fTvSMu0aTNS]Lu"8H5RTjRBQI5*F%ըLj3fTvS:Lu4iT.S]H5R̓T ,TjRJYI5Sz12O\_"+=n|/2Y>)/|P^Iu/2T"TTTTTT6S=-,/O K/Iia<-^rSLu"8H5RTjRBQH5*F%ըLj3nTS:Lu4iT.S]AyjTjRJYI5> q~kt_~CyiǺ=.OӪ y|R~V]AiZu!M5Mj3fTvS:Lu0iT.S]H5R=Xw%'ӎuBzڱJN.aaaaiiiT6SMj7aTNS:Mu2eTO;]Ic݅iǺ+9viǺ+L6ʋ;;.ݙF;ӧB,L/itgz!M5Mj3fTvS:Lu0iT.S]H|gz!'酜TwrR=ߙ~WR=ߙ^M5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LuBN;ӏB; 9L/z3jjjjj)o=3}<7L_}ܾd^^|q/ܾH~RByX-_ܔ7'/%^-y%սrRk%S S SMSMSMSmLj3nTS:Lu4iT.S]rSN{-TZnIu喼^M6SmLj7nTS:Mu4eTܔ^M9ܔ^-y%սrS S S S SMSMS=%6\bWO*?%.s\Bw˗ąY>)?%.zK|WR=%.zK|6SmLj7nTS:Mu4iT.R=%.zK|R=%.zK|WR=%.Lj3nTS:Lu4iT.S]zK\Ik/6X"-c,>|)vOwo)˻{yʛeTc)'}l"夺MTWRݧmPnaaaaiiiT˗VhW{yn^f^T.S]HuH9BBDIuH9c)7000444fT6SM0aTNS:Mu2EDIu(y!}l"夺M>6rS S S SMSMSMS}\~'A&&A~ˏ_^%ZnxqWs y*C=<,/y*KH^Iu%(70000444fT>%8Jn|T˛Y,OMu2eT\rRK^Hu%(']PN{.A6SmLj7nTS:Mu4iT.R̓T $?PEiʅT+T>+W\M5L5L5L5L5M5M5Mj3 yX-_V\ț yZnT.S]z^r!' B*rR=PyʅTTTTTTT6SmLj7nTS:Mu4eTW\IB㼐yʅT+T>+W\M5L5L5L5M5M5MB)ocKvs~O K< N+T. yX-_V\țeTW\IBBN*rR=P8z^r!70000444fTO+T>O+T.ay|Q~Zr!oOO+T.i.S]LuyʅT+T> W\IBBN*rS S S SMSMSMSmLj3nTS:Lu4iT.S]z^r!' B*rR=P8z^r!7000444 $_M*Oz5BB+T.ay|Q~Zr!' J*rS S S S SMSMSMSmLBBBw*fBB2eTW\IB㼐yʅT+T.z^r!7000444fT6SM0aTNS:Mu2E*rR=P8/z^r!' J*rS S S SMSMSMS=Py,/ޮ);OWxEy7'XayXnT.S]OTВRݧCSNth+ӡ)70004444fT!>{<-[(f.S]HuM9ӡ)'}:4夺O>rS S S S SMSMSMSmLj7nTS:Lu4iT.S]AyjRBYH5+f%լTTTTTT[|s [_Y:wZ,i^PN{x!y%=TTTTTTTT6Sm߬8|P>n|V˛妺Lu"=TrR Iu/$jjjjjjjj3fTvSMu0aTNS]Lu")<-7eT.RKQNa) ('WrRKQnaaaiiiT6SmMj7aTNS:Mu2eTR~XJBa)Iu?,%y%87z|+{hklu^M1(byZ>$S nbPN{A9)aaaaiiiTj?cq%ay|Q>I,妺Lu2E{A9)TrRS IuO1(7000444fT6SM0aTNS:Mu2E{A9)TrRS +)Ef{17y9w_>?M F0[(M!oO}h yZ>(M!'ZHRTk%ZM5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]Hu?C9Gq('(夺ő~rS S S S SMSMSMSmLj7nTS:Lu4iT.S]AyjRBYH5+f%լTTTTTT}/~ߑS㗟ߦ(^\~?G)y|QY>)QJʗ.S]HZRBj-Z+JjL[1ƺ/GO@,ߏ<-ߏ<,7iT.RT 8H5 F!(TjTRjaaaiiiiT6SM0aTNS:Mu2EyjAYH5 f!լTjjjjjj^T9^ G;@PM~ZxqWayX-_qIy)GH^Iu#('=)|P>rSLu"=T8BB{A9qT8rS S S SMSMSMSMSmLj7nTS:Lu4iT.RIu#('=T8BJ{Ax|K}K|^H<%&XEy޼CJ{M5L5L5L5L5M5M5Mj3.䏇\n+y|Rx<-7eT.RT 8H5 F!(TjTRjaaaiiiT6SmMj7aTNS:Mu2eT XyuwHy|QfAy7nTS:Lu4iT.S]AqjRBQH5*F%ըTTTTTTT6SmLj7nTS:Mu4eTCIuJ^HuRNPJrS S S SMSMSMS=>m>azo_>o߾u2_\}U<,/o_(oO夺wTArR;HJLj_mJJދi|E7Mu2E{IIu I9$)'սTjjjjjjjj3fTvSMu0aTNS]Lu"ս$夺wArR;HRN{IM5L5L5L5M5MuTUG#F?|~;r<\|wZ,byZ>$? 9DT"HN zArS S S S SMSMSMSmL=s!ay|Q>I,妺Lu2Eo"@No"\ =9=9=6SmLj7nTS:Mu4iT.R̓T Si1vsuT<,/Ȓ7˧{ i9&^jB9&^j"yjjjjjjj3fmxJދi|E7Mu2E{ 夺PN{ 夺H^Iu/5TTTTTTTT6SmMj7nTS:Mu2eT&^j"y!սԄrRKM('սԄrS S S SMSMSmj+^::>'>_XyW[(g^T:O}&I>G|HgrRݳIu:$gjjjjjjjj3f{ҹnQJ*<,/^7'{RrS]Lu"^}R *T{JNJ%7000444fT6SM0aTNS:Mu2EJ%'^RU*9*}RM5L5L5L5M5M5MSV{1l0hbOz5Ơ|Ri|1(˻B{A91夺6SmzZq~Z{!˻Ӫ y|R~Z{!OMu2eT 8H5RBQH5 F%ըTjjjjjjj3fTvSMu0aTNSLu"=ƠTCB{A91TrS S S SMSMSMSK6^n}uz秛{K=S|P~BwTB\M5L5L5L5M5M5M5Mj3Ӿ}!.i/ą<,/OB\ț妺Lu"8H/ąTB|R= q!'rR= qLj3nTvS:Lu4iT.S]H/ąTB|R= q!'rR= q!700044cWƋa0_^V+.t_?i|E7Iu_('=~PN{"y%=~TTTTTTTT6SmMj7aTS:Mu2eTrRIu_('=~PnaaaaiiiT6SMj7aTNS:Mu2eTrR 夺/Pnaaaii{ S|1u-}^v&k)}<-߾PRwIZRBj-zZ+jaaaiiiT6SmMj7aTNS:Mu2eT 8H5RBQH5 F!ըTjjjjjjjj3fTvS:Lu0aTNS]LuꭴT Cs!qAe^MF$\P}%˻Wf>.j=HRTk!ZHVRTk50004444fTvSMu0aTNSLu"8H5RT (TjTRJQM5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LujAYH5 f!լTjVS S S SMSMS=-5y/F$ya;2/Oci>ʋKP>%oq*yZ>([JwT[JnaaaiiiiT-NV~%[JETf.S]Hu('}SI)T[JnaaaaiiiT6SMj7aTNS:Mu2eT[JN-N!/zTrRoq*9޷8TTTTTTOÀ -Ocw|+އ}ۥ;>vw?Oۇ_OWotoo~?ڧr|r?ʌO8ۺ_Nۻӿ_?y4 endstream endobj 3664 0 obj 13922 endobj 3665 0 obj [ 3502 0 R 3503 0 R 3505 0 R 3506 0 R 3508 0 R 3509 0 R 3511 0 R 3512 0 R 3514 0 R 3515 0 R 3517 0 R 3518 0 R 3520 0 R 3521 0 R 3523 0 R 3524 0 R 3526 0 R 3527 0 R 3529 0 R 3530 0 R 3532 0 R 3533 0 R 3535 0 R 3536 0 R 3538 0 R 3539 0 R 3541 0 R 3542 0 R 3544 0 R 3545 0 R 3547 0 R 3548 0 R 3550 0 R 3551 0 R 3553 0 R 3554 0 R 3556 0 R 3557 0 R 3559 0 R 3560 0 R 3562 0 R 3563 0 R 3565 0 R 3566 0 R 3568 0 R 3569 0 R 3571 0 R 3572 0 R 3574 0 R 3575 0 R 3577 0 R 3578 0 R 3580 0 R 3581 0 R 3583 0 R 3584 0 R 3586 0 R 3587 0 R 3589 0 R 3590 0 R 3592 0 R 3593 0 R 3595 0 R 3596 0 R 3598 0 R 3599 0 R 3601 0 R 3602 0 R 3604 0 R 3605 0 R 3607 0 R 3608 0 R 3610 0 R 3611 0 R 3613 0 R 3614 0 R 3616 0 R 3617 0 R 3619 0 R 3620 0 R 3622 0 R 3623 0 R 3625 0 R 3626 0 R 3628 0 R 3629 0 R 3631 0 R 3632 0 R 3634 0 R 3635 0 R 3637 0 R 3638 0 R 3640 0 R 3641 0 R 3643 0 R 3644 0 R 3646 0 R 3647 0 R 3649 0 R 3650 0 R 3652 0 R 3653 0 R 3655 0 R 3656 0 R 3658 0 R 3659 0 R 3661 0 R 3662 0 R ] endobj 3666 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 3665 0 R /Contents 3663 0 R >> endobj 3667 0 obj << /S /D /St 605 >> endobj 3668 0 obj << /Length 3669 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+ba;Uu}Uc endstream endobj 3669 0 obj 706 endobj 3670 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3668 0 R >> endobj 3671 0 obj << /Length 3672 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{ B gGնZ(j! endstream endobj 3672 0 obj 460 endobj 3673 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3671 0 R >> endobj 3674 0 obj << /Length 3675 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(שׁ0! endstream endobj 3675 0 obj 529 endobj 3676 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3674 0 R >> endobj 3677 0 obj << /Length 3678 0 R /Filter /FlateDecode >> stream xUMs0+`u%@61++L]# #69.tB)%;_&SFy*`jb$Ysp4xj2%EN!3;Wq}S|ile$Bj[TMz NQ+g^|1brFnTO \LJAdh?F36ѫdZIIhV#QfS9}N21{ɤ{m󅅍bjֳaEVM~Q5eiE]Yh6zvS'ߋ˙E+ujt "^78+ͤ_Ptm0bw_ #"x޼qUo endstream endobj 3678 0 obj 587 endobj 3679 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3677 0 R >> endobj 3680 0 obj << /Length 3681 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=yqM endstream endobj 3681 0 obj 627 endobj 3682 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3680 0 R >> endobj 3683 0 obj << /Length 3684 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 3686 0 obj << /Length 3687 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|ܹ01A#⨺> endobj 3689 0 obj << /Length 3690 0 R /Filter /FlateDecode >> stream xUKs0Wf,ns4rc<9t__O Hзv%=GQBz["B 7,5M]0c_>m uvpѣ 5:]t;q)0чUaD`1Cau ~UQ(l?`KPld_5jJq?lK e!6$f2Ĭ+wL QP HXkIvmQ.סM]w0##"[76?2S~x/8"41ZJbB41",ucSR[<\_+J(eMD f!q]?{m鴣 jgcz=dZ6,QX7KwM*GKP?UGkLi3[@1X1{743/qeht]p|e/&'npRWu `nI U r endstream endobj 3690 0 obj 584 endobj 3691 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3689 0 R >> endobj 3692 0 obj << /Length 3693 0 R /Filter /FlateDecode >> stream xUMo0 W&QdanY %Nb [AQHjqok$R>z|[a[ u$B dnP[y˽Ǯ~ژx¯d]=cЄ|PPqӷd}csJ_`Yvٲ \UZ!q43! ]Uv냭5Q%~0u}uZxH/j3DKzՐ1&eKGlK 1#Q(d($1A7,-k 8Yu(6Y )͝~_I-jKz 0"ĀÙScdlrAF,6Q["]-]a7+'fM 7z F+7}fSATHEatؐ鋋=գ U.Kr;18otLH _2,'/) TL-S2N\/LȌU =ARDrDùc/7e4s]`YyEèVLmagsh<^Zȋϫwf a endstream endobj 3693 0 obj 604 endobj 3694 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3692 0 R >> endobj 3695 0 obj << /Length 3696 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 3698 0 obj << /Length 3699 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#oZHL endstream endobj 3699 0 obj 595 endobj 3700 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3698 0 R >> endobj 3701 0 obj << /Length 3702 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 3704 0 obj << /Length 3705 0 R /Filter /FlateDecode >> stream xUMo0+J[_`[W!H{h%$A"NVw 8 -$1oތ@qQ$M'G/> endobj 3707 0 obj << /Length 3708 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Ҏ $\!_c_U? endstream endobj 3708 0 obj 710 endobj 3709 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3707 0 R >> endobj 3710 0 obj << /Length 3711 0 R /Filter /FlateDecode >> stream xUn0+hXZ(喢 [9$9d IS_ߡjDLy|3> (b> endobj 3713 0 obj << /Length 3714 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 3716 0 obj << /Length 3717 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 fzyM^UwG#T endstream endobj 3717 0 obj 765 endobj 3718 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3716 0 R >> endobj 3719 0 obj << /Length 3720 0 R /Filter /FlateDecode >> stream xUKs0+$ osL!΁`f] KZe0xA%]d !"I!; `oݱmwΩ; L@{%#tnfYYqEX\>Y]c5êut.|\CN˼ɶsau1#f7(ɏR|B"2ZC]|+ .;jz*< endstream endobj 3720 0 obj 668 endobj 3721 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3719 0 R >> endobj 3722 0 obj << /Length 3723 0 R /Filter /FlateDecode >> stream xVMs0+hOUtfi;3L1f!i}W !ؾ5H>ە'\?dau y>pp CSmj~8CʹG <;px\7ōB|;?y(ם<$(| w XY/UZPRQ_!\H8+Uy]^P5yO*W G'kc+H,}yU1D 2Ue$5n.' Ja \0&@!Mve^AM<̨+x3c)KJ|S0J+ GʨOB&ꬉt3,RͲY'jSK tQ&m!0X-&1`օ*@E}ea]p8F{,.nM-h%ӲRD h'(IN `,}*Vx:\p„~hjYz|rb]S= f7c@/wNcl͖?(ωe;6½܇<]E&ie6WX&Y\U.ʡ;h gl!MQ;~y;ŔNvG\zdK6Ί_?'U 5Qp+[N endstream endobj 3723 0 obj 705 endobj 3724 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3722 0 R >> endobj 3725 0 obj << /Length 3726 0 R /Filter /FlateDecode >> stream xUKs0W1U۲mIo d:-w~Ҟ؀Oէoc@F*;4AC!pڊ qSV>mmg (|]!Ov.}W(lOK库+R={x$tb@f3,w.8YHGS9(k@*;j^񫶬G*xV8 $&e_^\*T(htiͬeL2Gs™)()"" \ kpW&q!6'0V4$۸(!5C Gxh6RCRSC'eZDI$O{YMjmGsa" >ebskcd6"a+%1k*jATLV7@W ("L_~i.!^"89y6-aSA sRuH$:%qmwSnzYnp| ]ʼnEo+m߻&txyq]Ӹv6Xlڸ$YQ2p&.ݢBcapZ2(q_1F߰)t&hpܿzͼ endstream endobj 3726 0 obj 631 endobj 3727 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3725 0 R >> endobj 3728 0 obj << /Length 3729 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*2FInס7f|> endstream endobj 3729 0 obj 844 endobj 3730 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3728 0 R >> endobj 3731 0 obj << /Length 3732 0 R /Filter /FlateDecode >> stream xWMs6W( [:I:͍fzs`$TrX|䞚kw]}X _ ?jl rX&gʌ^~(1㎽~Za.oOu|[`8q%B($uޯ&P%dP=x\ωf6:h\2Wm͕T' UiNZ@ g LUq~0.T#H8cD9*ŔG=: îY=l]}8Ag ۶d,*$)Bpw eJʼPlxͦ7-c0<żVK3R.9m|:rp d$H2WL~(\zozWuz^@Gj?]+,ʙKAq3pgy:Q֩&^}UVLtc5r6Fzs)$/M{a]0}Lp-b&Ы3z͟NT q%-]ݯ8Ζkg2.!KH 7];Ŏ*g EiY0C}]ur=+4CThd>sΟܟ.m{,9EyU#T4Y&1"_o< ѢwW o; Tt( G,Nj՗}Mf`)i dRLP Ȅ5 ʆLF jZ#gc<7/M9j毃F]=jl9>U@By=_DQOxgiqSo;h+8`= Aۦ v,s'$~epb~l#Y(7: fTs)QYo,nT̀㩮Q*T1GݨB5Uh,B`(< Ѣlo3jf@E (VR<=^y_=#52}Jd.;E})&oFgFuq endstream endobj 3732 0 obj 1084 endobj 3733 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3731 0 R >> endobj 3734 0 obj << /Length 3735 0 R /Filter /FlateDecode >> stream x͔Mo |"ݴMzk֦:JT0M/&{6 ?]`PQ Vy4,򼋬;VtNq:iDz9|ݺz!ߊ-Stko?nS'@~Tn,eɄPzaB#\50ɩ^O8vh 3hn_zH,:;*v`AiMk7w9PJ%&fe]!pW&JlZ7ZIe#`qN%KO3F(:tM\8ؔd _sO A."!|d{nj4:s=Ƃ98ñVųj[>yFQ?U*kg.mu0yB zM%u/j> endobj 3737 0 obj << /Length 3738 0 R /Filter /FlateDecode >> stream xUn0+Rn-Z 0d (wH$N{i$973}龴8Ha2x n7^Q٧}m l:P·1ZwpLGD]qC1pV,1") Ef/\jʪla}PySje`k8Rm&0~%eYr&,)!תuvY(TzcZ/_B.ޙzS-rQ#K0%jV Iyz8Mfy)ZUL^j%z&pQ `E'"X68EGx;GX8ư;É5<<ߔiM8t ~ƪo[f endstream endobj 3738 0 obj 597 endobj 3739 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3737 0 R >> endobj 3740 0 obj << /Length 3741 0 R /Filter /FlateDecode >> stream xTKO@Wlgw/nE*EqA9Nb)YQſ=lk}o}>q]rcWDʄ"c>øc>a >6; ·% $8Of@CņN.W![=I+s\!" l.^\jm~}z ُ+!&NPB^onm/H=So׺l{QcXېqK|T[F1 Hs+4|~uM,:^[j!Lp)7^\Q"І?L ͦ)1Ya'"dZ(|u0P )swM4T,ENmڛ\7\9-ii?+_7ku"uy v̡W/SECIiT>@?[R<Ҽ=/era?agj"#cO Ϊ/ endstream endobj 3741 0 obj 506 endobj 3742 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3740 0 R >> endobj 3743 0 obj << /Length 3744 0 R /Filter /FlateDecode >> stream xUKo0W̱H൝NvJ{jP)46K;NHBRmx1 c{9` $_t! !•~GԭsZD xʣ{|Btx;2W+{w@臊2>}Q,ZjyHbRJyZ-rGa~.uls"0&"c xJ׳Z[}߈ /}Vz>Og0ĕIlRs? jӰT `$> endobj 3746 0 obj << /Length 3747 0 R /Filter /FlateDecode >> stream x͕Ko0 3h> endobj 3749 0 obj << /Length 3750 0 R /Filter /FlateDecode >> stream xTn0+7̭E]!˶rDEC-NOM$Y9{3}d82B\  f7k a_O%7. 'id2JUn,UG9L /\mQ?೺(}UY!~}y G^,CTdɉ&,|( +}][6*@a[Cl❩7ikB6(1iɰ%M>-XqjtZe*]X[^\"rbՋkKP̅0cL)FzCe(b*' #ka4ai0/{;ǔ9cKrkL{~1|=.5Sȩ_;Wa:SkRK=oS!r2@7^˼NMٗ"'JMcWkgںßP)&v3Frx:i2OWM82;8S)N|ojTl endstream endobj 3750 0 obj 517 endobj 3751 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3749 0 R >> endobj 3752 0 obj << /Length 3753 0 R /Filter /FlateDecode >> stream xTKO0Wxgv!aY"Ҵ:BM$#,,&#0Ch Ý a 3 pE?kF'uy46utE_'@ZDdP2 lW'r[6ڻ)+aUհ[^C 1{0ΗW-C`[}[6bOdڔ%?F%iZm0C02gh ˻]J" l ԲhG2Cr zn3ʿX) ZG .ŽN=ԛ95 endstream endobj 3753 0 obj 504 endobj 3754 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3752 0 R >> endobj 3755 0 obj << /Length 3756 0 R /Filter /FlateDecode >> stream xTMO@WlgmnT*RWBq%g ^Y؎z73>D0D@z ڀPLh;a3 3v7cqGWׄ u2ZL U6Fi ,IIK@MQl.kyT5}ᶧא83DELNI[ *U mpPV[Eԓ\|0m}m֋ZC.Ɩ- bX4Wh~&/,aĈъW'gR3Lǹ]?: 31ݒ=ZگO3qQI.Î%\0%8_nu>Uogj3nJ?þޠMż~h@9gz@{gU@ǗM endstream endobj 3756 0 obj 502 endobj 3757 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3755 0 R >> endobj 3758 0 obj << /Length 3759 0 R /Filter /FlateDecode >> stream x͔Mo0 _8P -$,~تlZJ+@k*U끗 FΒ4q&S\+mԺ4ϫ 7Fom"sA\LKRt#N‰cFm#u:rnQ#eI!5cbn2~+KYUUTUT> B1`˟$q{0w|Pzo*3G0PI*4Y29hIԥ9ДN*kN)WMgM+% 'J{OMNm(#|> endobj 3761 0 obj << /Length 3762 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}w7 endstream endobj 3762 0 obj 1131 endobj 3763 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3761 0 R >> endobj 3764 0 obj << /Length 3765 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 3765 0 obj 701 endobj 3766 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3764 0 R >> endobj 3767 0 obj << /Length 3768 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#?9xj3Wf endstream endobj 3768 0 obj 747 endobj 3769 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3767 0 R >> endobj 3770 0 obj << /Length 3771 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(% (Uwc endstream endobj 3771 0 obj 823 endobj 3772 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3770 0 R >> endobj 3773 0 obj << /Length 3774 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 3776 0 obj << /Length 3777 0 R /Filter /FlateDecode >> stream xUMs0+V`eBi:-fzsP06ɿ@8&α iv~(~6 {0 C4@C /<aG9vx IC=6}+bm> endobj 3779 0 obj << /Length 3780 0 R /Filter /FlateDecode >> stream xU]o0}WVZ=i=L\pV)vVφ IОֆ(_'O ?pA!FS}D1h /Q_q?v'ko͝CsGtzj~WaXeC%'a VpsvbR) QtwVU_WWu_Z)]틉S#+;P8EF?XA^}#EW̼܌SĈ;C73Oy^+xTMJ(jcmj+mkp lKVCT_RicLqὂj1M6C'B4N01OYn= MGq„N3]lm2uv}ItҮx3aY8 7w'3\$ ]/dM?N`B,e.p{kxPKݨa mef,_Tmb4\ˢ4(Idc:?6c:EYNMHu7 5סyE t>p]+xdN_ܛ/fƬ/h- endstream endobj 3780 0 obj 644 endobj 3781 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3779 0 R >> endobj 3782 0 obj << /Length 3783 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 |cV)x endstream endobj 3783 0 obj 686 endobj 3784 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3782 0 R >> endobj 3785 0 obj << /Length 3786 0 R /Filter /FlateDecode >> stream xU[o0~WVZ=8ou&UECSU pU!rC{Z Ql;χS@BRȪiX0 ܱp?8 e{ endstream endobj 3786 0 obj 629 endobj 3787 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3785 0 R >> endobj 3788 0 obj << /Length 3789 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 MƮO endstream endobj 3789 0 obj 530 endobj 3790 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3788 0 R >> endobj 3791 0 obj << /Length 3792 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 3794 0 obj << /Length 3795 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 3795 0 obj 522 endobj 3796 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3794 0 R >> endobj 3797 0 obj << /Length 3798 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ݕLFvBIJ endstream endobj 3798 0 obj 558 endobj 3799 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3797 0 R >> endobj 3800 0 obj << /Length 3801 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 3803 0 obj << /Length 3804 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 $?YJ'g endstream endobj 3804 0 obj 561 endobj 3805 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3803 0 R >> endobj 3806 0 obj << /Length 3807 0 R /Filter /FlateDecode >> stream xTn0+.> ! *J}eOD2Dywq@⠍E8h؅x^WL'q+3aw?e5%di8&{໊ !XeZnHWdRx ps1} [Tehm@/o}v\'C|)XE~ 4-&=$d*W4Uh-]_v!:9siULp)tHŊ"*!&'s& 0l[7]fc62.JZY==VrՅ&Tsѥ1(Ёs\H0ݶn#I\iVMD]jyr8?3(5[q(碡(cG7,7z|(v,q=M 4ߢ[[csՑ‘;gkgǗ endstream endobj 3807 0 obj 517 endobj 3808 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3806 0 R >> endobj 3809 0 obj << /Length 3810 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.3~sVB+ endstream endobj 3810 0 obj 555 endobj 3811 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3809 0 R >> endobj 3812 0 obj << /Length 3813 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 $*g7V5 endstream endobj 3813 0 obj 531 endobj 3814 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3812 0 R >> endobj 3815 0 obj << /Length 3816 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&JIY__$1 endstream endobj 3816 0 obj 551 endobj 3817 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3815 0 R >> endobj 3818 0 obj << /Length 3819 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]2ZL8dq|4}cUK* endstream endobj 3819 0 obj 532 endobj 3820 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3818 0 R >> endobj 3821 0 obj << /Length 3822 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 'bceWW f endstream endobj 3822 0 obj 568 endobj 3823 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3821 0 R >> endobj 3824 0 obj << /Length 3825 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 *Y3vulNWf5F;E endstream endobj 3825 0 obj 547 endobj 3826 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3824 0 R >> endobj 3827 0 obj << /Length 3828 0 R /Filter /FlateDecode >> stream xTn0+ KR)Xtz3,8hvTȒ"-yCOM$Cfy3&,JsX-@qHb&,:,%"$dr}WQX% bi8+pq(pw5}qޮ BљU7_g=ߓ/(w/&O&fR=)N{nUjT+Jv:oZ( ERJ&q GOcsuH0eU' e|Y_6zH( MQEO5MݴtUB Uy$p%)4H#6vdB vHi$֌S MWy!|% K-0c"84۵Pز쬃_,R.LUolD.uvz_m|4/gB\!5˦Bd4JvG5Y{)bt;xÜ9yoaQƼU _pȧ endstream endobj 3828 0 obj 560 endobj 3829 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3827 0 R >> endobj 3830 0 obj << /S /r /St 14 >> endobj 3831 0 obj << /Type /Action /S /GoTo /D [3670 0 R /XYZ 72.0 720.0 null] >> endobj 3832 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 253.44 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3831 0 R /H /I >> endobj 3833 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3831 0 R /H /I >> endobj 3834 0 obj << /Type /Action /S /GoTo /D [3673 0 R /XYZ 72.0 720.0 null] >> endobj 3835 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 697.5 187.389 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3834 0 R /H /I >> endobj 3836 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 697.5 539.998 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3834 0 R /H /I >> endobj 3837 0 obj << /Type /Action /S /GoTo /D [3676 0 R /XYZ 72.0 720.0 null] >> endobj 3838 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 212.33 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3837 0 R /H /I >> endobj 3839 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3837 0 R /H /I >> endobj 3840 0 obj << /Type /Action /S /GoTo /D [3679 0 R /XYZ 72.0 720.0 null] >> endobj 3841 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 204.55 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3840 0 R /H /I >> endobj 3842 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3840 0 R /H /I >> endobj 3843 0 obj << /Type /Action /S /GoTo /D [3682 0 R /XYZ 72.0 720.0 null] >> endobj 3844 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 201.77 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3843 0 R /H /I >> endobj 3845 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3843 0 R /H /I >> endobj 3846 0 obj << /Type /Action /S /GoTo /D [3685 0 R /XYZ 72.0 720.0 null] >> endobj 3847 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 209.55 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3846 0 R /H /I >> endobj 3848 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3846 0 R /H /I >> endobj 3849 0 obj << /Type /Action /S /GoTo /D [3688 0 R /XYZ 72.0 720.0 null] >> endobj 3850 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 637.5 300.519 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3849 0 R /H /I >> endobj 3851 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 637.5 539.998 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3849 0 R /H /I >> endobj 3852 0 obj << /Type /Action /S /GoTo /D [3691 0 R /XYZ 72.0 720.0 null] >> endobj 3853 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 207.9 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3852 0 R /H /I >> endobj 3854 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3852 0 R /H /I >> endobj 3855 0 obj << /Type /Action /S /GoTo /D [3694 0 R /XYZ 72.0 720.0 null] >> endobj 3856 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 207.34 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3855 0 R /H /I >> endobj 3857 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3855 0 R /H /I >> endobj 3858 0 obj << /Type /Action /S /GoTo /D [3697 0 R /XYZ 72.0 720.0 null] >> endobj 3859 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 216.77 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3858 0 R /H /I >> endobj 3860 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3858 0 R /H /I >> endobj 3861 0 obj << /Type /Action /S /GoTo /D [3700 0 R /XYZ 72.0 720.0 null] >> endobj 3862 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 231.77 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3861 0 R /H /I >> endobj 3863 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3861 0 R /H /I >> endobj 3864 0 obj << /Type /Action /S /GoTo /D [3703 0 R /XYZ 72.0 720.0 null] >> endobj 3865 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 215.11 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3864 0 R /H /I >> endobj 3866 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3864 0 R /H /I >> endobj 3867 0 obj << /Type /Action /S /GoTo /D [3706 0 R /XYZ 72.0 720.0 null] >> endobj 3868 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 226.76 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3867 0 R /H /I >> endobj 3869 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3867 0 R /H /I >> endobj 3870 0 obj << /Type /Action /S /GoTo /D [3709 0 R /XYZ 72.0 720.0 null] >> endobj 3871 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 237.89 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3870 0 R /H /I >> endobj 3872 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3870 0 R /H /I >> endobj 3873 0 obj << /Type /Action /S /GoTo /D [3712 0 R /XYZ 72.0 720.0 null] >> endobj 3874 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 212.89 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3873 0 R /H /I >> endobj 3875 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3873 0 R /H /I >> endobj 3876 0 obj << /Type /Action /S /GoTo /D [3715 0 R /XYZ 72.0 720.0 null] >> endobj 3877 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 205.11 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3876 0 R /H /I >> endobj 3878 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3876 0 R /H /I >> endobj 3879 0 obj << /Type /Action /S /GoTo /D [3718 0 R /XYZ 72.0 720.0 null] >> endobj 3880 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 206.78 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3879 0 R /H /I >> endobj 3881 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3879 0 R /H /I >> endobj 3882 0 obj << /Type /Action /S /GoTo /D [3721 0 R /XYZ 72.0 720.0 null] >> endobj 3883 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 203.45 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3882 0 R /H /I >> endobj 3884 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3882 0 R /H /I >> endobj 3885 0 obj << /Type /Action /S /GoTo /D [3724 0 R /XYZ 72.0 720.0 null] >> endobj 3886 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 206.78 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3885 0 R /H /I >> endobj 3887 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3885 0 R /H /I >> endobj 3888 0 obj << /Type /Action /S /GoTo /D [3727 0 R /XYZ 72.0 720.0 null] >> endobj 3889 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 212.89 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3888 0 R /H /I >> endobj 3890 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3888 0 R /H /I >> endobj 3891 0 obj << /Type /Action /S /GoTo /D [3730 0 R /XYZ 72.0 720.0 null] >> endobj 3892 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 217.89 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3891 0 R /H /I >> endobj 3893 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3891 0 R /H /I >> endobj 3894 0 obj << /Type /Action /S /GoTo /D [3733 0 R /XYZ 72.0 720.0 null] >> endobj 3895 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 216.77 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3894 0 R /H /I >> endobj 3896 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3894 0 R /H /I >> endobj 3897 0 obj << /Type /Action /S /GoTo /D [3736 0 R /XYZ 72.0 720.0 null] >> endobj 3898 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 445.5 346.536 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3897 0 R /H /I >> endobj 3899 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 445.5 539.998 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3897 0 R /H /I >> endobj 3900 0 obj << /Type /Action /S /GoTo /D [3739 0 R /XYZ 72.0 720.0 null] >> endobj 3901 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 253.97 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3900 0 R /H /I >> endobj 3902 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3900 0 R /H /I >> endobj 3903 0 obj << /Type /Action /S /GoTo /D [3742 0 R /XYZ 72.0 720.0 null] >> endobj 3904 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 251.21 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3903 0 R /H /I >> endobj 3905 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3903 0 R /H /I >> endobj 3906 0 obj << /Type /Action /S /GoTo /D [3745 0 R /XYZ 72.0 720.0 null] >> endobj 3907 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 256.21 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3906 0 R /H /I >> endobj 3908 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3906 0 R /H /I >> endobj 3909 0 obj << /Type /Action /S /GoTo /D [3748 0 R /XYZ 72.0 720.0 null] >> endobj 3910 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 261.2 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3909 0 R /H /I >> endobj 3911 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3909 0 R /H /I >> endobj 3912 0 obj << /Type /Action /S /GoTo /D [3751 0 R /XYZ 72.0 720.0 null] >> endobj 3913 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 251.76 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3912 0 R /H /I >> endobj 3914 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3912 0 R /H /I >> endobj 3915 0 obj << /Type /Action /S /GoTo /D [3754 0 R /XYZ 72.0 720.0 null] >> endobj 3916 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 255.1 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3915 0 R /H /I >> endobj 3917 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3915 0 R /H /I >> endobj 3918 0 obj << /Type /Action /S /GoTo /D [3757 0 R /XYZ 72.0 720.0 null] >> endobj 3919 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 240.66 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3918 0 R /H /I >> endobj 3920 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3918 0 R /H /I >> endobj 3921 0 obj << /Type /Action /S /GoTo /D [3760 0 R /XYZ 72.0 720.0 null] >> endobj 3922 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 248.43 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3921 0 R /H /I >> endobj 3923 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3921 0 R /H /I >> endobj 3924 0 obj << /Type /Action /S /GoTo /D [3763 0 R /XYZ 72.0 720.0 null] >> endobj 3925 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 240.66 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3924 0 R /H /I >> endobj 3926 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3924 0 R /H /I >> endobj 3927 0 obj << /Type /Action /S /GoTo /D [3766 0 R /XYZ 72.0 720.0 null] >> endobj 3928 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 207.89 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3927 0 R /H /I >> endobj 3929 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3927 0 R /H /I >> endobj 3930 0 obj << /Type /Action /S /GoTo /D [3769 0 R /XYZ 72.0 720.0 null] >> endobj 3931 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 235.11 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3930 0 R /H /I >> endobj 3932 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3930 0 R /H /I >> endobj 3933 0 obj << /Type /Action /S /GoTo /D [3772 0 R /XYZ 72.0 720.0 null] >> endobj 3934 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 237.88 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3933 0 R /H /I >> endobj 3935 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3933 0 R /H /I >> endobj 3936 0 obj << /Type /Action /S /GoTo /D [3775 0 R /XYZ 72.0 720.0 null] >> endobj 3937 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 265.1 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3936 0 R /H /I >> endobj 3938 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3936 0 R /H /I >> endobj 3939 0 obj << /Type /Action /S /GoTo /D [3778 0 R /XYZ 72.0 720.0 null] >> endobj 3940 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 277.5 255.275 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3939 0 R /H /I >> endobj 3941 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 277.5 539.998 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3939 0 R /H /I >> endobj 3942 0 obj << /Type /Action /S /GoTo /D [3781 0 R /XYZ 72.0 720.0 null] >> endobj 3943 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 255.92 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3942 0 R /H /I >> endobj 3944 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3942 0 R /H /I >> endobj 3945 0 obj << /Type /Action /S /GoTo /D [3784 0 R /XYZ 72.0 720.0 null] >> endobj 3946 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 250.92 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3945 0 R /H /I >> endobj 3947 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3945 0 R /H /I >> endobj 3948 0 obj << /Type /Action /S /GoTo /D [3787 0 R /XYZ 72.0 720.0 null] >> endobj 3949 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 249.8 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3948 0 R /H /I >> endobj 3950 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 241.5 539.998 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3948 0 R /H /I >> endobj 3951 0 obj << /Type /Action /S /GoTo /D [3790 0 R /XYZ 72.0 720.0 null] >> endobj 3952 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 239.8 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3951 0 R /H /I >> endobj 3953 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3951 0 R /H /I >> endobj 3954 0 obj << /Type /Action /S /GoTo /D [3793 0 R /XYZ 72.0 720.0 null] >> endobj 3955 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 230.92 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3954 0 R /H /I >> endobj 3956 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3954 0 R /H /I >> endobj 3957 0 obj << /Type /Action /S /GoTo /D [3796 0 R /XYZ 72.0 720.0 null] >> endobj 3958 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 213.16 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3957 0 R /H /I >> endobj 3959 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3957 0 R /H /I >> endobj 3960 0 obj << /Type /Action /S /GoTo /D [3799 0 R /XYZ 72.0 720.0 null] >> endobj 3961 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 230.1 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3960 0 R /H /I >> endobj 3962 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3960 0 R /H /I >> endobj 3963 0 obj << /Type /Action /S /GoTo /D [3802 0 R /XYZ 72.0 720.0 null] >> endobj 3964 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 230.1 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3963 0 R /H /I >> endobj 3965 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3963 0 R /H /I >> endobj 3966 0 obj << /Type /Action /S /GoTo /D [3805 0 R /XYZ 72.0 720.0 null] >> endobj 3967 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 217.6 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3966 0 R /H /I >> endobj 3968 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3966 0 R /H /I >> endobj 3969 0 obj << /Type /Action /S /GoTo /D [3808 0 R /XYZ 72.0 720.0 null] >> endobj 3970 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 218.16 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3969 0 R /H /I >> endobj 3971 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3969 0 R /H /I >> endobj 3972 0 obj << /Type /Action /S /GoTo /D [3811 0 R /XYZ 72.0 720.0 null] >> endobj 3973 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 213.16 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3972 0 R /H /I >> endobj 3974 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3972 0 R /H /I >> endobj 3975 0 obj << /Type /Action /S /GoTo /D [3814 0 R /XYZ 72.0 720.0 null] >> endobj 3976 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 230.1 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3975 0 R /H /I >> endobj 3977 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3975 0 R /H /I >> endobj 3978 0 obj << /Type /Action /S /GoTo /D [3817 0 R /XYZ 72.0 720.0 null] >> endobj 3979 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 213.16 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3978 0 R /H /I >> endobj 3980 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3978 0 R /H /I >> endobj 3981 0 obj << /Type /Action /S /GoTo /D [3820 0 R /XYZ 72.0 720.0 null] >> endobj 3982 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 230.1 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3981 0 R /H /I >> endobj 3983 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3981 0 R /H /I >> endobj 3984 0 obj << /Type /Action /S /GoTo /D [3823 0 R /XYZ 72.0 720.0 null] >> endobj 3985 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 213.16 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3984 0 R /H /I >> endobj 3986 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3984 0 R /H /I >> endobj 3987 0 obj << /Type /Action /S /GoTo /D [3826 0 R /XYZ 72.0 720.0 null] >> endobj 3988 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 230.1 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3987 0 R /H /I >> endobj 3989 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3987 0 R /H /I >> endobj 3990 0 obj << /Type /Action /S /GoTo /D [3829 0 R /XYZ 72.0 720.0 null] >> endobj 3991 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 213.16 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3990 0 R /H /I >> endobj 3992 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3990 0 R /H /I >> endobj 3993 0 obj << /Length 3994 0 R /Filter /FlateDecode >> stream x͒Wv9֠̽sGx  Dв|>JhnXX*~z}󇶯ӛ͇o7??>^7o߿D>~s}ooï?f2ʛo?7˛?7݇_77{o>O(O<ͺI_~o;/O?~w{}ounW/oe|/wi8ퟛ7.oHTwoĘkRՍ)+CSTwY6ldȲe'N,Yd9r5Z,פ],׬Oj\>r& $$$J,+YVldȲe'N,Yd9r$)k(XQ ԻXabƁP\A2222222ɲe%J,Y6dɲe'A,YNd9rM 5+Z,״Pj],eB4I$}>IsQǃYڋ~>XT#_i Q=Jz}:R/VPe'N,Yd9reIJlbY6,X],.eRIJ,,,,,,,,,+YV\?}EmTՍ)!ԕ!!I5YNd9relbX&ebXF(bE,eeeeeee%J,+Y6ldȲe'N,Yd9r27M,s2w],eBAAAIII om<|Q:݇y}Y뭿}+t~:UWM.AuzJ})5Y6dɲ A,YNd9ŲlbY6,X],.e˲e)bYXBAAAIIII,+Y֛e޾>/m:R꠺Q=J5YNd926],c2XF(ddddddddYɲe%F,Y6dɲ A,'YNd927M,s2w],e"Y22222~"v6^TN>ӌgמ'b!QꤺK]7Fe#F,;Yvd9r I,XbgPbgR嚟A]rϤ& $$$$J,Ͳ~n;IuoTՍ)(TWr$)k~&XbgR嚟A]rϤ& $$$J,+Y6ldȲe'N,Yd9r$)k~&XԻXbgR嚟IMAAAIISݶyu~!N/>F~B]RꤺKɲe'N,Yd9rmRj\MJ-Ir6 uuۤddddddddYɲ"":nTO.ԕ!":&I,'YNM,c2v],c(bE,e LLLdYɲe%F,Yvdr A,'YNbnZ,mPbnZ,mP\MJMAAAIII5Q۷x3~=w߯O?zןûO?d=;?:5{x;x1g9_n%]uPݨRԕ3soע5:RAuzJwPWr$) NÏz8JNW`pU~\}`09_\凉΅<-&:Y>):Muqs!'D|'DBNljy!DBnaaaiiiiT&:燉΅<-&:Y>)?Lt.rS:Muqs!'DBNlj΅TBlj΅TTTTTTTTVSLj3fTvS:Lu4iT'':rR=Nt^wR=Nt.z\I8ѹjjjjj}h'_?h?}痧P[tEd@y|P~d<-.Y(M0aTNSIE9RQNTz0Tף(70000444jTo,vY^o,I풅jvByZnTNSZE9VIzp夺]E9WQnaaaiiiTVSLj3nTS:Lu4iTS('\+wR]OT׳$/nE^Qꟿ|zਿuΙufyX,nH^-nH4iT'TFe#ղjIZ Bj)ZM݊|Rg%iy|-J0iT'Fjl;NjTjS S S SMSMSMSMSZMj3fTvSMu0aTNR͍Ts#H57R͝Ts'I5 f!,};UmE>~w/磛۾~~\d<-ǸI7'qnWInӃ In /7M5L5L5L5M5M5M5Mj5էG݂lJ7N# ˛GA^-7iT'FTw=IqC ']TTTTTTTVSLj3fTvS:Lu4iT'>?ZrR}~|'GANϏT5˩jx0u}Tݗ+OW+ pes!nyZ)M0aTNSncTml꺍rR]I^HuFVSzy=?\\fpes!W6TNS:I56RTc#I5vRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu꺍rR]I꺍rR]I^HuFةj|0}/~zuᬐӫOB^g\ȫY!S6rSmMj7aTNS:MurR]wJrR]wRN@M5L5L5L5M5M5Mj5Y!Iᬐ y|P~8+Bwg\rS:Mu$H56RTc'I5vRTjRbaaaiiiiTVSmLj7nTS:Lu4I@IuH9;)'uTjjjjjjꚹVmO'?=aj>><,˛'LA^-%OMj7nTS:Mu$UPNkύrR]{nssTTTTTTTTVSLj3fTvS:Lu4iT'=7IuIsTמ夺(7000444jTVSmLj7nTS:Lu4IjnNj;f!,TTTm6[J-͖\?/:mSi>x(Y>)j햛j3nTvS:Lu4iT׿a('5TWA9T׈rS S S S SMSMSMSZMT-s%oay|RދA-OMu4iT׈rR]#:wR]#:Iu('5TTTTTTTVSZMj3fTvS:Lu0iT'夺Ft鷺FtI^Hu(7000444'*VʃY]+'ϟ|z0|ulxzay|R~؏W yZnTvS:Lu0iT'.z܏q?BNB VSZMj3fTvS:Lu0iTNR=]Izq?BN 9.ZMj5jT6SM0aTNS:Iw!'~N 9^ .jRl)mwZ3#|y|`v|(?J^-?Jwp%7nTS:Mu$zx>•TGB#\M5L5L5L5L5M5M5Mj5#\p%˛#\ɫ#\rS:Mu$zx>…|'zx>•TGjjjjjjj5jT6SmLj7nTS:Mu$zx>…|'zx>…WrS S S SMSMSMS]sSJ>o?\iturzpi<-Y>)jS:Lu4iTc('wR]Tc('M5L5L5L5M5M5Mj5õʅ|R~VWk yZ)?\\rS:Mu$H56RTc'I5vRTjRbaaaiiiiTVSmLj7nTS:Lu4I1z夺3@9 H^Hu=frS S S S SMSMS]SJ}0j(sVit4Znwy=xyY7'OƐWOƐ:Lu0aTNR-TFe'ղjIZ Bjjjjjjjj5jVv+_׭쒧u+ay|RneZnTNRTc#H56RTc'I5 F!(ZMj5fT6SM0aTNS:I57R͍Ts#I5wR͝TjRBYL5L5L5L5M5MuMNU+e7n:8f75?:||ɻ?~O?~ǗO\?/yvu<,oOgZ>$_?<-'S_IuԗrR]?TO}%S S SMSMSMSMSZMj3fTvSMu0aTNR]?TO})'S_IuWB맾jjjjjj)}:/X?]J_޿?6\)IuI9 )'uaaaaiiiT֛6ܳ]fyX,by|P>vrS:Mu$u$夺|'u$夺Tqjjjjjjj5jT6SmLj7nTS:Mu$u$夺|'u$夺:rS S S SMSMSMS=L1Ny+(wrR]ږTTTTTTTVSJ>)J^-cy%O;X^rS:Mu$H56RTc'I5vRTjRbaaaiiiiTVSmLj7nTS:Lu4Ik[rR]ږT׶T׶z?g8-sۇ>Ө}6냷:_Wˇ84N?f:rS S S SMSMSMSMSZM黿Jiy?f?ȫ:Mu$H56RTc#I5vRTjRbaaaaiiiTVSmLj3nTS:Lu4iTs#H57R͝Ts'I5 f!,TTTTTTÀSb0 '?<|~`頼vu>Ku,u,iy|:AyX,鷺nT׭uB0000444jT[s~%:Y>):jX^rS:Mu$H56RTc'I5vRBQH5 F1000444jTVSmLj7nTS:Lu4I Iu:!N Iu:!y!uZAբ<^kQO4^hoךosFL׊ԕ~Iuz-G@Tf^ddddddddYɲe%F,Yvdɲ A,'YNb˵ Xr->@]r=HMAAAAIII,+YVldȲe#N,;Yd9r$IS,rbVr-6H-kAj\K Reeeee`P_9?6ߢtN,˛Y,ЃrR]cwR]Iu>$/jjjjjjjj5jT6SmMj7nTS:MuꚊPNk.B9夺f#R]M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MuꚛPNkr"NkvB9 夺'jjjjj`^9|ǟ>~::ۛs/˫w]uayT׭#uDBM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MuurR]HurR]PNM5L5L5L5M5M5Mj5jT6SmMj7aTS:MuurR]HurR]H^Hu:BYǩjQ:+`~ZszagB)?\f3r!ɏ;#rR=zqgqgBnaaaiiiiTVSmLj7nTS:Lu4Iǝ 9wF.zqgqgBnaaaaiiiTVSmLj3nTS:Lu4iT;#rR=zqgBNǝ 9ʩjQo7:z@>]F)O;u<,oO[ZnTvS:Lu0iT'!夺h鷺hI^Hu (70004444jTMun۞^nyZ)ay|R>rS:MuQNkF9!夺hR]C4M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MuQNk&NkF9!夺hjjjjj(_Iw`:IlZ6R-TNe'RHR-TK1000444jT:VԨIy+W}<-TNS:I56RTc#I5vRTc'(Tjjjjjjjj5jT6SmMj7nTS:MujnFj;NYH5 f1000044'&fÆw?|xiEvec\ >@naaaiiiiTVSmLj7nTS:Lu4IO+2ӊ"#9>@^HiEFrS S S S SMSMSMSZMj3fTvSMu0aTNS"#9>@ӊ"#9>Hnaaaii5T-惩KSǛ2wOV;~B]vTvNwOVRbY YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN|^^zeX>J\X>/J\2222222ɲe%J,Y6dɲe'A,YNd9yz-k|ޅ^&庈,,,,,,,jAo~>yo뇾}c~q]Ӎ3wP߾sR=^?:R߾s:CXKMAAAIIII,+YVldȲe'N,;Yd9r$)'Rb~/XC]rD_j LLLdYɲe#F,Yvdr A,'YNb~n/XCb~b/XKMAAAIIOI9y O˳/~~߿O{s<H>! PwTh@Bk8@VSZoeȸS7f|˫:Mu$55T܀rR]Iu$/jjjjjjjj5jT6SmLj7nTS:Mu$5WTdATlrR]Iu(700044q ey0fh/Omx%_w@P^-鷺T}rS S S SMSMSMSZM5O[Z>(iy|l:Lu4I Iu$!N6 Iu(!y!uZMj5fTvSM0aTNSFjn;NjRBYL5L5L5L5L5M5M08-<Oc:pa>xT",oOɌWˇO'3JwwR}:QrR}:BO'3JnaaaiiiiT޾kkB߾k<-߾k<,oOoߵR^-7iT'M IumbPNkrR]R]jjjjjjjj5jT6SmLj7nTS:Mu$յA9M wR]ĠT&z㔷C ޿B_t]f|˫[wFe#ղjHZvR-;Bj)ZM7Y>)?|}!@_rS:Mu$H56RTc'I5vRBQH5 F1000444jTVSmLj7nTS:Lu4Iz#多;NyjRB(ITTTTTT׹e=O]4#7>-N--Y>)j|4IkD9夺@I^Hu (70000444jTe~%˛{ٯAWTNS:I56RTc#I5vRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujnFj;NYH5 f1000444j nתw<~~˧im0/?]EB)yX,gFJ^-FJnTS:Lu4I>3Iug&N>3Iug&y!uZMj5fTvSM0aTNS3T}fόrR]I^HugFVSZMj3fTvS:Lu0iTNR]QN>3wR]QN>3IugFliuZsWW\o8=Kw8Oh.sAuzJ}\+uzH=r˲eIJlbY6,X],.e)bY YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN\KR[z˵$X%rm,IMAAAIII,+YVdȲe#N,;Yd9r$IS,bb֒r-%I-k% "k!Ij LLL?&5>_ԜNj.]Iͅ:nTO'5Jz$)IͅZ, X&5j)?|IW/irS:Lu0aTNR=}!'گ;վPBC/ZMj5fTvSM0aTNSվPTj_IxTjVSZMj3fTvS:Lu0iTNR=}!'گ;վP 9վjjjj͖VNU/GVk5^;TvTK}TӅ:nTOjPWԓ,'YN<tQMj<tQME,G5]2222222ɲe%J,Y6ldɲe'A,YNd9rᨦ XjzpTӅZ,G5]pTӅ,,,,,,,+YVdYɲe#F,;Yvd9r I,XjPᨦ],G5]pTuQMj LLL)?l$]ȫF҅TS:Lu4iTIrR=n$zHq#q#BnaaaiiiiTVSmLj7nTS:Lu4Iq#BNǍTIrR=n$]IzZMj5fT6SM0aTNS:It!'FNǍ 97.zHjjjj͖6NUys#㕍;'4Iun#JT7wIWJz$)IWjHRFҕZ,7.E,7ddddddddYɲe%F,Y6dɲ A,'YNd9~#J-I],7byt+5YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YNHRF҅z+Xo$]Xo$]222222~#霷ZLjk|6/?]o$]7ay|R~t%7Mu0aTNSzHa#Ba#JN y!FҕTTTTTTTTVSLj3nTvS:Lu4iTc#FҕTITIWrR=l$]It!S S S SMSMSMSZMj3fTvSMu0aTNSzHa#Ba#JN+96jtZm\YFK}tS uzH=rF҅Z,Ij> endobj 3997 0 obj << /S /D /St 659 >> endobj 3998 0 obj << /Length 3999 0 R /Filter /FlateDecode >> stream xTn0+bACM*dJe+zJ" "8 _ Mf0_'/b>DS Txq @DK^8H\5y| ")IsC29?Tl]|O"T0

{3q<0 endstream endobj 3999 0 obj 527 endobj 4000 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 3998 0 R >> endobj 4001 0 obj << /Length 4002 0 R /Filter /FlateDecode >> stream xTKo0+H!ZQx*ʿn7?' (WaPb<AdK3`Ȣ@U7 ~%uB{r{)M8M&{BF1)R`6L)^šXy*L EgjWt;(~$_,I/H_JbR=ɓN {+\Ԙ-1횹v޴5e11G-sp&(eq6Dvwp{,˲CsO0e%DEeMngx9a{ PX#uӺҍT}$n-V# s.DPRDOS#;tɤ"Y.VX ѧul16@ c+*#L/-`1Qnʥز쬃k, h*3'@~ڙ)a7MJzK|bC˿A6'1QI'wjѩ5 endstream endobj 4002 0 obj 530 endobj 4003 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4001 0 R >> endobj 4004 0 obj << /Length 4005 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.I29Dg7V endstream endobj 4005 0 obj 514 endobj 4006 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4004 0 R >> endobj 4007 0 obj << /Length 4008 0 R /Filter /FlateDecode >> stream xTn0+̒KJM !ڑc#"_R; =5Qq;]>̟0(,sqP"Ca 6<7) ޣt32=H}<)tgrM92$*P!-j.+RSCژn6s$ӑn鞶uBCmKi:.&Ղ; W[TAEuS-LMmkW e)r*С#a81 f4./* S>ª ) 8~5HY6UP%*:Ƥ#˽ERt_fB1T4NWCK՞]O:d]s,2h^JXll浄`0Yg?ĩrHEe.K9cѰyY0BY-T%݋5H$م=BoChydo*P8hsc< [4 endstream endobj 4008 0 obj 527 endobj 4009 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4007 0 R >> endobj 4010 0 obj << /Length 4011 0 R /Filter /FlateDecode >> stream xUn0+5˗D1m DhIP02I__RqH)v!#HM0`VB$/pD^x"⾳~DZ0|ɮn"xYnt.o*7 w*{PfjDxJĨLjW'C7jʆ{:qt{zsS7#}TDONJb8Āb$žrMEed 5곳Ъ.u'N% c90ni <5b߾8bƚKPPF%@c̟iC=.FE31ź&0K(,h;X e$[0VO+u/M@EɥQ u|`!Qk'côvK=MT6ĎУi׳Zcʴ]aC퓘Q4üd]MD43vi_SK9{5k-)KDXzeIڛ5@ EQ?[r^Ca`ܭY͏^6:Ԫ>Nz@&03Sb:h`z%)" 9?xN2 Rc endstream endobj 4011 0 obj 604 endobj 4012 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4010 0 R >> endobj 4013 0 obj << /Length 4014 0 R /Filter /FlateDecode >> stream xTMs0+VBB9ft7Of2Ԗ:6Wcl3=%zv*, B> endobj 4016 0 obj << /Length 4017 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+,4hC0_IYd퍻;zS&zrGn(=Dk᤬rn SV VJg*_̹ݧy{X#}D"uW㦶l|YgRq+.Kk~r> endobj 4019 0 obj << /Length 4020 0 R /Filter /FlateDecode >> stream xTKs0Wzٲzd 2t'QSjYYqRa8> +h#`UA Q \Q!ظ b~G1~5@l|7R=k#E,Wōyw7p -7 W R HK{ssL6"su =_tD} i:bLz:IjZVANsYͫζGYhP ._AtY,"eN=}B9<˫8T /m2LS^ G~f4c.FSsF щ1Hќ sѹT1JO_4:WƉ2Fcbdn{z9 )<@kxme|-K !7tL_|C[y+3e(UcZg9[;]eYJ9ߟH(#@cl78G/G$ބ3Lf0U endstream endobj 4020 0 obj 532 endobj 4021 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4019 0 R >> endobj 4022 0 obj << /Length 4023 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 4025 0 obj << /Length 4026 0 R /Filter /FlateDecode >> stream xU0+{X8ުv+òB U} %&(6/7ϓ6`@~L871b |pkE?+sڍ-D ~&#xyEtp{DF!ty%qW, &!O!doޤVƮ+kVWHӳC?Y_"?IRlN!pJ$V[pD0AƒDU]f:U;C6ټ4.׳V底" g! z?hpHHq$&~pʹ[0A!0 > endobj 4028 0 obj << /Length 4029 0 R /Filter /FlateDecode >> stream xSn07CJ*EAeIPL(B*ul"#<Ώ{#avM\@c 9b"R.,Ua,OeAovF L+n,.Lv}/Mq 9v_{d5!!Y> endobj 4031 0 obj << /Length 4032 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 蝰?] endstream endobj 4032 0 obj 530 endobj 4033 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4031 0 R >> endobj 4034 0 obj << /Length 4035 0 R /Filter /FlateDecode >> stream xSn0+pkJ*!@96@P}[!d'3&hbۘVC u8%,B QٽUV/& u{}xKW;#/J€ݦ즕@H?6 ))\ A:cX/h Gt? OlQ\ }`wimRЅ-]+ 1"^f]O)Q6˷:D+5k6UqQxu6Vs^L5 2Ȇy:3bXTTw@S&ID$WH}g)2\[57(,d 7*QxbVŐ1*vOnE S8zj5> endobj 4037 0 obj << /Length 4038 0 R /Filter /FlateDecode >> stream xVMo@W1~^oUK"!P{Qe`Uv&4B1 F6ͼ}cq.Rqm} fE1E ;PwǺoz=X (| 0:x;GU}WQXAxq%$RpoNWYkUMiQꪼ~˸Ѹ`5>:qJR{it/B HkVAE){ Om(ItW\O[IafmF~F&s ~ɢ5S\V=ͽ R@j J{A4!LB|̚I!8'pƢw+9'w]Oڦg3ݘT/ i(ǏQꆘh~1v2Q߮/A%I5"ꎿ^ endstream endobj 4038 0 obj 656 endobj 4039 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4037 0 R >> endobj 4040 0 obj << /Length 4041 0 R /Filter /FlateDecode >> stream xVKo0+J-W]ivm0UbS M~Bn6Up3o>bQ 6?dπ{&z@hnP}<513zᘴDX"zxBkv6VNBȧZuj}u{ji`; Ð9؜twne&`R"ZFy) ?ӣ9e,z}MFF }ڸ##;$ h !|Q^蹸QiiG: %93lF9!S}vMwȘc@I*(U,2{a*$jwR|b{gHדwR-4`!tcA:X`ʸo8ekQ^Q'5,ZFsQ<3^gR%m ոJo"^ӮHm/Ȕ;H4\s2Ix!wÙMyㄍo e~{2 '~h7U*QyY e.7D:ks+po$Gmˮ-p2l{+1 ȶ=MŜ,}RG=j> ۳ endstream endobj 4041 0 obj 808 endobj 4042 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4040 0 R >> endobj 4043 0 obj << /Length 4044 0 R /Filter /FlateDecode >> stream xVMo@W1쇽J=DB&40RM0boޛc hH` ɀG #І= ޠb]_?Wkp`sat{(v҆ >(xqD0bb™r _j``FUV$K $/uU^?[e*S |JRҰMŁ!^e/67E6շ$IB'sp`QHm-Ig9lVDHtHve˜> F0[V8Mv]w gK1D""}sy(AXA*c̞g͖ IMRneg 9$rE-&<Y[44LLfrϬh'I~Stꢗ̶U:Od'f̭fa.1u\]n{B[ IUM^9TY}'USL m+dcF;waoT1ܝ|0k$'TIv+:!NPrvOH֍,֤zQQtCwc̵0Ǝ&ۉ92!"[gUwx_ endstream endobj 4044 0 obj 655 endobj 4045 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4043 0 R >> endobj 4046 0 obj << /Length 4047 0 R /Filter /FlateDecode >> stream xUM0++5m>XJQP{]El0X M_1I u6ߌ0xOL#$y9n51?٢h۠4=fĦ}ާmkMᇓ9:OhMޱZܙ&B(Oq'jYH4zJ0rHxƩ YXU!5n5R=b|[Aq O;1l}Vx Q%x!^*8 EI䳪.Ǝ-<7\PjdkAC *F C:x 9ZmP^C5(lo75]$T@Wj$9 endstream endobj 4047 0 obj 653 endobj 4048 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4046 0 R >> endobj 4049 0 obj << /Length 4050 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~IKa͗KU4 endstream endobj 4050 0 obj 628 endobj 4051 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4049 0 R >> endobj 4052 0 obj << /Length 4053 0 R /Filter /FlateDecode >> stream xVK6W1 $έEEzHX=$B(MjIzZC&ay~3ͳG=Aq[A_h }!" 8k={ۓ߽Z"=Q >zG>J`S Ye !>yҟ^8!h RFt#cT ^P{V<ͻ 9K1p:A$!~*UmDϒ4b6B_MYI4z'ޛFs4L8ŒONBF˯f.4m_׌DҪuS3.KRsc@U`´ R5׹Jщ%LPU};-o^"1k!wݾeλs[OTM2yyp1FBX*ls!csm)lVBѢDA[׍J[!WgRnt&> endobj 4055 0 obj << /Length 4056 0 R /Filter /FlateDecode >> stream xVMo@+H `!Ǫu"EqCYkXU0M}gl\Rۂocv W&"y(<84Q?Gs" fWȚc[KZv:ss),SJ`RKCc^Ẽ,ܿQf]T0љ;STr`*Z_OӃ9eo,ƿ6R+#?6Z=ThDq`(dTƈ79*bveQJ5SyH½<2 "Ю, 1cAiU)|4 ۸Ya^>q w/yQֺё#ύDE [Щǘ)G>x7=-1' D HJϓ[EO!t@'6jU3Qb"Q?"ڇj[ @}3/ts&(o(Z6Yim2K2I*UPqZBMFE_Ebj#+YZ'RU"u:̸|> /W3'׸+`D+,}ɻ+YX.>zUҍe7Nt]1N˷ (~ ې\k5;?fA=N<+t}aRnxQGUǕ.Hb$bh*OK)*ef^J- g=%xXppj=^6Db/QMQ( {rrA>HĶHo#?4I~9ݪ AqMj “+g~B endstream endobj 4056 0 obj 820 endobj 4057 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4055 0 R >> endobj 4058 0 obj << /Length 4059 0 R /Filter /FlateDecode >> stream xWM6W̭ D1Ǣ=X%KXI^g;)tzib4i7+OiEt~o9e?X.!S+#?:-=^I8(%vIvh~iJ}P]&ܷW 43CxBBF9!s(Ɋd()NPJtc@LJ'+O]!m47?+ׯSjiqK:bH0Iː<֦twFdJJtݢ2FᓈU;urni$$*MlU^ez{si<̠5ұVYY[S]:zՁ.A?a[ 2]fhvyfUeia'r܂D}G=Ă@)ƛu}j@];paǛt5F(/]j՞{gTc:}/A&ǤR:mFF?:نK3jiw7E$g28&2R+ʶvv]X)^(d@}UN?mmvMk͹?T9֕^go*Yz?[VEӱ}LA}p>Vrœ Ȯ`YQB*Cr{AզoIV5T9W*LjLDTY8T0$>Uuyڜ=ĝ\mՕ c*[uMIH2s>ee) nKGB#abFytތ#9pg+Ge>8,O/ۯ,B( ӫDț$ߙUs endstream endobj 4059 0 obj 933 endobj 4060 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4058 0 R >> endobj 4061 0 obj << /Length 4062 0 R /Filter /FlateDecode >> stream xV]o0}Wܷ0q:iDC[ELj` Nφ|4@a[CϹ7>xc {p ,< #p»`ϱQ؅~xwsgvwߔ6 x0֒ԏ!Fc0]+7^¥,LiR5B7gw0}%}c_LmQ娭jmpo7%,3`1f[ZE7(QR5hq?"J$^e0aE$9XR.\]N -(5XRY.N dS{nDmcCH)Q)qMJU5roLϺe'%wHM|jAx<$8?e.63q/KfCdjYLz\ճ-ܤdy,@m͈y.g*u LfdRk -aS)aYϴhd댕OXUZd"-Jl@ZKUdzq[qCMKN홛:Ż WemC'c\HI9Da=Q-WyVhM(^q42aw >&e |Ʊ9!2`+92?lvssh'%!1K#Z2s[s'tR@Gʾ|hCVcxffW?1[Jn!訙 #|gϮ7a6 endstream endobj 4062 0 obj 784 endobj 4063 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4061 0 R >> endobj 4064 0 obj << /Length 4065 0 R /Filter /FlateDecode >> stream xVKs0W19J;:td44,cKɿdc=5 jW6beb ~t*"a$@44ۛ؛`wq{oD]+= ?g#͌<רk}|ðM/! @-IP@4Mi ij?kxz'-+0eŵ~O$pO}_-#j1kZ(6%vLa1m*977eP.7 98zF(ǘP\:QrHU&ߔ}@, K ܦZnxŴeo㦉 17ZKQBt4@iiDt&raB}`j~+k FQ4Ԡ[L5?1w+^ŽҬ<jJ(̸۝(iHcXlf MȼNpJzj,dVK47j^7QXpVWn~اY.x !pPar[j>w}iܯSsnScdp_`3+{r&G>\Axf=2պnJLhr~ 5j;nQ`>j r#rS &uǘ5~SNƠHEt#7}l.4z`KosƲJe`xjd;~&#`8g0JIY_i* endstream endobj 4065 0 obj 773 endobj 4066 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4064 0 R >> endobj 4067 0 obj << /Length 4068 0 R /Filter /FlateDecode >> stream xUn0+%Q̱@]lQ Q[T(Ae!YLNM,4ƜzViXr8ܱp8/ _;_WTEGw-sԅ뉋h>8Pg}͢/> endobj 4070 0 obj << /Length 4071 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[y:fUxu( endstream endobj 4071 0 obj 450 endobj 4072 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4070 0 R >> endobj 4073 0 obj << /Length 4074 0 R /Filter /FlateDecode >> stream xTMo0+?8JJ=DZ-ji$VY 6ʿa75YV=͛yS@sSQ xt0* -Y8,p{_ۑw_zG΢Cx| ֣DC|M/(B1L(p܏AO7}.?2M[ ɶjt|G-9+S _wJ]1y7<Ł!^eJ *DGU]"kHVV$ͣfl`QHmG8SVU~3&DvE ^/s'\V޶,+0tdDEA T5QDXŞ4U*ed,#}THŶåm꿳'DqavLj3bF|SˊSTCq߿%Zn_.ItlU_Ե5 /^R;ir'ݠc F{dt$>\f';4 endstream endobj 4074 0 obj 508 endobj 4075 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4073 0 R >> endobj 4076 0 obj << /Length 4077 0 R /Filter /FlateDecode >> stream xTMo0WP8C(h;t=@W!)$艟y tϕ?ّ@qbQ LR98?{ƶ3@ؿ> endobj 4082 0 obj << /Length 4083 0 R /Filter /FlateDecode >> stream xUMo0+ X[HE!"X+@׆zh7ofy`{]E* q=o1o၅w~ۑn y_^aY4nGxQ"C!ޗCZK)WJQbTO7{'X\æ(Fu?oIVoوگD֧n=o;n*-0lۣu(jWК^8E0-#X.~S*&9bAf87 uKVnT.yJ BF- 39DܼUݚvGU3u+ 4H3/>l3_^*NE H:'}G"tx䄚ʵ]tzZ1eU]C 4:;:,fѽz9 /7f5%Ϣ,Lb-iReEOe,:!YƿvcZc$ʗRr쎸P&{)l-澰. NI{yJDZn[hL8‹yPF cx;eP̷KhB0 N]u_7 endstream endobj 4083 0 obj 606 endobj 4084 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4082 0 R >> endobj 4085 0 obj << /Length 4086 0 R /Filter /FlateDecode >> stream xVMo0 Wɒ?{a:`EˉҠ~8em2G>O_^s y<(!xK4(r76ۧkr&rX)?'h`s#B>7+rG`KŮO$Ihb>f9<^ +gS]|%`+%~O,qO}ïȈ7r-ݟ)j]PF(bBר˅)2fe9Ҍڏ.!q ccߔF}o) M5ײ,ęI^/a(+%nIҸ$k Q|XlE#z~1 ;B546/CP JԠ*vas˵LDƑP "q نk]k`[;6Zbp)U`jtX74QYY獲6-Ru]vgS.{|8Sqp- -03JHMq ik$*2 3#L lOmƯԵ6Ҡ5®!d4,43(Gt)u'}<x¼๰Tp;7Vo )B`)ca浶G̿y}z!K,QtQ1u0c}%d8,qaj=[v7{{bI<ގ٠ O,~3Ǣ0 #sy #n|6q|qચ/Bw endstream endobj 4086 0 obj 800 endobj 4087 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4085 0 R >> endobj 4088 0 obj << /Length 4089 0 R /Filter /FlateDecode >> stream xUMo@+esW!e(Y(bLoMŢ}fގfHϕ_[ SpDHpB_ }p?<@$<נ #΂i/P!IeGHVky̔P fRlӭm^ &.0k*][HҲMMrR>m*m$YKn-7J@Ŏ͢@rQYs{}j*JV6ZŠ\"r*#1ij= K'1NfȜXm5U+K_) yEQ=][^wT3PQؘHi1Q.$SR #^^E,5DKZlf$j\12=ˋq!BK՟Cn yzG}^G(^7,%þ+3^9ln0kOPhP} s? ~\\pat|Dx{ ֨ endstream endobj 4089 0 obj 529 endobj 4090 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4088 0 R >> endobj 4091 0 obj << /Length 4092 0 R /Filter /FlateDecode >> stream xUMo0+nVC(hV%NW1i6@Hqa3{ hmd ΜdSu=0ט[v1ƾghga5a_'w~9Oƺ2vN.(R!lmE׽' p0{UI`YUQFV}3Ͽ+J8{+6> endobj 4094 0 obj << /Length 4095 0 R /Filter /FlateDecode >> stream xVMo0+c{gC;LZ'PJrINi?$@Nk(6/~ޏ}0~u`فEVz`Do5 71ϰ]Vkn&xprXccaܹ%?UnηatԒyԋz"FCa՝{UL̵*ZoK'Xt/N w dWՕZQcXelrbČĎ2K1FcѶPKqs'%JRgp/"J\e ^fyiPHoJYOvT\C3V[Qp-Uih*'=JFAXJXvm)PXE kйڧ""Sssk/xm`vx Q<32Wn % % TR68nj#tp9ZUf֛נ7B:y5<|-;3-9P9$IJcx\sv8Xza/(}m:Bؔ(yVWU?:L ZV6jvGr*UFͅވv^=q{)DY+ueG˵jOeˇN.0\j*pHܒSI֖0wzh_M7cQt;Ƒ&d)5d|$}"=<&=;+goÇc8 $Qxr "r__;% endstream endobj 4095 0 obj 742 endobj 4096 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4094 0 R >> endobj 4097 0 obj << /Length 4098 0 R /Filter /FlateDecode >> stream xT=o0+nl#% 20,CAT,) >Xe3==2 hC޲ dx 8Y8.@#v}q!_/V0+v{Ѝxa}bAS }ٷE!N֊+RRqI-~KYE[XeH\ d/2"ռa5%kWbor[ ".e6<-+^&9a@'!d&1%5ߎ41~)Afu٢Q[VNڬ,O"a}kQVM֌Ts"}ё1!E=ts$WH%?d豮#\kWicSt-dgZf ̈́)BOˈ u똳bGw6u33{}) }4>0积<:]?X endstream endobj 4098 0 obj 486 endobj 4099 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4097 0 R >> endobj 4100 0 obj << /Length 4101 0 R /Filter /FlateDecode >> stream xVMo@+]sRSHF6 Y0`MnMl,ơ˜êp^1!78 1?cA{3j뻏״=6!.6Ga4ZܹB?UmηFaҲx܋{aQ;az[ U%kd׏|_42k:6 IS7uNI; o 1SJ݃FJ-Mi-ѢL3^'2le*4IQyPǃS'y8S*4`)T[Q%F=[f-BJ ZM[Zi>HFq]zqxmJxuL̼:=D{ԠUڈ$q1"*'FD?C'xiUz|Y  Tǖ;AĘBinpmUuwbPv] vTUԶc[&Zۍ>g=(ҝ>WJq\C=>3p+, J ,B OW4%Pur gr5h449P{dc˪]iF+0,;54߈I*\ f6D>8rQj7Ew}?l㊹rZ$:y- bj1r endstream endobj 4101 0 obj 711 endobj 4102 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4100 0 R >> endobj 4103 0 obj << /Length 4104 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?Br endstream endobj 4104 0 obj 585 endobj 4105 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4103 0 R >> endobj 4106 0 obj << /Length 4107 0 R /Filter /FlateDecode >> stream xUMo0+{_`JJ{UEi&8QCӶ!oy (^W~Pb1!F$! ~WXfvl <(wf p-qL; jmImGkYL$Zk.!&kᐬ˭|]ծL $2u,q'K|[_/#_Ev4=&F (,SpBPSJޣu+5ٖ6+z1HN82Lf< 4a%ctH2Uv2Қo[2+LϞǘ<븢(Ȼ­+[TcDX i01i)0QRIE^a4 C {.=CdvKFSteƅ{ypӬbZ6Cq -mFzY͏Q;ԅ4ia2w\al~ܶM=~Dﰢ}=bO:)쌋t8x}9a endstream endobj 4107 0 obj 557 endobj 4108 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4106 0 R >> endobj 4109 0 obj << /Length 4110 0 R /Filter /FlateDecode >> stream xV[8~ϯ8c;ͅ7;Ў}ęZvg(~si$ /@[sα}z>P^!Jd{k+!bs [An@u+v3FD-7(Q'Qo#½j=^Oa]1 X$ &%`|I;V^:gXZ}~SDʈ/"u-ݜWST ODq`DXbCpi„R[*6ŋ03^چF)1h9gt|b,VKp} NBcԦJ0B? ݅]G|DaRUF0$$ Y܀C_3N\tqdNAD= Aiy9]-0Ȣcn2gAZ`s*v+ X_7LF1'Fr ʥz'V0|BNKS 2[6W#* ipA9zj\~F~'-6GGlIDv? 9jم ߐ9q 1c,i&ӲKFeGFΚS B{)u}hۺNm4:g.ˑgr_̪ ' endstream endobj 4110 0 obj 909 endobj 4111 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4109 0 R >> endobj 4112 0 obj << /Length 4113 0 R /Filter /FlateDecode >> stream xVMs0W1 ,Ρ~i0!d[ME$9L}W0`nmAҎ޾JW/߁kXJ!{k[Ba A!k4hp7XM[Ȧ3?^=5G^n{7@ȇe} ! 06(MSA4u 9ܝ] TF0Jg0šO-f_RF_~6q+T SlW,ИBµF e95>v3?S󹴏*E-ͣ" $$fO(0{JYp5CVHQZ,TiXWܼl:h:q;uX{^fMHF~ʒ4iRz4#hG-3 kGĖA8g4+V!V n]ͭTe?w~Q.;0.K?u\B̔[W e.3nLf3JQ`@퀄6;  rB -$f'@楙 2USY< qޝℼ2V?պЋNK9LBp>(ŒmHܡMkodZ.lb")^kHsDr&fěMwhێ%`6lF:τ|C-d7j.Slo$ū,v]TծݺTQԒʨEX0jYޟ{|[.驗k{c%҇mYP;ώs`E}k);Ϫ_ endstream endobj 4113 0 obj 794 endobj 4114 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4112 0 R >> endobj 4115 0 obj << /Length 4116 0 R /Filter /FlateDecode >> stream xVMS0W,c?(Ge,J}WLgbyoi%ǀun- } B`-ohp7{@/t}oMt=^Q]\u8wc}8 QHgiYLRJ. &>!Yމb`fu(H(k/!}IzV񵙺2Ȫ|DXb/W#4JJiTZ!8H^DMjEt3RZOϓQ"\cO?9x 'G3*- -@'[;x@+ C'OԺ=2YC) 2 y܂4bg'rGtѨ 9RٙH lV U_pǧ2tiPju~@Q-L7cӬ \Q',$W|+eLVe<]ͭ&>D{ʔ7e\ve;h /qie6"n|lKF̵lL3ۤm Ru%ȅ-5NS cJƲyKl@Љú?[k3vh4F=݋QP;7V]J endstream endobj 4116 0 obj 777 endobj 4117 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4115 0 R >> endobj 4118 0 obj << /Length 4119 0 R /Filter /FlateDecode >> stream xUn0+r(X.CPF{B([L9 _RIoMlä|fތ8lwnB[A&@857(-}݉>}ژp/O{zO֚X^.y/bð>/O3ezS.BĨt/ -<<(,, Ψ>ey8#%>k2umDG$jA(#a[T,{TXV]YQ:5nc*TΈ<N% cb3pc@c}(}lq)]AM5ЅUvI05 'SC`SC4^oؙtP9HPʀ h<)^B8k|:Z!oGh[]脯.V1HUFڤ-" dΕf,b]mH hy%y4Yqwr="auSm{Wgf`oTiQBprtu;MndxCܷ%IqҜ785Gq*8(zo4TH,(tVoakAKn#\K.vQ.$+f9t[ъݸ`}n'~\AF8YUN5 endstream endobj 4119 0 obj 631 endobj 4120 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4118 0 R >> endobj 4121 0 obj << /Length 4122 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‘O7V?eW endstream endobj 4122 0 obj 528 endobj 4123 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4121 0 R >> endobj 4124 0 obj << /Length 4125 0 R /Filter /FlateDecode >> stream xVn0+%Q̱@SbӖ[TDAKɏX[05ggv9 1Aiu1PDrbqLcE݀03Vot7!'*# ?{1KԦ'uGT(,o2Fa8DrR"5~2OpY LiV9{O ¯}mF4^>vjF (fRAM)U}4ڧMvg2 gR6a$# ӄSqpu9٪0[ҝ;ճ8`ۖLԻRDuz(I@%T}Zn]Вhj ?˸ rG6Mژ=-yT$I ]Ҁ2ӛo8vi0u;)Blmƙ{0lK^amuH փH"6v%f<7xx6UekoA ^7Qh1zǏjC|najX;qJ`բtܸ,B{ý50 *SG퍳?cIGm2OpnƏs@$=zP?] endstream endobj 4125 0 obj 640 endobj 4126 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4124 0 R >> endobj 4127 0 obj << /Length 4128 0 R /Filter /FlateDecode >> stream xUMs0W=T՗-7(dv(J-¿g;c;m<}ڷLj,,JsWckc8$Uy0(<9Лz{NiB3tnOC ۰ioimcI'־0(DFF`jal `T+ʏNV5<:5 endstream endobj 4128 0 obj 636 endobj 4129 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4127 0 R >> endobj 4130 0 obj << /Length 4131 0 R /Filter /FlateDecode >> stream xVo0~篸UZ=c}iV%*4(Nm]!!wﻳ ׹`σǵ- JM 0&lE ~?QOi;6&N;PZ'hsиk঳F!< >\ 0*҆)Y,`1$bpZgmfpUVNA([X_F{G!{ck"eI]K7kF%KlW,|QPJF Ņ*,iN&6=b)Č048:6IQHOM{K1# $I/ o(+-TH!b"x*Dԧ)֐E$ QWV-)YØ$ŊX&5HVѤQMe>24FęLBX4;\/ :+'- ܴ |JNcu\aTQP;~hA6;.p~B6i-fSԃniU`O`VNi$t2;;fڑW,qJ7X|77K|~Rܔ w*TRl T\?UAygϮ3iۍY#InGKJ*чni xJ$7 `@}P[hP>(GYY%{}rӇ1=шumtUC=篷2CpӽN*}7 endstream endobj 4131 0 obj 762 endobj 4132 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4130 0 R >> endobj 4133 0 obj << /Length 4134 0 R /Filter /FlateDecode >> stream xVMS0WU?dqG:큁&C0Q2LUlb'έdJ'S7p [yO w]~An@)u36E;c ңӻEN^"CF:L") Y(`!$$`}Vp\ڵҏ0 St aVFZsr ޏ}_nkVʈᏓM-]V8B(Xbo©RUZ˳ra2U)(&2R3 vE 9uP6a'SȊ\4* 65Z~8.8.a2b "$'B,i@?g )'a\E-10r'X{p`4 aU3UGb0eLjj/V>~Yjr<* /SƦj4w<[Bn6r )V\ҳ q#xBN"58VRQl(]~D9&a\ ;.Mʎ&[x@[$p7#|Z/eٚi;jY/wH!'nv-LϲFKjͦTm<٣fY۹Z7'dmFґ_mnx/A NÃ/שׁd= endstream endobj 4134 0 obj 725 endobj 4135 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4133 0 R >> endobj 4136 0 obj << /Length 4137 0 R /Filter /FlateDecode >> stream xUMS0W=ö,C 4@82xVRYEIHP3goiP| ._H"6$9j@o>ngDFh=(['Y/bp}̣G 0 y,-Hc!#+L{ GLę֐s}K`%~/dˈ_E-mW\B H,MpDF\æ?Kbzu bN827> endobj 4139 0 obj << /Length 4140 0 R /Filter /FlateDecode >> stream xUMs0W19DчmY9vZ:!S BA<56Li}WcS ϢoiW1ܸE*{nl $X \h-YN۵6 zG%{8@諊{3n'0 QZJ)CDWa{] &iaV&^k[K{޻IWԕǯ$U-MOIVƃP8%K+nhTRh5w}w,ׄZ3zp&(eʘg$Ebd1OfdKh-Q/o&-5$E^_%0LMM81x'$ C'fbkSBUO yT.1F̸ >/j'_l:$f$a- n*!7K0Ӆ8⨺TpV|K|܇O/F[ j/Xj=b9.ReŝANg\;4HX\O(.O\Cjag 2l]\Kl)Mە6ERdNP&&ݖc`QTa'6M åtmG+uBm!ab synKN&ª:8S endstream endobj 4140 0 obj 633 endobj 4141 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4139 0 R >> endobj 4142 0 obj << /Length 4143 0 R /Filter /FlateDecode >> stream xUMs0+ rLiz̴8ӡFL18NLoMǒzv߮Wl;Ia [AE&F@85{kpDy8}MlGP>O֚Y{w~WaX,!OҒqʥCE!̓j^kfE`:]+HҝQ}k)H6-С$ƣP (F¶عXF1fF;]RUnݮVEyuF1p(aɄ >N G>> lPU@ t]QE. Ҧ͚EQOULa:@r$E,eDc|P8μiWGZK:%\(^Nj4:L48liHVVS4"ayljոQ䵆,v:8Iz4GpE Թo*ݪI^ۈ}$m*s.ծBOb7?}iieSFr)K5< ;r<1ZɊlf}n΃킹~G !%ƪ/  endstream endobj 4143 0 obj 592 endobj 4144 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4142 0 R >> endobj 4145 0 obj << /Length 4146 0 R /Filter /FlateDecode >> stream xVM0+{X+5U{X5J6 &A%ŤQ}mɩ!73x0 kmo#)DhEb~ّ7OqZnOV+< _mM=gݵ7$?Tni0MҒBP"Ĩ0 5<=zWVa&uYK xd_`2=#`M~i#54>&B1qbb\Ƙ5T||,RUҪۏ1L\q, zF)n [i4EɢDA nYY3CF)H1 HߢܨLP -|$x$DH# rK(C>Ϭq:h?.9 #\7 ,wtu@$pVqR>`WF$EW'iRplNtZz8\RWqRY2 !UN؍,) ^lԩQҠ%QYY gCr]nEmf J꺗y'[gqW`zժs[u6}̳`>J RՋP#~x`G+6sumx?*d K 7QtfqtU5?LDp> endstream endobj 4146 0 obj 640 endobj 4147 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4145 0 R >> endobj 4148 0 obj << /Length 4149 0 R /Filter /FlateDecode >> stream xVKS0Wf*ctMaT[!H }Wq~$VH2ַ۵g3)l=ol> k|NXE \ϨQgt6&Wy~xhkmPQxL!~B8i2 X> =v\UZ,<[:fbn5kN%1X[,1jjfv3e%!Wl$:9O3RhS$r10·x BV4@@ VzKПS'$"NV6BRqKЈc>  qt#ʥq#(McѬA 4Gs@۲fP m-ƹ-E=N?q!4^ƩSaʕNy+Te0 A3Ec EP 7/̂ +̎ V̤U*)~b!n8젟`5/9F0SJ)EJS/ļq Ԁ&75m~&Em*Mq/ z84$NVsYײ._[cM\o{{[8 [t,^0-{g?0x$WYmu=ΐ=I;t3ժ;%|wXJ9mts~px`߷b)I:7G/Tשׁj endstream endobj 4149 0 obj 768 endobj 4150 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4148 0 R >> endobj 4151 0 obj << /Length 4152 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,=mXU)K endstream endobj 4152 0 obj 645 endobj 4153 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4151 0 R >> endobj 4154 0 obj << /Length 4155 0 R /Filter /FlateDecode >> stream xVێ0}W#H%$,!j*M]kS;.KzIKhڙ1Ms(яAA&b4(5hMaDՌ>ӮmM×HGE_uvx]oe|uHk>$\{c; vһa!z;? \0~F҈/#M.]fSB dbb 9T4Y/*/[qFԎgs™a gv2&AS|<)|RR{p[][U[h’{Nڟv?aKFIAejS;:h>"E> endobj 4157 0 obj << /Length 4158 0 R /Filter /FlateDecode >> stream xVKs0WP!oxCi(èB4u dYٱ؉{%}z P|.}ukgcrc`1; 4¿/Q/;++h-6zMp= WQ^/b`˽,#<d$qX۳Omy+UIqڈbca1x8x66n>8Sq6q*NI)v(vMјSJÝF˗dk?J]NGDpRp4O@dz8#IJq;1 (*%kFڍA@|hB/P6&$I/MQ> endobj 4160 0 obj << /S /r /St 15 >> endobj 4161 0 obj << /Type /Action /S /GoTo /D [4000 0 R /XYZ 72.0 720.0 null] >> endobj 4162 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 230.1 718.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 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4161 0 R /H /I >> endobj 4164 0 obj << /Type /Action /S /GoTo /D [4003 0 R /XYZ 72.0 720.0 null] >> endobj 4165 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 213.16 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4164 0 R /H /I >> endobj 4166 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4164 0 R /H /I >> endobj 4167 0 obj << /Type /Action /S /GoTo /D [4006 0 R /XYZ 72.0 720.0 null] >> endobj 4168 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 230.1 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4167 0 R /H /I >> endobj 4169 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4167 0 R /H /I >> endobj 4170 0 obj << /Type /Action /S /GoTo /D [4009 0 R /XYZ 72.0 720.0 null] >> endobj 4171 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 218.72 682.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.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4170 0 R /H /I >> endobj 4173 0 obj << /Type /Action /S /GoTo /D [4012 0 R /XYZ 72.0 720.0 null] >> endobj 4174 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 245.1 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4173 0 R /H /I >> endobj 4175 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4173 0 R /H /I >> endobj 4176 0 obj << /Type /Action /S /GoTo /D [4015 0 R /XYZ 72.0 720.0 null] >> endobj 4177 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 246.77 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4176 0 R /H /I >> endobj 4178 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4176 0 R /H /I >> endobj 4179 0 obj << /Type /Action /S /GoTo /D [4018 0 R /XYZ 72.0 720.0 null] >> endobj 4180 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 299.8 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4179 0 R /H /I >> endobj 4181 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4179 0 R /H /I >> endobj 4182 0 obj << /Type /Action /S /GoTo /D [4021 0 R /XYZ 72.0 720.0 null] >> endobj 4183 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 261.49 634.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 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4182 0 R /H /I >> endobj 4185 0 obj << /Type /Action /S /GoTo /D [4024 0 R /XYZ 72.0 720.0 null] >> endobj 4186 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 269.26 622.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 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4185 0 R /H /I >> endobj 4188 0 obj << /Type /Action /S /GoTo /D [4027 0 R /XYZ 72.0 720.0 null] >> endobj 4189 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 294.81 610.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 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4188 0 R /H /I >> endobj 4191 0 obj << /Type /Action /S /GoTo /D [4030 0 R /XYZ 72.0 720.0 null] >> endobj 4192 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 589.5 257.476 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4191 0 R /H /I >> endobj 4193 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 589.5 539.997 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4191 0 R /H /I >> endobj 4194 0 obj << /Type /Action /S /GoTo /D [4033 0 R /XYZ 72.0 720.0 null] >> endobj 4195 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 219.54 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4194 0 R /H /I >> endobj 4196 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4194 0 R /H /I >> endobj 4197 0 obj << /Type /Action /S /GoTo /D [4036 0 R /XYZ 72.0 720.0 null] >> endobj 4198 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 172.33 574.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 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4197 0 R /H /I >> endobj 4200 0 obj << /Type /Action /S /GoTo /D [4039 0 R /XYZ 72.0 720.0 null] >> endobj 4201 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 244.52 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4200 0 R /H /I >> endobj 4202 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4200 0 R /H /I >> endobj 4203 0 obj << /Type /Action /S /GoTo /D [4042 0 R /XYZ 72.0 720.0 null] >> endobj 4204 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 240.08 550.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 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4203 0 R /H /I >> endobj 4206 0 obj << /Type /Action /S /GoTo /D [4045 0 R /XYZ 72.0 720.0 null] >> endobj 4207 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 243.97 538.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 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4206 0 R /H /I >> endobj 4209 0 obj << /Type /Action /S /GoTo /D [4048 0 R /XYZ 72.0 720.0 null] >> endobj 4210 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 255.63 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4209 0 R /H /I >> endobj 4211 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4209 0 R /H /I >> endobj 4212 0 obj << /Type /Action /S /GoTo /D [4051 0 R /XYZ 72.0 720.0 null] >> endobj 4213 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 262.87 514.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 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4212 0 R /H /I >> endobj 4215 0 obj << /Type /Action /S /GoTo /D [4054 0 R /XYZ 72.0 720.0 null] >> endobj 4216 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 251.76 502.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 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4215 0 R /H /I >> endobj 4218 0 obj << /Type /Action /S /GoTo /D [4057 0 R /XYZ 72.0 720.0 null] >> endobj 4219 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 243.98 490.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.998 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4218 0 R /H /I >> endobj 4221 0 obj << /Type /Action /S /GoTo /D [4060 0 R /XYZ 72.0 720.0 null] >> endobj 4222 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 243.42 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4221 0 R /H /I >> endobj 4223 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4221 0 R /H /I >> endobj 4224 0 obj << /Type /Action /S /GoTo /D [4063 0 R /XYZ 72.0 720.0 null] >> endobj 4225 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 247.31 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4224 0 R /H /I >> endobj 4226 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4224 0 R /H /I >> endobj 4227 0 obj << /Type /Action /S /GoTo /D [4066 0 R /XYZ 72.0 720.0 null] >> endobj 4228 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 237.31 454.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 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4227 0 R /H /I >> endobj 4230 0 obj << /Type /Action /S /GoTo /D [4069 0 R /XYZ 72.0 720.0 null] >> endobj 4231 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 240.65 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4230 0 R /H /I >> endobj 4232 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4230 0 R /H /I >> endobj 4233 0 obj << /Type /Action /S /GoTo /D [4072 0 R /XYZ 72.0 720.0 null] >> endobj 4234 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 250.64 430.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 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4233 0 R /H /I >> endobj 4236 0 obj << /Type /Action /S /GoTo /D [4075 0 R /XYZ 72.0 720.0 null] >> endobj 4237 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 222.88 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4236 0 R /H /I >> endobj 4238 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4236 0 R /H /I >> endobj 4239 0 obj << /Type /Action /S /GoTo /D [4078 0 R /XYZ 72.0 720.0 null] >> endobj 4240 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 224.54 406.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 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4239 0 R /H /I >> endobj 4242 0 obj << /Type /Action /S /GoTo /D [4081 0 R /XYZ 72.0 720.0 null] >> endobj 4243 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 226.21 394.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 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4242 0 R /H /I >> endobj 4245 0 obj << /Type /Action /S /GoTo /D [4084 0 R /XYZ 72.0 720.0 null] >> endobj 4246 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 220.1 382.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 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4245 0 R /H /I >> endobj 4248 0 obj << /Type /Action /S /GoTo /D [4087 0 R /XYZ 72.0 720.0 null] >> endobj 4249 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 227.88 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4248 0 R /H /I >> endobj 4250 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4248 0 R /H /I >> endobj 4251 0 obj << /Type /Action /S /GoTo /D [4090 0 R /XYZ 72.0 720.0 null] >> endobj 4252 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 222.32 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4251 0 R /H /I >> endobj 4253 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4251 0 R /H /I >> endobj 4254 0 obj << /Type /Action /S /GoTo /D [4093 0 R /XYZ 72.0 720.0 null] >> endobj 4255 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 220.09 346.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 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4254 0 R /H /I >> endobj 4257 0 obj << /Type /Action /S /GoTo /D [4096 0 R /XYZ 72.0 720.0 null] >> endobj 4258 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 238.42 334.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 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4257 0 R /H /I >> endobj 4260 0 obj << /Type /Action /S /GoTo /D [4099 0 R /XYZ 72.0 720.0 null] >> endobj 4261 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 230.64 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4260 0 R /H /I >> endobj 4262 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4260 0 R /H /I >> endobj 4263 0 obj << /Type /Action /S /GoTo /D [4102 0 R /XYZ 72.0 720.0 null] >> endobj 4264 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 234.54 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4263 0 R /H /I >> endobj 4265 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4263 0 R /H /I >> endobj 4266 0 obj << /Type /Action /S /GoTo /D [4105 0 R /XYZ 72.0 720.0 null] >> endobj 4267 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 223.43 298.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 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4266 0 R /H /I >> endobj 4269 0 obj << /Type /Action /S /GoTo /D [4108 0 R /XYZ 72.0 720.0 null] >> endobj 4270 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 241.76 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4269 0 R /H /I >> endobj 4271 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4269 0 R /H /I >> endobj 4272 0 obj << /Type /Action /S /GoTo /D [4111 0 R /XYZ 72.0 720.0 null] >> endobj 4273 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 237.88 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4272 0 R /H /I >> endobj 4274 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4272 0 R /H /I >> endobj 4275 0 obj << /Type /Action /S /GoTo /D [4114 0 R /XYZ 72.0 720.0 null] >> endobj 4276 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 262.32 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4275 0 R /H /I >> endobj 4277 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4275 0 R /H /I >> endobj 4278 0 obj << /Type /Action /S /GoTo /D [4117 0 R /XYZ 72.0 720.0 null] >> endobj 4279 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 263.99 250.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 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4278 0 R /H /I >> endobj 4281 0 obj << /Type /Action /S /GoTo /D [4120 0 R /XYZ 72.0 720.0 null] >> endobj 4282 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 231.19 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4281 0 R /H /I >> endobj 4283 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4281 0 R /H /I >> endobj 4284 0 obj << /Type /Action /S /GoTo /D [4123 0 R /XYZ 72.0 720.0 null] >> endobj 4285 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 277.86 226.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 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4284 0 R /H /I >> endobj 4287 0 obj << /Type /Action /S /GoTo /D [4126 0 R /XYZ 72.0 720.0 null] >> endobj 4288 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 235.1 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4287 0 R /H /I >> endobj 4289 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4287 0 R /H /I >> endobj 4290 0 obj << /Type /Action /S /GoTo /D [4129 0 R /XYZ 72.0 720.0 null] >> endobj 4291 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 226.76 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4290 0 R /H /I >> endobj 4292 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4290 0 R /H /I >> endobj 4293 0 obj << /Type /Action /S /GoTo /D [4132 0 R /XYZ 72.0 720.0 null] >> endobj 4294 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 224.53 190.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 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4293 0 R /H /I >> endobj 4296 0 obj << /Type /Action /S /GoTo /D [4135 0 R /XYZ 72.0 720.0 null] >> endobj 4297 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 248.97 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4296 0 R /H /I >> endobj 4298 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 169.5 539.998 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4296 0 R /H /I >> endobj 4299 0 obj << /Type /Action /S /GoTo /D [4138 0 R /XYZ 72.0 720.0 null] >> endobj 4300 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 250.64 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4299 0 R /H /I >> endobj 4301 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4299 0 R /H /I >> endobj 4302 0 obj << /Type /Action /S /GoTo /D [4141 0 R /XYZ 72.0 720.0 null] >> endobj 4303 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 235.08 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4302 0 R /H /I >> endobj 4304 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4302 0 R /H /I >> endobj 4305 0 obj << /Type /Action /S /GoTo /D [4144 0 R /XYZ 72.0 720.0 null] >> endobj 4306 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 237.31 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4305 0 R /H /I >> endobj 4307 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4305 0 R /H /I >> endobj 4308 0 obj << /Type /Action /S /GoTo /D [4147 0 R /XYZ 72.0 720.0 null] >> endobj 4309 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 236.75 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4308 0 R /H /I >> endobj 4310 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4308 0 R /H /I >> endobj 4311 0 obj << /Type /Action /S /GoTo /D [4150 0 R /XYZ 72.0 720.0 null] >> endobj 4312 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 261.19 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4311 0 R /H /I >> endobj 4313 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 109.5 539.998 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4311 0 R /H /I >> endobj 4314 0 obj << /Type /Action /S /GoTo /D [4153 0 R /XYZ 72.0 720.0 null] >> endobj 4315 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 262.86 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4314 0 R /H /I >> endobj 4316 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4314 0 R /H /I >> endobj 4317 0 obj << /Type /Action /S /GoTo /D [4156 0 R /XYZ 72.0 720.0 null] >> endobj 4318 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 227.87 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4317 0 R /H /I >> endobj 4319 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4317 0 R /H /I >> endobj 4320 0 obj << /Type /Action /S /GoTo /D [4159 0 R /XYZ 72.0 720.0 null] >> endobj 4321 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 252.31 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4320 0 R /H /I >> endobj 4322 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4320 0 R /H /I >> endobj 4323 0 obj << /Length 4324 0 R /Filter /FlateDecode >> stream xMWv~gGZ 4p/k=0 -KL\cZLSb<Jy*GӇӇ?Ǐo|w =[ S>JݨR?pNGguP՝%uQ=P'dr"%Pm9zrtj-G,,,,,,,Y6ldȲe'N,Yd9r$E,XޖC-],oѡr!Peeeeeeg|YO~zç~yß~b:?/*JTR՝%!uUj LLLLldȲwq;IzlT՝%w?8o/w/˿:y|H^)˻Z'yT4Z%S S S SMSMSMSmL˕VIwOfI2eTiIOKjݟT4Z)7000444fT6SM0aTNS:Mu2EurRӒZ)'պ?-AurS S S SMSMSMSM$ƶQt~S?O߾>5cZAFʻIc|P>Mu4iT.R(':@TLIN% Z&C6SmN(rS S SMSMSMSmLj7nTS:Lu4iT.S]zlzlzlzzzzzzzLj=g8ߺ6.~X,|P^gwK4eTFjl;NjAqjjjjjjjj3fTvS:Lu0aTNS]LujnFj;Nyj}-ǏOooxǃ I;O<ʣ u7I|P^w$˻KPN5!|'՚PN5!TkBB6SmZ+aWEyTY>)ʒZ,yXnT.S]ZI&$ZI&$ZM5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]H&$jMH('՚PN5! ՚Pnaaaaii&$wyǃ +zomHA[(?@S,V?IIjmTkV?M5L5L5L5M5M5M5Mj3 6~=?@S7ДEf.S]HEIQNՏrR~Z[(70000444fTvSM0aTNSLu2EՏrR~Z[('G9V?M5L5L5L5M5M=zG</O+cíG>W~%i|,I ZM5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]H j('՚/PN5_ ՚/PnaaaaiiiT6SMj7aTNS:Mu2eTk@9|ATk@9|rRr#}G{0hؿ<AO!w?ӿ]k?znNY>)?R߿jjA6SmLj7nTS:Mu4iT.RS-(':BTT IN :ՂrS S S SMSMSMSMSmLj7nTS:Lu4iT.RS-(':ՂrRS-(':BTT M5L5L5L5L5M5M0.?_~0~zOᄐV?v~uswi~|R~~<- [(III8H M5L5L5L5L5M5M5Mj3vXc\fyX-_f|妺Lu2EjlNjAqjLj3fTvS:Lu4iT.S]H57R͍Ts#I5wR͝Ts'KrR||'gI@Nϒ, M5L5L5L5M5M5M5Mj3:Kb֕Β<-YEy%!yT.S]ΒTogI@, Ivz;K0000444fTvSM0aTNSLu2E$$'Yz;KBrR%!9ΒTTTTTTo;ƚm惼`B_9m6!yԒ|Xx*&$[(_)yMH('՚HjMH('՚H~jMH(70004444fT۩zAd\nyZ>(ay|Q>˛妺Lu"՚PN5!TkBB9քDTkBB6SmLj7nTS:Mu4eT.R ZwR ZI&$jjjjjj{T FqN~w0r`;/F^~[N%yAyTI :rR>$S S SMSMSMSmLj3nTS:Lu4iT.S]Zg}PNuև;Yj!AuLj3nTS:Lu4iT.S]Zg}PNuZg}PNuևYjjjjjjꫳ>>3qǏ}z_^z}"wo_A[(~B,'c#c#c#c'c'c'c' 00004444fTvSMu0aTNSLu"H56RTc#I5vRT 8H5S S S S SMSMSMSmLj7nTS:Lu4iT.S]Fj;Nyjaaaaiis0u_V<ۻA3hR~^(P nPT.S]HHHHHIII8HN6Smz^(<͖WB[(?/(oO rS]Lu"H56R7n;NUPNq6SmLj7nTS:Mu4iT.R͍Ts#H5wR͝Ts'I5R̓T0000444>ۃR|ߟwt%':ay|Q~^ P,妺Lu2ErRoZ('F97M5L5L5L5M5M5Mj3Ey@y|R~^ P rSLu"F97wRoj~ F6SmLj7nTS:Mu4eT7IvQNrRoZ(7000044՚U}y?~Z?w%ߒ!uߨ;KqPݨROd9r"EK,k$X ],k$XIjdddddddȲe#F,;Yvd9r$I,'Y.\dIJ&KRe͕ŲJRe͔>IJ&JReeeeeeee#F,;Yvd9r A,'YN\dre I-54Z,kd!50,,,,,,,__&F+=_:/7ݽ0e<-:Bw7Mu2EFFFFNNNAAaaaaaiiiT6SMj7aTNS:Mu2eTc#H56RTc'I5RT 8L5L5L5L5M5M5Mj3fTvS:Lu0iTNS]LujnFj;Nyj`ZԿr_Mo_ ~X,?>(OsTNS]LujM9֙ڒZgjSNu֙ڔjjjjjjjj3fTvS:Lu0aTNS]LujM9֙ڔjM9֙ڒZgjSnaaaaiiiT6SMj7aTNS:Mu2eTLmI57R3)':S[TLmIԖMu4eT.Rljg|'F9֞6IvQnaaaiiiT6SmMj7aTNS:Mu2eTkZ$IQNMTkLj3nTS:Lu4iT.S]Z('G9֞8IvI~j틣TTTTTTTkuW=E]~%ϫ5U](oOnyZ>(_ayTkB9ETkB9؅rR Lj;UmϋK7'c<-?*)Mu2eTkB9ETkB9ETkB6SmLj7nTS:Mu4eT؅rR ZcI.ZcM5L5L5L5L5M5M=.}??|7tٟz=@yzwW7m7mnMy|RLu"wINT!IN :arS S S S SMSMSMSmLۦ={[(I-OMu2eT!IN|':arR(':arS S S SMSMSMSmLj3nTS:Lu4iT.S]Z' QNu; Cj0$Au`(hO?ςSKpgR~~?<-ߏ)˻1妺H졜TwR#{(':GTM5L5L5L5M5M5M5Mj3v?KJwA,˻yX,7eT֑=jC9֑=j#AudLj3nTvS:Lu4iT.S]H졜TwR#{(':rR#{(700044yӧ MuXWoYwLfvInT.S]HLrR|'n0ILrRTTTTTTT6SmLj7nTS:Mu4eT~ 9~ v=In0InAwAnaaaiiiiT6SM0aTNS:Mu2EwANwANwANw]R rS S S S SMSMS}.++'CLhm2&*OnyZ>(_ay|I^I&*ZI&*jMT(7000444fT۩ڷm[c\Y>)i|n:Mu2E5QTk"N5QTk"A5QTTTTTTTT6SmMj7aTS:Mu2eTkB9DrR ZR jrLTo|O߿嗟>}y~'߿|d<-o)˻6rRRj햒|'-E9n)RRjjjjjjjj3fTvS:Lu0aTNS]Luj햢TkZ('-%A[rS S S S SMSMSMSmLj7nTS:Lu4iT.S]Z('-%N[rRRj햢TTTTTTk]W0tsw?wijx~ _w˗f|-Of9 M5L5L5L5M5M5Mj3fTvS:Lu0iTNS]LujTk; I_H~jTTTTTTTT6SmMj7aTS:Mu2eTkZ/('ZA9 RjjjjjjjMƃ Cm_N>>ӯwe\^~H^<,/f]K9n$S S S SMSMSMSmL +y,˻qX,T.S]HpC9n$IpC9n('z Lj3fTvS:Lu4iT.S]HpC9n$IpC9n$?HpCGU_`ΑGz~|w7m'7mAM[(_Luj렜Tk_;־IuH~jTTTTTTTT6SmMj7aTS:Mu2eTk_Z:('A9־R}jjjjjjjj3fTvSMu0aTNS]Lu"A9־wR}j렜Tk_Tu?iSz~~맟޿HONKwAyW<,/krSMSMSMSmL,ZK7'ui‘<,7iT.Rjm}|'@9Rjjjjjjjj3fTvS:Lu0aTNS]Lujm}TkZ[(' ArS S S S SMSMSmڸvĶc[~7=뉻B]GS;BTkuPMK,H Ų2PbY3Ų&2Rec& $$$F,Y6dɲ A,'YNd9r"%5vZ,k.5rZ,k!5n,,,,,,,,Y6ldɲe'A,Yd9r"EK,k"XLEjbYidddddddYSjl)JS>Jx+Q6n^I^rS]Lu"W{^wR}+9z땜T_=JnaaaiiiT||QyWf^i^aNS]Lu^I^/;z땜T_=B~^M5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]H^yWrR}+9z W{jjjjjjjEu>v5SG/hAy|Rv!=rR=GrR=ToTTTTTTTT6SmMj7nTS:Mu2eT#9NHNHNHnaaaiiiT6SmMj7aTNS:Mu2eToTo|'{$'{ ?HM5L5L5L5M5M5M6k僙&|Ϸ=X^~,Ϸ%y Y>)IQN/rR}Ajjjjjjj3f֞g]Vʛm+i|JyXnT.S]Z('$N/rR}AZ(70004444fTvSMu0aTNSLu"D9־ IQN/HTk_j]>`1v*矟~qf XfbxQL^cRE:bxU&U*WeL^ɫ2L*Ӯ2L*ӯʌ2̸*3̫2̺*ʬ2Lleb(E/~Q&2q\Le*WeL\ɫ2yU&ʴ2L*Ӯ2L*3ʌ2̼*3̫2̺*ʬ2upLq-/Ë2u(ǵ(Sq\ U*WeL^ɫ2u}Wm_ogSDqڶ|BW)yq<-+)˻T;Lj3nTS:Lu4iT.S]zZw)'պN9wR;jjjjjjjj3fTvSMu0aTNS]Lu"պN9wwR;jqT;hGkF<ztq-_ב7'o_AYPNuLj;U:D/ay|R>vA,Mu2eTI<|':rR#$?H, v@?nA@}k?z^/yZ>(Ey}YnT.RMjm0TkZ$?H6!PnaaaaiiiT6SMj7aTNS:Mu2eTc#H56RTc'I5RT 8L5L5L5L5M5M5Mj3fTvS:Lu0iTNS]LujmTkˇ;IH~jm TTTTTTT[<ƾ?ʼ͋"yyO#H^ɛSWH^AC$+9:DJN6SmLj7nTS:Mu4eTFC$/;:DJNC$/aaaaiiiT6SMj7aTNS:Mu2eT_"y%'WH^wR}u䕜T_"y%'WH^M5L5L5L5M5M2|Oo~7/Om~+|_~l{:~~_?~moޝ_ۛ?~8_`}7oߵ7_|MU:> }{?H endstream endobj 4324 0 obj 14425 endobj 4325 0 obj [ 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 4297 0 R 4298 0 R 4300 0 R 4301 0 R 4303 0 R 4304 0 R 4306 0 R 4307 0 R 4309 0 R 4310 0 R 4312 0 R 4313 0 R 4315 0 R 4316 0 R 4318 0 R 4319 0 R 4321 0 R 4322 0 R ] endobj 4326 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 4325 0 R /Contents 4323 0 R >> endobj 4327 0 obj << /S /D /St 713 >> endobj 4328 0 obj << /Length 4329 0 R /Filter /FlateDecode >> stream xVN@}W#HeƵBg,mk(C% bxϜ3ݹwPnً9Dw}mc 9oF0+m.hEe9}Oke r7 3ѩ5s ~(,z8F!H܅1ܷ\l(p/LL Aieߝ`eO2j8$)kldi|JDb©>Tey:U\cu Y%1p&(e@%e%4;\vr'J  ietLo xgSf: _#_} 49ジWTeO\I1VĒ)A:^ 't)Q Xi2w9.y8(ۗtğI{sj$*˕c 0iaEQ3HklIu7/kcX>a*Mt9L)F|=уWd$T[\ner-j*GukSg3F[-*/Լ[\70iQhxvIl=yi |6tH` ۨrF`7x‹'NJrd|`zd#[zˍ8Y纷{6۽Xdr@H = d_(33TPxNrqTEY/FD\q$pd$50KW.L.iz#+s2r@R_YkuV`^w0J+dՆU2 endstream endobj 4329 0 obj 863 endobj 4330 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4328 0 R >> endobj 4331 0 obj << /Length 4332 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(|pyJ*ޑ8 endstream endobj 4332 0 obj 522 endobj 4333 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4331 0 R >> endobj 4334 0 obj << /Length 4335 0 R /Filter /FlateDecode >> stream xU]o0}W?>NZ&Rh{h &X#@q>h؞ֆ(&cD\PXmFS`)DHh~Ϩ/~ ߔ=# _;O`퉋h>(0O,aY%i,1dQ?p~LW ZRFYsq˯l󾾰R#Y(#",7;P`ΣkU]F+VQ0&ng qJ[Jp=[QOA^*hUm2`0V>7a c92pcwsݴF=U≈)ilƔ& Ř'1 ozRI'8$1Gib]VzҪҪ=}Ƴ݂NMM7O#Ndokd@4QQem@,*SJnKڀVOV75?sUtU,VUN4&X:wmVvJk[ty0TMQ;]EїOz&1h;b߾û,ybSFIr|cWv# endstream endobj 4335 0 obj 622 endobj 4336 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4334 0 R >> endobj 4337 0 obj << /Length 4338 0 R /Filter /FlateDecode >> stream xVMo0+JvەPJ{h &7U!z6$6okIa 76Ml EmY3nD7K#Z5h#SFa|_nG(Lҽ,&!R<dwƽ_+*00em\}_lJ}qJq6ƸJDbC%Tl4*iye32=R1p&(e3phqNBA⧜SjSM !O/*xtuXԦgn<1JN4DQ5--/[QFDX-+'やP:{1;J$rP(䗘1 ȽD+wV> L/=ɴVUMxsSpgUް/Pa8o\AcSکz^ ό p\+S?;f56=Jfk6IMbP6w䨶j(cc[/{F7?N 8gο~HaG/Eg/>XU8o endstream endobj 4338 0 obj 708 endobj 4339 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4337 0 R >> endobj 4340 0 obj << /Length 4341 0 R /Filter /FlateDecode >> stream xVr6}W[%o,n]3qC)E2$e B D҈8X7zxxc}a<=lfPDH;?5D/kle֗&3뾵Sun%0_0'osMEL꼌VQQ: ߭h㜲lNU1yvK5P= 1S,!BNlY%v\O\k#lF9!qr3ęPtO ym3D *Q>2[AXmӨrw^ZGu]Ŷ,S)zI4a>JB[Zyv]Wii,/*YA>c.5O!q! {g[jMvRdz]ӐdTOQ*ΤVLVݠ҆k(IJQU/[N74۩ȆwX8VZn"&6b6d<ƻ4qmQG@.(vhst|ϙq@#r#.6xn/m%YFgxR;I |N=n?MDZ~{i%XӉ89AT0<8SsM{6E^UrSF ηib1-̱^OAzS(K؜,AVp|u+|xyhmg~&r`Ϋ.@f#uj/6 kQť,jN'*M#ROl /r5У!y8J]U$q8<]y!2|^5"HnGk*eb:_Oppwg!?DՒ]y?T-tM) %T{;Y`U?= endstream endobj 4341 0 obj 966 endobj 4342 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4340 0 R >> endobj 4343 0 obj << /Length 4344 0 R /Filter /FlateDecode >> stream xUn0+%̱@]"ѶPRNڿ/)YvM,CbP"x:a !F@8;ſoqhwAÏ 0| 9< 7z~Wa*!^%qʕRD*pN7/ aT&i~|[%}gJ}QD b@1^ *1;yTQޖ[,uҤΛN% cCbITR1&%ܭ6`yNu-$%T6IW%lMU@zu0_;1QE-涧GJH"*;ҜK215.pgQ'9U%\HvGZas,,z1;S55$YfPmG3/(ݲ,$QE=fSrS- N9IJuْ갬O-+Nb[pafpi˂zir0N~в1O?d_xSFrp "ho endstream endobj 4344 0 obj 568 endobj 4345 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4343 0 R >> endobj 4346 0 obj << /Length 4347 0 R /Filter /FlateDecode >> stream xUM0+{X_xJ=ͪ 8ꩻ!oy (^wnPz0/!6 Ig{~福>!#( _'DSg:2X*6 s|πQ,"K5pwx`ڷ>üXM6nL>A-_$.`/L]q*e5=x4JDaSR*նeˬIɶ_ke 6D H +U 0_BcocMY,"]O6;C(9ݮ).1\S蹣( йOYMtT}-V!/P)UubqG -q ۴mh!Φ\H_NǪi\m:2 K[ԇ<^Ԑ5M"8C:}ဟP:cCO fdQ(.ή/.?x endstream endobj 4347 0 obj 556 endobj 4348 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4346 0 R >> endobj 4349 0 obj << /Length 4350 0 R /Filter /FlateDecode >> stream xUMo0+؆`JP) =ՊXKQq$mbc޼_<;!z/{;bQtOi:7o3syu=q-BFa}bBe x D~8[xyP2` 2ZAԍjg{_}?YNԶǯ ]/-ϻIt(8%[,*RQm̛T*/"8̧a`8aADO!OaFʀ 5$敁Ъl|+0U6@P@ʪntSe@P!iTD}PO߱$ū:p,$CGjju>̿F*w&=~-e6O*B9xe0&`: MBt)Tn7V{~`'OA$MULKt4iӛUךdѭvۙE:B;\15`\Yuc91ĠG1zaȍlj~KaDgYNq endstream endobj 4350 0 obj 580 endobj 4351 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4349 0 R >> endobj 4352 0 obj << /Length 4353 0 R /Filter /FlateDecode >> stream xVn0+Is,!@`=AX-n~}Iˏ[0ggziX~ ,"9g?+g_CxI`?8rxInO$wA"Ca|&o2 @)M41*t >+nU\H\>{uzpF[6~F}9zM|  ŀbĝ^McQգnkS!w?Gs^7/HR(aX _U*+vZQCB#NZu.r`iՂ{U#ò/IP Q@3SHED/iѓΔ"&L(C)~\mAשIQ^8s-4ٗGE˲V.b+ ~#.˶r.%ԍ6R[h xd%ۅ]~`. v;=E{OGU%~5]TxMeUii?<˂0n7 s\/ LnU\mlM'*Cm*8`h䶒πcQMC_,2^k.toҁԦx wZHHGB V~ɜ?pO!'Nc;W_|f endstream endobj 4353 0 obj 659 endobj 4354 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4352 0 R >> endobj 4355 0 obj << /Length 4356 0 R /Filter /FlateDecode >> stream xVMo@+~9Vj*)⨢b:@vq΂ǂɭ7f`1x\Ei˧y1PDr8& X_m{9~DeDk ^.\OEA"]Fa}Gnc`Zɥ֚KH8̟i^*nYSlm`4ߢ/6R?Ft>MF (SVG~2w+K&kLgψ2 gRLŀ.ȱUHL6rd ngc,E rBl[ tb0X(I[eUT=⁖DT넧BSŒ ")+RtAg۝9PIE^7~11ilVkj;yufc![q<ҸfAl+rZ|A1 b55dXl`m] "B^0NEwds6vBƺn_=i]E&+W,ڱ 3@#Ǵj2=AӪFl/X҉?C"~k;`S|d.P(I (/no?I; endstream endobj 4356 0 obj 629 endobj 4357 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4355 0 R >> endobj 4358 0 obj << /Length 4359 0 R /Filter /FlateDecode >> stream xVMo0+qJ=DvEa1k;dYa3F(,!!R<| tb3Ycl0OkwoYwV};Ro#IZ/ݟIP8%-v*TRӨ旾r/Hi;L 3A)Rr@TaLb1x\GvNڂuUTK0#]EW)~}wQje /O07 $)c*dG4SnU#((]bqABN($r:$f$qzT׏1zqX?ˎif!2Vh^^Ը1Lc0$'ڮ*C/Qfm}Yk=-^mMVoElcqΨo?өDwJ=&9GUZez֩EBVXxl:/k|wǫB:ŏQ)яvv =Q})H..~ hdU| endstream endobj 4359 0 obj 652 endobj 4360 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4358 0 R >> endobj 4361 0 obj << /Length 4362 0 R /Filter /FlateDecode >> stream xVMo@+Fj~`rT!Rd=$QE` %Q; 6ozjb, y3o>x bQ xxh{=&{5ُ}/6˫<߽[f_קըj#/ VAZ 8fD>g1XKij4JVIg}[5){g_uZ1 ձD/b/GcBiԨNW|N}%gF rB(6r:)CɉLpy-գT`j V̾n{fLGZah}sU7{h<~8dQEKN?+rNii 0B 4Gzi|jS[D~J6,SRk VJC$2(e6sI\*wa<.HwH'ݳyMufFBZ/9Yю8~ݠ8ty&Q 6r? nň jjwQIqu\L-tQWn _(!1h܌նhϣǟYzNJrnGs6vϺ8&%+ca궁Cy`lGu,tJkN/;lqu-2cQbw|#ML#oW靘Jh&Xprƪ/g endstream endobj 4362 0 obj 720 endobj 4363 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4361 0 R >> endobj 4364 0 obj << /Length 4365 0 R /Filter /FlateDecode >> stream xVMo@+~9Vj*)(b@vqβLnMEơ/Jso] `E c}zNk ~EeD{cxB=pw 6 4r0͏ҲH.\BJawy-&MeiV;ӸGMBF^?wjpJZT,UaPSJNVM9fS π2 gR倐8*x6K2\un'}1Z¢\Bv^Y S6Fo9H(IKB߲]P=DT넧t1b)Bzk'fR$A,šgi`im ä*M9NC!b٬Ôlcy5dؾlqVhNjS1J#[ WqNwhjWTQhB %T=\2PԐ-8'{ ӫV}*+*º6P8bv5Z]yY|^汤#o]~mMa'mWC%?; I endstream endobj 4365 0 obj 631 endobj 4366 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4364 0 R >> endobj 4367 0 obj << /Length 4368 0 R /Filter /FlateDecode >> stream xVM0+ޭa]{Ta(=*@%@4꿯 !6!ыg<X]wzz5K󁸈zܣ03n=ƾ;{ppvp,76 )t>.< Z BBC!,\ª-(FU#3_pF+1QuxW<ŀbU.RS* 1;zTOy_l5emeoψn.E02&rނ?QͩTxX`%߲$+`7xSְ3Y♖K6p|6OQVM P1[H@=)bBr1Uo-īXmbr*\%iDޫK8/Lth4*\mVM^Em:+ѦUJ-B$m9 yx`3xF0kYŔyF}O[ZTZYk`(sqNLF;&r+sjCλ3lf#1F\徚sQ3cGVMS[6Uq-FK|xt8U5f'uȾbn_p !Wo7_ ^U}X3 endstream endobj 4368 0 obj 610 endobj 4369 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4367 0 R >> endobj 4370 0 obj << /Length 4371 0 R /Filter /FlateDecode >> stream xVMo@+Fj|,CR"[!* L._Yx{jb[^4y1> endobj 4373 0 obj << /Length 4374 0 R /Filter /FlateDecode >> stream xVMo@+Hv?+5zdjIaXld d_Yvlp6=51 }3o<+ȘCv1OC,(_0`{Ee9ݯ6D'KUF37$B?Un޷&FaJ"s?cCD͇l w{ nRuP0KVu~zg' ?Y>?[ǯ$&n} NDJ ƔRӨ\]_WyrFh? k8 ~m 3\ۛ)JoCWT Ȓ.\k95en_0Uwe5$%ah脴 ӗnڢC3*>e!,hXqA|/,WRnԁƌ̗$у}b,HL n:ItE &Rj-^? /sS  5f rs }/; @5$zY-Ҿ@QeE 3'0WQʈ;- 8*ug5BޤirJM)79$YUURR!82JҥJ &tG۰NWtL֛m1!WX4N1hBǏݴ:LqFdbFh~\2oPHaD'Go1| W^ endstream endobj 4374 0 obj 676 endobj 4375 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4373 0 R >> endobj 4376 0 obj << /Length 4377 0 R /Filter /FlateDecode >> stream xUMo@+B ͱR]HQ{HŠb @kw5`m^ˋ ׍Ybwɀ Bg–Ebv{2"M߼#ٻ@4EԴï^Zv}80KldV"]ooKVWF̜I@0QNE`a*2Θ8$V1%bnZC)qVTGfFN! KTuHUg+EJ,$&e?[פ(jR!0x-hu4sKj*ϋ#'UZb xt^١ cF _q2UnjS᫕u9`4pZ]!/o)&b_ǢWwx}h IVw ;3#s^0\i(i+xrV endstream endobj 4377 0 obj 568 endobj 4378 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4376 0 R >> endobj 4379 0 obj << /Length 4380 0 R /Filter /FlateDecode >> stream xUMo0+q+mVC(hT+6Jm6|aoۆ(v~~7Csglv pTca?튬]}>~ ' rrd.;v=q,Ou65p,\A|D0b|™ot^TϰH3 ­ ,kԷOps>Y|]Jd HSbfҀ *<#gi93aA0(G&+t1A(51͘+u+xK-Ei7&{MC6~曭/>bYq6n;=p}GV`})>ɬ%aeVU@V 5\:ҽ?2u> endobj 4382 0 obj << /Length 4383 0 R /Filter /FlateDecode >> stream xVn0+ ˇ$9h  %P E'H駤&akfvvSD/\P]IR 1 /.yz;ޯ!_V3oѯ-\<(nEw=!Cið̣7  h-PLc!!C 0_ʾ4f 7U`f# .`=:?K 6ѶλoPkSVcvYk]vz1U b(a8X"%b>S*qpJf2ʀ i%$ec +>擦%1JԛgiCň"FgB4 AS2c~YFߐkr:c ?o1QūW*z@o4"rJ-'tQ1CU]P`UZhZ =gO :k6CzMy)ŦYFuN2ZՇJ/ WP*3umդ@HnB+xvbG_NcI)K8-q%8kopNW4牫P#G~~yKH8DuO˛6xݴ:L$`?FdûF`(G țO 쪿+_ endstream endobj 4383 0 obj 686 endobj 4384 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4382 0 R >> endobj 4385 0 obj << /Length 4386 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ݝe0p,Sq㨚SN endstream endobj 4386 0 obj 408 endobj 4387 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4385 0 R >> endobj 4388 0 obj << /Length 4389 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 4389 0 obj 604 endobj 4390 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4388 0 R >> endobj 4391 0 obj << /Length 4392 0 R /Filter /FlateDecode >> stream xTMo0W̱=;ܶjwEECC6@D C$%!۶y~&q$lvce e@q nEѯ~?q ' '{|"4!I"rCزۘ}@*Q\I7%<^=MWۼ* IJ/VϯٻFgyo<(-96!d]qz,Ilu23#AK.BT<$Dȥ0FWRS$aEUN4M` Oei=֣\2ʼn&1ibM^jHfhxdhF>7z YU{ endstream endobj 4392 0 obj 469 endobj 4393 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4391 0 R >> endobj 4394 0 obj << /Length 4395 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:F' endstream endobj 4395 0 obj 562 endobj 4396 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4394 0 R >> endobj 4397 0 obj << /Length 4398 0 R /Filter /FlateDecode >> stream xUKo0+ uViM8 ZG&iOm!Ϟ̣À{mpc1P7Vo0fEҬo[uRO5.<;ΙO*6 [Fau%~'.r.QUW|_)d75[6S|,ՀG^pJ**J(id) W 9LP =@hȄ$}/],9WSyn$JC~x cO?0'>cF%FT'Ce\ HPfdv9[^.H;WŶ*/| ҘR|0afd}eTkynN\KJβyD;>":&%C $.~&^睶VC8iWfۤZ jZZ5NOnި3\>5yQ0kZaGm`eM뤊B]ui/0oIGYENbglx]nWHoBH^!%T:\JOFu%n)FRE`ΗkeL%Pc:[?U1f endstream endobj 4398 0 obj 668 endobj 4399 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4397 0 R >> endobj 4400 0 obj << /Length 4401 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~A)rUB= endstream endobj 4401 0 obj 396 endobj 4402 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4400 0 R >> endobj 4403 0 obj << /Length 4404 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\ {MYd3~笺/2 endstream endobj 4404 0 obj 656 endobj 4405 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4403 0 R >> endobj 4406 0 obj << /Length 4407 0 R /Filter /FlateDecode >> stream xVn0+ ;h rHCEL9!E)^d%4 | < 9z 8 綑JdVWm@IT .g@UKпjSh]t}8(c(Nu"ք#Kw xcUl endstream endobj 4407 0 obj 666 endobj 4408 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4406 0 R >> endobj 4409 0 obj << /Length 4410 0 R /Filter /FlateDecode >> stream xUێ0}+qWu6`TH+U>lV ΥJ H}r%l]s9=Hm0Yy5A )ăD@¦!6{vƲ}Ǧu69|2DhJx=1z3"!̼S! 8u+><< }8Y})xcq*~ՒU)V4yTu )ʨcmh"P#%nIȳ^gg$MfEYdP;qjG &D?sIf2 h.|Pi %^!ɠ"D$$""ET YV*\wY.Ec[2"CDҡ̳ƍdnRSL6uݾa7d> %@0(-+իi!Da<7` BIQ;ݦbo)ijR6M1g+i ne;ds~f.w 4I-L^!Ҏڭ/肐tH)u#բۭ*P-v ʹx_; ^PZcXWP/#sTք#NF;UqW19 endstream endobj 4410 0 obj 616 endobj 4411 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4409 0 R >> endobj 4412 0 obj << /Length 4413 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՝ k endstream endobj 4413 0 obj 593 endobj 4414 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4412 0 R >> endobj 4415 0 obj << /Length 4416 0 R /Filter /FlateDecode >> stream xUn0+ ;\$h zõ襈hǒ[;X򒜚HI=qf< OfSqdԆxWLWV ߢ_X>c3V6 \5 4%> endobj 4418 0 obj << /Length 4419 0 R /Filter /FlateDecode >> stream xUKo@+Hv -*2RI{x8wmL잚ev?vfg}v8 ݗy0Z!z._]6w?[A A ܅uΜQ bCxr>·o.ppLi3){ 3=aL}~5SriklT#Y#}x iR.7T (YyUiɟ J0%"d{`̩<=ts'x `fjcd]|O|ăFyu[OM^M9z,~xkUZOwgݤhz~:".]V;˧ufz 5;Q>SF!qU,2u֕Y Zw_L5/1 . I 0j[[~< q-'6!6Yi{3\jÞ/q2Y2XCf?)kN4NLxs$ &G5ʐ̊rQzXeNϬIBjS&db tuh]#÷(ڮ+v?݃#yք#9j endstream endobj 4419 0 obj 632 endobj 4420 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4418 0 R >> endobj 4421 0 obj << /Length 4422 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?0oGiQsNcw|ƪáɷ endstream endobj 4422 0 obj 779 endobj 4423 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4421 0 R >> endobj 4424 0 obj << /Length 4425 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?1sLIy;7 endstream endobj 4425 0 obj 780 endobj 4426 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4424 0 R >> endobj 4427 0 obj << /Length 4428 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_peUY endstream endobj 4428 0 obj 552 endobj 4429 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4427 0 R >> endobj 4430 0 obj << /Length 4431 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}g'+jϿU endstream endobj 4431 0 obj 554 endobj 4432 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4430 0 R >> endobj 4433 0 obj << /Length 4434 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/)_o\UsdPc endstream endobj 4434 0 obj 682 endobj 4435 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4433 0 R >> endobj 4436 0 obj << /Length 4437 0 R /Filter /FlateDecode >> stream xV]o0}Wܷ&]qiRVUAC[U48 SHCOkC{ѣ:7 a?B4r [/ XBOV+<͝FSYq]w{@ž%\p)#. "> fr9 qU3){gu^![0P<w}!ZQnoРDDkI̫w]lbyʶ@yF}DKz X {Iv˘;SpՆlPh"=@鉰L?Ew)")Cuӱo'Ev>wNG۱\.)ҁIH_h ~&ч(y+ 4zu3Wz#:";-"y%ǴiJ}ųd ?\ZW٦┘ z2yL<@-:ΤsMlYԁe'tQ9H-MA7U9̊j2EpTt̵ɶVY`knl{ qV?C6]˰*Vɓ[RO*9kV9 "zwjj[iz ، Fx 6=x{;1춪3$.a\K!jiLV endstream endobj 4437 0 obj 678 endobj 4438 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4436 0 R >> endobj 4439 0 obj << /Length 4440 0 R /Filter /FlateDecode >> stream xVo0~*>MI}T5ڪra Y~g!@IwwgsEg"b\( 񰫢AYjkE (EbmVZinV觗y}nA}^<1{@ȻFГy}%hl (Ǒ/P9Yn?\|B3)UurfY'ON;3!M0 lZ<(pQ.7T2&M?_e=,d%-/fB!Acd6PG C;D߀MP%zYLV24qʬR CJ.T\NE'l]oʤlLb"E֨TD8 '>?z)ީ/pAO csgX"Ĕ'~l@ҟj*@> {C)Ew)J+8br%m/v|[rG Ǝ t[~$@,v3PfnnY5ZEz6XaK=T΋t=P jZ)&f WeuʟF۟Ére%.c~GSASĵfUo#ׂeX-\;GJ#yytNZXZ <%竽Iһ<^3plOh([* H-Ŕ# q`$xKMU_ÞNޢq'2d”E!wG+!^ qA DS??QyP-XY. {F&~Ւ`QbH2 NzY*0U[-c H=A`&};0ӷ&3wo̪x  endstream endobj 4440 0 obj 863 endobj 4441 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4439 0 R >> endobj 4442 0 obj << /Length 4443 0 R /Filter /FlateDecode >> stream xS=o0+nl8gccj*uRu2 @8kc(Jg=ӽǞ0@{f.(!ݒ}1Pp 1K *\pQ 3Y-iq 'odyFoۘ]ͱsڑ^E[SU "lCLQĵcpFy1 !Hv&@Px=@^VNIܯ!~2!mk|82 'CE*(֡ݔUi!?֩)LIU5a.494R [Egpa'3dʕ0DSM48Wު;?g> endstream endobj 4443 0 obj 327 endobj 4444 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4442 0 R >> endobj 4445 0 obj << /Length 4446 0 R /Filter /FlateDecode >> stream xVn0+h EZtzh@qP(2e 4\}I7&aq9CΛGl?%8[)Dh` w/ nĦ=n@kpoãEW`5:;h!] >| `X$#I{ĨtE;S $Fg&Nb a$}g뫧eD헣ZKS5bn%6&-rdeqs0˱Րsm_O% cby94!zG NC,)%`J0B1P\T(G4QPoJ2YTGbulQ6bTII62rQ| θ&c`MLuVc0v6[MuE̙,aVl>w(~(cD& %#::0C}>3ioV{L5T}y+(͡7'K!CfόinDYi6*m!4`<csrb^ HLn/7f}/qF endstream endobj 4446 0 obj 735 endobj 4447 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4445 0 R >> endobj 4448 0 obj << /Length 4449 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*3`kyf endstream endobj 4449 0 obj 363 endobj 4450 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4448 0 R >> endobj 4451 0 obj << /Length 4452 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ȜyM05ZV_Yb endstream endobj 4452 0 obj 516 endobj 4453 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4451 0 R >> endobj 4454 0 obj << /Length 4455 0 R /Filter /FlateDecode >> stream xTMo0 W&Q_Vo-bHc'5neI8Nk_GK$s'fXib ,Oɿ/߱lwy?gДp oQ0ɞqXD_ˍ!oS+Xs b&fYNX@UEպeudZYsɏ{2^ dOZ}!Z_JH?z +ʶ&Y3Ke0j t1iZ̚,կi$[Š a = r'f!4)k޲^qbLv^3cZ6ؼ{/ʪ7T79;g0!_-bpF+./h<!5S\Pv׋U 3rR> endobj 4457 0 obj << /Length 4458 0 R /Filter /FlateDecode >> stream xTn0+ |}kѦ@oFH6Q-EK=ݞPI8p.L VѺ8RC<1 0; ;5sXG_gB_WԅD)mc#ž\8Ia~YP7Pm,ΛgHFӣ%o,i6XIϰOcGK@ff@K}Wɤ,#V (RBG[Z0qEYfWCΖn2 'dZM/ՎQ3kkHz4l'ϟn/*ޮ߅ۿ2f 9a3߮rEe:QrIk\<7;Fi9h?\=q6$|D*RY_E F.ꧼ6 c!SxVȳ hk LM bwcWncQ }DbطIΚ뉹M&GݜsarU endstream endobj 4458 0 obj 533 endobj 4459 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4457 0 R >> endobj 4460 0 obj << /Length 4461 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:g{߿bXe endstream endobj 4461 0 obj 539 endobj 4462 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4460 0 R >> endobj 4463 0 obj << /Length 4464 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>*AƯ endstream endobj 4464 0 obj 540 endobj 4465 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4463 0 R >> endobj 4466 0 obj << /Length 4467 0 R /Filter /FlateDecode >> stream xTn0+ ˧H M=CC;$#wmɲrkB&1␳} P|-uvAC$\!ܲh?!'E}B_ (}F\[HT(l(zQ6k'(C![?8D)_&-yPUUQh`lRӤ尢t)XfdžVEDf8M'%/fK c$C>$5& zLsKH O~s. Ur 0 =oUډ ڐN6Egۇ \fW/ߗÄ"2ovPP̈́ eIh &L1y^a2ƼW!g0H۞yuR抚 I$ˬt^ q58uՉP%'"h/'ĜoS0f⵲gY endstream endobj 4467 0 obj 528 endobj 4468 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4466 0 R >> endobj 4469 0 obj << /Length 4470 0 R /Filter /FlateDecode >> stream xTn0+ \J$[6z3"$(Kvؒ" ]$;&!c9;Os&,KI0JB2 }A- 7 f_Jyo`$y` h W|QJ./zMzL B+fN18Oi qŗ%X9@%篯mHߒjYE}T SK>1 Lݦ|)g'wfqRbUS l |vE[î2jt'|7Y'h> endobj 4472 0 obj << /Length 4473 0 R /Filter /FlateDecode >> stream xTn0+.I[6z3"$(\Wr-(%#Ev{jB "1␳]  Mޑ}1CL*` 2 .3ca߉#_c@\o-7r"ߕ6 BeJ#1 !\5ۀ/ ׀uVHWΚGH/(x; ~뢍ëiOqF<%#!^}n[,rW13n'N9,1φ~:!H)_"XaUePQ1rWĮ*b[ٕ.jgBfZM!>Ŷt^]&B}6]暣 bFTZ]c4O~ c  32$[sV8> endobj 4475 0 obj << /Length 4476 0 R /Filter /FlateDecode >> stream xTn0+ \R[6z3,$(mX}z/ٽ5 qվ?YG0&(s ЀԂB[~wlk~_A ^]0>h뉓`|&?6U5>? ZI"B!7JyUPyRET/ '+I,q֗ϊƧe,r[-SO:WiFwYZ_h$в Fd%Ȟ&M+aT$`yׯ|I-?Y^ .g# EmԣMx%'^Q [T(pV69  0vr4<ECj0K3afu-n+1|{٤y}$}$QHhמ-)维ErIia_^7zMhBT:>Po(1+-\S8Iowv?D endstream endobj 4476 0 obj 534 endobj 4477 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4475 0 R >> endobj 4478 0 obj << /Length 4479 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 4481 0 obj << /Length 4482 0 R /Filter /FlateDecode >> stream xUMo0+J6CnJ{iM$CicIz<óǀ}sXc 9bAL \{v@ jpN۱h;_xnGD׈Z{nB~)n6ޏ&Fa2N(x cwqf%V 6"[tmَvAXmU u/΄rICηMe?P DHK6]\ٓڥAʬȚj <!k7MYN8>,̬`Qf^#ع m];Sg֒&D <3"~D17c8?N#s1"1#V+y}aU endstream endobj 4485 0 obj 511 endobj 4486 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4484 0 R >> endobj 4487 0 obj << /Length 4488 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(owVhX endstream endobj 4488 0 obj 608 endobj 4489 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4487 0 R >> endobj 4490 0 obj << /S /r /St 16 >> endobj 4491 0 obj << /Type /Action /S /GoTo /D [4330 0 R /XYZ 72.0 720.0 null] >> endobj 4492 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 253.98 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4491 0 R /H /I >> endobj 4493 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4491 0 R /H /I >> endobj 4494 0 obj << /Type /Action /S /GoTo /D [4333 0 R /XYZ 72.0 720.0 null] >> endobj 4495 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 212.6 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4494 0 R /H /I >> endobj 4496 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4494 0 R /H /I >> endobj 4497 0 obj << /Type /Action /S /GoTo /D [4336 0 R /XYZ 72.0 720.0 null] >> endobj 4498 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 222.61 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4497 0 R /H /I >> endobj 4499 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4497 0 R /H /I >> endobj 4500 0 obj << /Type /Action /S /GoTo /D [4339 0 R /XYZ 72.0 720.0 null] >> endobj 4501 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 215.92 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4500 0 R /H /I >> endobj 4502 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4500 0 R /H /I >> endobj 4503 0 obj << /Type /Action /S /GoTo /D [4342 0 R /XYZ 72.0 720.0 null] >> endobj 4504 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 225.92 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4503 0 R /H /I >> endobj 4505 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4503 0 R /H /I >> endobj 4506 0 obj << /Type /Action /S /GoTo /D [4345 0 R /XYZ 72.0 720.0 null] >> endobj 4507 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 225.38 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4506 0 R /H /I >> endobj 4508 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4506 0 R /H /I >> endobj 4509 0 obj << /Type /Action /S /GoTo /D [4348 0 R /XYZ 72.0 720.0 null] >> endobj 4510 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 219.83 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4509 0 R /H /I >> endobj 4511 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4509 0 R /H /I >> endobj 4512 0 obj << /Type /Action /S /GoTo /D [4351 0 R /XYZ 72.0 720.0 null] >> endobj 4513 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 211.49 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4512 0 R /H /I >> endobj 4514 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4512 0 R /H /I >> endobj 4515 0 obj << /Type /Action /S /GoTo /D [4354 0 R /XYZ 72.0 720.0 null] >> endobj 4516 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 242.88 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4515 0 R /H /I >> endobj 4517 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4515 0 R /H /I >> endobj 4518 0 obj << /Type /Action /S /GoTo /D [4357 0 R /XYZ 72.0 720.0 null] >> endobj 4519 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 236.19 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4518 0 R /H /I >> endobj 4520 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4518 0 R /H /I >> endobj 4521 0 obj << /Type /Action /S /GoTo /D [4360 0 R /XYZ 72.0 720.0 null] >> endobj 4522 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 240.1 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4521 0 R /H /I >> endobj 4523 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4521 0 R /H /I >> endobj 4524 0 obj << /Type /Action /S /GoTo /D [4363 0 R /XYZ 72.0 720.0 null] >> endobj 4525 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 229.53 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4524 0 R /H /I >> endobj 4526 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4524 0 R /H /I >> endobj 4527 0 obj << /Type /Action /S /GoTo /D [4366 0 R /XYZ 72.0 720.0 null] >> endobj 4528 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 242.31 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4527 0 R /H /I >> endobj 4529 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4527 0 R /H /I >> endobj 4530 0 obj << /Type /Action /S /GoTo /D [4369 0 R /XYZ 72.0 720.0 null] >> endobj 4531 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 241.75 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4530 0 R /H /I >> endobj 4532 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4530 0 R /H /I >> endobj 4533 0 obj << /Type /Action /S /GoTo /D [4372 0 R /XYZ 72.0 720.0 null] >> endobj 4534 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 232.87 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4533 0 R /H /I >> endobj 4535 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4533 0 R /H /I >> endobj 4536 0 obj << /Type /Action /S /GoTo /D [4375 0 R /XYZ 72.0 720.0 null] >> endobj 4537 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 209.26 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4536 0 R /H /I >> endobj 4538 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4536 0 R /H /I >> endobj 4539 0 obj << /Type /Action /S /GoTo /D [4378 0 R /XYZ 72.0 720.0 null] >> endobj 4540 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 221.48 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4539 0 R /H /I >> endobj 4541 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4539 0 R /H /I >> endobj 4542 0 obj << /Type /Action /S /GoTo /D [4381 0 R /XYZ 72.0 720.0 null] >> endobj 4543 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 217.61 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4542 0 R /H /I >> endobj 4544 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4542 0 R /H /I >> endobj 4545 0 obj << /Type /Action /S /GoTo /D [4384 0 R /XYZ 72.0 720.0 null] >> endobj 4546 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 212.6 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4545 0 R /H /I >> endobj 4547 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4545 0 R /H /I >> endobj 4548 0 obj << /Type /Action /S /GoTo /D [4387 0 R /XYZ 72.0 720.0 null] >> endobj 4549 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 481.5 183.292 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4548 0 R /H /I >> endobj 4550 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4548 0 R /H /I >> endobj 4551 0 obj << /Type /Action /S /GoTo /D [4390 0 R /XYZ 72.0 720.0 null] >> endobj 4552 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 213.45 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4551 0 R /H /I >> endobj 4553 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4551 0 R /H /I >> endobj 4554 0 obj << /Type /Action /S /GoTo /D [4393 0 R /XYZ 72.0 720.0 null] >> endobj 4555 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 211.77 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4554 0 R /H /I >> endobj 4556 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4554 0 R /H /I >> endobj 4557 0 obj << /Type /Action /S /GoTo /D [4396 0 R /XYZ 72.0 720.0 null] >> endobj 4558 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 220.1 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4557 0 R /H /I >> endobj 4559 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4557 0 R /H /I >> endobj 4560 0 obj << /Type /Action /S /GoTo /D [4399 0 R /XYZ 72.0 720.0 null] >> endobj 4561 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 228.44 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4560 0 R /H /I >> endobj 4562 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4560 0 R /H /I >> endobj 4563 0 obj << /Type /Action /S /GoTo /D [4402 0 R /XYZ 72.0 720.0 null] >> endobj 4564 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 421.5 190.151 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4563 0 R /H /I >> endobj 4565 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 421.5 539.998 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4563 0 R /H /I >> endobj 4566 0 obj << /Type /Action /S /GoTo /D [4405 0 R /XYZ 72.0 720.0 null] >> endobj 4567 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 244.54 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4566 0 R /H /I >> endobj 4568 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4566 0 R /H /I >> endobj 4569 0 obj << /Type /Action /S /GoTo /D [4408 0 R /XYZ 72.0 720.0 null] >> endobj 4570 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 312.86 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4569 0 R /H /I >> endobj 4571 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4569 0 R /H /I >> endobj 4572 0 obj << /Type /Action /S /GoTo /D [4411 0 R /XYZ 72.0 720.0 null] >> endobj 4573 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 302.87 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4572 0 R /H /I >> endobj 4574 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4572 0 R /H /I >> endobj 4575 0 obj << /Type /Action /S /GoTo /D [4414 0 R /XYZ 72.0 720.0 null] >> endobj 4576 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 287.32 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4575 0 R /H /I >> endobj 4577 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 373.5 539.998 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4575 0 R /H /I >> endobj 4578 0 obj << /Type /Action /S /GoTo /D [4417 0 R /XYZ 72.0 720.0 null] >> endobj 4579 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 277.33 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4578 0 R /H /I >> endobj 4580 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4578 0 R /H /I >> endobj 4581 0 obj << /Type /Action /S /GoTo /D [4420 0 R /XYZ 72.0 720.0 null] >> endobj 4582 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 244.55 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4581 0 R /H /I >> endobj 4583 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4581 0 R /H /I >> endobj 4584 0 obj << /Type /Action /S /GoTo /D [4423 0 R /XYZ 72.0 720.0 null] >> endobj 4585 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 311.75 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4584 0 R /H /I >> endobj 4586 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4584 0 R /H /I >> endobj 4587 0 obj << /Type /Action /S /GoTo /D [4426 0 R /XYZ 72.0 720.0 null] >> endobj 4588 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 301.76 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4587 0 R /H /I >> endobj 4589 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4587 0 R /H /I >> endobj 4590 0 obj << /Type /Action /S /GoTo /D [4429 0 R /XYZ 72.0 720.0 null] >> endobj 4591 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 262.88 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4590 0 R /H /I >> endobj 4592 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 313.5 539.998 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4590 0 R /H /I >> endobj 4593 0 obj << /Type /Action /S /GoTo /D [4432 0 R /XYZ 72.0 720.0 null] >> endobj 4594 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 265.66 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4593 0 R /H /I >> endobj 4595 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4593 0 R /H /I >> endobj 4596 0 obj << /Type /Action /S /GoTo /D [4435 0 R /XYZ 72.0 720.0 null] >> endobj 4597 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 286.21 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4596 0 R /H /I >> endobj 4598 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 289.5 539.998 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4596 0 R /H /I >> endobj 4599 0 obj << /Type /Action /S /GoTo /D [4438 0 R /XYZ 72.0 720.0 null] >> endobj 4600 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 276.22 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4599 0 R /H /I >> endobj 4601 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4599 0 R /H /I >> endobj 4602 0 obj << /Type /Action /S /GoTo /D [4441 0 R /XYZ 72.0 720.0 null] >> endobj 4603 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 210.66 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4602 0 R /H /I >> endobj 4604 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4602 0 R /H /I >> endobj 4605 0 obj << /Type /Action /S /GoTo /D [4444 0 R /XYZ 72.0 720.0 null] >> endobj 4606 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 253.5 252.55 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4605 0 R /H /I >> endobj 4607 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 253.5 539.997 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4605 0 R /H /I >> endobj 4608 0 obj << /Type /Action /S /GoTo /D [4447 0 R /XYZ 72.0 720.0 null] >> endobj 4609 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 227.33 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4608 0 R /H /I >> endobj 4610 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4608 0 R /H /I >> endobj 4611 0 obj << /Type /Action /S /GoTo /D [4450 0 R /XYZ 72.0 720.0 null] >> endobj 4612 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 229.5 269.005 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4611 0 R /H /I >> endobj 4613 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 229.5 539.997 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4611 0 R /H /I >> endobj 4614 0 obj << /Type /Action /S /GoTo /D [4453 0 R /XYZ 72.0 720.0 null] >> endobj 4615 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 237.33 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4614 0 R /H /I >> endobj 4616 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4614 0 R /H /I >> endobj 4617 0 obj << /Type /Action /S /GoTo /D [4456 0 R /XYZ 72.0 720.0 null] >> endobj 4618 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 210.66 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4617 0 R /H /I >> endobj 4619 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4617 0 R /H /I >> endobj 4620 0 obj << /Type /Action /S /GoTo /D [4459 0 R /XYZ 72.0 720.0 null] >> endobj 4621 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 205.66 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4620 0 R /H /I >> endobj 4622 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4620 0 R /H /I >> endobj 4623 0 obj << /Type /Action /S /GoTo /D [4462 0 R /XYZ 72.0 720.0 null] >> endobj 4624 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 203.44 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4623 0 R /H /I >> endobj 4625 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4623 0 R /H /I >> endobj 4626 0 obj << /Type /Action /S /GoTo /D [4465 0 R /XYZ 72.0 720.0 null] >> endobj 4627 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 201.78 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4626 0 R /H /I >> endobj 4628 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4626 0 R /H /I >> endobj 4629 0 obj << /Type /Action /S /GoTo /D [4468 0 R /XYZ 72.0 720.0 null] >> endobj 4630 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 211.78 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4629 0 R /H /I >> endobj 4631 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4629 0 R /H /I >> endobj 4632 0 obj << /Type /Action /S /GoTo /D [4471 0 R /XYZ 72.0 720.0 null] >> endobj 4633 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 211.77 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4632 0 R /H /I >> endobj 4634 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4632 0 R /H /I >> endobj 4635 0 obj << /Type /Action /S /GoTo /D [4474 0 R /XYZ 72.0 720.0 null] >> endobj 4636 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 211.22 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4635 0 R /H /I >> endobj 4637 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4635 0 R /H /I >> endobj 4638 0 obj << /Type /Action /S /GoTo /D [4477 0 R /XYZ 72.0 720.0 null] >> endobj 4639 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 210.11 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4638 0 R /H /I >> endobj 4640 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4638 0 R /H /I >> endobj 4641 0 obj << /Type /Action /S /GoTo /D [4480 0 R /XYZ 72.0 720.0 null] >> endobj 4642 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 226.78 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4641 0 R /H /I >> endobj 4643 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4641 0 R /H /I >> endobj 4644 0 obj << /Type /Action /S /GoTo /D [4483 0 R /XYZ 72.0 720.0 null] >> endobj 4645 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 231.78 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4644 0 R /H /I >> endobj 4646 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4644 0 R /H /I >> endobj 4647 0 obj << /Type /Action /S /GoTo /D [4486 0 R /XYZ 72.0 720.0 null] >> endobj 4648 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 226.78 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4647 0 R /H /I >> endobj 4649 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4647 0 R /H /I >> endobj 4650 0 obj << /Type /Action /S /GoTo /D [4489 0 R /XYZ 72.0 720.0 null] >> endobj 4651 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 231.78 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4650 0 R /H /I >> endobj 4652 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4650 0 R /H /I >> endobj 4653 0 obj << /Length 4654 0 R /Filter /FlateDecode >> stream x]Evs~E~\+#a;(D 6 4߿OVL׮Ȟj6\r̬?v:M՗}_vU/:uח?<7oct;|gǫ?կW_|#SO?P_ǫϿzy^wߟ޾o|w/>_?޾rDo_Mw^__\~ߞ>z둵Ӽ~;8$nE*<%r`) X ```````*~>97 q+W8%CXN"8A08A0N( ````````*U6l"E`.C"8Ep` y` ' Y@0 fן~ƋZ_Zoz%jk?,W"'_)UJqJ!^ .]"8Epr`9@ X,' `) XV"XE`&Mv"8Dp)SN8@0N( g!  LLL"XE`&Mv"Ep!CN y` ' y`YD0D0D0D0EPf2)33Ik`'w}A]|'4+C uRݥ^/P A,'YN,XC,!re9ŲbYX"eeeeeeee%JFݨo3:RuPݨRFu,'YNbX!qebX)qe"Q2222222ɲe%J,Y6ldɲe'A,YNd9rebX!yebXf,bE,eeeeeeǨqs='>?}qQ{=y}+g|Ú{Oݯ(+CGꤺKBTe'A,YNd9rmZ,F!rmZ,f!XBReeeeeeee%J*c^vFF}2Sk!uzH}2Nr$IS,F"rm%˵Hj\ۉ˵Hj LLLdYɲe%F,Yvdr A,'YNbvI-kԧXFRou˵Hj LLLO~ KMɷk'xL[R='IuzTd9r$)k7bvA}M$XDP\& $$$$J,Gݿ_ꤺKFz+d9r8r&Z,n"O\˵Hj\ LLLdYɲe#F,Yvdr A,'YNbX!yebX)Y2Xf,ddddddDu?PO u޼ߞ ubc<>ԭP]RꤺK=jd9r5ԑZ,PS,PGj\CXddddddddYɲe%F,Yvdɲ A,'YNb:RH-k#XE,PGj LLLdYɲe#F,Yvdr A,'YNb:R@}H-k#XddddddPxyou}=~T=^_ǑNPݨRBuzHO. A,YNd9r5.5.Z,׸"k\$5YYYY&Y&Y&Y&YVdY/r7vRTwAuPݨRBu,'YNbyIr5.Z,׸"k\$5YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN\"r>r5.Z,׸Hj LLhu?h~Jw?bzy=||zzH}XITw+Fe'N,Yd9rre9IJbYN,XS,KRIJ,,,,,,,,+YV9;+C~RTw&Rd9r$)qebX)qebXF(b,,,,,,,,+YVdȲe#N,;Yvd9r$IS,<2C,<2O"Y2 YYYYY&Y&Y'Q/<>u_ǠII9AQiy|ݼL9)'u2夺_꺁rS S S S SMSMSMSZMj3fTvSMu0aTNSfT̒gT ͔꺣rS S S SMSMSMSZMj5fTvSMu0aTNS.oT͒.pTΒR]8Snaaaiii5TO(秮s0Fyb>׏UK'yI(W<-'5TאrR]CIu i$/4jjjjjjjj5jT6SmLj7nTS:Mu$5TאFTאrR]CIu i(7000444jTVSmLj7nTS:Lu4IkHC9!'! 夺4R]CM5L5L5L5M5M5MZy/ɴ|۴>WaG;<|$R_.SK%ԕFj\@}底Fj\@]rJ#5YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,X!VrJ)VrJ#X[i LLLdYɲe#F,Yvdr A,'YNbnZ,׭4PbnZ,׭4R底Fj LL\S^^~^un/:~|櫗KZG)Vׯ˔7'/͔WׯΔiTNR]PN>OR]7PNNIuBVSZMj3fTvS:Lu0aTNR]׵PNOR]WPN k[(70004444jT6SmLj7nTS:Mu$u 夺ntTם.EB^M5L5L5L5L5M5MnCK>O]L$wpDi}:q}k'O8 iOJ^-h<-CD:DD9CD:D$y!urS S S S SMSMSMSZMj3fTvSMu0aTNSQN'CD:DD9CDjjjjjjj5jT6SmLj7nTS:Mu$urR]$?Iu"T!" CDjjjjjj߽9Ƿ߿qR^Ꮳzn7fa ^l2k_^xnʬ$?nʬ=#LĮLLLݕ2uWʴ]+veLߕ2cWfʌ]+3weܔY36M#c/<7e.pSf ˦mĮLĮLLLݕ2uWʴ]+weLߕ2cWfʌ]+3weװnʬ ڿnʬ= {aٔY6]ؕ]ؕ]ܕ]u=Y߽/?~Bx=ڵpxXۭO5|R>@j|}iy|}:MuZSNk/IkO9Q夺jjjjjjj5jT6SmLj7nTS:Mu$5TBTrR] ZMj5fTvSM0aTNSF.PNkC9T׈rS S S S SMSMSҟvƧO}vx3 fDy|P~RwʻvSMu0aTNR]('urR]('uHB ZMjTUwvX7'X^-TNS:Iu$TA"OR]('urR](7000444jTVSmLj7nTS:Lu4I 夺I~:HD9DR](7000444յAe<nv|bP-^'6|PNNy?,˛aTNS:IuEQNkE9QT(rS S S S SMSMSMSZM^ 9wvX7'X^-TNS:Iu('5$5T(rR](M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuEQNk%IkE9QT(rS S S SMSMSMS2O] ~z*Oz|l<-_KfZP^-7aTNS:Mu:H9#$RNH"夺$RnaaaiiiT^KvHu+_KʫkByZ)*:Lu4IH"夺$J~:H9#R]G)70004444jT6SmLj7nTS:Mu$u$rR]G)'u$rR]G%/$RnaaaaiiI|{OFXS1?i˚ +~=ו!lNԷW,;Yvd9r$IS,!re9IJbYN,X"e)ddddddddYɲe%F,Y6dɲ A,'YNd9rmҒZ,-O\˵=Kj\& $$$J,+YVldȲe'N,Yd9r$)yebX)yebXf,b,,,,,i4zz/᳗]vj}?7^s9ʓyXk _H7畗YwuMA@S)<,oj3fTvS:Lu0aTNR-TA$rj9IZ Bjjjjjjjj5j gm'_W`JwayX,+0%4iT 8H5RT$8I5NRBQH5VSZMj3fTvS:Lu0iTNR̓T )_w!H^-$7nTS:Mu$5T׼KT׼rR]. yZMg^A)Nٔ<-{6%˛uϦrS:MuwQNkE9y夺]R].M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MuwQNk%IkE9y夺]jjjjjyӇG(^(O;WAyX,wSMu0aTNScT}lcT}l꺏rS S S SMSMSMSZM^mV>)ojqX0iT'('u'('uT}ljjjjjjjj5jT6SmMj7nTS:Mu꺏rR]QN>6Iu&y!uz7{{X/9闣oy-6K}EJT7W!uzH=r I,'YN\3(rM>r͟5}Z,Ij LLLdYɲe%F,Yvdr A,'YNbFLR0A}/I-ku5Z,,,,,,,,+YVdȲe#N,;Yvd9r$IS,Ij\#rM5;IMAAAAIIwG}21']׵Tyby|P~;[yZ)<,o4iT?T?ORprRpn?/lZMj5fTvSM0aTNSz;['9INulTog$70000444jT6SmLj7nTS:Mu4Iul'INulz7 z{ϮWW/_7?j5kZ5=~ %ay|RFWTVSmLj3nTS:Lu4iTo$'ۆ1ORmTo$'۶1M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mum?zQI=emWTo$70004444jT6SmLj7nTS:Mu$ۆ3ILrRm:To Rl)m6[J-͖fKiy>.>ӻxW_7ɄƜzgy6!|yX7˧kBB9 ' 夺&$ꚐPnaaaiiiTKuh'X^-S>rS:Mu$5!TׄDTׄrR] ZMj5fTvSM0aTNS&$ꚐPNkBB9 TׄrS S S S SMSMSxccc<߾~B?o⻷<,dh׷N>>㺧Y>)FP^-Gu'^(O; ay|R~Q^-7iT'):B9):"y!u rS S S S SMSMSMSZMj3fTvSMu0aTNSPN@'):B9)jjjjjj'Ud}O*?jgֶ9g==۹Z+|J^-ZNzT6SM0aTNS:I5RTGT$8IuN9F!(ZMj5jT6SM0aTNS:I5R̓T )]y|P~ S~ TNS:IL+T?\9~i?/ &M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IL+ 'W0AN` ~ rS S S S SMSMS]Gd22^X͗?e,?K۟>,_^<:c3na ۱nvù]+weƮؕ2sWf])6;o2k^xnʬM͛ȼnʬ˛LĮLLLݕ2uWʴ]+veLߕ2cWfʌ]+3weܔYۄ7M5x/<7evpSfm ˦ĮLĮLLʬU|{<}ojΙ|PnZo`kaOĺuOkAz<-CrS:Mu$sIuDTI('s PnaaaiiiiTVSmLj7nTS:Lu4I$9 夺~NB9H^HurS S S S SMSMS] g}\4擅Wo޿_x)9]OwvJR>%_;%)ݏu䤺vJRnaaaiiiTVSLj3nTS:Lu4iTrR]OR]IuM$/&jjjjjjjj5jT6SmMj7nTS:MuPNk@9 夺&R]M5L5L5L5L5M5M(|yF?'Fړz|)ʯ=iyZSZKZMj5jT6SM0aTNS:Iu)'յ$յT^BkuOVSZMj3fTvS:Lu0iT'=夺VZSNku/y!յTTTTTTT?*1ٟsOV< yKy}OٺY>)֥W׺TVS֥sٶI.Z>(֥k]JyXnTNS֥ZJ~ZRNk]*y!յ.TTTTTTTTVSLj3nTvS:Lu4iT׺rR]RIuK)'յ.ZRnaaaaiiw?u~{'|yɺSgכQDgydo֛"f|)Z>(_o$OM5M5M5M5Mj5jT6SMj7aTNS:I5RT 8H5NRT$(Tjjjjjjjj5jT6SmLj7nTS:Mu$/>`P>)j| 0(O;a9夺`HZMǟEY;yZ)HwY>)HwjNS:I5RT 8H5NRT$(Tjjjjjjjj5jT6SmLj7nTS:Mu$5TCTrR] Iu 0(700044G_cg^X{˛/?|5xL_/qx?iyzOyX,_o)4iTA rj9HZNR-'Bj)ZMFf˫?iNS:MujAqj'F!(T?Kyjjjjjj5jT6SmLj7nTS:Mu$)M0aTNS:IZR-TI$RHR-TK1000444jTVSmLj7nTS:Lu4IqjIqj'F!(TTTTTTTTVSLj3nTvS:Lu4iT F9'夺cR]1M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu('5T|rR]1 j|!|2~ׇ~p''ջORT>~p''ջTTTTTTTVSLj3fTvS:Lu4iT'}NNw?z;9}NNw?jjjjjj'Uod}:_rq~+3(~#OMu4iTmzTmzh#'@VSZMj3fTvS:Lu0aTNR VOR V oM5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I~+FN[6rR V oM5L5L5L5L5M5Mn+C[}27߾x&瓣78oiyF7'TNR VOR V oM5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I5R VOR VT~ZMj5fT6SM0aTNS:I~+FN[~??I~+FN[6rR jjjjj P>t?a}= _}|x_W^OkRx߿}u×_^Ͼ?կWO?P_ǫϿh\vn^zG_o(~ί~+ endstream endobj 4654 0 obj 14726 endobj 4655 0 obj [ 4492 0 R 4493 0 R 4495 0 R 4496 0 R 4498 0 R 4499 0 R 4501 0 R 4502 0 R 4504 0 R 4505 0 R 4507 0 R 4508 0 R 4510 0 R 4511 0 R 4513 0 R 4514 0 R 4516 0 R 4517 0 R 4519 0 R 4520 0 R 4522 0 R 4523 0 R 4525 0 R 4526 0 R 4528 0 R 4529 0 R 4531 0 R 4532 0 R 4534 0 R 4535 0 R 4537 0 R 4538 0 R 4540 0 R 4541 0 R 4543 0 R 4544 0 R 4546 0 R 4547 0 R 4549 0 R 4550 0 R 4552 0 R 4553 0 R 4555 0 R 4556 0 R 4558 0 R 4559 0 R 4561 0 R 4562 0 R 4564 0 R 4565 0 R 4567 0 R 4568 0 R 4570 0 R 4571 0 R 4573 0 R 4574 0 R 4576 0 R 4577 0 R 4579 0 R 4580 0 R 4582 0 R 4583 0 R 4585 0 R 4586 0 R 4588 0 R 4589 0 R 4591 0 R 4592 0 R 4594 0 R 4595 0 R 4597 0 R 4598 0 R 4600 0 R 4601 0 R 4603 0 R 4604 0 R 4606 0 R 4607 0 R 4609 0 R 4610 0 R 4612 0 R 4613 0 R 4615 0 R 4616 0 R 4618 0 R 4619 0 R 4621 0 R 4622 0 R 4624 0 R 4625 0 R 4627 0 R 4628 0 R 4630 0 R 4631 0 R 4633 0 R 4634 0 R 4636 0 R 4637 0 R 4639 0 R 4640 0 R 4642 0 R 4643 0 R 4645 0 R 4646 0 R 4648 0 R 4649 0 R 4651 0 R 4652 0 R ] endobj 4656 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 4655 0 R /Contents 4653 0 R >> endobj 4657 0 obj << /S /D /St 767 >> endobj 4658 0 obj << /Length 4659 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.ޜԆ 4IW=X^שׁ}L+ endstream endobj 4659 0 obj 512 endobj 4660 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4658 0 R >> endobj 4661 0 obj << /Length 4662 0 R /Filter /FlateDecode >> stream xVKs0+L' zCȶbڒ#a?fzibl#-iw?}xPM&蹳1DobI ,&> endobj 4664 0 obj << /Length 4665 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? endstream endobj 4665 0 obj 884 endobj 4666 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4664 0 R >> endobj 4667 0 obj << /Length 4668 0 R /Filter /FlateDecode >> stream x͖]o0+| N:6ij7UKR!b)ةm诟4i9ǏG/P}&I; ,>y Jn`(A7{Gm]vm+Ψ/z|Z*}6]û7͂i>3YP=o|#B> ae ߸% 0M q ]UY⃫ pMA݂5ȿstQ?HS5N$<1~ F=-$aTXqT[s/pSޝc${7!؈qדl3q,|+Uբ[jQG WI9G^(g̙#ӑư9}Q}]:>`f/$0TIBU PFS .-\'-QxFLtctNߥ5%z;dKfzf.˒FX8ٚ'طR3[^0EBtH5m8+($ILo^}YLYmmp\0^rY<gU^rRi'tjvDe6"??|H< a>jtt+.ND7G_uKxU՟? endstream endobj 4668 0 obj 656 endobj 4669 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4667 0 R >> endobj 4670 0 obj << /Length 4671 0 R /Filter /FlateDecode >> stream xUMs0W1"V,niC;$0qC0Di1t]ٖ !&6O{ktA*z=)#!;s+mtc3<׫9o!xO!pdZ2J8BK@۳?p>Ћ4C2]A&->LWnYvdeڍ$Kɑ-*D̶.U6'3ѫmVLؤБl1 #rRJ4< }0XuK7firgX9U-b;ِȢ(ِU]Zi\#dT$]]3b0T9mb3ZY brLXd[_RӔ~{*'9$vOc};zmO5#p"͡GyUVVUʦ"w]Ǖںwgt\NzHܻSM\mכ综0bwjAGWɷa2laԼa'FўS~'vd^TH‘ŭgQ endstream endobj 4671 0 obj 593 endobj 4672 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4670 0 R >> endobj 4673 0 obj << /Length 4674 0 R /Filter /FlateDecode >> stream xUn@}Wcʲ-mh*ipۇ!,`l Y_65sfΎG,RqWs1ۄ w.XZ0ṚZ V' coSxtqd [BFan}Wvl-wlGW_͗vzd"Tg'[g0ח+InaH2=)z0T"(llY~ӓt& i gRy+tD4јs&k ]jHfO+{HeNHJ\$3:ҊlQ()roPB?x)_&|y[)Cn7JA:#Q5DZNn:GZ|WkPLX@z)Q„VE;hmwͦ\F6u*(t9jRpm P0:^;^.V?xGH?]/uUA4Ճ{M}U{4v[yy~0q0M&-6m rlzef6F˱@?1_cP^&%z箚B^ endstream endobj 4674 0 obj 619 endobj 4675 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4673 0 R >> endobj 4676 0 obj << /Length 4677 0 R /Filter /FlateDecode >> stream xUn0+5;MZň Pd-ZKjꭉdgadP@u 1:g`:SP0[mרg3c a#5~w )܆MPW2pB6dB_ .^Y~QzKYe\{M>X͛_d ~46Lp+wuRS"<: (K//gP%.*XrbQZ@e6#ѫ;,[+0XkU2ɳ/uv\DZ7]USxK.'Ajoe1>:[ϬYC.%Ú~o*72igC-\~DQw:saC{vߏÆĝ3gwVUV endstream endobj 4677 0 obj 602 endobj 4678 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Contents 4676 0 R >> endobj 4679 0 obj << /S /r /St 17 >> endobj 4680 0 obj << /Type /Action /S /GoTo /D [4660 0 R /XYZ 72.0 720.0 null] >> endobj 4681 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 709.5 215.672 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4680 0 R /H /I >> endobj 4682 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 709.5 539.998 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4680 0 R /H /I >> endobj 4683 0 obj << /Type /Action /S /GoTo /D [4663 0 R /XYZ 72.0 720.0 null] >> endobj 4684 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 218.99 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4683 0 R /H /I >> endobj 4685 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4683 0 R /H /I >> endobj 4686 0 obj << /Type /Action /S /GoTo /D [4666 0 R /XYZ 72.0 720.0 null] >> endobj 4687 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 245.37 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4686 0 R /H /I >> endobj 4688 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4686 0 R /H /I >> endobj 4689 0 obj << /Type /Action /S /GoTo /D [4669 0 R /XYZ 72.0 720.0 null] >> endobj 4690 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 673.5 242.074 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4689 0 R /H /I >> endobj 4691 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 673.5 539.998 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4689 0 R /H /I >> endobj 4692 0 obj << /Type /Action /S /GoTo /D [4672 0 R /XYZ 72.0 720.0 null] >> endobj 4693 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 254.54 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4692 0 R /H /I >> endobj 4694 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 661.5 539.998 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4692 0 R /H /I >> endobj 4695 0 obj << /Type /Action /S /GoTo /D [4675 0 R /XYZ 72.0 720.0 null] >> endobj 4696 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 257.86 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4695 0 R /H /I >> endobj 4697 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4695 0 R /H /I >> endobj 4698 0 obj << /Type /Action /S /GoTo /D [4678 0 R /XYZ 72.0 720.0 null] >> endobj 4699 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 245.66 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4698 0 R /H /I >> endobj 4700 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4698 0 R /H /I >> endobj 4701 0 obj << /Length 4702 0 R /Filter /FlateDecode >> stream xOoTW}Ls*v(3h`b%(BN$Co?q}bga+ۦNe$hjۇkumR>U6/߾T{2_'듒RrRͯæL||ݦ77wm=zE_u+/6MLg/ڶu/Z'J֦/{fuvzLٿ_?Mg|sbo[]?vyz=j,?}g$I۝_^_3MV>j(cuU Fb#W+G!"DЉ A[V`@U *l [#B "DPA#Fv"؉`'"8 N: "D0`A)@P A@P*Ai@pS "(DPA%F4"؉`'"8 N:t"D0`A-@P A@P+ Am@P"(DPA%dQk۹ 7Uzq/-CK*b=qtTPjEu"&9X BjbAR KA,Y*TdiҐ!ˎ,;Ȳ#ˁ,ґ#KG,Y be"2RDHM,s!5d)R"KE, Y4diȲ#ˎ,;r ˁ,Y:td2e 9X J,s!5AԍX Bjd)R KE,Y~BzmQAawsx`G@ՊH-R׆jbR KA,Y*TdiҐ͖tMO{A:H= NjVT#@,Y2PWbe&9Y d)R"KE, Y4dّeGYd9@,Y:td2eHM,s<u%9XxF,s< 5d)R"KE,?Vu=g}f<^]z[˖^׷sl z:R ;ԵPM,s 5=Ԃ,Y dR"KC,m=;Ղ h6T;ZQ,Y d2R@]e&X@jd)R KE,Y4diҐeGYvd9@Y:tdґe @A,s 5=ԕX@jb{=R KA,Y*4YGc _7?_?sM<:O6IZQ=@ojA5\89r9r9r9Z KA,Y*TdiҐ!ˎ,;Ȳ#ˁ,ґ#KG,Y bjbrz]r r r KA,Y*TdiҐ!KCYvdّ@Ydґ#KG,Y\H5\I9r9&r9(P#KA,Y*TdbU!oJ/iZ>srWK9,SW y̧4M[r|_W=y?l endstream endobj 4702 0 obj 2222 endobj 4703 0 obj [ 4681 0 R 4682 0 R 4684 0 R 4685 0 R 4687 0 R 4688 0 R 4690 0 R 4691 0 R 4693 0 R 4694 0 R 4696 0 R 4697 0 R 4699 0 R 4700 0 R ] endobj 4704 0 obj << /Resources 11 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 12 0 R /Annots 4703 0 R /Contents 4701 0 R >> endobj 4705 0 obj << /Type /Action /S /GoTo /D [10 0 R /XYZ 72.0 720.0 null] >> endobj 4706 0 obj << /Title (SystemTap Tapset Reference Manual) /Parent 4707 0 R /Next 4708 0 R /A 4705 0 R >> endobj 4709 0 obj << /Type /Action /S /GoTo /D [327 0 R /XYZ 72.0 720.0 null] >> endobj 4708 0 obj << /Title (Table of Contents) /Parent 4707 0 R /Prev 4706 0 R /Next 4710 0 R /A 4709 0 R >> endobj 4710 0 obj << /Title /Parent 4707 0 R /Prev 4708 0 R /Next 4711 0 R /A 171 0 R >> endobj 4711 0 obj << /Title /Parent 4707 0 R /Prev 4710 0 R /Next 4712 0 R /First 4713 0 R /Last 4714 0 R /Count -141 /A 174 0 R >> endobj 4713 0 obj << /Title (function::addr) /Parent 4711 0 R /Next 4715 0 R /A 177 0 R >> endobj 4715 0 obj << /Title (function::asmlinkage) /Parent 4711 0 R /Prev 4713 0 R /Next 4716 0 R /A 180 0 R >> endobj 4716 0 obj << /Title (function::backtrace) /Parent 4711 0 R /Prev 4715 0 R /Next 4717 0 R /A 183 0 R >> endobj 4717 0 obj << /Title (function::caller) /Parent 4711 0 R /Prev 4716 0 R /Next 4718 0 R /A 186 0 R >> endobj 4718 0 obj << /Title (function::caller_addr) /Parent 4711 0 R /Prev 4717 0 R /Next 4719 0 R /A 189 0 R >> endobj 4719 0 obj << /Title (function::callers) /Parent 4711 0 R /Prev 4718 0 R /Next 4720 0 R /A 192 0 R >> endobj 4720 0 obj << /Title (function::cmdline_arg) /Parent 4711 0 R /Prev 4719 0 R /Next 4721 0 R /A 195 0 R >> endobj 4721 0 obj << /Title (function::cmdline_args) /Parent 4711 0 R /Prev 4720 0 R /Next 4722 0 R /A 198 0 R >> endobj 4722 0 obj << /Title (function::cmdline_str) /Parent 4711 0 R /Prev 4721 0 R /Next 4723 0 R /A 201 0 R >> endobj 4723 0 obj << /Title (function::cpu) /Parent 4711 0 R /Prev 4722 0 R /Next 4724 0 R /A 204 0 R >> endobj 4724 0 obj << /Title (function::cpuid) /Parent 4711 0 R /Prev 4723 0 R /Next 4725 0 R /A 207 0 R >> endobj 4725 0 obj << /Title (function::current_exe_file) /Parent 4711 0 R /Prev 4724 0 R /Next 4726 0 R /A 210 0 R >> endobj 4726 0 obj << /Title (function::egid) /Parent 4711 0 R /Prev 4725 0 R /Next 4727 0 R /A 213 0 R >> endobj 4727 0 obj << /Title (function::env_var) /Parent 4711 0 R /Prev 4726 0 R /Next 4728 0 R /A 216 0 R >> endobj 4728 0 obj << /Title (function::euid) /Parent 4711 0 R /Prev 4727 0 R /Next 4729 0 R /A 219 0 R >> endobj 4729 0 obj << /Title (function::execname) /Parent 4711 0 R /Prev 4728 0 R /Next 4730 0 R /A 222 0 R >> endobj 4730 0 obj << /Title (function::fastcall) /Parent 4711 0 R /Prev 4729 0 R /Next 4731 0 R /A 225 0 R >> endobj 4731 0 obj << /Title (function::gid) /Parent 4711 0 R /Prev 4730 0 R /Next 4732 0 R /A 228 0 R >> endobj 4732 0 obj << /Title (function::int_arg) /Parent 4711 0 R /Prev 4731 0 R /Next 4733 0 R /A 231 0 R >> endobj 4733 0 obj << /Title (function::is_myproc) /Parent 4711 0 R /Prev 4732 0 R /Next 4734 0 R /A 234 0 R >> endobj 4734 0 obj << /Title (function::is_return) /Parent 4711 0 R /Prev 4733 0 R /Next 4735 0 R /A 237 0 R >> endobj 4735 0 obj << /Title (function::long_arg) /Parent 4711 0 R /Prev 4734 0 R /Next 4736 0 R /A 240 0 R >> endobj 4736 0 obj << /Title (function::longlong_arg) /Parent 4711 0 R /Prev 4735 0 R /Next 4737 0 R /A 243 0 R >> endobj 4737 0 obj << /Title (function::modname) /Parent 4711 0 R /Prev 4736 0 R /Next 4738 0 R /A 246 0 R >> endobj 4738 0 obj << /Title (function::module_name) /Parent 4711 0 R /Prev 4737 0 R /Next 4739 0 R /A 249 0 R >> endobj 4739 0 obj << /Title (function::module_size) /Parent 4711 0 R /Prev 4738 0 R /Next 4740 0 R /A 252 0 R >> endobj 4740 0 obj << /Title (function::ns_egid) /Parent 4711 0 R /Prev 4739 0 R /Next 4741 0 R /A 255 0 R >> endobj 4741 0 obj << /Title (function::ns_euid) /Parent 4711 0 R /Prev 4740 0 R /Next 4742 0 R /A 258 0 R >> endobj 4742 0 obj << /Title (function::ns_gid) /Parent 4711 0 R /Prev 4741 0 R /Next 4743 0 R /A 261 0 R >> endobj 4743 0 obj << /Title (function::ns_pgrp) /Parent 4711 0 R /Prev 4742 0 R /Next 4744 0 R /A 264 0 R >> endobj 4744 0 obj << /Title (function::ns_pid) /Parent 4711 0 R /Prev 4743 0 R /Next 4745 0 R /A 267 0 R >> endobj 4745 0 obj << /Title (function::ns_ppid) /Parent 4711 0 R /Prev 4744 0 R /Next 4746 0 R /A 270 0 R >> endobj 4746 0 obj << /Title (function::ns_sid) /Parent 4711 0 R /Prev 4745 0 R /Next 4747 0 R /A 273 0 R >> endobj 4747 0 obj << /Title (function::ns_tid) /Parent 4711 0 R /Prev 4746 0 R /Next 4748 0 R /A 276 0 R >> endobj 4748 0 obj << /Title (function::ns_uid) /Parent 4711 0 R /Prev 4747 0 R /Next 4749 0 R /A 279 0 R >> endobj 4749 0 obj << /Title (function::pexecname) /Parent 4711 0 R /Prev 4748 0 R /Next 4750 0 R /A 282 0 R >> endobj 4750 0 obj << /Title (function::pgrp) /Parent 4711 0 R /Prev 4749 0 R /Next 4751 0 R /A 285 0 R >> endobj 4751 0 obj << /Title (function::pid) /Parent 4711 0 R /Prev 4750 0 R /Next 4752 0 R /A 288 0 R >> endobj 4752 0 obj << /Title (function::pid2execname) /Parent 4711 0 R /Prev 4751 0 R /Next 4753 0 R /A 291 0 R >> endobj 4753 0 obj << /Title (function::pid2task) /Parent 4711 0 R /Prev 4752 0 R /Next 4754 0 R /A 294 0 R >> endobj 4754 0 obj << /Title (function::pn) /Parent 4711 0 R /Prev 4753 0 R /Next 4755 0 R /A 297 0 R >> endobj 4755 0 obj << /Title (function::pnlabel) /Parent 4711 0 R /Prev 4754 0 R /Next 4756 0 R /A 300 0 R >> endobj 4756 0 obj << /Title (function::pointer_arg) /Parent 4711 0 R /Prev 4755 0 R /Next 4757 0 R /A 303 0 R >> endobj 4757 0 obj << /Title (function::pp) /Parent 4711 0 R /Prev 4756 0 R /Next 4758 0 R /A 306 0 R >> endobj 4758 0 obj << /Title (function::ppfunc) /Parent 4711 0 R /Prev 4757 0 R /Next 4759 0 R /A 309 0 R >> endobj 4759 0 obj << /Title (function::ppid) /Parent 4711 0 R /Prev 4758 0 R /Next 4760 0 R /A 312 0 R >> endobj 4760 0 obj << /Title (function::print_backtrace) /Parent 4711 0 R /Prev 4759 0 R /Next 4761 0 R /A 315 0 R >> endobj 4761 0 obj << /Title (function::print_backtrace_fileline) /Parent 4711 0 R /Prev 4760 0 R /Next 4762 0 R /A 318 0 R >> endobj 4762 0 obj << /Title (function::print_regs) /Parent 4711 0 R /Prev 4761 0 R /Next 4763 0 R /A 321 0 R >> endobj 4763 0 obj << /Title (function::print_stack) /Parent 4711 0 R /Prev 4762 0 R /Next 4764 0 R /A 492 0 R >> endobj 4764 0 obj << /Title (function::print_syms) /Parent 4711 0 R /Prev 4763 0 R /Next 4765 0 R /A 495 0 R >> endobj 4765 0 obj << /Title (function::print_ubacktrace) /Parent 4711 0 R /Prev 4764 0 R /Next 4766 0 R /A 498 0 R >> endobj 4766 0 obj << /Title (function::print_ubacktrace_brief) /Parent 4711 0 R /Prev 4765 0 R /Next 4767 0 R /A 501 0 R >> endobj 4767 0 obj << /Title (function::print_ubacktrace_fileline) /Parent 4711 0 R /Prev 4766 0 R /Next 4768 0 R /A 504 0 R >> endobj 4768 0 obj << /Title (function::print_ustack) /Parent 4711 0 R /Prev 4767 0 R /Next 4769 0 R /A 507 0 R >> endobj 4769 0 obj << /Title (function::print_usyms) /Parent 4711 0 R /Prev 4768 0 R /Next 4770 0 R /A 510 0 R >> endobj 4770 0 obj << /Title (function::probe_type) /Parent 4711 0 R /Prev 4769 0 R /Next 4771 0 R /A 513 0 R >> endobj 4771 0 obj << /Title (function::probefunc) /Parent 4711 0 R /Prev 4770 0 R /Next 4772 0 R /A 516 0 R >> endobj 4772 0 obj << /Title (function::probemod) /Parent 4711 0 R /Prev 4771 0 R /Next 4773 0 R /A 519 0 R >> endobj 4773 0 obj << /Title (function::pstrace) /Parent 4711 0 R /Prev 4772 0 R /Next 4774 0 R /A 522 0 R >> endobj 4774 0 obj << /Title (function::register) /Parent 4711 0 R /Prev 4773 0 R /Next 4775 0 R /A 525 0 R >> endobj 4775 0 obj << /Title (function::registers_valid) /Parent 4711 0 R /Prev 4774 0 R /Next 4776 0 R /A 528 0 R >> endobj 4776 0 obj << /Title (function::regparm) /Parent 4711 0 R /Prev 4775 0 R /Next 4777 0 R /A 531 0 R >> endobj 4777 0 obj << /Title (function::remote_id) /Parent 4711 0 R /Prev 4776 0 R /Next 4778 0 R /A 534 0 R >> endobj 4778 0 obj << /Title (function::remote_uri) /Parent 4711 0 R /Prev 4777 0 R /Next 4779 0 R /A 537 0 R >> endobj 4779 0 obj << /Title (function::s32_arg) /Parent 4711 0 R /Prev 4778 0 R /Next 4780 0 R /A 540 0 R >> endobj 4780 0 obj << /Title (function::s64_arg) /Parent 4711 0 R /Prev 4779 0 R /Next 4781 0 R /A 543 0 R >> endobj 4781 0 obj << /Title (function::set_int_arg) /Parent 4711 0 R /Prev 4780 0 R /Next 4782 0 R /A 546 0 R >> endobj 4782 0 obj << /Title (function::set_long_arg) /Parent 4711 0 R /Prev 4781 0 R /Next 4783 0 R /A 549 0 R >> endobj 4783 0 obj << /Title (function::set_longlong_arg) /Parent 4711 0 R /Prev 4782 0 R /Next 4784 0 R /A 552 0 R >> endobj 4784 0 obj << /Title (function::set_pointer_arg) /Parent 4711 0 R /Prev 4783 0 R /Next 4785 0 R /A 555 0 R >> endobj 4785 0 obj << /Title (function::set_s32_arg) /Parent 4711 0 R /Prev 4784 0 R /Next 4786 0 R /A 558 0 R >> endobj 4786 0 obj << /Title (function::set_s64_arg) /Parent 4711 0 R /Prev 4785 0 R /Next 4787 0 R /A 561 0 R >> endobj 4787 0 obj << /Title (function::set_u32_arg) /Parent 4711 0 R /Prev 4786 0 R /Next 4788 0 R /A 564 0 R >> endobj 4788 0 obj << /Title (function::set_u64_arg) /Parent 4711 0 R /Prev 4787 0 R /Next 4789 0 R /A 567 0 R >> endobj 4789 0 obj << /Title (function::set_uint_arg) /Parent 4711 0 R /Prev 4788 0 R /Next 4790 0 R /A 570 0 R >> endobj 4790 0 obj << /Title (function::set_ulong_arg) /Parent 4711 0 R /Prev 4789 0 R /Next 4791 0 R /A 573 0 R >> endobj 4791 0 obj << /Title (function::set_ulonglong_arg) /Parent 4711 0 R /Prev 4790 0 R /Next 4792 0 R /A 576 0 R >> endobj 4792 0 obj << /Title (function::sid) /Parent 4711 0 R /Prev 4791 0 R /Next 4793 0 R /A 579 0 R >> endobj 4793 0 obj << /Title (function::sprint_backtrace) /Parent 4711 0 R /Prev 4792 0 R /Next 4794 0 R /A 582 0 R >> endobj 4794 0 obj << /Title (function::sprint_stack) /Parent 4711 0 R /Prev 4793 0 R /Next 4795 0 R /A 585 0 R >> endobj 4795 0 obj << /Title (function::sprint_syms) /Parent 4711 0 R /Prev 4794 0 R /Next 4796 0 R /A 588 0 R >> endobj 4796 0 obj << /Title (function::sprint_ubacktrace) /Parent 4711 0 R /Prev 4795 0 R /Next 4797 0 R /A 591 0 R >> endobj 4797 0 obj << /Title (function::sprint_ustack) /Parent 4711 0 R /Prev 4796 0 R /Next 4798 0 R /A 594 0 R >> endobj 4798 0 obj << /Title (function::sprint_usyms) /Parent 4711 0 R /Prev 4797 0 R /Next 4799 0 R /A 597 0 R >> endobj 4799 0 obj << /Title (function::stack) /Parent 4711 0 R /Prev 4798 0 R /Next 4800 0 R /A 600 0 R >> endobj 4800 0 obj << /Title (function::stack_size) /Parent 4711 0 R /Prev 4799 0 R /Next 4801 0 R /A 603 0 R >> endobj 4801 0 obj << /Title (function::stack_unused) /Parent 4711 0 R /Prev 4800 0 R /Next 4802 0 R /A 606 0 R >> endobj 4802 0 obj << /Title (function::stack_used) /Parent 4711 0 R /Prev 4801 0 R /Next 4803 0 R /A 609 0 R >> endobj 4803 0 obj << /Title (function::stp_pid) /Parent 4711 0 R /Prev 4802 0 R /Next 4804 0 R /A 612 0 R >> endobj 4804 0 obj << /Title (function::symdata) /Parent 4711 0 R /Prev 4803 0 R /Next 4805 0 R /A 615 0 R >> endobj 4805 0 obj << /Title (function::symfile) /Parent 4711 0 R /Prev 4804 0 R /Next 4806 0 R /A 618 0 R >> endobj 4806 0 obj << /Title (function::symfileline) /Parent 4711 0 R /Prev 4805 0 R /Next 4807 0 R /A 621 0 R >> endobj 4807 0 obj << /Title (function::symline) /Parent 4711 0 R /Prev 4806 0 R /Next 4808 0 R /A 624 0 R >> endobj 4808 0 obj << /Title (function::symname) /Parent 4711 0 R /Prev 4807 0 R /Next 4809 0 R /A 627 0 R >> endobj 4809 0 obj << /Title (function::target) /Parent 4711 0 R /Prev 4808 0 R /Next 4810 0 R /A 630 0 R >> endobj 4810 0 obj << /Title (function::task_ancestry) /Parent 4711 0 R /Prev 4809 0 R /Next 4811 0 R /A 633 0 R >> endobj 4811 0 obj << /Title (function::task_backtrace) /Parent 4711 0 R /Prev 4810 0 R /Next 4812 0 R /A 636 0 R >> endobj 4812 0 obj << /Title (function::task_cpu) /Parent 4711 0 R /Prev 4811 0 R /Next 4813 0 R /A 639 0 R >> endobj 4813 0 obj << /Title (function::task_current) /Parent 4711 0 R /Prev 4812 0 R /Next 4814 0 R /A 642 0 R >> endobj 4814 0 obj << /Title (function::task_cwd_path) /Parent 4711 0 R /Prev 4813 0 R /Next 4815 0 R /A 645 0 R >> endobj 4815 0 obj << /Title (function::task_egid) /Parent 4711 0 R /Prev 4814 0 R /Next 4816 0 R /A 648 0 R >> endobj 4816 0 obj << /Title (function::task_euid) /Parent 4711 0 R /Prev 4815 0 R /Next 4817 0 R /A 651 0 R >> endobj 4817 0 obj << /Title (function::task_exe_file) /Parent 4711 0 R /Prev 4816 0 R /Next 4818 0 R /A 822 0 R >> endobj 4818 0 obj << /Title (function::task_execname) /Parent 4711 0 R /Prev 4817 0 R /Next 4819 0 R /A 825 0 R >> endobj 4819 0 obj << /Title (function::task_fd_lookup) /Parent 4711 0 R /Prev 4818 0 R /Next 4820 0 R /A 828 0 R >> endobj 4820 0 obj << /Title (function::task_gid) /Parent 4711 0 R /Prev 4819 0 R /Next 4821 0 R /A 831 0 R >> endobj 4821 0 obj << /Title (function::task_max_file_handles) /Parent 4711 0 R /Prev 4820 0 R /Next 4822 0 R /A 834 0 R >> endobj 4822 0 obj << /Title (function::task_nice) /Parent 4711 0 R /Prev 4821 0 R /Next 4823 0 R /A 837 0 R >> endobj 4823 0 obj << /Title (function::task_ns_egid) /Parent 4711 0 R /Prev 4822 0 R /Next 4824 0 R /A 840 0 R >> endobj 4824 0 obj << /Title (function::task_ns_euid) /Parent 4711 0 R /Prev 4823 0 R /Next 4825 0 R /A 843 0 R >> endobj 4825 0 obj << /Title (function::task_ns_gid) /Parent 4711 0 R /Prev 4824 0 R /Next 4826 0 R /A 846 0 R >> endobj 4826 0 obj << /Title (function::task_ns_pid) /Parent 4711 0 R /Prev 4825 0 R /Next 4827 0 R /A 849 0 R >> endobj 4827 0 obj << /Title (function::task_ns_tid) /Parent 4711 0 R /Prev 4826 0 R /Next 4828 0 R /A 852 0 R >> endobj 4828 0 obj << /Title (function::task_ns_uid) /Parent 4711 0 R /Prev 4827 0 R /Next 4829 0 R /A 855 0 R >> endobj 4829 0 obj << /Title (function::task_open_file_handles) /Parent 4711 0 R /Prev 4828 0 R /Next 4830 0 R /A 858 0 R >> endobj 4830 0 obj << /Title (function::task_parent) /Parent 4711 0 R /Prev 4829 0 R /Next 4831 0 R /A 861 0 R >> endobj 4831 0 obj << /Title (function::task_pid) /Parent 4711 0 R /Prev 4830 0 R /Next 4832 0 R /A 864 0 R >> endobj 4832 0 obj << /Title (function::task_prio) /Parent 4711 0 R /Prev 4831 0 R /Next 4833 0 R /A 867 0 R >> endobj 4833 0 obj << /Title (function::task_state) /Parent 4711 0 R /Prev 4832 0 R /Next 4834 0 R /A 870 0 R >> endobj 4834 0 obj << /Title (function::task_tid) /Parent 4711 0 R /Prev 4833 0 R /Next 4835 0 R /A 873 0 R >> endobj 4835 0 obj << /Title (function::task_uid) /Parent 4711 0 R /Prev 4834 0 R /Next 4836 0 R /A 876 0 R >> endobj 4836 0 obj << /Title (function::tid) /Parent 4711 0 R /Prev 4835 0 R /Next 4837 0 R /A 879 0 R >> endobj 4837 0 obj << /Title (function::u32_arg) /Parent 4711 0 R /Prev 4836 0 R /Next 4838 0 R /A 882 0 R >> endobj 4838 0 obj << /Title (function::u64_arg) /Parent 4711 0 R /Prev 4837 0 R /Next 4839 0 R /A 885 0 R >> endobj 4839 0 obj << /Title (function::u_register) /Parent 4711 0 R /Prev 4838 0 R /Next 4840 0 R /A 888 0 R >> endobj 4840 0 obj << /Title (function::uaddr) /Parent 4711 0 R /Prev 4839 0 R /Next 4841 0 R /A 891 0 R >> endobj 4841 0 obj << /Title (function::ubacktrace) /Parent 4711 0 R /Prev 4840 0 R /Next 4842 0 R /A 894 0 R >> endobj 4842 0 obj << /Title (function::ucallers) /Parent 4711 0 R /Prev 4841 0 R /Next 4843 0 R /A 897 0 R >> endobj 4843 0 obj << /Title (function::uid) /Parent 4711 0 R /Prev 4842 0 R /Next 4844 0 R /A 900 0 R >> endobj 4844 0 obj << /Title (function::uint_arg) /Parent 4711 0 R /Prev 4843 0 R /Next 4845 0 R /A 903 0 R >> endobj 4845 0 obj << /Title (function::ulong_arg) /Parent 4711 0 R /Prev 4844 0 R /Next 4846 0 R /A 906 0 R >> endobj 4846 0 obj << /Title (function::ulonglong_arg) /Parent 4711 0 R /Prev 4845 0 R /Next 4847 0 R /A 909 0 R >> endobj 4847 0 obj << /Title (function::umodname) /Parent 4711 0 R /Prev 4846 0 R /Next 4848 0 R /A 912 0 R >> endobj 4848 0 obj << /Title (function::user_mode) /Parent 4711 0 R /Prev 4847 0 R /Next 4849 0 R /A 915 0 R >> endobj 4849 0 obj << /Title (function::ustack) /Parent 4711 0 R /Prev 4848 0 R /Next 4850 0 R /A 918 0 R >> endobj 4850 0 obj << /Title (function::usymdata) /Parent 4711 0 R /Prev 4849 0 R /Next 4851 0 R /A 921 0 R >> endobj 4851 0 obj << /Title (function::usymfile) /Parent 4711 0 R /Prev 4850 0 R /Next 4852 0 R /A 924 0 R >> endobj 4852 0 obj << /Title (function::usymfileline) /Parent 4711 0 R /Prev 4851 0 R /Next 4853 0 R /A 927 0 R >> endobj 4853 0 obj << /Title (function::usymline) /Parent 4711 0 R /Prev 4852 0 R /Next 4714 0 R /A 930 0 R >> endobj 4714 0 obj << /Title (function::usymname) /Parent 4711 0 R /Prev 4853 0 R /A 933 0 R >> endobj 4712 0 obj << /Title /Parent 4707 0 R /Prev 4711 0 R /Next 4854 0 R /First 4855 0 R /Last 4856 0 R /Count -23 /A 936 0 R >> endobj 4855 0 obj << /Title (function::HZ) /Parent 4712 0 R /Next 4857 0 R /A 939 0 R >> endobj 4857 0 obj << /Title (function::cpu_clock_ms) /Parent 4712 0 R /Prev 4855 0 R /Next 4858 0 R /A 942 0 R >> endobj 4858 0 obj << /Title (function::cpu_clock_ns) /Parent 4712 0 R /Prev 4857 0 R /Next 4859 0 R /A 945 0 R >> endobj 4859 0 obj << /Title (function::cpu_clock_s) /Parent 4712 0 R /Prev 4858 0 R /Next 4860 0 R /A 948 0 R >> endobj 4860 0 obj << /Title (function::cpu_clock_us) /Parent 4712 0 R /Prev 4859 0 R /Next 4861 0 R /A 951 0 R >> endobj 4861 0 obj << /Title (function::delete_stopwatch) /Parent 4712 0 R /Prev 4860 0 R /Next 4862 0 R /A 954 0 R >> endobj 4862 0 obj << /Title (function::get_cycles) /Parent 4712 0 R /Prev 4861 0 R /Next 4863 0 R /A 957 0 R >> endobj 4863 0 obj << /Title (function::gettimeofday_ms) /Parent 4712 0 R /Prev 4862 0 R /Next 4864 0 R /A 960 0 R >> endobj 4864 0 obj << /Title (function::gettimeofday_ns) /Parent 4712 0 R /Prev 4863 0 R /Next 4865 0 R /A 963 0 R >> endobj 4865 0 obj << /Title (function::gettimeofday_s) /Parent 4712 0 R /Prev 4864 0 R /Next 4866 0 R /A 966 0 R >> endobj 4866 0 obj << /Title (function::gettimeofday_us) /Parent 4712 0 R /Prev 4865 0 R /Next 4867 0 R /A 969 0 R >> endobj 4867 0 obj << /Title (function::jiffies) /Parent 4712 0 R /Prev 4866 0 R /Next 4868 0 R /A 972 0 R >> endobj 4868 0 obj << /Title (function::ktime_get_ns) /Parent 4712 0 R /Prev 4867 0 R /Next 4869 0 R /A 975 0 R >> endobj 4869 0 obj << /Title (function::local_clock_ms) /Parent 4712 0 R /Prev 4868 0 R /Next 4870 0 R /A 978 0 R >> endobj 4870 0 obj << /Title (function::local_clock_ns) /Parent 4712 0 R /Prev 4869 0 R /Next 4871 0 R /A 981 0 R >> endobj 4871 0 obj << /Title (function::local_clock_s) /Parent 4712 0 R /Prev 4870 0 R /Next 4872 0 R /A 1152 0 R >> endobj 4872 0 obj << /Title (function::local_clock_us) /Parent 4712 0 R /Prev 4871 0 R /Next 4873 0 R /A 1155 0 R >> endobj 4873 0 obj << /Title (function::read_stopwatch_ms) /Parent 4712 0 R /Prev 4872 0 R /Next 4874 0 R /A 1158 0 R >> endobj 4874 0 obj << /Title (function::read_stopwatch_ns) /Parent 4712 0 R /Prev 4873 0 R /Next 4875 0 R /A 1161 0 R >> endobj 4875 0 obj << /Title (function::read_stopwatch_s) /Parent 4712 0 R /Prev 4874 0 R /Next 4876 0 R /A 1164 0 R >> endobj 4876 0 obj << /Title (function::read_stopwatch_us) /Parent 4712 0 R /Prev 4875 0 R /Next 4877 0 R /A 1167 0 R >> endobj 4877 0 obj << /Title (function::start_stopwatch) /Parent 4712 0 R /Prev 4876 0 R /Next 4856 0 R /A 1170 0 R >> endobj 4856 0 obj << /Title (function::stop_stopwatch) /Parent 4712 0 R /Prev 4877 0 R /A 1173 0 R >> endobj 4854 0 obj << /Title /Parent 4707 0 R /Prev 4712 0 R /Next 4878 0 R /First 4879 0 R /Last 4880 0 R /Count -4 /A 1176 0 R >> endobj 4879 0 obj << /Title (function::ctime) /Parent 4854 0 R /Next 4881 0 R /A 1179 0 R >> endobj 4881 0 obj << /Title (function::tz_ctime) /Parent 4854 0 R /Prev 4879 0 R /Next 4882 0 R /A 1182 0 R >> endobj 4882 0 obj << /Title (function::tz_gmtoff) /Parent 4854 0 R /Prev 4881 0 R /Next 4880 0 R /A 1185 0 R >> endobj 4880 0 obj << /Title (function::tz_name) /Parent 4854 0 R /Prev 4882 0 R /A 1188 0 R >> endobj 4878 0 obj << /Title /Parent 4707 0 R /Prev 4854 0 R /Next 4883 0 R /First 4884 0 R /Last 4884 0 R /Count -1 /A 1191 0 R >> endobj 4884 0 obj << /Title (function::system) /Parent 4878 0 R /A 1194 0 R >> endobj 4883 0 obj << /Title /Parent 4707 0 R /Prev 4878 0 R /Next 4885 0 R /First 4886 0 R /Last 4887 0 R /Count -25 /A 1197 0 R >> endobj 4886 0 obj << /Title (function::addr_to_node) /Parent 4883 0 R /Next 4888 0 R /A 1200 0 R >> endobj 4888 0 obj << /Title (function::bytes_to_string) /Parent 4883 0 R /Prev 4886 0 R /Next 4889 0 R /A 1203 0 R >> endobj 4889 0 obj << /Title (function::mem_page_size) /Parent 4883 0 R /Prev 4888 0 R /Next 4890 0 R /A 1206 0 R >> endobj 4890 0 obj << /Title (function::pages_to_string) /Parent 4883 0 R /Prev 4889 0 R /Next 4891 0 R /A 1209 0 R >> endobj 4891 0 obj << /Title (function::proc_mem_data) /Parent 4883 0 R /Prev 4890 0 R /Next 4892 0 R /A 1212 0 R >> endobj 4892 0 obj << /Title (function::proc_mem_rss) /Parent 4883 0 R /Prev 4891 0 R /Next 4893 0 R /A 1215 0 R >> endobj 4893 0 obj << /Title (function::proc_mem_shr) /Parent 4883 0 R /Prev 4892 0 R /Next 4894 0 R /A 1218 0 R >> endobj 4894 0 obj << /Title (function::proc_mem_size) /Parent 4883 0 R /Prev 4893 0 R /Next 4895 0 R /A 1221 0 R >> endobj 4895 0 obj << /Title (function::proc_mem_string) /Parent 4883 0 R /Prev 4894 0 R /Next 4896 0 R /A 1224 0 R >> endobj 4896 0 obj << /Title (function::proc_mem_txt) /Parent 4883 0 R /Prev 4895 0 R /Next 4897 0 R /A 1227 0 R >> endobj 4897 0 obj << /Title (function::vm_fault_contains) /Parent 4883 0 R /Prev 4896 0 R /Next 4898 0 R /A 1230 0 R >> endobj 4898 0 obj << /Title (probe::vm.brk) /Parent 4883 0 R /Prev 4897 0 R /Next 4899 0 R /A 1233 0 R >> endobj 4899 0 obj << /Title (probe::vm.kfree) /Parent 4883 0 R /Prev 4898 0 R /Next 4900 0 R /A 1236 0 R >> endobj 4900 0 obj << /Title (probe::vm.kmalloc) /Parent 4883 0 R /Prev 4899 0 R /Next 4901 0 R /A 1239 0 R >> endobj 4901 0 obj << /Title (probe::vm.kmalloc_node) /Parent 4883 0 R /Prev 4900 0 R /Next 4902 0 R /A 1242 0 R >> endobj 4902 0 obj << /Title (probe::vm.kmem_cache_alloc) /Parent 4883 0 R /Prev 4901 0 R /Next 4903 0 R /A 1245 0 R >> endobj 4903 0 obj << /Title (probe::vm.kmem_cache_alloc_node) /Parent 4883 0 R /Prev 4902 0 R /Next 4904 0 R /A 1248 0 R >> endobj 4904 0 obj << /Title (probe::vm.kmem_cache_free) /Parent 4883 0 R /Prev 4903 0 R /Next 4905 0 R /A 1251 0 R >> endobj 4905 0 obj << /Title (probe::vm.mmap) /Parent 4883 0 R /Prev 4904 0 R /Next 4906 0 R /A 1254 0 R >> endobj 4906 0 obj << /Title (probe::vm.munmap) /Parent 4883 0 R /Prev 4905 0 R /Next 4907 0 R /A 1257 0 R >> endobj 4907 0 obj << /Title (probe::vm.oom_kill) /Parent 4883 0 R /Prev 4906 0 R /Next 4908 0 R /A 1260 0 R >> endobj 4908 0 obj << /Title (probe::vm.pagefault) /Parent 4883 0 R /Prev 4907 0 R /Next 4909 0 R /A 1263 0 R >> endobj 4909 0 obj << /Title (probe::vm.pagefault.return) /Parent 4883 0 R /Prev 4908 0 R /Next 4910 0 R /A 1266 0 R >> endobj 4910 0 obj << /Title (probe::vm.write_shared) /Parent 4883 0 R /Prev 4909 0 R /Next 4887 0 R /A 1269 0 R >> endobj 4887 0 obj << /Title (probe::vm.write_shared_copy) /Parent 4883 0 R /Prev 4910 0 R /A 1272 0 R >> endobj 4885 0 obj << /Title /Parent 4707 0 R /Prev 4883 0 R /Next 4911 0 R /First 4912 0 R /Last 4913 0 R /Count -11 /A 1275 0 R >> endobj 4912 0 obj << /Title (function::cputime_to_msecs) /Parent 4885 0 R /Next 4914 0 R /A 1278 0 R >> endobj 4914 0 obj << /Title (function::cputime_to_string) /Parent 4885 0 R /Prev 4912 0 R /Next 4915 0 R /A 1281 0 R >> endobj 4915 0 obj << /Title (function::cputime_to_usecs) /Parent 4885 0 R /Prev 4914 0 R /Next 4916 0 R /A 1284 0 R >> endobj 4916 0 obj << /Title (function::msecs_to_string) /Parent 4885 0 R /Prev 4915 0 R /Next 4917 0 R /A 1287 0 R >> endobj 4917 0 obj << /Title (function::nsecs_to_string) /Parent 4885 0 R /Prev 4916 0 R /Next 4918 0 R /A 1290 0 R >> endobj 4918 0 obj << /Title (function::task_start_time) /Parent 4885 0 R /Prev 4917 0 R /Next 4919 0 R /A 1293 0 R >> endobj 4919 0 obj << /Title (function::task_stime) /Parent 4885 0 R /Prev 4918 0 R /Next 4920 0 R /A 1296 0 R >> endobj 4920 0 obj << /Title (function::task_time_string) /Parent 4885 0 R /Prev 4919 0 R /Next 4921 0 R /A 1299 0 R >> endobj 4921 0 obj << /Title (function::task_time_string_tid) /Parent 4885 0 R /Prev 4920 0 R /Next 4922 0 R /A 1302 0 R >> endobj 4922 0 obj << /Title (function::task_utime) /Parent 4885 0 R /Prev 4921 0 R /Next 4913 0 R /A 1305 0 R >> endobj 4913 0 obj << /Title (function::usecs_to_string) /Parent 4885 0 R /Prev 4922 0 R /A 1308 0 R >> endobj 4911 0 obj << /Title /Parent 4707 0 R /Prev 4885 0 R /Next 4923 0 R /First 4924 0 R /Last 4925 0 R /Count -16 /A 1311 0 R >> endobj 4924 0 obj << /Title (probe::scheduler.balance) /Parent 4911 0 R /Next 4926 0 R /A 1482 0 R >> endobj 4926 0 obj << /Title (probe::scheduler.cpu_off) /Parent 4911 0 R /Prev 4924 0 R /Next 4927 0 R /A 1485 0 R >> endobj 4927 0 obj << /Title (probe::scheduler.cpu_on) /Parent 4911 0 R /Prev 4926 0 R /Next 4928 0 R /A 1488 0 R >> endobj 4928 0 obj << /Title (probe::scheduler.ctxswitch) /Parent 4911 0 R /Prev 4927 0 R /Next 4929 0 R /A 1491 0 R >> endobj 4929 0 obj << /Title (probe::scheduler.kthread_stop) /Parent 4911 0 R /Prev 4928 0 R /Next 4930 0 R /A 1494 0 R >> endobj 4930 0 obj << /Title (probe::scheduler.kthread_stop.return) /Parent 4911 0 R /Prev 4929 0 R /Next 4931 0 R /A 1497 0 R >> endobj 4931 0 obj << /Title (probe::scheduler.migrate) /Parent 4911 0 R /Prev 4930 0 R /Next 4932 0 R /A 1500 0 R >> endobj 4932 0 obj << /Title (probe::scheduler.process_exit) /Parent 4911 0 R /Prev 4931 0 R /Next 4933 0 R /A 1503 0 R >> endobj 4933 0 obj << /Title (probe::scheduler.process_fork) /Parent 4911 0 R /Prev 4932 0 R /Next 4934 0 R /A 1506 0 R >> endobj 4934 0 obj << /Title (probe::scheduler.process_free) /Parent 4911 0 R /Prev 4933 0 R /Next 4935 0 R /A 1509 0 R >> endobj 4935 0 obj << /Title (probe::scheduler.process_wait) /Parent 4911 0 R /Prev 4934 0 R /Next 4936 0 R /A 1512 0 R >> endobj 4936 0 obj << /Title (probe::scheduler.signal_send) /Parent 4911 0 R /Prev 4935 0 R /Next 4937 0 R /A 1515 0 R >> endobj 4937 0 obj << /Title (probe::scheduler.tick) /Parent 4911 0 R /Prev 4936 0 R /Next 4938 0 R /A 1518 0 R >> endobj 4938 0 obj << /Title (probe::scheduler.wait_task) /Parent 4911 0 R /Prev 4937 0 R /Next 4939 0 R /A 1521 0 R >> endobj 4939 0 obj << /Title (probe::scheduler.wakeup) /Parent 4911 0 R /Prev 4938 0 R /Next 4925 0 R /A 1524 0 R >> endobj 4925 0 obj << /Title (probe::scheduler.wakeup_new) /Parent 4911 0 R /Prev 4939 0 R /A 1527 0 R >> endobj 4923 0 obj << /Title /Parent 4707 0 R /Prev 4911 0 R /Next 4940 0 R /First 4941 0 R /Last 4942 0 R /Count -18 /A 1530 0 R >> endobj 4941 0 obj << /Title (probe::ioblock.end) /Parent 4923 0 R /Next 4943 0 R /A 1533 0 R >> endobj 4943 0 obj << /Title (probe::ioblock.request) /Parent 4923 0 R /Prev 4941 0 R /Next 4944 0 R /A 1536 0 R >> endobj 4944 0 obj << /Title (probe::ioblock_trace.bounce) /Parent 4923 0 R /Prev 4943 0 R /Next 4945 0 R /A 1539 0 R >> endobj 4945 0 obj << /Title (probe::ioblock_trace.end) /Parent 4923 0 R /Prev 4944 0 R /Next 4946 0 R /A 1542 0 R >> endobj 4946 0 obj << /Title (probe::ioblock_trace.request) /Parent 4923 0 R /Prev 4945 0 R /Next 4947 0 R /A 1545 0 R >> endobj 4947 0 obj << /Title (probe::ioscheduler.elv_add_request) /Parent 4923 0 R /Prev 4946 0 R /Next 4948 0 R /A 1548 0 R >> endobj 4948 0 obj << /Title (probe::ioscheduler.elv_add_request.kp) /Parent 4923 0 R /Prev 4947 0 R /Next 4949 0 R /A 1551 0 R >> endobj 4949 0 obj << /Title (probe::ioscheduler.elv_add_request.tp) /Parent 4923 0 R /Prev 4948 0 R /Next 4950 0 R /A 1554 0 R >> endobj 4950 0 obj << /Title (probe::ioscheduler.elv_completed_request) /Parent 4923 0 R /Prev 4949 0 R /Next 4951 0 R /A 1557 0 R >> endobj 4951 0 obj << /Title (probe::ioscheduler.elv_next_request) /Parent 4923 0 R /Prev 4950 0 R /Next 4952 0 R /A 1560 0 R >> endobj 4952 0 obj << /Title (probe::ioscheduler.elv_next_request.return) /Parent 4923 0 R /Prev 4951 0 R /Next 4953 0 R /A 1563 0 R >> endobj 4953 0 obj << /Title (probe::ioscheduler_trace.elv_abort_request) /Parent 4923 0 R /Prev 4952 0 R /Next 4954 0 R /A 1566 0 R >> endobj 4954 0 obj << /Title (probe::ioscheduler_trace.elv_completed_request) /Parent 4923 0 R /Prev 4953 0 R /Next 4955 0 R /A 1569 0 R >> endobj 4955 0 obj << /Title (probe::ioscheduler_trace.elv_issue_request) /Parent 4923 0 R /Prev 4954 0 R /Next 4956 0 R /A 1572 0 R >> endobj 4956 0 obj << /Title (probe::ioscheduler_trace.elv_requeue_request) /Parent 4923 0 R /Prev 4955 0 R /Next 4957 0 R /A 1575 0 R >> endobj 4957 0 obj << /Title (probe::ioscheduler_trace.plug) /Parent 4923 0 R /Prev 4956 0 R /Next 4958 0 R /A 1578 0 R >> endobj 4958 0 obj << /Title (probe::ioscheduler_trace.unplug_io) /Parent 4923 0 R /Prev 4957 0 R /Next 4942 0 R /A 1581 0 R >> endobj 4942 0 obj << /Title (probe::ioscheduler_trace.unplug_timer) /Parent 4923 0 R /Prev 4958 0 R /A 1584 0 R >> endobj 4940 0 obj << /Title /Parent 4707 0 R /Prev 4923 0 R /Next 4959 0 R /First 4960 0 R /Last 4961 0 R /Count -6 /A 1587 0 R >> endobj 4960 0 obj << /Title (probe::scsi.iocompleted) /Parent 4940 0 R /Next 4962 0 R /A 1590 0 R >> endobj 4962 0 obj << /Title (probe::scsi.iodispatching) /Parent 4940 0 R /Prev 4960 0 R /Next 4963 0 R /A 1593 0 R >> endobj 4963 0 obj << /Title (probe::scsi.iodone) /Parent 4940 0 R /Prev 4962 0 R /Next 4964 0 R /A 1596 0 R >> endobj 4964 0 obj << /Title (probe::scsi.ioentry) /Parent 4940 0 R /Prev 4963 0 R /Next 4965 0 R /A 1599 0 R >> endobj 4965 0 obj << /Title (probe::scsi.ioexecute) /Parent 4940 0 R /Prev 4964 0 R /Next 4961 0 R /A 1602 0 R >> endobj 4961 0 obj << /Title (probe::scsi.set_state) /Parent 4940 0 R /Prev 4965 0 R /A 1605 0 R >> endobj 4959 0 obj << /Title /Parent 4707 0 R /Prev 4940 0 R /Next 4966 0 R /First 4967 0 R /Last 4968 0 R /Count -11 /A 1608 0 R >> endobj 4967 0 obj << /Title (probe::tty.init) /Parent 4959 0 R /Next 4969 0 R /A 1611 0 R >> endobj 4969 0 obj << /Title (probe::tty.ioctl) /Parent 4959 0 R /Prev 4967 0 R /Next 4970 0 R /A 1614 0 R >> endobj 4970 0 obj << /Title (probe::tty.open) /Parent 4959 0 R /Prev 4969 0 R /Next 4971 0 R /A 1617 0 R >> endobj 4971 0 obj << /Title (probe::tty.poll) /Parent 4959 0 R /Prev 4970 0 R /Next 4972 0 R /A 1620 0 R >> endobj 4972 0 obj << /Title (probe::tty.read) /Parent 4959 0 R /Prev 4971 0 R /Next 4973 0 R /A 1623 0 R >> endobj 4973 0 obj << /Title (probe::tty.receive) /Parent 4959 0 R /Prev 4972 0 R /Next 4974 0 R /A 1626 0 R >> endobj 4974 0 obj << /Title (probe::tty.register) /Parent 4959 0 R /Prev 4973 0 R /Next 4975 0 R /A 1629 0 R >> endobj 4975 0 obj << /Title (probe::tty.release) /Parent 4959 0 R /Prev 4974 0 R /Next 4976 0 R /A 1632 0 R >> endobj 4976 0 obj << /Title (probe::tty.resize) /Parent 4959 0 R /Prev 4975 0 R /Next 4977 0 R /A 1635 0 R >> endobj 4977 0 obj << /Title (probe::tty.unregister) /Parent 4959 0 R /Prev 4976 0 R /Next 4968 0 R /A 1638 0 R >> endobj 4968 0 obj << /Title (probe::tty.write) /Parent 4959 0 R /Prev 4977 0 R /A 1641 0 R >> endobj 4966 0 obj << /Title /Parent 4707 0 R /Prev 4959 0 R /Next 4978 0 R /First 4979 0 R /Last 4980 0 R /Count -8 /A 1851 0 R >> endobj 4979 0 obj << /Title (probe::irq_handler.entry) /Parent 4966 0 R /Next 4981 0 R /A 1854 0 R >> endobj 4981 0 obj << /Title (probe::irq_handler.exit) /Parent 4966 0 R /Prev 4979 0 R /Next 4982 0 R /A 1857 0 R >> endobj 4982 0 obj << /Title (probe::softirq.entry) /Parent 4966 0 R /Prev 4981 0 R /Next 4983 0 R /A 1860 0 R >> endobj 4983 0 obj << /Title (probe::softirq.exit) /Parent 4966 0 R /Prev 4982 0 R /Next 4984 0 R /A 1863 0 R >> endobj 4984 0 obj << /Title (probe::workqueue.create) /Parent 4966 0 R /Prev 4983 0 R /Next 4985 0 R /A 1866 0 R >> endobj 4985 0 obj << /Title (probe::workqueue.destroy) /Parent 4966 0 R /Prev 4984 0 R /Next 4986 0 R /A 1869 0 R >> endobj 4986 0 obj << /Title (probe::workqueue.execute) /Parent 4966 0 R /Prev 4985 0 R /Next 4980 0 R /A 1872 0 R >> endobj 4980 0 obj << /Title (probe::workqueue.insert) /Parent 4966 0 R /Prev 4986 0 R /A 1875 0 R >> endobj 4978 0 obj << /Title /Parent 4707 0 R /Prev 4966 0 R /Next 4987 0 R /First 4988 0 R /Last 4989 0 R /Count -68 /A 1878 0 R >> endobj 4988 0 obj << /Title (function::format_ipaddr) /Parent 4978 0 R /Next 4990 0 R /A 1881 0 R >> endobj 4990 0 obj << /Title (function::htonl) /Parent 4978 0 R /Prev 4988 0 R /Next 4991 0 R /A 1884 0 R >> endobj 4991 0 obj << /Title (function::htonll) /Parent 4978 0 R /Prev 4990 0 R /Next 4992 0 R /A 1887 0 R >> endobj 4992 0 obj << /Title (function::htons) /Parent 4978 0 R /Prev 4991 0 R /Next 4993 0 R /A 1890 0 R >> endobj 4993 0 obj << /Title (function::ip_ntop) /Parent 4978 0 R /Prev 4992 0 R /Next 4994 0 R /A 1893 0 R >> endobj 4994 0 obj << /Title (function::ntohl) /Parent 4978 0 R /Prev 4993 0 R /Next 4995 0 R /A 1896 0 R >> endobj 4995 0 obj << /Title (function::ntohll) /Parent 4978 0 R /Prev 4994 0 R /Next 4996 0 R /A 1899 0 R >> endobj 4996 0 obj << /Title (function::ntohs) /Parent 4978 0 R /Prev 4995 0 R /Next 4997 0 R /A 1902 0 R >> endobj 4997 0 obj << /Title (probe::netdev.change_mac) /Parent 4978 0 R /Prev 4996 0 R /Next 4998 0 R /A 1905 0 R >> endobj 4998 0 obj << /Title (probe::netdev.change_mtu) /Parent 4978 0 R /Prev 4997 0 R /Next 4999 0 R /A 1908 0 R >> endobj 4999 0 obj << /Title (probe::netdev.change_rx_flag) /Parent 4978 0 R /Prev 4998 0 R /Next 5000 0 R /A 1911 0 R >> endobj 5000 0 obj << /Title (probe::netdev.close) /Parent 4978 0 R /Prev 4999 0 R /Next 5001 0 R /A 1914 0 R >> endobj 5001 0 obj << /Title (probe::netdev.get_stats) /Parent 4978 0 R /Prev 5000 0 R /Next 5002 0 R /A 1917 0 R >> endobj 5002 0 obj << /Title (probe::netdev.hard_transmit) /Parent 4978 0 R /Prev 5001 0 R /Next 5003 0 R /A 1920 0 R >> endobj 5003 0 obj << /Title (probe::netdev.ioctl) /Parent 4978 0 R /Prev 5002 0 R /Next 5004 0 R /A 1923 0 R >> endobj 5004 0 obj << /Title (probe::netdev.open) /Parent 4978 0 R /Prev 5003 0 R /Next 5005 0 R /A 1926 0 R >> endobj 5005 0 obj << /Title (probe::netdev.receive) /Parent 4978 0 R /Prev 5004 0 R /Next 5006 0 R /A 1929 0 R >> endobj 5006 0 obj << /Title (probe::netdev.register) /Parent 4978 0 R /Prev 5005 0 R /Next 5007 0 R /A 1932 0 R >> endobj 5007 0 obj << /Title (probe::netdev.rx) /Parent 4978 0 R /Prev 5006 0 R /Next 5008 0 R /A 1935 0 R >> endobj 5008 0 obj << /Title (probe::netdev.set_promiscuity) /Parent 4978 0 R /Prev 5007 0 R /Next 5009 0 R /A 1938 0 R >> endobj 5009 0 obj << /Title (probe::netdev.transmit) /Parent 4978 0 R /Prev 5008 0 R /Next 5010 0 R /A 1941 0 R >> endobj 5010 0 obj << /Title (probe::netdev.unregister) /Parent 4978 0 R /Prev 5009 0 R /Next 5011 0 R /A 1944 0 R >> endobj 5011 0 obj << /Title (probe::netfilter.arp.forward) /Parent 4978 0 R /Prev 5010 0 R /Next 5012 0 R /A 1947 0 R >> endobj 5012 0 obj << /Title (probe::netfilter.arp.in) /Parent 4978 0 R /Prev 5011 0 R /Next 5013 0 R /A 1950 0 R >> endobj 5013 0 obj << /Title (probe::netfilter.arp.out) /Parent 4978 0 R /Prev 5012 0 R /Next 5014 0 R /A 1953 0 R >> endobj 5014 0 obj << /Title (probe::netfilter.bridge.forward) /Parent 4978 0 R /Prev 5013 0 R /Next 5015 0 R /A 1956 0 R >> endobj 5015 0 obj << /Title (probe::netfilter.bridge.local_in) /Parent 4978 0 R /Prev 5014 0 R /Next 5016 0 R /A 1959 0 R >> endobj 5016 0 obj << /Title (probe::netfilter.bridge.local_out) /Parent 4978 0 R /Prev 5015 0 R /Next 5017 0 R /A 1962 0 R >> endobj 5017 0 obj << /Title (probe::netfilter.bridge.post_routing) /Parent 4978 0 R /Prev 5016 0 R /Next 5018 0 R /A 1965 0 R >> endobj 5018 0 obj << /Title (probe::netfilter.bridge.pre_routing) /Parent 4978 0 R /Prev 5017 0 R /Next 5019 0 R /A 1968 0 R >> endobj 5019 0 obj << /Title (probe::netfilter.ip.forward) /Parent 4978 0 R /Prev 5018 0 R /Next 5020 0 R /A 1971 0 R >> endobj 5020 0 obj << /Title (probe::netfilter.ip.local_in) /Parent 4978 0 R /Prev 5019 0 R /Next 5021 0 R /A 1974 0 R >> endobj 5021 0 obj << /Title (probe::netfilter.ip.local_out) /Parent 4978 0 R /Prev 5020 0 R /Next 5022 0 R /A 1977 0 R >> endobj 5022 0 obj << /Title (probe::netfilter.ip.post_routing) /Parent 4978 0 R /Prev 5021 0 R /Next 5023 0 R /A 1980 0 R >> endobj 5023 0 obj << /Title (probe::netfilter.ip.pre_routing) /Parent 4978 0 R /Prev 5022 0 R /Next 5024 0 R /A 1983 0 R >> endobj 5024 0 obj << /Title (probe::sunrpc.clnt.bind_new_program) /Parent 4978 0 R /Prev 5023 0 R /Next 5025 0 R /A 1986 0 R >> endobj 5025 0 obj << /Title (probe::sunrpc.clnt.call_async) /Parent 4978 0 R /Prev 5024 0 R /Next 5026 0 R /A 1989 0 R >> endobj 5026 0 obj << /Title (probe::sunrpc.clnt.call_sync) /Parent 4978 0 R /Prev 5025 0 R /Next 5027 0 R /A 1992 0 R >> endobj 5027 0 obj << /Title (probe::sunrpc.clnt.clone_client) /Parent 4978 0 R /Prev 5026 0 R /Next 5028 0 R /A 1995 0 R >> endobj 5028 0 obj << /Title (probe::sunrpc.clnt.create_client) /Parent 4978 0 R /Prev 5027 0 R /Next 5029 0 R /A 1998 0 R >> endobj 5029 0 obj << /Title (probe::sunrpc.clnt.restart_call) /Parent 4978 0 R /Prev 5028 0 R /Next 5030 0 R /A 2001 0 R >> endobj 5030 0 obj << /Title (probe::sunrpc.clnt.shutdown_client) /Parent 4978 0 R /Prev 5029 0 R /Next 5031 0 R /A 2004 0 R >> endobj 5031 0 obj << /Title (probe::sunrpc.sched.delay) /Parent 4978 0 R /Prev 5030 0 R /Next 5032 0 R /A 2007 0 R >> endobj 5032 0 obj << /Title (probe::sunrpc.sched.execute) /Parent 4978 0 R /Prev 5031 0 R /Next 5033 0 R /A 2010 0 R >> endobj 5033 0 obj << /Title (probe::sunrpc.sched.new_task) /Parent 4978 0 R /Prev 5032 0 R /Next 5034 0 R /A 2181 0 R >> endobj 5034 0 obj << /Title (probe::sunrpc.sched.release_task) /Parent 4978 0 R /Prev 5033 0 R /Next 5035 0 R /A 2184 0 R >> endobj 5035 0 obj << /Title (probe::sunrpc.svc.create) /Parent 4978 0 R /Prev 5034 0 R /Next 5036 0 R /A 2187 0 R >> endobj 5036 0 obj << /Title (probe::sunrpc.svc.destroy) /Parent 4978 0 R /Prev 5035 0 R /Next 5037 0 R /A 2190 0 R >> endobj 5037 0 obj << /Title (probe::sunrpc.svc.drop) /Parent 4978 0 R /Prev 5036 0 R /Next 5038 0 R /A 2193 0 R >> endobj 5038 0 obj << /Title (probe::sunrpc.svc.process) /Parent 4978 0 R /Prev 5037 0 R /Next 5039 0 R /A 2196 0 R >> endobj 5039 0 obj << /Title (probe::sunrpc.svc.recv) /Parent 4978 0 R /Prev 5038 0 R /Next 5040 0 R /A 2199 0 R >> endobj 5040 0 obj << /Title (probe::sunrpc.svc.register) /Parent 4978 0 R /Prev 5039 0 R /Next 5041 0 R /A 2202 0 R >> endobj 5041 0 obj << /Title (probe::sunrpc.svc.send) /Parent 4978 0 R /Prev 5040 0 R /Next 5042 0 R /A 2205 0 R >> endobj 5042 0 obj << /Title (probe::tcp.disconnect) /Parent 4978 0 R /Prev 5041 0 R /Next 5043 0 R /A 2208 0 R >> endobj 5043 0 obj << /Title (probe::tcp.disconnect.return) /Parent 4978 0 R /Prev 5042 0 R /Next 5044 0 R /A 2211 0 R >> endobj 5044 0 obj << /Title (probe::tcp.receive) /Parent 4978 0 R /Prev 5043 0 R /Next 5045 0 R /A 2214 0 R >> endobj 5045 0 obj << /Title (probe::tcp.recvmsg) /Parent 4978 0 R /Prev 5044 0 R /Next 5046 0 R /A 2217 0 R >> endobj 5046 0 obj << /Title (probe::tcp.recvmsg.return) /Parent 4978 0 R /Prev 5045 0 R /Next 5047 0 R /A 2220 0 R >> endobj 5047 0 obj << /Title (probe::tcp.sendmsg) /Parent 4978 0 R /Prev 5046 0 R /Next 5048 0 R /A 2223 0 R >> endobj 5048 0 obj << /Title (probe::tcp.sendmsg.return) /Parent 4978 0 R /Prev 5047 0 R /Next 5049 0 R /A 2226 0 R >> endobj 5049 0 obj << /Title (probe::tcp.setsockopt) /Parent 4978 0 R /Prev 5048 0 R /Next 5050 0 R /A 2229 0 R >> endobj 5050 0 obj << /Title (probe::tcp.setsockopt.return) /Parent 4978 0 R /Prev 5049 0 R /Next 5051 0 R /A 2232 0 R >> endobj 5051 0 obj << /Title (probe::udp.disconnect) /Parent 4978 0 R /Prev 5050 0 R /Next 5052 0 R /A 2235 0 R >> endobj 5052 0 obj << /Title (probe::udp.disconnect.return) /Parent 4978 0 R /Prev 5051 0 R /Next 5053 0 R /A 2238 0 R >> endobj 5053 0 obj << /Title (probe::udp.recvmsg) /Parent 4978 0 R /Prev 5052 0 R /Next 5054 0 R /A 2241 0 R >> endobj 5054 0 obj << /Title (probe::udp.recvmsg.return) /Parent 4978 0 R /Prev 5053 0 R /Next 5055 0 R /A 2244 0 R >> endobj 5055 0 obj << /Title (probe::udp.sendmsg) /Parent 4978 0 R /Prev 5054 0 R /Next 4989 0 R /A 2247 0 R >> endobj 4989 0 obj << /Title (probe::udp.sendmsg.return) /Parent 4978 0 R /Prev 5055 0 R /A 2250 0 R >> endobj 4987 0 obj << /Title /Parent 4707 0 R /Prev 4978 0 R /Next 5056 0 R /First 5057 0 R /Last 5058 0 R /Count -32 /A 2253 0 R >> endobj 5057 0 obj << /Title (function::inet_get_dest_port) /Parent 4987 0 R /Next 5059 0 R /A 2256 0 R >> endobj 5059 0 obj << /Title (function::inet_get_ip_dest) /Parent 4987 0 R /Prev 5057 0 R /Next 5060 0 R /A 2259 0 R >> endobj 5060 0 obj << /Title (function::inet_get_ip_source) /Parent 4987 0 R /Prev 5059 0 R /Next 5061 0 R /A 2262 0 R >> endobj 5061 0 obj << /Title (function::inet_get_local_port) /Parent 4987 0 R /Prev 5060 0 R /Next 5062 0 R /A 2265 0 R >> endobj 5062 0 obj << /Title (function::sock_fam_num2str) /Parent 4987 0 R /Prev 5061 0 R /Next 5063 0 R /A 2268 0 R >> endobj 5063 0 obj << /Title (function::sock_fam_str2num) /Parent 4987 0 R /Prev 5062 0 R /Next 5064 0 R /A 2271 0 R >> endobj 5064 0 obj << /Title (function::sock_prot_num2str) /Parent 4987 0 R /Prev 5063 0 R /Next 5065 0 R /A 2274 0 R >> endobj 5065 0 obj << /Title (function::sock_prot_str2num) /Parent 4987 0 R /Prev 5064 0 R /Next 5066 0 R /A 2277 0 R >> endobj 5066 0 obj << /Title (function::sock_state_num2str) /Parent 4987 0 R /Prev 5065 0 R /Next 5067 0 R /A 2280 0 R >> endobj 5067 0 obj << /Title (function::sock_state_str2num) /Parent 4987 0 R /Prev 5066 0 R /Next 5068 0 R /A 2283 0 R >> endobj 5068 0 obj << /Title (probe::socket.aio_read) /Parent 4987 0 R /Prev 5067 0 R /Next 5069 0 R /A 2286 0 R >> endobj 5069 0 obj << /Title (probe::socket.aio_read.return) /Parent 4987 0 R /Prev 5068 0 R /Next 5070 0 R /A 2289 0 R >> endobj 5070 0 obj << /Title (probe::socket.aio_write) /Parent 4987 0 R /Prev 5069 0 R /Next 5071 0 R /A 2292 0 R >> endobj 5071 0 obj << /Title (probe::socket.aio_write.return) /Parent 4987 0 R /Prev 5070 0 R /Next 5072 0 R /A 2295 0 R >> endobj 5072 0 obj << /Title (probe::socket.close) /Parent 4987 0 R /Prev 5071 0 R /Next 5073 0 R /A 2298 0 R >> endobj 5073 0 obj << /Title (probe::socket.close.return) /Parent 4987 0 R /Prev 5072 0 R /Next 5074 0 R /A 2301 0 R >> endobj 5074 0 obj << /Title (probe::socket.create) /Parent 4987 0 R /Prev 5073 0 R /Next 5075 0 R /A 2304 0 R >> endobj 5075 0 obj << /Title (probe::socket.create.return) /Parent 4987 0 R /Prev 5074 0 R /Next 5076 0 R /A 2307 0 R >> endobj 5076 0 obj << /Title (probe::socket.read_iter) /Parent 4987 0 R /Prev 5075 0 R /Next 5077 0 R /A 2310 0 R >> endobj 5077 0 obj << /Title (probe::socket.read_iter.return) /Parent 4987 0 R /Prev 5076 0 R /Next 5078 0 R /A 2313 0 R >> endobj 5078 0 obj << /Title (probe::socket.readv) /Parent 4987 0 R /Prev 5077 0 R /Next 5079 0 R /A 2316 0 R >> endobj 5079 0 obj << /Title (probe::socket.readv.return) /Parent 4987 0 R /Prev 5078 0 R /Next 5080 0 R /A 2319 0 R >> endobj 5080 0 obj << /Title (probe::socket.receive) /Parent 4987 0 R /Prev 5079 0 R /Next 5081 0 R /A 2322 0 R >> endobj 5081 0 obj << /Title (probe::socket.recvmsg) /Parent 4987 0 R /Prev 5080 0 R /Next 5082 0 R /A 2325 0 R >> endobj 5082 0 obj << /Title (probe::socket.recvmsg.return) /Parent 4987 0 R /Prev 5081 0 R /Next 5083 0 R /A 2328 0 R >> endobj 5083 0 obj << /Title (probe::socket.send) /Parent 4987 0 R /Prev 5082 0 R /Next 5084 0 R /A 2331 0 R >> endobj 5084 0 obj << /Title (probe::socket.sendmsg) /Parent 4987 0 R /Prev 5083 0 R /Next 5085 0 R /A 2334 0 R >> endobj 5085 0 obj << /Title (probe::socket.sendmsg.return) /Parent 4987 0 R /Prev 5084 0 R /Next 5086 0 R /A 2337 0 R >> endobj 5086 0 obj << /Title (probe::socket.write_iter) /Parent 4987 0 R /Prev 5085 0 R /Next 5087 0 R /A 2340 0 R >> endobj 5087 0 obj << /Title (probe::socket.write_iter.return) /Parent 4987 0 R /Prev 5086 0 R /Next 5088 0 R /A 2511 0 R >> endobj 5088 0 obj << /Title (probe::socket.writev) /Parent 4987 0 R /Prev 5087 0 R /Next 5058 0 R /A 2514 0 R >> endobj 5058 0 obj << /Title (probe::socket.writev.return) /Parent 4987 0 R /Prev 5088 0 R /A 2517 0 R >> endobj 5056 0 obj << /Title /Parent 4707 0 R /Prev 4987 0 R /Next 5089 0 R /First 5090 0 R /Last 5091 0 R /Count -37 /A 2520 0 R >> endobj 5090 0 obj << /Title (function::ipmib_filter_key) /Parent 5056 0 R /Next 5092 0 R /A 2523 0 R >> endobj 5092 0 obj << /Title (function::ipmib_get_proto) /Parent 5056 0 R /Prev 5090 0 R /Next 5093 0 R /A 2526 0 R >> endobj 5093 0 obj << /Title (function::ipmib_local_addr) /Parent 5056 0 R /Prev 5092 0 R /Next 5094 0 R /A 2529 0 R >> endobj 5094 0 obj << /Title (function::ipmib_remote_addr) /Parent 5056 0 R /Prev 5093 0 R /Next 5095 0 R /A 2532 0 R >> endobj 5095 0 obj << /Title (function::ipmib_tcp_local_port) /Parent 5056 0 R /Prev 5094 0 R /Next 5096 0 R /A 2535 0 R >> endobj 5096 0 obj << /Title (function::ipmib_tcp_remote_port) /Parent 5056 0 R /Prev 5095 0 R /Next 5097 0 R /A 2538 0 R >> endobj 5097 0 obj << /Title (function::linuxmib_filter_key) /Parent 5056 0 R /Prev 5096 0 R /Next 5098 0 R /A 2541 0 R >> endobj 5098 0 obj << /Title (function::tcpmib_filter_key) /Parent 5056 0 R /Prev 5097 0 R /Next 5099 0 R /A 2544 0 R >> endobj 5099 0 obj << /Title (function::tcpmib_get_state) /Parent 5056 0 R /Prev 5098 0 R /Next 5100 0 R /A 2547 0 R >> endobj 5100 0 obj << /Title (function::tcpmib_local_addr) /Parent 5056 0 R /Prev 5099 0 R /Next 5101 0 R /A 2550 0 R >> endobj 5101 0 obj << /Title (function::tcpmib_local_port) /Parent 5056 0 R /Prev 5100 0 R /Next 5102 0 R /A 2553 0 R >> endobj 5102 0 obj << /Title (function::tcpmib_remote_addr) /Parent 5056 0 R /Prev 5101 0 R /Next 5103 0 R /A 2556 0 R >> endobj 5103 0 obj << /Title (function::tcpmib_remote_port) /Parent 5056 0 R /Prev 5102 0 R /Next 5104 0 R /A 2559 0 R >> endobj 5104 0 obj << /Title (probe::ipmib.ForwDatagrams) /Parent 5056 0 R /Prev 5103 0 R /Next 5105 0 R /A 2562 0 R >> endobj 5105 0 obj << /Title (probe::ipmib.FragFails) /Parent 5056 0 R /Prev 5104 0 R /Next 5106 0 R /A 2565 0 R >> endobj 5106 0 obj << /Title (probe::ipmib.FragOKs) /Parent 5056 0 R /Prev 5105 0 R /Next 5107 0 R /A 2568 0 R >> endobj 5107 0 obj << /Title (probe::ipmib.InAddrErrors) /Parent 5056 0 R /Prev 5106 0 R /Next 5108 0 R /A 2571 0 R >> endobj 5108 0 obj << /Title (probe::ipmib.InDiscards) /Parent 5056 0 R /Prev 5107 0 R /Next 5109 0 R /A 2574 0 R >> endobj 5109 0 obj << /Title (probe::ipmib.InNoRoutes) /Parent 5056 0 R /Prev 5108 0 R /Next 5110 0 R /A 2577 0 R >> endobj 5110 0 obj << /Title (probe::ipmib.InReceives) /Parent 5056 0 R /Prev 5109 0 R /Next 5111 0 R /A 2580 0 R >> endobj 5111 0 obj << /Title (probe::ipmib.InUnknownProtos) /Parent 5056 0 R /Prev 5110 0 R /Next 5112 0 R /A 2583 0 R >> endobj 5112 0 obj << /Title (probe::ipmib.OutRequests) /Parent 5056 0 R /Prev 5111 0 R /Next 5113 0 R /A 2586 0 R >> endobj 5113 0 obj << /Title (probe::ipmib.ReasmReqds) /Parent 5056 0 R /Prev 5112 0 R /Next 5114 0 R /A 2589 0 R >> endobj 5114 0 obj << /Title (probe::ipmib.ReasmTimeout) /Parent 5056 0 R /Prev 5113 0 R /Next 5115 0 R /A 2592 0 R >> endobj 5115 0 obj << /Title (probe::linuxmib.DelayedACKs) /Parent 5056 0 R /Prev 5114 0 R /Next 5116 0 R /A 2595 0 R >> endobj 5116 0 obj << /Title (probe::linuxmib.ListenDrops) /Parent 5056 0 R /Prev 5115 0 R /Next 5117 0 R /A 2598 0 R >> endobj 5117 0 obj << /Title (probe::linuxmib.ListenOverflows) /Parent 5056 0 R /Prev 5116 0 R /Next 5118 0 R /A 2601 0 R >> endobj 5118 0 obj << /Title (probe::linuxmib.TCPMemoryPressures) /Parent 5056 0 R /Prev 5117 0 R /Next 5119 0 R /A 2604 0 R >> endobj 5119 0 obj << /Title (probe::tcpmib.ActiveOpens) /Parent 5056 0 R /Prev 5118 0 R /Next 5120 0 R /A 2607 0 R >> endobj 5120 0 obj << /Title (probe::tcpmib.AttemptFails) /Parent 5056 0 R /Prev 5119 0 R /Next 5121 0 R /A 2610 0 R >> endobj 5121 0 obj << /Title (probe::tcpmib.CurrEstab) /Parent 5056 0 R /Prev 5120 0 R /Next 5122 0 R /A 2613 0 R >> endobj 5122 0 obj << /Title (probe::tcpmib.EstabResets) /Parent 5056 0 R /Prev 5121 0 R /Next 5123 0 R /A 2616 0 R >> endobj 5123 0 obj << /Title (probe::tcpmib.InSegs) /Parent 5056 0 R /Prev 5122 0 R /Next 5124 0 R /A 2619 0 R >> endobj 5124 0 obj << /Title (probe::tcpmib.OutRsts) /Parent 5056 0 R /Prev 5123 0 R /Next 5125 0 R /A 2622 0 R >> endobj 5125 0 obj << /Title (probe::tcpmib.OutSegs) /Parent 5056 0 R /Prev 5124 0 R /Next 5126 0 R /A 2625 0 R >> endobj 5126 0 obj << /Title (probe::tcpmib.PassiveOpens) /Parent 5056 0 R /Prev 5125 0 R /Next 5091 0 R /A 2628 0 R >> endobj 5091 0 obj << /Title (probe::tcpmib.RetransSegs) /Parent 5056 0 R /Prev 5126 0 R /A 2631 0 R >> endobj 5089 0 obj << /Title /Parent 4707 0 R /Prev 5056 0 R /Next 5127 0 R /First 5128 0 R /Last 5129 0 R /Count -10 /A 2634 0 R >> endobj 5128 0 obj << /Title (function::get_loadavg_index) /Parent 5089 0 R /Next 5130 0 R /A 2637 0 R >> endobj 5130 0 obj << /Title (function::sprint_loadavg) /Parent 5089 0 R /Prev 5128 0 R /Next 5131 0 R /A 2640 0 R >> endobj 5131 0 obj << /Title (function::target_set_pid) /Parent 5089 0 R /Prev 5130 0 R /Next 5132 0 R /A 2643 0 R >> endobj 5132 0 obj << /Title (function::target_set_report) /Parent 5089 0 R /Prev 5131 0 R /Next 5133 0 R /A 2646 0 R >> endobj 5133 0 obj << /Title (probe::kprocess.create) /Parent 5089 0 R /Prev 5132 0 R /Next 5134 0 R /A 2649 0 R >> endobj 5134 0 obj << /Title (probe::kprocess.exec) /Parent 5089 0 R /Prev 5133 0 R /Next 5135 0 R /A 2652 0 R >> endobj 5135 0 obj << /Title (probe::kprocess.exec_complete) /Parent 5089 0 R /Prev 5134 0 R /Next 5136 0 R /A 2655 0 R >> endobj 5136 0 obj << /Title (probe::kprocess.exit) /Parent 5089 0 R /Prev 5135 0 R /Next 5137 0 R /A 2658 0 R >> endobj 5137 0 obj << /Title (probe::kprocess.release) /Parent 5089 0 R /Prev 5136 0 R /Next 5129 0 R /A 2661 0 R >> endobj 5129 0 obj << /Title (probe::kprocess.start) /Parent 5089 0 R /Prev 5137 0 R /A 2664 0 R >> endobj 5127 0 obj << /Title /Parent 4707 0 R /Prev 5089 0 R /Next 5138 0 R /First 5139 0 R /Last 5140 0 R /Count -33 /A 2667 0 R >> endobj 5139 0 obj << /Title (function::get_sa_flags) /Parent 5127 0 R /Next 5141 0 R /A 2670 0 R >> endobj 5141 0 obj << /Title (function::get_sa_handler) /Parent 5127 0 R /Prev 5139 0 R /Next 5142 0 R /A 2841 0 R >> endobj 5142 0 obj << /Title (function::is_sig_blocked) /Parent 5127 0 R /Prev 5141 0 R /Next 5143 0 R /A 2844 0 R >> endobj 5143 0 obj << /Title (function::sa_flags_str) /Parent 5127 0 R /Prev 5142 0 R /Next 5144 0 R /A 2847 0 R >> endobj 5144 0 obj << /Title (function::sa_handler_str) /Parent 5127 0 R /Prev 5143 0 R /Next 5145 0 R /A 2850 0 R >> endobj 5145 0 obj << /Title (function::signal_str) /Parent 5127 0 R /Prev 5144 0 R /Next 5146 0 R /A 2853 0 R >> endobj 5146 0 obj << /Title (function::sigset_mask_str) /Parent 5127 0 R /Prev 5145 0 R /Next 5147 0 R /A 2856 0 R >> endobj 5147 0 obj << /Title (probe::signal.check_ignored) /Parent 5127 0 R /Prev 5146 0 R /Next 5148 0 R /A 2859 0 R >> endobj 5148 0 obj << /Title (probe::signal.check_ignored.return) /Parent 5127 0 R /Prev 5147 0 R /Next 5149 0 R /A 2862 0 R >> endobj 5149 0 obj << /Title (probe::signal.checkperm) /Parent 5127 0 R /Prev 5148 0 R /Next 5150 0 R /A 2865 0 R >> endobj 5150 0 obj << /Title (probe::signal.checkperm.return) /Parent 5127 0 R /Prev 5149 0 R /Next 5151 0 R /A 2868 0 R >> endobj 5151 0 obj << /Title (probe::signal.do_action) /Parent 5127 0 R /Prev 5150 0 R /Next 5152 0 R /A 2871 0 R >> endobj 5152 0 obj << /Title (probe::signal.do_action.return) /Parent 5127 0 R /Prev 5151 0 R /Next 5153 0 R /A 2874 0 R >> endobj 5153 0 obj << /Title (probe::signal.flush) /Parent 5127 0 R /Prev 5152 0 R /Next 5154 0 R /A 2877 0 R >> endobj 5154 0 obj << /Title (probe::signal.force_segv) /Parent 5127 0 R /Prev 5153 0 R /Next 5155 0 R /A 2880 0 R >> endobj 5155 0 obj << /Title (probe::signal.force_segv.return) /Parent 5127 0 R /Prev 5154 0 R /Next 5156 0 R /A 2883 0 R >> endobj 5156 0 obj << /Title (probe::signal.handle) /Parent 5127 0 R /Prev 5155 0 R /Next 5157 0 R /A 2886 0 R >> endobj 5157 0 obj << /Title (probe::signal.handle.return) /Parent 5127 0 R /Prev 5156 0 R /Next 5158 0 R /A 2889 0 R >> endobj 5158 0 obj << /Title (probe::signal.pending) /Parent 5127 0 R /Prev 5157 0 R /Next 5159 0 R /A 2892 0 R >> endobj 5159 0 obj << /Title (probe::signal.pending.return) /Parent 5127 0 R /Prev 5158 0 R /Next 5160 0 R /A 2895 0 R >> endobj 5160 0 obj << /Title (probe::signal.procmask) /Parent 5127 0 R /Prev 5159 0 R /Next 5161 0 R /A 2898 0 R >> endobj 5161 0 obj << /Title (probe::signal.procmask.return) /Parent 5127 0 R /Prev 5160 0 R /Next 5162 0 R /A 2901 0 R >> endobj 5162 0 obj << /Title (probe::signal.send) /Parent 5127 0 R /Prev 5161 0 R /Next 5163 0 R /A 2904 0 R >> endobj 5163 0 obj << /Title (probe::signal.send.return) /Parent 5127 0 R /Prev 5162 0 R /Next 5164 0 R /A 2907 0 R >> endobj 5164 0 obj << /Title (probe::signal.send_sig_queue) /Parent 5127 0 R /Prev 5163 0 R /Next 5165 0 R /A 2910 0 R >> endobj 5165 0 obj << /Title (probe::signal.send_sig_queue.return) /Parent 5127 0 R /Prev 5164 0 R /Next 5166 0 R /A 2913 0 R >> endobj 5166 0 obj << /Title (probe::signal.sys_tgkill) /Parent 5127 0 R /Prev 5165 0 R /Next 5167 0 R /A 2916 0 R >> endobj 5167 0 obj << /Title (probe::signal.sys_tgkill.return) /Parent 5127 0 R /Prev 5166 0 R /Next 5168 0 R /A 2919 0 R >> endobj 5168 0 obj << /Title (probe::signal.sys_tkill) /Parent 5127 0 R /Prev 5167 0 R /Next 5169 0 R /A 2922 0 R >> endobj 5169 0 obj << /Title (probe::signal.syskill) /Parent 5127 0 R /Prev 5168 0 R /Next 5170 0 R /A 2925 0 R >> endobj 5170 0 obj << /Title (probe::signal.syskill.return) /Parent 5127 0 R /Prev 5169 0 R /Next 5171 0 R /A 2928 0 R >> endobj 5171 0 obj << /Title (probe::signal.systkill.return) /Parent 5127 0 R /Prev 5170 0 R /Next 5140 0 R /A 2931 0 R >> endobj 5140 0 obj << /Title (probe::signal.wakeup) /Parent 5127 0 R /Prev 5171 0 R /A 2934 0 R >> endobj 5138 0 obj << /Title /Parent 4707 0 R /Prev 5127 0 R /Next 5172 0 R /First 5173 0 R /Last 5174 0 R /Count -4 /A 2937 0 R >> endobj 5173 0 obj << /Title (function::errno_str) /Parent 5138 0 R /Next 5175 0 R /A 2940 0 R >> endobj 5175 0 obj << /Title (function::return_str) /Parent 5138 0 R /Prev 5173 0 R /Next 5176 0 R /A 2943 0 R >> endobj 5176 0 obj << /Title (function::returnstr) /Parent 5138 0 R /Prev 5175 0 R /Next 5174 0 R /A 2946 0 R >> endobj 5174 0 obj << /Title (function::returnval) /Parent 5138 0 R /Prev 5176 0 R /A 2949 0 R >> endobj 5172 0 obj << /Title /Parent 4707 0 R /Prev 5138 0 R /Next 5177 0 R /First 5178 0 R /Last 5178 0 R /Count -1 /A 2952 0 R >> endobj 5178 0 obj << /Title (function::rlimit_from_str) /Parent 5172 0 R /A 2955 0 R >> endobj 5177 0 obj << /Title /Parent 4707 0 R /Prev 5172 0 R /Next 5179 0 R /First 5180 0 R /Last 5181 0 R /Count -4 /A 2958 0 R >> endobj 5180 0 obj << /Title (function::MAJOR) /Parent 5177 0 R /Next 5182 0 R /A 2961 0 R >> endobj 5182 0 obj << /Title (function::MINOR) /Parent 5177 0 R /Prev 5180 0 R /Next 5183 0 R /A 2964 0 R >> endobj 5183 0 obj << /Title (function::MKDEV) /Parent 5177 0 R /Prev 5182 0 R /Next 5181 0 R /A 2967 0 R >> endobj 5181 0 obj << /Title (function::usrdev2kerndev) /Parent 5177 0 R /Prev 5183 0 R /A 2970 0 R >> endobj 5179 0 obj << /Title /Parent 4707 0 R /Prev 5177 0 R /Next 5184 0 R /First 5185 0 R /Last 5186 0 R /Count -10 /A 2973 0 R >> endobj 5185 0 obj << /Title (function::d_name) /Parent 5179 0 R /Next 5187 0 R /A 2976 0 R >> endobj 5187 0 obj << /Title (function::d_path) /Parent 5179 0 R /Prev 5185 0 R /Next 5188 0 R /A 2979 0 R >> endobj 5188 0 obj << /Title (function::fullpath_struct_file) /Parent 5179 0 R /Prev 5187 0 R /Next 5189 0 R /A 2982 0 R >> endobj 5189 0 obj << /Title (function::fullpath_struct_nameidata) /Parent 5179 0 R /Prev 5188 0 R /Next 5190 0 R /A 2985 0 R >> endobj 5190 0 obj << /Title (function::fullpath_struct_path) /Parent 5179 0 R /Prev 5189 0 R /Next 5191 0 R /A 2988 0 R >> endobj 5191 0 obj << /Title (function::inode_name) /Parent 5179 0 R /Prev 5190 0 R /Next 5192 0 R /A 2991 0 R >> endobj 5192 0 obj << /Title (function::inode_path) /Parent 5179 0 R /Prev 5191 0 R /Next 5193 0 R /A 2994 0 R >> endobj 5193 0 obj << /Title (function::real_mount) /Parent 5179 0 R /Prev 5192 0 R /Next 5194 0 R /A 2997 0 R >> endobj 5194 0 obj << /Title (function::reverse_path_walk) /Parent 5179 0 R /Prev 5193 0 R /Next 5186 0 R /A 3000 0 R >> endobj 5186 0 obj << /Title (function::task_dentry_path) /Parent 5179 0 R /Prev 5194 0 R /A 3171 0 R >> endobj 5184 0 obj << /Title /Parent 4707 0 R /Prev 5179 0 R /Next 5195 0 R /First 5196 0 R /Last 5197 0 R /Count -9 /A 3174 0 R >> endobj 5196 0 obj << /Title (function::abort) /Parent 5184 0 R /Next 5198 0 R /A 3177 0 R >> endobj 5198 0 obj << /Title (function::assert) /Parent 5184 0 R /Prev 5196 0 R /Next 5199 0 R /A 3180 0 R >> endobj 5199 0 obj << /Title (function::dump_stack) /Parent 5184 0 R /Prev 5198 0 R /Next 5200 0 R /A 3183 0 R >> endobj 5200 0 obj << /Title (function::error) /Parent 5184 0 R /Prev 5199 0 R /Next 5201 0 R /A 3186 0 R >> endobj 5201 0 obj << /Title (function::exit) /Parent 5184 0 R /Prev 5200 0 R /Next 5202 0 R /A 3189 0 R >> endobj 5202 0 obj << /Title (function::ftrace) /Parent 5184 0 R /Prev 5201 0 R /Next 5203 0 R /A 3192 0 R >> endobj 5203 0 obj << /Title (function::log) /Parent 5184 0 R /Prev 5202 0 R /Next 5204 0 R /A 3195 0 R >> endobj 5204 0 obj << /Title (function::printk) /Parent 5184 0 R /Prev 5203 0 R /Next 5197 0 R /A 3198 0 R >> endobj 5197 0 obj << /Title (function::warn) /Parent 5184 0 R /Prev 5204 0 R /A 3201 0 R >> endobj 5195 0 obj << /Title /Parent 4707 0 R /Prev 5184 0 R /Next 5205 0 R /First 5206 0 R /Last 5207 0 R /Count -11 /A 3204 0 R >> endobj 5206 0 obj << /Title (function::qs_done) /Parent 5195 0 R /Next 5208 0 R /A 3207 0 R >> endobj 5208 0 obj << /Title (function::qs_run) /Parent 5195 0 R /Prev 5206 0 R /Next 5209 0 R /A 3210 0 R >> endobj 5209 0 obj << /Title (function::qs_wait) /Parent 5195 0 R /Prev 5208 0 R /Next 5210 0 R /A 3213 0 R >> endobj 5210 0 obj << /Title (function::qsq_blocked) /Parent 5195 0 R /Prev 5209 0 R /Next 5211 0 R /A 3216 0 R >> endobj 5211 0 obj << /Title (function::qsq_print) /Parent 5195 0 R /Prev 5210 0 R /Next 5212 0 R /A 3219 0 R >> endobj 5212 0 obj << /Title (function::qsq_service_time) /Parent 5195 0 R /Prev 5211 0 R /Next 5213 0 R /A 3222 0 R >> endobj 5213 0 obj << /Title (function::qsq_start) /Parent 5195 0 R /Prev 5212 0 R /Next 5214 0 R /A 3225 0 R >> endobj 5214 0 obj << /Title (function::qsq_throughput) /Parent 5195 0 R /Prev 5213 0 R /Next 5215 0 R /A 3228 0 R >> endobj 5215 0 obj << /Title (function::qsq_utilization) /Parent 5195 0 R /Prev 5214 0 R /Next 5216 0 R /A 3231 0 R >> endobj 5216 0 obj << /Title (function::qsq_wait_queue_length) /Parent 5195 0 R /Prev 5215 0 R /Next 5207 0 R /A 3234 0 R >> endobj 5207 0 obj << /Title (function::qsq_wait_time) /Parent 5195 0 R /Prev 5216 0 R /A 3237 0 R >> endobj 5205 0 obj << /Title /Parent 4707 0 R /Prev 5195 0 R /Next 5217 0 R /First 5218 0 R /Last 5218 0 R /Count -1 /A 3240 0 R >> endobj 5218 0 obj << /Title (function::randint) /Parent 5205 0 R /A 3243 0 R >> endobj 5217 0 obj << /Title /Parent 4707 0 R /Prev 5205 0 R /Next 5219 0 R /First 5220 0 R /Last 5221 0 R /Count -67 /A 3246 0 R >> endobj 5220 0 obj << /Title (function::atomic_long_read) /Parent 5217 0 R /Next 5222 0 R /A 3249 0 R >> endobj 5222 0 obj << /Title (function::atomic_read) /Parent 5217 0 R /Prev 5220 0 R /Next 5223 0 R /A 3252 0 R >> endobj 5223 0 obj << /Title (function::kernel_buffer_quoted) /Parent 5217 0 R /Prev 5222 0 R /Next 5224 0 R /A 3255 0 R >> endobj 5224 0 obj << /Title (function::kernel_buffer_quoted_error) /Parent 5217 0 R /Prev 5223 0 R /Next 5225 0 R /A 3258 0 R >> endobj 5225 0 obj << /Title (function::kernel_char) /Parent 5217 0 R /Prev 5224 0 R /Next 5226 0 R /A 3261 0 R >> endobj 5226 0 obj << /Title (function::kernel_int) /Parent 5217 0 R /Prev 5225 0 R /Next 5227 0 R /A 3264 0 R >> endobj 5227 0 obj << /Title (function::kernel_long) /Parent 5217 0 R /Prev 5226 0 R /Next 5228 0 R /A 3267 0 R >> endobj 5228 0 obj << /Title (function::kernel_or_user_string_quoted) /Parent 5217 0 R /Prev 5227 0 R /Next 5229 0 R /A 3270 0 R >> endobj 5229 0 obj << /Title (function::kernel_or_user_string_quoted_utf16) /Parent 5217 0 R /Prev 5228 0 R /Next 5230 0 R /A 3273 0 R >> endobj 5230 0 obj << /Title (function::kernel_or_user_string_quoted_utf32) /Parent 5217 0 R /Prev 5229 0 R /Next 5231 0 R /A 3276 0 R >> endobj 5231 0 obj << /Title (function::kernel_pointer) /Parent 5217 0 R /Prev 5230 0 R /Next 5232 0 R /A 3279 0 R >> endobj 5232 0 obj << /Title (function::kernel_short) /Parent 5217 0 R /Prev 5231 0 R /Next 5233 0 R /A 3282 0 R >> endobj 5233 0 obj << /Title (function::kernel_string) /Parent 5217 0 R /Prev 5232 0 R /Next 5234 0 R /A 3285 0 R >> endobj 5234 0 obj << /Title (function::kernel_string_n) /Parent 5217 0 R /Prev 5233 0 R /Next 5235 0 R /A 3288 0 R >> endobj 5235 0 obj << /Title (function::kernel_string_quoted) /Parent 5217 0 R /Prev 5234 0 R /Next 5236 0 R /A 3291 0 R >> endobj 5236 0 obj << /Title (function::kernel_string_quoted_utf16) /Parent 5217 0 R /Prev 5235 0 R /Next 5237 0 R /A 3294 0 R >> endobj 5237 0 obj << /Title (function::kernel_string_quoted_utf32) /Parent 5217 0 R /Prev 5236 0 R /Next 5238 0 R /A 3297 0 R >> endobj 5238 0 obj << /Title (function::kernel_string_utf16) /Parent 5217 0 R /Prev 5237 0 R /Next 5239 0 R /A 3300 0 R >> endobj 5239 0 obj << /Title (function::kernel_string_utf32) /Parent 5217 0 R /Prev 5238 0 R /Next 5240 0 R /A 3303 0 R >> endobj 5240 0 obj << /Title (function::user_buffer_quoted) /Parent 5217 0 R /Prev 5239 0 R /Next 5241 0 R /A 3306 0 R >> endobj 5241 0 obj << /Title (function::user_buffer_quoted_error) /Parent 5217 0 R /Prev 5240 0 R /Next 5242 0 R /A 3309 0 R >> endobj 5242 0 obj << /Title (function::user_char) /Parent 5217 0 R /Prev 5241 0 R /Next 5243 0 R /A 3312 0 R >> endobj 5243 0 obj << /Title (function::user_char_error) /Parent 5217 0 R /Prev 5242 0 R /Next 5244 0 R /A 3315 0 R >> endobj 5244 0 obj << /Title (function::user_char_warn) /Parent 5217 0 R /Prev 5243 0 R /Next 5245 0 R /A 3318 0 R >> endobj 5245 0 obj << /Title (function::user_int) /Parent 5217 0 R /Prev 5244 0 R /Next 5246 0 R /A 3321 0 R >> endobj 5246 0 obj << /Title (function::user_int16) /Parent 5217 0 R /Prev 5245 0 R /Next 5247 0 R /A 3324 0 R >> endobj 5247 0 obj << /Title (function::user_int16_error) /Parent 5217 0 R /Prev 5246 0 R /Next 5248 0 R /A 3327 0 R >> endobj 5248 0 obj << /Title (function::user_int32) /Parent 5217 0 R /Prev 5247 0 R /Next 5249 0 R /A 3330 0 R >> endobj 5249 0 obj << /Title (function::user_int32_error) /Parent 5217 0 R /Prev 5248 0 R /Next 5250 0 R /A 3501 0 R >> endobj 5250 0 obj << /Title (function::user_int64) /Parent 5217 0 R /Prev 5249 0 R /Next 5251 0 R /A 3504 0 R >> endobj 5251 0 obj << /Title (function::user_int64_error) /Parent 5217 0 R /Prev 5250 0 R /Next 5252 0 R /A 3507 0 R >> endobj 5252 0 obj << /Title (function::user_int8) /Parent 5217 0 R /Prev 5251 0 R /Next 5253 0 R /A 3510 0 R >> endobj 5253 0 obj << /Title (function::user_int8_error) /Parent 5217 0 R /Prev 5252 0 R /Next 5254 0 R /A 3513 0 R >> endobj 5254 0 obj << /Title (function::user_int_error) /Parent 5217 0 R /Prev 5253 0 R /Next 5255 0 R /A 3516 0 R >> endobj 5255 0 obj << /Title (function::user_int_warn) /Parent 5217 0 R /Prev 5254 0 R /Next 5256 0 R /A 3519 0 R >> endobj 5256 0 obj << /Title (function::user_long) /Parent 5217 0 R /Prev 5255 0 R /Next 5257 0 R /A 3522 0 R >> endobj 5257 0 obj << /Title (function::user_long_error) /Parent 5217 0 R /Prev 5256 0 R /Next 5258 0 R /A 3525 0 R >> endobj 5258 0 obj << /Title (function::user_long_warn) /Parent 5217 0 R /Prev 5257 0 R /Next 5259 0 R /A 3528 0 R >> endobj 5259 0 obj << /Title (function::user_short) /Parent 5217 0 R /Prev 5258 0 R /Next 5260 0 R /A 3531 0 R >> endobj 5260 0 obj << /Title (function::user_short_error) /Parent 5217 0 R /Prev 5259 0 R /Next 5261 0 R /A 3534 0 R >> endobj 5261 0 obj << /Title (function::user_short_warn) /Parent 5217 0 R /Prev 5260 0 R /Next 5262 0 R /A 3537 0 R >> endobj 5262 0 obj << /Title (function::user_string) /Parent 5217 0 R /Prev 5261 0 R /Next 5263 0 R /A 3540 0 R >> endobj 5263 0 obj << /Title (function::user_string_n) /Parent 5217 0 R /Prev 5262 0 R /Next 5264 0 R /A 3543 0 R >> endobj 5264 0 obj << /Title (function::user_string_n_nofault) /Parent 5217 0 R /Prev 5263 0 R /Next 5265 0 R /A 3546 0 R >> endobj 5265 0 obj << /Title (function::user_string_n_quoted) /Parent 5217 0 R /Prev 5264 0 R /Next 5266 0 R /A 3549 0 R >> endobj 5266 0 obj << /Title (function::user_string_n_warn) /Parent 5217 0 R /Prev 5265 0 R /Next 5267 0 R /A 3552 0 R >> endobj 5267 0 obj << /Title (function::user_string_nofault) /Parent 5217 0 R /Prev 5266 0 R /Next 5268 0 R /A 3555 0 R >> endobj 5268 0 obj << /Title (function::user_string_quoted) /Parent 5217 0 R /Prev 5267 0 R /Next 5269 0 R /A 3558 0 R >> endobj 5269 0 obj << /Title (function::user_string_quoted_utf16) /Parent 5217 0 R /Prev 5268 0 R /Next 5270 0 R /A 3561 0 R >> endobj 5270 0 obj << /Title (function::user_string_quoted_utf32) /Parent 5217 0 R /Prev 5269 0 R /Next 5271 0 R /A 3564 0 R >> endobj 5271 0 obj << /Title (function::user_string_utf16) /Parent 5217 0 R /Prev 5270 0 R /Next 5272 0 R /A 3567 0 R >> endobj 5272 0 obj << /Title (function::user_string_utf32) /Parent 5217 0 R /Prev 5271 0 R /Next 5273 0 R /A 3570 0 R >> endobj 5273 0 obj << /Title (function::user_string_warn) /Parent 5217 0 R /Prev 5272 0 R /Next 5274 0 R /A 3573 0 R >> endobj 5274 0 obj << /Title (function::user_uint16) /Parent 5217 0 R /Prev 5273 0 R /Next 5275 0 R /A 3576 0 R >> endobj 5275 0 obj << /Title (function::user_uint16_error) /Parent 5217 0 R /Prev 5274 0 R /Next 5276 0 R /A 3579 0 R >> endobj 5276 0 obj << /Title (function::user_uint32) /Parent 5217 0 R /Prev 5275 0 R /Next 5277 0 R /A 3582 0 R >> endobj 5277 0 obj << /Title (function::user_uint32_error) /Parent 5217 0 R /Prev 5276 0 R /Next 5278 0 R /A 3585 0 R >> endobj 5278 0 obj << /Title (function::user_uint64) /Parent 5217 0 R /Prev 5277 0 R /Next 5279 0 R /A 3588 0 R >> endobj 5279 0 obj << /Title (function::user_uint64_error) /Parent 5217 0 R /Prev 5278 0 R /Next 5280 0 R /A 3591 0 R >> endobj 5280 0 obj << /Title (function::user_uint8) /Parent 5217 0 R /Prev 5279 0 R /Next 5281 0 R /A 3594 0 R >> endobj 5281 0 obj << /Title (function::user_uint8_error) /Parent 5217 0 R /Prev 5280 0 R /Next 5282 0 R /A 3597 0 R >> endobj 5282 0 obj << /Title (function::user_ulong) /Parent 5217 0 R /Prev 5281 0 R /Next 5283 0 R /A 3600 0 R >> endobj 5283 0 obj << /Title (function::user_ulong_error) /Parent 5217 0 R /Prev 5282 0 R /Next 5284 0 R /A 3603 0 R >> endobj 5284 0 obj << /Title (function::user_ulong_warn) /Parent 5217 0 R /Prev 5283 0 R /Next 5285 0 R /A 3606 0 R >> endobj 5285 0 obj << /Title (function::user_ushort) /Parent 5217 0 R /Prev 5284 0 R /Next 5286 0 R /A 3609 0 R >> endobj 5286 0 obj << /Title (function::user_ushort_error) /Parent 5217 0 R /Prev 5285 0 R /Next 5221 0 R /A 3612 0 R >> endobj 5221 0 obj << /Title (function::user_ushort_warn) /Parent 5217 0 R /Prev 5286 0 R /A 3615 0 R >> endobj 5219 0 obj << /Title /Parent 4707 0 R /Prev 5217 0 R /Next 5287 0 R /First 5288 0 R /Last 5289 0 R /Count -15 /A 3618 0 R >> endobj 5288 0 obj << /Title (function::set_kernel_char) /Parent 5219 0 R /Next 5290 0 R /A 3621 0 R >> endobj 5290 0 obj << /Title (function::set_kernel_int) /Parent 5219 0 R /Prev 5288 0 R /Next 5291 0 R /A 3624 0 R >> endobj 5291 0 obj << /Title (function::set_kernel_long) /Parent 5219 0 R /Prev 5290 0 R /Next 5292 0 R /A 3627 0 R >> endobj 5292 0 obj << /Title (function::set_kernel_pointer) /Parent 5219 0 R /Prev 5291 0 R /Next 5293 0 R /A 3630 0 R >> endobj 5293 0 obj << /Title (function::set_kernel_short) /Parent 5219 0 R /Prev 5292 0 R /Next 5294 0 R /A 3633 0 R >> endobj 5294 0 obj << /Title (function::set_kernel_string) /Parent 5219 0 R /Prev 5293 0 R /Next 5295 0 R /A 3636 0 R >> endobj 5295 0 obj << /Title (function::set_kernel_string_n) /Parent 5219 0 R /Prev 5294 0 R /Next 5296 0 R /A 3639 0 R >> endobj 5296 0 obj << /Title (function::set_user_char) /Parent 5219 0 R /Prev 5295 0 R /Next 5297 0 R /A 3642 0 R >> endobj 5297 0 obj << /Title (function::set_user_int) /Parent 5219 0 R /Prev 5296 0 R /Next 5298 0 R /A 3645 0 R >> endobj 5298 0 obj << /Title (function::set_user_long) /Parent 5219 0 R /Prev 5297 0 R /Next 5299 0 R /A 3648 0 R >> endobj 5299 0 obj << /Title (function::set_user_pointer) /Parent 5219 0 R /Prev 5298 0 R /Next 5300 0 R /A 3651 0 R >> endobj 5300 0 obj << /Title (function::set_user_short) /Parent 5219 0 R /Prev 5299 0 R /Next 5301 0 R /A 3654 0 R >> endobj 5301 0 obj << /Title (function::set_user_string) /Parent 5219 0 R /Prev 5300 0 R /Next 5302 0 R /A 3657 0 R >> endobj 5302 0 obj << /Title (function::set_user_string_arg) /Parent 5219 0 R /Prev 5301 0 R /Next 5289 0 R /A 3660 0 R >> endobj 5289 0 obj << /Title (function::set_user_string_n) /Parent 5219 0 R /Prev 5302 0 R /A 3831 0 R >> endobj 5287 0 obj << /Title /Parent 4707 0 R /Prev 5219 0 R /Next 5303 0 R /First 5304 0 R /Last 5305 0 R /Count -4 /A 3834 0 R >> endobj 5304 0 obj << /Title (function::mdelay) /Parent 5287 0 R /Next 5306 0 R /A 3837 0 R >> endobj 5306 0 obj << /Title (function::panic) /Parent 5287 0 R /Prev 5304 0 R /Next 5307 0 R /A 3840 0 R >> endobj 5307 0 obj << /Title (function::raise) /Parent 5287 0 R /Prev 5306 0 R /Next 5305 0 R /A 3843 0 R >> endobj 5305 0 obj << /Title (function::udelay) /Parent 5287 0 R /Prev 5307 0 R /A 3846 0 R >> endobj 5303 0 obj << /Title /Parent 4707 0 R /Prev 5287 0 R /Next 5308 0 R /First 5309 0 R /Last 5310 0 R /Count -15 /A 3849 0 R >> endobj 5309 0 obj << /Title (function::isdigit) /Parent 5303 0 R /Next 5311 0 R /A 3852 0 R >> endobj 5311 0 obj << /Title (function::isinstr) /Parent 5303 0 R /Prev 5309 0 R /Next 5312 0 R /A 3855 0 R >> endobj 5312 0 obj << /Title (function::matched) /Parent 5303 0 R /Prev 5311 0 R /Next 5313 0 R /A 3858 0 R >> endobj 5313 0 obj << /Title (function::matched_str) /Parent 5303 0 R /Prev 5312 0 R /Next 5314 0 R /A 3861 0 R >> endobj 5314 0 obj << /Title (function::ngroups) /Parent 5303 0 R /Prev 5313 0 R /Next 5315 0 R /A 3864 0 R >> endobj 5315 0 obj << /Title (function::str_replace) /Parent 5303 0 R /Prev 5314 0 R /Next 5316 0 R /A 3867 0 R >> endobj 5316 0 obj << /Title (function::string_quoted) /Parent 5303 0 R /Prev 5315 0 R /Next 5317 0 R /A 3870 0 R >> endobj 5317 0 obj << /Title (function::stringat) /Parent 5303 0 R /Prev 5316 0 R /Next 5318 0 R /A 3873 0 R >> endobj 5318 0 obj << /Title (function::strlen) /Parent 5303 0 R /Prev 5317 0 R /Next 5319 0 R /A 3876 0 R >> endobj 5319 0 obj << /Title (function::strpos) /Parent 5303 0 R /Prev 5318 0 R /Next 5320 0 R /A 3879 0 R >> endobj 5320 0 obj << /Title (function::strtol) /Parent 5303 0 R /Prev 5319 0 R /Next 5321 0 R /A 3882 0 R >> endobj 5321 0 obj << /Title (function::substr) /Parent 5303 0 R /Prev 5320 0 R /Next 5322 0 R /A 3885 0 R >> endobj 5322 0 obj << /Title (function::text_str) /Parent 5303 0 R /Prev 5321 0 R /Next 5323 0 R /A 3888 0 R >> endobj 5323 0 obj << /Title (function::text_strn) /Parent 5303 0 R /Prev 5322 0 R /Next 5310 0 R /A 3891 0 R >> endobj 5310 0 obj << /Title (function::tokenize) /Parent 5303 0 R /Prev 5323 0 R /A 3894 0 R >> endobj 5308 0 obj << /Title /Parent 4707 0 R /Prev 5303 0 R /Next 5324 0 R /First 5325 0 R /Last 5326 0 R /Count -13 /A 3897 0 R >> endobj 5325 0 obj << /Title (function::ansi_clear_screen) /Parent 5308 0 R /Next 5327 0 R /A 3900 0 R >> endobj 5327 0 obj << /Title (function::ansi_cursor_hide) /Parent 5308 0 R /Prev 5325 0 R /Next 5328 0 R /A 3903 0 R >> endobj 5328 0 obj << /Title (function::ansi_cursor_move) /Parent 5308 0 R /Prev 5327 0 R /Next 5329 0 R /A 3906 0 R >> endobj 5329 0 obj << /Title (function::ansi_cursor_restore) /Parent 5308 0 R /Prev 5328 0 R /Next 5330 0 R /A 3909 0 R >> endobj 5330 0 obj << /Title (function::ansi_cursor_save) /Parent 5308 0 R /Prev 5329 0 R /Next 5331 0 R /A 3912 0 R >> endobj 5331 0 obj << /Title (function::ansi_cursor_show) /Parent 5308 0 R /Prev 5330 0 R /Next 5332 0 R /A 3915 0 R >> endobj 5332 0 obj << /Title (function::ansi_new_line) /Parent 5308 0 R /Prev 5331 0 R /Next 5333 0 R /A 3918 0 R >> endobj 5333 0 obj << /Title (function::ansi_reset_color) /Parent 5308 0 R /Prev 5332 0 R /Next 5334 0 R /A 3921 0 R >> endobj 5334 0 obj << /Title (function::ansi_set_color) /Parent 5308 0 R /Prev 5333 0 R /Next 5335 0 R /A 3924 0 R >> endobj 5335 0 obj << /Title (function::indent) /Parent 5308 0 R /Prev 5334 0 R /Next 5336 0 R /A 3927 0 R >> endobj 5336 0 obj << /Title (function::indent_depth) /Parent 5308 0 R /Prev 5335 0 R /Next 5337 0 R /A 3930 0 R >> endobj 5337 0 obj << /Title (function::thread_indent) /Parent 5308 0 R /Prev 5336 0 R /Next 5326 0 R /A 3933 0 R >> endobj 5326 0 obj << /Title (function::thread_indent_depth) /Parent 5308 0 R /Prev 5337 0 R /A 3936 0 R >> endobj 5324 0 obj << /Title /Parent 4707 0 R /Prev 5308 0 R /Next 5338 0 R /First 5339 0 R /Last 5340 0 R /Count -27 /A 3939 0 R >> endobj 5339 0 obj << /Title (probe::stap.cache_add_mod) /Parent 5324 0 R /Next 5341 0 R /A 3942 0 R >> endobj 5341 0 obj << /Title (probe::stap.cache_add_nss) /Parent 5324 0 R /Prev 5339 0 R /Next 5342 0 R /A 3945 0 R >> endobj 5342 0 obj << /Title (probe::stap.cache_add_src) /Parent 5324 0 R /Prev 5341 0 R /Next 5343 0 R /A 3948 0 R >> endobj 5343 0 obj << /Title (probe::stap.cache_clean) /Parent 5324 0 R /Prev 5342 0 R /Next 5344 0 R /A 3951 0 R >> endobj 5344 0 obj << /Title (probe::stap.cache_get) /Parent 5324 0 R /Prev 5343 0 R /Next 5345 0 R /A 3954 0 R >> endobj 5345 0 obj << /Title (probe::stap.pass0) /Parent 5324 0 R /Prev 5344 0 R /Next 5346 0 R /A 3957 0 R >> endobj 5346 0 obj << /Title (probe::stap.pass0.end) /Parent 5324 0 R /Prev 5345 0 R /Next 5347 0 R /A 3960 0 R >> endobj 5347 0 obj << /Title (probe::stap.pass1.end) /Parent 5324 0 R /Prev 5346 0 R /Next 5348 0 R /A 3963 0 R >> endobj 5348 0 obj << /Title (probe::stap.pass1a) /Parent 5324 0 R /Prev 5347 0 R /Next 5349 0 R /A 3966 0 R >> endobj 5349 0 obj << /Title (probe::stap.pass1b) /Parent 5324 0 R /Prev 5348 0 R /Next 5350 0 R /A 3969 0 R >> endobj 5350 0 obj << /Title (probe::stap.pass2) /Parent 5324 0 R /Prev 5349 0 R /Next 5351 0 R /A 3972 0 R >> endobj 5351 0 obj << /Title (probe::stap.pass2.end) /Parent 5324 0 R /Prev 5350 0 R /Next 5352 0 R /A 3975 0 R >> endobj 5352 0 obj << /Title (probe::stap.pass3) /Parent 5324 0 R /Prev 5351 0 R /Next 5353 0 R /A 3978 0 R >> endobj 5353 0 obj << /Title (probe::stap.pass3.end) /Parent 5324 0 R /Prev 5352 0 R /Next 5354 0 R /A 3981 0 R >> endobj 5354 0 obj << /Title (probe::stap.pass4) /Parent 5324 0 R /Prev 5353 0 R /Next 5355 0 R /A 3984 0 R >> endobj 5355 0 obj << /Title (probe::stap.pass4.end) /Parent 5324 0 R /Prev 5354 0 R /Next 5356 0 R /A 3987 0 R >> endobj 5356 0 obj << /Title (probe::stap.pass5) /Parent 5324 0 R /Prev 5355 0 R /Next 5357 0 R /A 3990 0 R >> endobj 5357 0 obj << /Title (probe::stap.pass5.end) /Parent 5324 0 R /Prev 5356 0 R /Next 5358 0 R /A 4161 0 R >> endobj 5358 0 obj << /Title (probe::stap.pass6) /Parent 5324 0 R /Prev 5357 0 R /Next 5359 0 R /A 4164 0 R >> endobj 5359 0 obj << /Title (probe::stap.pass6.end) /Parent 5324 0 R /Prev 5358 0 R /Next 5360 0 R /A 4167 0 R >> endobj 5360 0 obj << /Title (probe::stap.system) /Parent 5324 0 R /Prev 5359 0 R /Next 5361 0 R /A 4170 0 R >> endobj 5361 0 obj << /Title (probe::stap.system.return) /Parent 5324 0 R /Prev 5360 0 R /Next 5362 0 R /A 4173 0 R >> endobj 5362 0 obj << /Title (probe::stap.system.spawn) /Parent 5324 0 R /Prev 5361 0 R /Next 5363 0 R /A 4176 0 R >> endobj 5363 0 obj << /Title (probe::stapio.receive_control_message) /Parent 5324 0 R /Prev 5362 0 R /Next 5364 0 R /A 4179 0 R >> endobj 5364 0 obj << /Title (probe::staprun.insert_module) /Parent 5324 0 R /Prev 5363 0 R /Next 5365 0 R /A 4182 0 R >> endobj 5365 0 obj << /Title (probe::staprun.remove_module) /Parent 5324 0 R /Prev 5364 0 R /Next 5340 0 R /A 4185 0 R >> endobj 5340 0 obj << /Title (probe::staprun.send_control_message) /Parent 5324 0 R /Prev 5365 0 R /A 4188 0 R >> endobj 5338 0 obj << /Title /Parent 4707 0 R /Prev 5324 0 R /Next 5366 0 R /First 5367 0 R /Last 5368 0 R /Count -62 /A 4191 0 R >> endobj 5367 0 obj << /Title (function::nfsderror) /Parent 5338 0 R /Next 5369 0 R /A 4194 0 R >> endobj 5369 0 obj << /Title (probe::) /Parent 5338 0 R /Prev 5367 0 R /Next 5370 0 R /A 4197 0 R >> endobj 5370 0 obj << /Title (probe::nfs.aop.readahead) /Parent 5338 0 R /Prev 5369 0 R /Next 5371 0 R /A 4200 0 R >> endobj 5371 0 obj << /Title (probe::nfs.aop.readpage) /Parent 5338 0 R /Prev 5370 0 R /Next 5372 0 R /A 4203 0 R >> endobj 5372 0 obj << /Title (probe::nfs.aop.readpages) /Parent 5338 0 R /Prev 5371 0 R /Next 5373 0 R /A 4206 0 R >> endobj 5373 0 obj << /Title (probe::nfs.aop.release_page) /Parent 5338 0 R /Prev 5372 0 R /Next 5374 0 R /A 4209 0 R >> endobj 5374 0 obj << /Title (probe::nfs.aop.set_page_dirty) /Parent 5338 0 R /Prev 5373 0 R /Next 5375 0 R /A 4212 0 R >> endobj 5375 0 obj << /Title (probe::nfs.aop.write_begin) /Parent 5338 0 R /Prev 5374 0 R /Next 5376 0 R /A 4215 0 R >> endobj 5376 0 obj << /Title (probe::nfs.aop.write_end) /Parent 5338 0 R /Prev 5375 0 R /Next 5377 0 R /A 4218 0 R >> endobj 5377 0 obj << /Title (probe::nfs.aop.writepage) /Parent 5338 0 R /Prev 5376 0 R /Next 5378 0 R /A 4221 0 R >> endobj 5378 0 obj << /Title (probe::nfs.aop.writepages) /Parent 5338 0 R /Prev 5377 0 R /Next 5379 0 R /A 4224 0 R >> endobj 5379 0 obj << /Title (probe::nfs.fop.aio_read) /Parent 5338 0 R /Prev 5378 0 R /Next 5380 0 R /A 4227 0 R >> endobj 5380 0 obj << /Title (probe::nfs.fop.aio_write) /Parent 5338 0 R /Prev 5379 0 R /Next 5381 0 R /A 4230 0 R >> endobj 5381 0 obj << /Title (probe::nfs.fop.check_flags) /Parent 5338 0 R /Prev 5380 0 R /Next 5382 0 R /A 4233 0 R >> endobj 5382 0 obj << /Title (probe::nfs.fop.flush) /Parent 5338 0 R /Prev 5381 0 R /Next 5383 0 R /A 4236 0 R >> endobj 5383 0 obj << /Title (probe::nfs.fop.fsync) /Parent 5338 0 R /Prev 5382 0 R /Next 5384 0 R /A 4239 0 R >> endobj 5384 0 obj << /Title (probe::nfs.fop.llseek) /Parent 5338 0 R /Prev 5383 0 R /Next 5385 0 R /A 4242 0 R >> endobj 5385 0 obj << /Title (probe::nfs.fop.lock) /Parent 5338 0 R /Prev 5384 0 R /Next 5386 0 R /A 4245 0 R >> endobj 5386 0 obj << /Title (probe::nfs.fop.mmap) /Parent 5338 0 R /Prev 5385 0 R /Next 5387 0 R /A 4248 0 R >> endobj 5387 0 obj << /Title (probe::nfs.fop.open) /Parent 5338 0 R /Prev 5386 0 R /Next 5388 0 R /A 4251 0 R >> endobj 5388 0 obj << /Title (probe::nfs.fop.read) /Parent 5338 0 R /Prev 5387 0 R /Next 5389 0 R /A 4254 0 R >> endobj 5389 0 obj << /Title (probe::nfs.fop.read_iter) /Parent 5338 0 R /Prev 5388 0 R /Next 5390 0 R /A 4257 0 R >> endobj 5390 0 obj << /Title (probe::nfs.fop.release) /Parent 5338 0 R /Prev 5389 0 R /Next 5391 0 R /A 4260 0 R >> endobj 5391 0 obj << /Title (probe::nfs.fop.sendfile) /Parent 5338 0 R /Prev 5390 0 R /Next 5392 0 R /A 4263 0 R >> endobj 5392 0 obj << /Title (probe::nfs.fop.write) /Parent 5338 0 R /Prev 5391 0 R /Next 5393 0 R /A 4266 0 R >> endobj 5393 0 obj << /Title (probe::nfs.fop.write_iter) /Parent 5338 0 R /Prev 5392 0 R /Next 5394 0 R /A 4269 0 R >> endobj 5394 0 obj << /Title (probe::nfs.proc.commit) /Parent 5338 0 R /Prev 5393 0 R /Next 5395 0 R /A 4272 0 R >> endobj 5395 0 obj << /Title (probe::nfs.proc.commit_done) /Parent 5338 0 R /Prev 5394 0 R /Next 5396 0 R /A 4275 0 R >> endobj 5396 0 obj << /Title (probe::nfs.proc.commit_setup) /Parent 5338 0 R /Prev 5395 0 R /Next 5397 0 R /A 4278 0 R >> endobj 5397 0 obj << /Title (probe::nfs.proc.create) /Parent 5338 0 R /Prev 5396 0 R /Next 5398 0 R /A 4281 0 R >> endobj 5398 0 obj << /Title (probe::nfs.proc.handle_exception) /Parent 5338 0 R /Prev 5397 0 R /Next 5399 0 R /A 4284 0 R >> endobj 5399 0 obj << /Title (probe::nfs.proc.lookup) /Parent 5338 0 R /Prev 5398 0 R /Next 5400 0 R /A 4287 0 R >> endobj 5400 0 obj << /Title (probe::nfs.proc.open) /Parent 5338 0 R /Prev 5399 0 R /Next 5401 0 R /A 4290 0 R >> endobj 5401 0 obj << /Title (probe::nfs.proc.read) /Parent 5338 0 R /Prev 5400 0 R /Next 5402 0 R /A 4293 0 R >> endobj 5402 0 obj << /Title (probe::nfs.proc.read_done) /Parent 5338 0 R /Prev 5401 0 R /Next 5403 0 R /A 4296 0 R >> endobj 5403 0 obj << /Title (probe::nfs.proc.read_setup) /Parent 5338 0 R /Prev 5402 0 R /Next 5404 0 R /A 4299 0 R >> endobj 5404 0 obj << /Title (probe::nfs.proc.release) /Parent 5338 0 R /Prev 5403 0 R /Next 5405 0 R /A 4302 0 R >> endobj 5405 0 obj << /Title (probe::nfs.proc.remove) /Parent 5338 0 R /Prev 5404 0 R /Next 5406 0 R /A 4305 0 R >> endobj 5406 0 obj << /Title (probe::nfs.proc.rename) /Parent 5338 0 R /Prev 5405 0 R /Next 5407 0 R /A 4308 0 R >> endobj 5407 0 obj << /Title (probe::nfs.proc.rename_done) /Parent 5338 0 R /Prev 5406 0 R /Next 5408 0 R /A 4311 0 R >> endobj 5408 0 obj << /Title (probe::nfs.proc.rename_setup) /Parent 5338 0 R /Prev 5407 0 R /Next 5409 0 R /A 4314 0 R >> endobj 5409 0 obj << /Title (probe::nfs.proc.write) /Parent 5338 0 R /Prev 5408 0 R /Next 5410 0 R /A 4317 0 R >> endobj 5410 0 obj << /Title (probe::nfs.proc.write_done) /Parent 5338 0 R /Prev 5409 0 R /Next 5411 0 R /A 4320 0 R >> endobj 5411 0 obj << /Title (probe::nfs.proc.write_setup) /Parent 5338 0 R /Prev 5410 0 R /Next 5412 0 R /A 4491 0 R >> endobj 5412 0 obj << /Title (probe::nfsd.close) /Parent 5338 0 R /Prev 5411 0 R /Next 5413 0 R /A 4494 0 R >> endobj 5413 0 obj << /Title (probe::nfsd.commit) /Parent 5338 0 R /Prev 5412 0 R /Next 5414 0 R /A 4497 0 R >> endobj 5414 0 obj << /Title (probe::nfsd.create) /Parent 5338 0 R /Prev 5413 0 R /Next 5415 0 R /A 4500 0 R >> endobj 5415 0 obj << /Title (probe::nfsd.createv3) /Parent 5338 0 R /Prev 5414 0 R /Next 5416 0 R /A 4503 0 R >> endobj 5416 0 obj << /Title (probe::nfsd.dispatch) /Parent 5338 0 R /Prev 5415 0 R /Next 5417 0 R /A 4506 0 R >> endobj 5417 0 obj << /Title (probe::nfsd.lookup) /Parent 5338 0 R /Prev 5416 0 R /Next 5418 0 R /A 4509 0 R >> endobj 5418 0 obj << /Title (probe::nfsd.open) /Parent 5338 0 R /Prev 5417 0 R /Next 5419 0 R /A 4512 0 R >> endobj 5419 0 obj << /Title (probe::nfsd.proc.commit) /Parent 5338 0 R /Prev 5418 0 R /Next 5420 0 R /A 4515 0 R >> endobj 5420 0 obj << /Title (probe::nfsd.proc.create) /Parent 5338 0 R /Prev 5419 0 R /Next 5421 0 R /A 4518 0 R >> endobj 5421 0 obj << /Title (probe::nfsd.proc.lookup) /Parent 5338 0 R /Prev 5420 0 R /Next 5422 0 R /A 4521 0 R >> endobj 5422 0 obj << /Title (probe::nfsd.proc.read) /Parent 5338 0 R /Prev 5421 0 R /Next 5423 0 R /A 4524 0 R >> endobj 5423 0 obj << /Title (probe::nfsd.proc.remove) /Parent 5338 0 R /Prev 5422 0 R /Next 5424 0 R /A 4527 0 R >> endobj 5424 0 obj << /Title (probe::nfsd.proc.rename) /Parent 5338 0 R /Prev 5423 0 R /Next 5425 0 R /A 4530 0 R >> endobj 5425 0 obj << /Title (probe::nfsd.proc.write) /Parent 5338 0 R /Prev 5424 0 R /Next 5426 0 R /A 4533 0 R >> endobj 5426 0 obj << /Title (probe::nfsd.read) /Parent 5338 0 R /Prev 5425 0 R /Next 5427 0 R /A 4536 0 R >> endobj 5427 0 obj << /Title (probe::nfsd.rename) /Parent 5338 0 R /Prev 5426 0 R /Next 5428 0 R /A 4539 0 R >> endobj 5428 0 obj << /Title (probe::nfsd.unlink) /Parent 5338 0 R /Prev 5427 0 R /Next 5368 0 R /A 4542 0 R >> endobj 5368 0 obj << /Title (probe::nfsd.write) /Parent 5338 0 R /Prev 5428 0 R /A 4545 0 R >> endobj 5366 0 obj << /Title /Parent 4707 0 R /Prev 5338 0 R /Next 5429 0 R /First 5430 0 R /Last 5431 0 R /Count -4 /A 4548 0 R >> endobj 5430 0 obj << /Title (function::commit) /Parent 5366 0 R /Next 5432 0 R /A 4551 0 R >> endobj 5432 0 obj << /Title (function::discard) /Parent 5366 0 R /Prev 5430 0 R /Next 5433 0 R /A 4554 0 R >> endobj 5433 0 obj << /Title (function::speculate) /Parent 5366 0 R /Prev 5432 0 R /Next 5431 0 R /A 4557 0 R >> endobj 5431 0 obj << /Title (function::speculation) /Parent 5366 0 R /Prev 5433 0 R /A 4560 0 R >> endobj 5429 0 obj << /Title /Parent 4707 0 R /Prev 5366 0 R /Next 5434 0 R /First 5435 0 R /Last 5436 0 R /Count -13 /A 4563 0 R >> endobj 5435 0 obj << /Title (function::json_add_array) /Parent 5429 0 R /Next 5437 0 R /A 4566 0 R >> endobj 5437 0 obj << /Title (function::json_add_array_numeric_metric) /Parent 5429 0 R /Prev 5435 0 R /Next 5438 0 R /A 4569 0 R >> endobj 5438 0 obj << /Title (function::json_add_array_string_metric) /Parent 5429 0 R /Prev 5437 0 R /Next 5439 0 R /A 4572 0 R >> endobj 5439 0 obj << /Title (function::json_add_numeric_metric) /Parent 5429 0 R /Prev 5438 0 R /Next 5440 0 R /A 4575 0 R >> endobj 5440 0 obj << /Title (function::json_add_string_metric) /Parent 5429 0 R /Prev 5439 0 R /Next 5441 0 R /A 4578 0 R >> endobj 5441 0 obj << /Title (function::json_set_prefix) /Parent 5429 0 R /Prev 5440 0 R /Next 5442 0 R /A 4581 0 R >> endobj 5442 0 obj << /Title (macro::json_output_array_numeric_value) /Parent 5429 0 R /Prev 5441 0 R /Next 5443 0 R /A 4584 0 R >> endobj 5443 0 obj << /Title (macro::json_output_array_string_value) /Parent 5429 0 R /Prev 5442 0 R /Next 5444 0 R /A 4587 0 R >> endobj 5444 0 obj << /Title (macro::json_output_data_end) /Parent 5429 0 R /Prev 5443 0 R /Next 5445 0 R /A 4590 0 R >> endobj 5445 0 obj << /Title (macro::json_output_data_start) /Parent 5429 0 R /Prev 5444 0 R /Next 5446 0 R /A 4593 0 R >> endobj 5446 0 obj << /Title (macro::json_output_numeric_value) /Parent 5429 0 R /Prev 5445 0 R /Next 5447 0 R /A 4596 0 R >> endobj 5447 0 obj << /Title (macro::json_output_string_value) /Parent 5429 0 R /Prev 5446 0 R /Next 5436 0 R /A 4599 0 R >> endobj 5436 0 obj << /Title (probe::json_data) /Parent 5429 0 R /Prev 5447 0 R /A 4602 0 R >> endobj 5434 0 obj << /Title /Parent 4707 0 R /Prev 5429 0 R /Next 5448 0 R /First 5449 0 R /Last 5449 0 R /Count -1 /A 4605 0 R >> endobj 5449 0 obj << /Title (function::switch_file) /Parent 5434 0 R /A 4608 0 R >> endobj 5448 0 obj << /Title /Parent 4707 0 R /Prev 5434 0 R /Next 5450 0 R /First 5451 0 R /Last 5452 0 R /Count -13 /A 4611 0 R >> endobj 5451 0 obj << /Title (function::fp32_to_fp64) /Parent 5448 0 R /Next 5453 0 R /A 4614 0 R >> endobj 5453 0 obj << /Title (function::fp_add) /Parent 5448 0 R /Prev 5451 0 R /Next 5454 0 R /A 4617 0 R >> endobj 5454 0 obj << /Title (function::fp_eq) /Parent 5448 0 R /Prev 5453 0 R /Next 5455 0 R /A 4620 0 R >> endobj 5455 0 obj << /Title (function::fp_le) /Parent 5448 0 R /Prev 5454 0 R /Next 5456 0 R /A 4623 0 R >> endobj 5456 0 obj << /Title (function::fp_lt) /Parent 5448 0 R /Prev 5455 0 R /Next 5457 0 R /A 4626 0 R >> endobj 5457 0 obj << /Title (function::fp_mul) /Parent 5448 0 R /Prev 5456 0 R /Next 5458 0 R /A 4629 0 R >> endobj 5458 0 obj << /Title (function::fp_rem) /Parent 5448 0 R /Prev 5457 0 R /Next 5459 0 R /A 4632 0 R >> endobj 5459 0 obj << /Title (function::fp_sqrt) /Parent 5448 0 R /Prev 5458 0 R /Next 5460 0 R /A 4635 0 R >> endobj 5460 0 obj << /Title (function::fp_sub) /Parent 5448 0 R /Prev 5459 0 R /Next 5461 0 R /A 4638 0 R >> endobj 5461 0 obj << /Title (function::fp_to_long) /Parent 5448 0 R /Prev 5460 0 R /Next 5462 0 R /A 4641 0 R >> endobj 5462 0 obj << /Title (function::fp_to_string) /Parent 5448 0 R /Prev 5461 0 R /Next 5463 0 R /A 4644 0 R >> endobj 5463 0 obj << /Title (function::long_to_fp) /Parent 5448 0 R /Prev 5462 0 R /Next 5452 0 R /A 4647 0 R >> endobj 5452 0 obj << /Title (function::string_to_fp) /Parent 5448 0 R /Prev 5463 0 R /A 4650 0 R >> endobj 5450 0 obj << /Title /Parent 4707 0 R /Prev 5448 0 R /Next 5464 0 R /First 5465 0 R /Last 5466 0 R /Count -2 /A 4680 0 R >> endobj 5465 0 obj << /Title (probe::syscall_any) /Parent 5450 0 R /Next 5466 0 R /A 4683 0 R >> endobj 5466 0 obj << /Title (probe::syscall_any.return) /Parent 5450 0 R /Prev 5465 0 R /A 4686 0 R >> endobj 5464 0 obj << /Title /Parent 4707 0 R /Prev 5450 0 R /First 5467 0 R /Last 5468 0 R /Count -3 /A 4689 0 R >> endobj 5467 0 obj << /Title (function::cve_count_metric) /Parent 5464 0 R /Next 5469 0 R /A 4692 0 R >> endobj 5469 0 obj << /Title (function::cve_record_metric) /Parent 5464 0 R /Prev 5467 0 R /Next 5468 0 R /A 4695 0 R >> endobj 5468 0 obj << /Title (function::cve_tmpdisable) /Parent 5464 0 R /Prev 5469 0 R /A 4698 0 R >> endobj 5470 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Italic /Encoding /WinAnsiEncoding >> endobj 5471 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Bold /Encoding /WinAnsiEncoding >> endobj 5472 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier /Encoding /WinAnsiEncoding >> endobj 5473 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Oblique /Encoding /WinAnsiEncoding >> endobj 5474 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj 5475 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Roman /Encoding /WinAnsiEncoding >> endobj 5476 0 obj << /Limits [(API-) (API-)] /Names [(API-) 4197 0 R] >> endobj 5477 0 obj << /Limits [(API-HZ) (API-HZ)] /Names [(API-HZ) 939 0 R] >> endobj 5478 0 obj << /Limits [(API-MAJOR) (API-MAJOR)] /Names [(API-MAJOR) 2961 0 R] >> endobj 5479 0 obj << /Limits [(API-MINOR) (API-MINOR)] /Names [(API-MINOR) 2964 0 R] >> endobj 5480 0 obj << /Limits [(API-MKDEV) (API-MKDEV)] /Names [(API-MKDEV) 2967 0 R] >> endobj 5481 0 obj << /Limits [(API-abort) (API-abort)] /Names [(API-abort) 3177 0 R] >> endobj 5482 0 obj << /Limits [(API-addr) (API-addr)] /Names [(API-addr) 177 0 R] >> endobj 5483 0 obj << /Limits [(API-addr-to-node) (API-addr-to-node)] /Names [(API-addr-to-node) 1200 0 R] >> endobj 5484 0 obj << /Limits [(API-ansi-clear-screen) (API-ansi-clear-screen)] /Names [(API-ansi-clear-screen) 3900 0 R] >> endobj 5485 0 obj << /Limits [(API-ansi-cursor-hide) (API-ansi-cursor-hide)] /Names [(API-ansi-cursor-hide) 3903 0 R] >> endobj 5486 0 obj << /Limits [(API-ansi-cursor-move) (API-ansi-cursor-move)] /Names [(API-ansi-cursor-move) 3906 0 R] >> endobj 5487 0 obj << /Limits [(API-ansi-cursor-restore) (API-ansi-cursor-restore)] /Names [(API-ansi-cursor-restore) 3909 0 R] >> endobj 5488 0 obj << /Limits [(API-ansi-cursor-save) (API-ansi-cursor-save)] /Names [(API-ansi-cursor-save) 3912 0 R] >> endobj 5489 0 obj << /Limits [(API-ansi-cursor-show) (API-ansi-cursor-show)] /Names [(API-ansi-cursor-show) 3915 0 R] >> endobj 5490 0 obj << /Limits [(API-ansi-new-line) (API-ansi-new-line)] /Names [(API-ansi-new-line) 3918 0 R] >> endobj 5491 0 obj << /Limits [(API-ansi-reset-color) (API-ansi-reset-color)] /Names [(API-ansi-reset-color) 3921 0 R] >> endobj 5492 0 obj << /Limits [(API-ansi-set-color) (API-ansi-set-color)] /Names [(API-ansi-set-color) 3924 0 R] >> endobj 5493 0 obj << /Limits [(API-asmlinkage) (API-asmlinkage)] /Names [(API-asmlinkage) 180 0 R] >> endobj 5494 0 obj << /Limits [(API-assert) (API-assert)] /Names [(API-assert) 3180 0 R] >> endobj 5495 0 obj << /Limits [(API-atomic-long-read) (API-atomic-long-read)] /Names [(API-atomic-long-read) 3249 0 R] >> endobj 5496 0 obj << /Limits [(API-atomic-read) (API-atomic-read)] /Names [(API-atomic-read) 3252 0 R] >> endobj 5497 0 obj << /Limits [(API-backtrace) (API-backtrace)] /Names [(API-backtrace) 183 0 R] >> endobj 5498 0 obj << /Limits [(API-bytes-to-string) (API-bytes-to-string)] /Names [(API-bytes-to-string) 1203 0 R] >> endobj 5499 0 obj << /Limits [(API-caller) (API-caller)] /Names [(API-caller) 186 0 R] >> endobj 5500 0 obj << /Limits [(API-caller-addr) (API-caller-addr)] /Names [(API-caller-addr) 189 0 R] >> endobj 5501 0 obj << /Limits [(API-callers) (API-callers)] /Names [(API-callers) 192 0 R] >> endobj 5502 0 obj << /Limits [(API-cmdline-arg) (API-cmdline-arg)] /Names [(API-cmdline-arg) 195 0 R] >> endobj 5503 0 obj << /Limits [(API-cmdline-args) (API-cmdline-args)] /Names [(API-cmdline-args) 198 0 R] >> endobj 5504 0 obj << /Limits [(API-cmdline-str) (API-cmdline-str)] /Names [(API-cmdline-str) 201 0 R] >> endobj 5505 0 obj << /Limits [(API-commit) (API-commit)] /Names [(API-commit) 4551 0 R] >> endobj 5506 0 obj << /Limits [(API-cpu) (API-cpu)] /Names [(API-cpu) 204 0 R] >> endobj 5507 0 obj << /Limits [(API-cpu-clock-ms) (API-cpu-clock-ms)] /Names [(API-cpu-clock-ms) 942 0 R] >> endobj 5508 0 obj << /Limits [(API-cpu-clock-ns) (API-cpu-clock-ns)] /Names [(API-cpu-clock-ns) 945 0 R] >> endobj 5509 0 obj << /Limits [(API-cpu-clock-s) (API-cpu-clock-s)] /Names [(API-cpu-clock-s) 948 0 R] >> endobj 5510 0 obj << /Limits [(API-cpu-clock-us) (API-cpu-clock-us)] /Names [(API-cpu-clock-us) 951 0 R] >> endobj 5511 0 obj << /Limits [(API-cpuid) (API-cpuid)] /Names [(API-cpuid) 207 0 R] >> endobj 5512 0 obj << /Limits [(API-cputime-to-msecs) (API-cputime-to-msecs)] /Names [(API-cputime-to-msecs) 1278 0 R] >> endobj 5513 0 obj << /Limits [(API-cputime-to-string) (API-cputime-to-string)] /Names [(API-cputime-to-string) 1281 0 R] >> endobj 5514 0 obj << /Limits [(API-cputime-to-usecs) (API-cputime-to-usecs)] /Names [(API-cputime-to-usecs) 1284 0 R] >> endobj 5515 0 obj << /Limits [(API-ctime) (API-ctime)] /Names [(API-ctime) 1179 0 R] >> endobj 5516 0 obj << /Limits [(API-current-exe-file) (API-current-exe-file)] /Names [(API-current-exe-file) 210 0 R] >> endobj 5517 0 obj << /Limits [(API-cve-count-metric) (API-cve-count-metric)] /Names [(API-cve-count-metric) 4692 0 R] >> endobj 5518 0 obj << /Limits [(API-cve-record-metric) (API-cve-record-metric)] /Names [(API-cve-record-metric) 4695 0 R] >> endobj 5519 0 obj << /Limits [(API-cve-tmpdisable) (API-cve-tmpdisable)] /Names [(API-cve-tmpdisable) 4698 0 R] >> endobj 5520 0 obj << /Limits [(API-d-name) (API-d-name)] /Names [(API-d-name) 2976 0 R] >> endobj 5521 0 obj << /Limits [(API-d-path) (API-d-path)] /Names [(API-d-path) 2979 0 R] >> endobj 5522 0 obj << /Limits [(API-delete-stopwatch) (API-delete-stopwatch)] /Names [(API-delete-stopwatch) 954 0 R] >> endobj 5523 0 obj << /Limits [(API-discard) (API-discard)] /Names [(API-discard) 4554 0 R] >> endobj 5524 0 obj << /Limits [(API-dump-stack) (API-dump-stack)] /Names [(API-dump-stack) 3183 0 R] >> endobj 5525 0 obj << /Limits [(API-egid) (API-egid)] /Names [(API-egid) 213 0 R] >> endobj 5526 0 obj << /Limits [(API-env-var) (API-env-var)] /Names [(API-env-var) 216 0 R] >> endobj 5527 0 obj << /Limits [(API-errno-str) (API-errno-str)] /Names [(API-errno-str) 2940 0 R] >> endobj 5528 0 obj << /Limits [(API-error) (API-error)] /Names [(API-error) 3186 0 R] >> endobj 5529 0 obj << /Limits [(API-euid) (API-euid)] /Names [(API-euid) 219 0 R] >> endobj 5530 0 obj << /Limits [(API-execname) (API-execname)] /Names [(API-execname) 222 0 R] >> endobj 5531 0 obj << /Limits [(API-exit) (API-exit)] /Names [(API-exit) 3189 0 R] >> endobj 5532 0 obj << /Limits [(API-fastcall) (API-fastcall)] /Names [(API-fastcall) 225 0 R] >> endobj 5533 0 obj << /Limits [(API-format-ipaddr) (API-format-ipaddr)] /Names [(API-format-ipaddr) 1881 0 R] >> endobj 5534 0 obj << /Limits [(API-fp-add) (API-fp-add)] /Names [(API-fp-add) 4617 0 R] >> endobj 5535 0 obj << /Limits [(API-fp-eq) (API-fp-eq)] /Names [(API-fp-eq) 4620 0 R] >> endobj 5536 0 obj << /Limits [(API-fp-le) (API-fp-le)] /Names [(API-fp-le) 4623 0 R] >> endobj 5537 0 obj << /Limits [(API-fp-lt) (API-fp-lt)] /Names [(API-fp-lt) 4626 0 R] >> endobj 5538 0 obj << /Limits [(API-fp-mul) (API-fp-mul)] /Names [(API-fp-mul) 4629 0 R] >> endobj 5539 0 obj << /Limits [(API-fp-rem) (API-fp-rem)] /Names [(API-fp-rem) 4632 0 R] >> endobj 5540 0 obj << /Limits [(API-fp-sqrt) (API-fp-sqrt)] /Names [(API-fp-sqrt) 4635 0 R] >> endobj 5541 0 obj << /Limits [(API-fp-sub) (API-fp-sub)] /Names [(API-fp-sub) 4638 0 R] >> endobj 5542 0 obj << /Limits [(API-fp-to-long) (API-fp-to-long)] /Names [(API-fp-to-long) 4641 0 R] >> endobj 5543 0 obj << /Limits [(API-fp-to-string) (API-fp-to-string)] /Names [(API-fp-to-string) 4644 0 R] >> endobj 5544 0 obj << /Limits [(API-fp32-to-fp64) (API-fp32-to-fp64)] /Names [(API-fp32-to-fp64) 4614 0 R] >> endobj 5545 0 obj << /Limits [(API-ftrace) (API-ftrace)] /Names [(API-ftrace) 3192 0 R] >> endobj 5546 0 obj << /Limits [(API-fullpath-struct-file) (API-fullpath-struct-file)] /Names [(API-fullpath-struct-file) 2982 0 R] >> endobj 5547 0 obj << /Limits [(API-fullpath-struct-nameidata) (API-fullpath-struct-nameidata)] /Names [(API-fullpath-struct-nameidata) 2985 0 R] >> endobj 5548 0 obj << /Limits [(API-fullpath-struct-path) (API-fullpath-struct-path)] /Names [(API-fullpath-struct-path) 2988 0 R] >> endobj 5549 0 obj << /Limits [(API-get-cycles) (API-get-cycles)] /Names [(API-get-cycles) 957 0 R] >> endobj 5550 0 obj << /Limits [(API-get-loadavg-index) (API-get-loadavg-index)] /Names [(API-get-loadavg-index) 2637 0 R] >> endobj 5551 0 obj << /Limits [(API-get-sa-flags) (API-get-sa-flags)] /Names [(API-get-sa-flags) 2670 0 R] >> endobj 5552 0 obj << /Limits [(API-get-sa-handler) (API-get-sa-handler)] /Names [(API-get-sa-handler) 2841 0 R] >> endobj 5553 0 obj << /Limits [(API-gettimeofday-ms) (API-gettimeofday-ms)] /Names [(API-gettimeofday-ms) 960 0 R] >> endobj 5554 0 obj << /Limits [(API-gettimeofday-ns) (API-gettimeofday-ns)] /Names [(API-gettimeofday-ns) 963 0 R] >> endobj 5555 0 obj << /Limits [(API-gettimeofday-s) (API-gettimeofday-s)] /Names [(API-gettimeofday-s) 966 0 R] >> endobj 5556 0 obj << /Limits [(API-gettimeofday-us) (API-gettimeofday-us)] /Names [(API-gettimeofday-us) 969 0 R] >> endobj 5557 0 obj << /Limits [(API-gid) (API-gid)] /Names [(API-gid) 228 0 R] >> endobj 5558 0 obj << /Limits [(API-htonl) (API-htonl)] /Names [(API-htonl) 1884 0 R] >> endobj 5559 0 obj << /Limits [(API-htonll) (API-htonll)] /Names [(API-htonll) 1887 0 R] >> endobj 5560 0 obj << /Limits [(API-htons) (API-htons)] /Names [(API-htons) 1890 0 R] >> endobj 5561 0 obj << /Limits [(API-indent) (API-indent)] /Names [(API-indent) 3927 0 R] >> endobj 5562 0 obj << /Limits [(API-indent-depth) (API-indent-depth)] /Names [(API-indent-depth) 3930 0 R] >> endobj 5563 0 obj << /Limits [(API-inet-get-dest-port) (API-inet-get-dest-port)] /Names [(API-inet-get-dest-port) 2256 0 R] >> endobj 5564 0 obj << /Limits [(API-inet-get-ip-dest) (API-inet-get-ip-dest)] /Names [(API-inet-get-ip-dest) 2259 0 R] >> endobj 5565 0 obj << /Limits [(API-inet-get-ip-source) (API-inet-get-ip-source)] /Names [(API-inet-get-ip-source) 2262 0 R] >> endobj 5566 0 obj << /Limits [(API-inet-get-local-port) (API-inet-get-local-port)] /Names [(API-inet-get-local-port) 2265 0 R] >> endobj 5567 0 obj << /Limits [(API-inode-name) (API-inode-name)] /Names [(API-inode-name) 2991 0 R] >> endobj 5568 0 obj << /Limits [(API-inode-path) (API-inode-path)] /Names [(API-inode-path) 2994 0 R] >> endobj 5569 0 obj << /Limits [(API-int-arg) (API-int-arg)] /Names [(API-int-arg) 231 0 R] >> endobj 5570 0 obj << /Limits [(API-ioblock-end) (API-ioblock-end)] /Names [(API-ioblock-end) 1533 0 R] >> endobj 5571 0 obj << /Limits [(API-ioblock-request) (API-ioblock-request)] /Names [(API-ioblock-request) 1536 0 R] >> endobj 5572 0 obj << /Limits [(API-ioblock-trace-bounce) (API-ioblock-trace-bounce)] /Names [(API-ioblock-trace-bounce) 1539 0 R] >> endobj 5573 0 obj << /Limits [(API-ioblock-trace-end) (API-ioblock-trace-end)] /Names [(API-ioblock-trace-end) 1542 0 R] >> endobj 5574 0 obj << /Limits [(API-ioblock-trace-request) (API-ioblock-trace-request)] /Names [(API-ioblock-trace-request) 1545 0 R] >> endobj 5575 0 obj << /Limits [(API-ioscheduler-elv-add-request) (API-ioscheduler-elv-add-request)] /Names [(API-ioscheduler-elv-add-request) 1548 0 R] >> endobj 5576 0 obj << /Limits [(API-ioscheduler-elv-add-request-kp) (API-ioscheduler-elv-add-request-kp)] /Names [(API-ioscheduler-elv-add-request-kp) 1551 0 R] >> endobj 5577 0 obj << /Limits [(API-ioscheduler-elv-add-request-tp) (API-ioscheduler-elv-add-request-tp)] /Names [(API-ioscheduler-elv-add-request-tp) 1554 0 R] >> endobj 5578 0 obj << /Limits [(API-ioscheduler-elv-completed-request) (API-ioscheduler-elv-completed-request)] /Names [(API-ioscheduler-elv-completed-request) 1557 0 R] >> endobj 5579 0 obj << /Limits [(API-ioscheduler-elv-next-request) (API-ioscheduler-elv-next-request)] /Names [(API-ioscheduler-elv-next-request) 1560 0 R] >> endobj 5580 0 obj << /Limits [(API-ioscheduler-elv-next-request-return) (API-ioscheduler-elv-next-request-return)] /Names [(API-ioscheduler-elv-next-request-return) 1563 0 R] >> endobj 5581 0 obj << /Limits [(API-ioscheduler-trace-elv-abort-request) (API-ioscheduler-trace-elv-abort-request)] /Names [(API-ioscheduler-trace-elv-abort-request) 1566 0 R] >> endobj 5582 0 obj << /Limits [(API-ioscheduler-trace-elv-completed-request) (API-ioscheduler-trace-elv-completed-request)] /Names [(API-ioscheduler-trace-elv-completed-request) 1569 0 R] >> endobj 5583 0 obj << /Limits [(API-ioscheduler-trace-elv-issue-request) (API-ioscheduler-trace-elv-issue-request)] /Names [(API-ioscheduler-trace-elv-issue-request) 1572 0 R] >> endobj 5584 0 obj << /Limits [(API-ioscheduler-trace-elv-requeue-request) (API-ioscheduler-trace-elv-requeue-request)] /Names [(API-ioscheduler-trace-elv-requeue-request) 1575 0 R] >> endobj 5585 0 obj << /Limits [(API-ioscheduler-trace-plug) (API-ioscheduler-trace-plug)] /Names [(API-ioscheduler-trace-plug) 1578 0 R] >> endobj 5586 0 obj << /Limits [(API-ioscheduler-trace-unplug-io) (API-ioscheduler-trace-unplug-io)] /Names [(API-ioscheduler-trace-unplug-io) 1581 0 R] >> endobj 5587 0 obj << /Limits [(API-ioscheduler-trace-unplug-timer) (API-ioscheduler-trace-unplug-timer)] /Names [(API-ioscheduler-trace-unplug-timer) 1584 0 R] >> endobj 5588 0 obj << /Limits [(API-ip-ntop) (API-ip-ntop)] /Names [(API-ip-ntop) 1893 0 R] >> endobj 5589 0 obj << /Limits [(API-ipmib-ForwDatagrams) (API-ipmib-ForwDatagrams)] /Names [(API-ipmib-ForwDatagrams) 2562 0 R] >> endobj 5590 0 obj << /Limits [(API-ipmib-FragFails) (API-ipmib-FragFails)] /Names [(API-ipmib-FragFails) 2565 0 R] >> endobj 5591 0 obj << /Limits [(API-ipmib-FragOKs) (API-ipmib-FragOKs)] /Names [(API-ipmib-FragOKs) 2568 0 R] >> endobj 5592 0 obj << /Limits [(API-ipmib-InAddrErrors) (API-ipmib-InAddrErrors)] /Names [(API-ipmib-InAddrErrors) 2571 0 R] >> endobj 5593 0 obj << /Limits [(API-ipmib-InDiscards) (API-ipmib-InDiscards)] /Names [(API-ipmib-InDiscards) 2574 0 R] >> endobj 5594 0 obj << /Limits [(API-ipmib-InNoRoutes) (API-ipmib-InNoRoutes)] /Names [(API-ipmib-InNoRoutes) 2577 0 R] >> endobj 5595 0 obj << /Limits [(API-ipmib-InReceives) (API-ipmib-InReceives)] /Names [(API-ipmib-InReceives) 2580 0 R] >> endobj 5596 0 obj << /Limits [(API-ipmib-InUnknownProtos) (API-ipmib-InUnknownProtos)] /Names [(API-ipmib-InUnknownProtos) 2583 0 R] >> endobj 5597 0 obj << /Limits [(API-ipmib-OutRequests) (API-ipmib-OutRequests)] /Names [(API-ipmib-OutRequests) 2586 0 R] >> endobj 5598 0 obj << /Limits [(API-ipmib-ReasmReqds) (API-ipmib-ReasmReqds)] /Names [(API-ipmib-ReasmReqds) 2589 0 R] >> endobj 5599 0 obj << /Limits [(API-ipmib-ReasmTimeout) (API-ipmib-ReasmTimeout)] /Names [(API-ipmib-ReasmTimeout) 2592 0 R] >> endobj 5600 0 obj << /Limits [(API-ipmib-filter-key) (API-ipmib-filter-key)] /Names [(API-ipmib-filter-key) 2523 0 R] >> endobj 5601 0 obj << /Limits [(API-ipmib-get-proto) (API-ipmib-get-proto)] /Names [(API-ipmib-get-proto) 2526 0 R] >> endobj 5602 0 obj << /Limits [(API-ipmib-local-addr) (API-ipmib-local-addr)] /Names [(API-ipmib-local-addr) 2529 0 R] >> endobj 5603 0 obj << /Limits [(API-ipmib-remote-addr) (API-ipmib-remote-addr)] /Names [(API-ipmib-remote-addr) 2532 0 R] >> endobj 5604 0 obj << /Limits [(API-ipmib-tcp-local-port) (API-ipmib-tcp-local-port)] /Names [(API-ipmib-tcp-local-port) 2535 0 R] >> endobj 5605 0 obj << /Limits [(API-ipmib-tcp-remote-port) (API-ipmib-tcp-remote-port)] /Names [(API-ipmib-tcp-remote-port) 2538 0 R] >> endobj 5606 0 obj << /Limits [(API-irq-handler-entry) (API-irq-handler-entry)] /Names [(API-irq-handler-entry) 1854 0 R] >> endobj 5607 0 obj << /Limits [(API-irq-handler-exit) (API-irq-handler-exit)] /Names [(API-irq-handler-exit) 1857 0 R] >> endobj 5608 0 obj << /Limits [(API-is-myproc) (API-is-myproc)] /Names [(API-is-myproc) 234 0 R] >> endobj 5609 0 obj << /Limits [(API-is-return) (API-is-return)] /Names [(API-is-return) 237 0 R] >> endobj 5610 0 obj << /Limits [(API-is-sig-blocked) (API-is-sig-blocked)] /Names [(API-is-sig-blocked) 2844 0 R] >> endobj 5611 0 obj << /Limits [(API-isdigit) (API-isdigit)] /Names [(API-isdigit) 3852 0 R] >> endobj 5612 0 obj << /Limits [(API-isinstr) (API-isinstr)] /Names [(API-isinstr) 3855 0 R] >> endobj 5613 0 obj << /Limits [(API-jiffies) (API-jiffies)] /Names [(API-jiffies) 972 0 R] >> endobj 5614 0 obj << /Limits [(API-json-add-array) (API-json-add-array)] /Names [(API-json-add-array) 4566 0 R] >> endobj 5615 0 obj << /Limits [(API-json-add-array-numeric-metric) (API-json-add-array-numeric-metric)] /Names [(API-json-add-array-numeric-metric) 4569 0 R] >> endobj 5616 0 obj << /Limits [(API-json-add-array-string-metric) (API-json-add-array-string-metric)] /Names [(API-json-add-array-string-metric) 4572 0 R] >> endobj 5617 0 obj << /Limits [(API-json-add-numeric-metric) (API-json-add-numeric-metric)] /Names [(API-json-add-numeric-metric) 4575 0 R] >> endobj 5618 0 obj << /Limits [(API-json-add-string-metric) (API-json-add-string-metric)] /Names [(API-json-add-string-metric) 4578 0 R] >> endobj 5619 0 obj << /Limits [(API-json-data) (API-json-data)] /Names [(API-json-data) 4602 0 R] >> endobj 5620 0 obj << /Limits [(API-json-output-array-numeric-value) (API-json-output-array-numeric-value)] /Names [(API-json-output-array-numeric-value) 4584 0 R] >> endobj 5621 0 obj << /Limits [(API-json-output-array-string-value) (API-json-output-array-string-value)] /Names [(API-json-output-array-string-value) 4587 0 R] >> endobj 5622 0 obj << /Limits [(API-json-output-data-end) (API-json-output-data-end)] /Names [(API-json-output-data-end) 4590 0 R] >> endobj 5623 0 obj << /Limits [(API-json-output-data-start) (API-json-output-data-start)] /Names [(API-json-output-data-start) 4593 0 R] >> endobj 5624 0 obj << /Limits [(API-json-output-numeric-value) (API-json-output-numeric-value)] /Names [(API-json-output-numeric-value) 4596 0 R] >> endobj 5625 0 obj << /Limits [(API-json-output-string-value) (API-json-output-string-value)] /Names [(API-json-output-string-value) 4599 0 R] >> endobj 5626 0 obj << /Limits [(API-json-set-prefix) (API-json-set-prefix)] /Names [(API-json-set-prefix) 4581 0 R] >> endobj 5627 0 obj << /Limits [(API-kernel-buffer-quoted) (API-kernel-buffer-quoted)] /Names [(API-kernel-buffer-quoted) 3255 0 R] >> endobj 5628 0 obj << /Limits [(API-kernel-buffer-quoted-error) (API-kernel-buffer-quoted-error)] /Names [(API-kernel-buffer-quoted-error) 3258 0 R] >> endobj 5629 0 obj << /Limits [(API-kernel-char) (API-kernel-char)] /Names [(API-kernel-char) 3261 0 R] >> endobj 5630 0 obj << /Limits [(API-kernel-int) (API-kernel-int)] /Names [(API-kernel-int) 3264 0 R] >> endobj 5631 0 obj << /Limits [(API-kernel-long) (API-kernel-long)] /Names [(API-kernel-long) 3267 0 R] >> endobj 5632 0 obj << /Limits [(API-kernel-or-user-string-quoted) (API-kernel-or-user-string-quoted)] /Names [(API-kernel-or-user-string-quoted) 3270 0 R] >> endobj 5633 0 obj << /Limits [(API-kernel-or-user-string-quoted-utf16) (API-kernel-or-user-string-quoted-utf16)] /Names [(API-kernel-or-user-string-quoted-utf16) 3273 0 R] >> endobj 5634 0 obj << /Limits [(API-kernel-or-user-string-quoted-utf32) (API-kernel-or-user-string-quoted-utf32)] /Names [(API-kernel-or-user-string-quoted-utf32) 3276 0 R] >> endobj 5635 0 obj << /Limits [(API-kernel-pointer) (API-kernel-pointer)] /Names [(API-kernel-pointer) 3279 0 R] >> endobj 5636 0 obj << /Limits [(API-kernel-short) (API-kernel-short)] /Names [(API-kernel-short) 3282 0 R] >> endobj 5637 0 obj << /Limits [(API-kernel-string) (API-kernel-string)] /Names [(API-kernel-string) 3285 0 R] >> endobj 5638 0 obj << /Limits [(API-kernel-string-n) (API-kernel-string-n)] /Names [(API-kernel-string-n) 3288 0 R] >> endobj 5639 0 obj << /Limits [(API-kernel-string-quoted) (API-kernel-string-quoted)] /Names [(API-kernel-string-quoted) 3291 0 R] >> endobj 5640 0 obj << /Limits [(API-kernel-string-quoted-utf16) (API-kernel-string-quoted-utf16)] /Names [(API-kernel-string-quoted-utf16) 3294 0 R] >> endobj 5641 0 obj << /Limits [(API-kernel-string-quoted-utf32) (API-kernel-string-quoted-utf32)] /Names [(API-kernel-string-quoted-utf32) 3297 0 R] >> endobj 5642 0 obj << /Limits [(API-kernel-string-utf16) (API-kernel-string-utf16)] /Names [(API-kernel-string-utf16) 3300 0 R] >> endobj 5643 0 obj << /Limits [(API-kernel-string-utf32) (API-kernel-string-utf32)] /Names [(API-kernel-string-utf32) 3303 0 R] >> endobj 5644 0 obj << /Limits [(API-kprocess-create) (API-kprocess-create)] /Names [(API-kprocess-create) 2649 0 R] >> endobj 5645 0 obj << /Limits [(API-kprocess-exec) (API-kprocess-exec)] /Names [(API-kprocess-exec) 2652 0 R] >> endobj 5646 0 obj << /Limits [(API-kprocess-exec-complete) (API-kprocess-exec-complete)] /Names [(API-kprocess-exec-complete) 2655 0 R] >> endobj 5647 0 obj << /Limits [(API-kprocess-exit) (API-kprocess-exit)] /Names [(API-kprocess-exit) 2658 0 R] >> endobj 5648 0 obj << /Limits [(API-kprocess-release) (API-kprocess-release)] /Names [(API-kprocess-release) 2661 0 R] >> endobj 5649 0 obj << /Limits [(API-kprocess-start) (API-kprocess-start)] /Names [(API-kprocess-start) 2664 0 R] >> endobj 5650 0 obj << /Limits [(API-ktime-get-ns) (API-ktime-get-ns)] /Names [(API-ktime-get-ns) 975 0 R] >> endobj 5651 0 obj << /Limits [(API-linuxmib-DelayedACKs) (API-linuxmib-DelayedACKs)] /Names [(API-linuxmib-DelayedACKs) 2595 0 R] >> endobj 5652 0 obj << /Limits [(API-linuxmib-ListenDrops) (API-linuxmib-ListenDrops)] /Names [(API-linuxmib-ListenDrops) 2598 0 R] >> endobj 5653 0 obj << /Limits [(API-linuxmib-ListenOverflows) (API-linuxmib-ListenOverflows)] /Names [(API-linuxmib-ListenOverflows) 2601 0 R] >> endobj 5654 0 obj << /Limits [(API-linuxmib-TCPMemoryPressures) (API-linuxmib-TCPMemoryPressures)] /Names [(API-linuxmib-TCPMemoryPressures) 2604 0 R] >> endobj 5655 0 obj << /Limits [(API-linuxmib-filter-key) (API-linuxmib-filter-key)] /Names [(API-linuxmib-filter-key) 2541 0 R] >> endobj 5656 0 obj << /Limits [(API-local-clock-ms) (API-local-clock-ms)] /Names [(API-local-clock-ms) 978 0 R] >> endobj 5657 0 obj << /Limits [(API-local-clock-ns) (API-local-clock-ns)] /Names [(API-local-clock-ns) 981 0 R] >> endobj 5658 0 obj << /Limits [(API-local-clock-s) (API-local-clock-s)] /Names [(API-local-clock-s) 1152 0 R] >> endobj 5659 0 obj << /Limits [(API-local-clock-us) (API-local-clock-us)] /Names [(API-local-clock-us) 1155 0 R] >> endobj 5660 0 obj << /Limits [(API-log) (API-log)] /Names [(API-log) 3195 0 R] >> endobj 5661 0 obj << /Limits [(API-long-arg) (API-long-arg)] /Names [(API-long-arg) 240 0 R] >> endobj 5662 0 obj << /Limits [(API-long-to-fp) (API-long-to-fp)] /Names [(API-long-to-fp) 4647 0 R] >> endobj 5663 0 obj << /Limits [(API-longlong-arg) (API-longlong-arg)] /Names [(API-longlong-arg) 243 0 R] >> endobj 5664 0 obj << /Limits [(API-matched) (API-matched)] /Names [(API-matched) 3858 0 R] >> endobj 5665 0 obj << /Limits [(API-matched-str) (API-matched-str)] /Names [(API-matched-str) 3861 0 R] >> endobj 5666 0 obj << /Limits [(API-mdelay) (API-mdelay)] /Names [(API-mdelay) 3837 0 R] >> endobj 5667 0 obj << /Limits [(API-mem-page-size) (API-mem-page-size)] /Names [(API-mem-page-size) 1206 0 R] >> endobj 5668 0 obj << /Limits [(API-modname) (API-modname)] /Names [(API-modname) 246 0 R] >> endobj 5669 0 obj << /Limits [(API-module-name) (API-module-name)] /Names [(API-module-name) 249 0 R] >> endobj 5670 0 obj << /Limits [(API-module-size) (API-module-size)] /Names [(API-module-size) 252 0 R] >> endobj 5671 0 obj << /Limits [(API-msecs-to-string) (API-msecs-to-string)] /Names [(API-msecs-to-string) 1287 0 R] >> endobj 5672 0 obj << /Limits [(API-netdev-change-mac) (API-netdev-change-mac)] /Names [(API-netdev-change-mac) 1905 0 R] >> endobj 5673 0 obj << /Limits [(API-netdev-change-mtu) (API-netdev-change-mtu)] /Names [(API-netdev-change-mtu) 1908 0 R] >> endobj 5674 0 obj << /Limits [(API-netdev-change-rx-flag) (API-netdev-change-rx-flag)] /Names [(API-netdev-change-rx-flag) 1911 0 R] >> endobj 5675 0 obj << /Limits [(API-netdev-close) (API-netdev-close)] /Names [(API-netdev-close) 1914 0 R] >> endobj 5676 0 obj << /Limits [(API-netdev-get-stats) (API-netdev-get-stats)] /Names [(API-netdev-get-stats) 1917 0 R] >> endobj 5677 0 obj << /Limits [(API-netdev-hard-transmit) (API-netdev-hard-transmit)] /Names [(API-netdev-hard-transmit) 1920 0 R] >> endobj 5678 0 obj << /Limits [(API-netdev-ioctl) (API-netdev-ioctl)] /Names [(API-netdev-ioctl) 1923 0 R] >> endobj 5679 0 obj << /Limits [(API-netdev-open) (API-netdev-open)] /Names [(API-netdev-open) 1926 0 R] >> endobj 5680 0 obj << /Limits [(API-netdev-receive) (API-netdev-receive)] /Names [(API-netdev-receive) 1929 0 R] >> endobj 5681 0 obj << /Limits [(API-netdev-register) (API-netdev-register)] /Names [(API-netdev-register) 1932 0 R] >> endobj 5682 0 obj << /Limits [(API-netdev-rx) (API-netdev-rx)] /Names [(API-netdev-rx) 1935 0 R] >> endobj 5683 0 obj << /Limits [(API-netdev-set-promiscuity) (API-netdev-set-promiscuity)] /Names [(API-netdev-set-promiscuity) 1938 0 R] >> endobj 5684 0 obj << /Limits [(API-netdev-transmit) (API-netdev-transmit)] /Names [(API-netdev-transmit) 1941 0 R] >> endobj 5685 0 obj << /Limits [(API-netdev-unregister) (API-netdev-unregister)] /Names [(API-netdev-unregister) 1944 0 R] >> endobj 5686 0 obj << /Limits [(API-netfilter-arp-forward) (API-netfilter-arp-forward)] /Names [(API-netfilter-arp-forward) 1947 0 R] >> endobj 5687 0 obj << /Limits [(API-netfilter-arp-in) (API-netfilter-arp-in)] /Names [(API-netfilter-arp-in) 1950 0 R] >> endobj 5688 0 obj << /Limits [(API-netfilter-arp-out) (API-netfilter-arp-out)] /Names [(API-netfilter-arp-out) 1953 0 R] >> endobj 5689 0 obj << /Limits [(API-netfilter-bridge-forward) (API-netfilter-bridge-forward)] /Names [(API-netfilter-bridge-forward) 1956 0 R] >> endobj 5690 0 obj << /Limits [(API-netfilter-bridge-local-in) (API-netfilter-bridge-local-in)] /Names [(API-netfilter-bridge-local-in) 1959 0 R] >> endobj 5691 0 obj << /Limits [(API-netfilter-bridge-local-out) (API-netfilter-bridge-local-out)] /Names [(API-netfilter-bridge-local-out) 1962 0 R] >> endobj 5692 0 obj << /Limits [(API-netfilter-bridge-post-routing) (API-netfilter-bridge-post-routing)] /Names [(API-netfilter-bridge-post-routing) 1965 0 R] >> endobj 5693 0 obj << /Limits [(API-netfilter-bridge-pre-routing) (API-netfilter-bridge-pre-routing)] /Names [(API-netfilter-bridge-pre-routing) 1968 0 R] >> endobj 5694 0 obj << /Limits [(API-netfilter-ip-forward) (API-netfilter-ip-forward)] /Names [(API-netfilter-ip-forward) 1971 0 R] >> endobj 5695 0 obj << /Limits [(API-netfilter-ip-local-in) (API-netfilter-ip-local-in)] /Names [(API-netfilter-ip-local-in) 1974 0 R] >> endobj 5696 0 obj << /Limits [(API-netfilter-ip-local-out) (API-netfilter-ip-local-out)] /Names [(API-netfilter-ip-local-out) 1977 0 R] >> endobj 5697 0 obj << /Limits [(API-netfilter-ip-post-routing) (API-netfilter-ip-post-routing)] /Names [(API-netfilter-ip-post-routing) 1980 0 R] >> endobj 5698 0 obj << /Limits [(API-netfilter-ip-pre-routing) (API-netfilter-ip-pre-routing)] /Names [(API-netfilter-ip-pre-routing) 1983 0 R] >> endobj 5699 0 obj << /Limits [(API-nfs-aop-readahead) (API-nfs-aop-readahead)] /Names [(API-nfs-aop-readahead) 4200 0 R] >> endobj 5700 0 obj << /Limits [(API-nfs-aop-readpage) (API-nfs-aop-readpage)] /Names [(API-nfs-aop-readpage) 4203 0 R] >> endobj 5701 0 obj << /Limits [(API-nfs-aop-readpages) (API-nfs-aop-readpages)] /Names [(API-nfs-aop-readpages) 4206 0 R] >> endobj 5702 0 obj << /Limits [(API-nfs-aop-release-page) (API-nfs-aop-release-page)] /Names [(API-nfs-aop-release-page) 4209 0 R] >> endobj 5703 0 obj << /Limits [(API-nfs-aop-set-page-dirty) (API-nfs-aop-set-page-dirty)] /Names [(API-nfs-aop-set-page-dirty) 4212 0 R] >> endobj 5704 0 obj << /Limits [(API-nfs-aop-write-begin) (API-nfs-aop-write-begin)] /Names [(API-nfs-aop-write-begin) 4215 0 R] >> endobj 5705 0 obj << /Limits [(API-nfs-aop-write-end) (API-nfs-aop-write-end)] /Names [(API-nfs-aop-write-end) 4218 0 R] >> endobj 5706 0 obj << /Limits [(API-nfs-aop-writepage) (API-nfs-aop-writepage)] /Names [(API-nfs-aop-writepage) 4221 0 R] >> endobj 5707 0 obj << /Limits [(API-nfs-aop-writepages) (API-nfs-aop-writepages)] /Names [(API-nfs-aop-writepages) 4224 0 R] >> endobj 5708 0 obj << /Limits [(API-nfs-fop-aio-read) (API-nfs-fop-aio-read)] /Names [(API-nfs-fop-aio-read) 4227 0 R] >> endobj 5709 0 obj << /Limits [(API-nfs-fop-aio-write) (API-nfs-fop-aio-write)] /Names [(API-nfs-fop-aio-write) 4230 0 R] >> endobj 5710 0 obj << /Limits [(API-nfs-fop-check-flags) (API-nfs-fop-check-flags)] /Names [(API-nfs-fop-check-flags) 4233 0 R] >> endobj 5711 0 obj << /Limits [(API-nfs-fop-flush) (API-nfs-fop-flush)] /Names [(API-nfs-fop-flush) 4236 0 R] >> endobj 5712 0 obj << /Limits [(API-nfs-fop-fsync) (API-nfs-fop-fsync)] /Names [(API-nfs-fop-fsync) 4239 0 R] >> endobj 5713 0 obj << /Limits [(API-nfs-fop-llseek) (API-nfs-fop-llseek)] /Names [(API-nfs-fop-llseek) 4242 0 R] >> endobj 5714 0 obj << /Limits [(API-nfs-fop-lock) (API-nfs-fop-lock)] /Names [(API-nfs-fop-lock) 4245 0 R] >> endobj 5715 0 obj << /Limits [(API-nfs-fop-mmap) (API-nfs-fop-mmap)] /Names [(API-nfs-fop-mmap) 4248 0 R] >> endobj 5716 0 obj << /Limits [(API-nfs-fop-open) (API-nfs-fop-open)] /Names [(API-nfs-fop-open) 4251 0 R] >> endobj 5717 0 obj << /Limits [(API-nfs-fop-read) (API-nfs-fop-read)] /Names [(API-nfs-fop-read) 4254 0 R] >> endobj 5718 0 obj << /Limits [(API-nfs-fop-read-iter) (API-nfs-fop-read-iter)] /Names [(API-nfs-fop-read-iter) 4257 0 R] >> endobj 5719 0 obj << /Limits [(API-nfs-fop-release) (API-nfs-fop-release)] /Names [(API-nfs-fop-release) 4260 0 R] >> endobj 5720 0 obj << /Limits [(API-nfs-fop-sendfile) (API-nfs-fop-sendfile)] /Names [(API-nfs-fop-sendfile) 4263 0 R] >> endobj 5721 0 obj << /Limits [(API-nfs-fop-write) (API-nfs-fop-write)] /Names [(API-nfs-fop-write) 4266 0 R] >> endobj 5722 0 obj << /Limits [(API-nfs-fop-write-iter) (API-nfs-fop-write-iter)] /Names [(API-nfs-fop-write-iter) 4269 0 R] >> endobj 5723 0 obj << /Limits [(API-nfs-proc-commit) (API-nfs-proc-commit)] /Names [(API-nfs-proc-commit) 4272 0 R] >> endobj 5724 0 obj << /Limits [(API-nfs-proc-commit-done) (API-nfs-proc-commit-done)] /Names [(API-nfs-proc-commit-done) 4275 0 R] >> endobj 5725 0 obj << /Limits [(API-nfs-proc-commit-setup) (API-nfs-proc-commit-setup)] /Names [(API-nfs-proc-commit-setup) 4278 0 R] >> endobj 5726 0 obj << /Limits [(API-nfs-proc-create) (API-nfs-proc-create)] /Names [(API-nfs-proc-create) 4281 0 R] >> endobj 5727 0 obj << /Limits [(API-nfs-proc-handle-exception) (API-nfs-proc-handle-exception)] /Names [(API-nfs-proc-handle-exception) 4284 0 R] >> endobj 5728 0 obj << /Limits [(API-nfs-proc-lookup) (API-nfs-proc-lookup)] /Names [(API-nfs-proc-lookup) 4287 0 R] >> endobj 5729 0 obj << /Limits [(API-nfs-proc-open) (API-nfs-proc-open)] /Names [(API-nfs-proc-open) 4290 0 R] >> endobj 5730 0 obj << /Limits [(API-nfs-proc-read) (API-nfs-proc-read)] /Names [(API-nfs-proc-read) 4293 0 R] >> endobj 5731 0 obj << /Limits [(API-nfs-proc-read-done) (API-nfs-proc-read-done)] /Names [(API-nfs-proc-read-done) 4296 0 R] >> endobj 5732 0 obj << /Limits [(API-nfs-proc-read-setup) (API-nfs-proc-read-setup)] /Names [(API-nfs-proc-read-setup) 4299 0 R] >> endobj 5733 0 obj << /Limits [(API-nfs-proc-release) (API-nfs-proc-release)] /Names [(API-nfs-proc-release) 4302 0 R] >> endobj 5734 0 obj << /Limits [(API-nfs-proc-remove) (API-nfs-proc-remove)] /Names [(API-nfs-proc-remove) 4305 0 R] >> endobj 5735 0 obj << /Limits [(API-nfs-proc-rename) (API-nfs-proc-rename)] /Names [(API-nfs-proc-rename) 4308 0 R] >> endobj 5736 0 obj << /Limits [(API-nfs-proc-rename-done) (API-nfs-proc-rename-done)] /Names [(API-nfs-proc-rename-done) 4311 0 R] >> endobj 5737 0 obj << /Limits [(API-nfs-proc-rename-setup) (API-nfs-proc-rename-setup)] /Names [(API-nfs-proc-rename-setup) 4314 0 R] >> endobj 5738 0 obj << /Limits [(API-nfs-proc-write) (API-nfs-proc-write)] /Names [(API-nfs-proc-write) 4317 0 R] >> endobj 5739 0 obj << /Limits [(API-nfs-proc-write-done) (API-nfs-proc-write-done)] /Names [(API-nfs-proc-write-done) 4320 0 R] >> endobj 5740 0 obj << /Limits [(API-nfs-proc-write-setup) (API-nfs-proc-write-setup)] /Names [(API-nfs-proc-write-setup) 4491 0 R] >> endobj 5741 0 obj << /Limits [(API-nfsd-close) (API-nfsd-close)] /Names [(API-nfsd-close) 4494 0 R] >> endobj 5742 0 obj << /Limits [(API-nfsd-commit) (API-nfsd-commit)] /Names [(API-nfsd-commit) 4497 0 R] >> endobj 5743 0 obj << /Limits [(API-nfsd-create) (API-nfsd-create)] /Names [(API-nfsd-create) 4500 0 R] >> endobj 5744 0 obj << /Limits [(API-nfsd-createv3) (API-nfsd-createv3)] /Names [(API-nfsd-createv3) 4503 0 R] >> endobj 5745 0 obj << /Limits [(API-nfsd-dispatch) (API-nfsd-dispatch)] /Names [(API-nfsd-dispatch) 4506 0 R] >> endobj 5746 0 obj << /Limits [(API-nfsd-lookup) (API-nfsd-lookup)] /Names [(API-nfsd-lookup) 4509 0 R] >> endobj 5747 0 obj << /Limits [(API-nfsd-open) (API-nfsd-open)] /Names [(API-nfsd-open) 4512 0 R] >> endobj 5748 0 obj << /Limits [(API-nfsd-proc-commit) (API-nfsd-proc-commit)] /Names [(API-nfsd-proc-commit) 4515 0 R] >> endobj 5749 0 obj << /Limits [(API-nfsd-proc-create) (API-nfsd-proc-create)] /Names [(API-nfsd-proc-create) 4518 0 R] >> endobj 5750 0 obj << /Limits [(API-nfsd-proc-lookup) (API-nfsd-proc-lookup)] /Names [(API-nfsd-proc-lookup) 4521 0 R] >> endobj 5751 0 obj << /Limits [(API-nfsd-proc-read) (API-nfsd-proc-read)] /Names [(API-nfsd-proc-read) 4524 0 R] >> endobj 5752 0 obj << /Limits [(API-nfsd-proc-remove) (API-nfsd-proc-remove)] /Names [(API-nfsd-proc-remove) 4527 0 R] >> endobj 5753 0 obj << /Limits [(API-nfsd-proc-rename) (API-nfsd-proc-rename)] /Names [(API-nfsd-proc-rename) 4530 0 R] >> endobj 5754 0 obj << /Limits [(API-nfsd-proc-write) (API-nfsd-proc-write)] /Names [(API-nfsd-proc-write) 4533 0 R] >> endobj 5755 0 obj << /Limits [(API-nfsd-read) (API-nfsd-read)] /Names [(API-nfsd-read) 4536 0 R] >> endobj 5756 0 obj << /Limits [(API-nfsd-rename) (API-nfsd-rename)] /Names [(API-nfsd-rename) 4539 0 R] >> endobj 5757 0 obj << /Limits [(API-nfsd-unlink) (API-nfsd-unlink)] /Names [(API-nfsd-unlink) 4542 0 R] >> endobj 5758 0 obj << /Limits [(API-nfsd-write) (API-nfsd-write)] /Names [(API-nfsd-write) 4545 0 R] >> endobj 5759 0 obj << /Limits [(API-nfsderror) (API-nfsderror)] /Names [(API-nfsderror) 4194 0 R] >> endobj 5760 0 obj << /Limits [(API-ngroups) (API-ngroups)] /Names [(API-ngroups) 3864 0 R] >> endobj 5761 0 obj << /Limits [(API-ns-egid) (API-ns-egid)] /Names [(API-ns-egid) 255 0 R] >> endobj 5762 0 obj << /Limits [(API-ns-euid) (API-ns-euid)] /Names [(API-ns-euid) 258 0 R] >> endobj 5763 0 obj << /Limits [(API-ns-gid) (API-ns-gid)] /Names [(API-ns-gid) 261 0 R] >> endobj 5764 0 obj << /Limits [(API-ns-pgrp) (API-ns-pgrp)] /Names [(API-ns-pgrp) 264 0 R] >> endobj 5765 0 obj << /Limits [(API-ns-pid) (API-ns-pid)] /Names [(API-ns-pid) 267 0 R] >> endobj 5766 0 obj << /Limits [(API-ns-ppid) (API-ns-ppid)] /Names [(API-ns-ppid) 270 0 R] >> endobj 5767 0 obj << /Limits [(API-ns-sid) (API-ns-sid)] /Names [(API-ns-sid) 273 0 R] >> endobj 5768 0 obj << /Limits [(API-ns-tid) (API-ns-tid)] /Names [(API-ns-tid) 276 0 R] >> endobj 5769 0 obj << /Limits [(API-ns-uid) (API-ns-uid)] /Names [(API-ns-uid) 279 0 R] >> endobj 5770 0 obj << /Limits [(API-nsecs-to-string) (API-nsecs-to-string)] /Names [(API-nsecs-to-string) 1290 0 R] >> endobj 5771 0 obj << /Limits [(API-ntohl) (API-ntohl)] /Names [(API-ntohl) 1896 0 R] >> endobj 5772 0 obj << /Limits [(API-ntohll) (API-ntohll)] /Names [(API-ntohll) 1899 0 R] >> endobj 5773 0 obj << /Limits [(API-ntohs) (API-ntohs)] /Names [(API-ntohs) 1902 0 R] >> endobj 5774 0 obj << /Limits [(API-pages-to-string) (API-pages-to-string)] /Names [(API-pages-to-string) 1209 0 R] >> endobj 5775 0 obj << /Limits [(API-panic) (API-panic)] /Names [(API-panic) 3840 0 R] >> endobj 5776 0 obj << /Limits [(API-pexecname) (API-pexecname)] /Names [(API-pexecname) 282 0 R] >> endobj 5777 0 obj << /Limits [(API-pgrp) (API-pgrp)] /Names [(API-pgrp) 285 0 R] >> endobj 5778 0 obj << /Limits [(API-pid) (API-pid)] /Names [(API-pid) 288 0 R] >> endobj 5779 0 obj << /Limits [(API-pid2execname) (API-pid2execname)] /Names [(API-pid2execname) 291 0 R] >> endobj 5780 0 obj << /Limits [(API-pid2task) (API-pid2task)] /Names [(API-pid2task) 294 0 R] >> endobj 5781 0 obj << /Limits [(API-pn) (API-pn)] /Names [(API-pn) 297 0 R] >> endobj 5782 0 obj << /Limits [(API-pnlabel) (API-pnlabel)] /Names [(API-pnlabel) 300 0 R] >> endobj 5783 0 obj << /Limits [(API-pointer-arg) (API-pointer-arg)] /Names [(API-pointer-arg) 303 0 R] >> endobj 5784 0 obj << /Limits [(API-pp) (API-pp)] /Names [(API-pp) 306 0 R] >> endobj 5785 0 obj << /Limits [(API-ppfunc) (API-ppfunc)] /Names [(API-ppfunc) 309 0 R] >> endobj 5786 0 obj << /Limits [(API-ppid) (API-ppid)] /Names [(API-ppid) 312 0 R] >> endobj 5787 0 obj << /Limits [(API-print-backtrace) (API-print-backtrace)] /Names [(API-print-backtrace) 315 0 R] >> endobj 5788 0 obj << /Limits [(API-print-backtrace-fileline) (API-print-backtrace-fileline)] /Names [(API-print-backtrace-fileline) 318 0 R] >> endobj 5789 0 obj << /Limits [(API-print-regs) (API-print-regs)] /Names [(API-print-regs) 321 0 R] >> endobj 5790 0 obj << /Limits [(API-print-stack) (API-print-stack)] /Names [(API-print-stack) 492 0 R] >> endobj 5791 0 obj << /Limits [(API-print-syms) (API-print-syms)] /Names [(API-print-syms) 495 0 R] >> endobj 5792 0 obj << /Limits [(API-print-ubacktrace) (API-print-ubacktrace)] /Names [(API-print-ubacktrace) 498 0 R] >> endobj 5793 0 obj << /Limits [(API-print-ubacktrace-brief) (API-print-ubacktrace-brief)] /Names [(API-print-ubacktrace-brief) 501 0 R] >> endobj 5794 0 obj << /Limits [(API-print-ubacktrace-fileline) (API-print-ubacktrace-fileline)] /Names [(API-print-ubacktrace-fileline) 504 0 R] >> endobj 5795 0 obj << /Limits [(API-print-ustack) (API-print-ustack)] /Names [(API-print-ustack) 507 0 R] >> endobj 5796 0 obj << /Limits [(API-print-usyms) (API-print-usyms)] /Names [(API-print-usyms) 510 0 R] >> endobj 5797 0 obj << /Limits [(API-printk) (API-printk)] /Names [(API-printk) 3198 0 R] >> endobj 5798 0 obj << /Limits [(API-probe-type) (API-probe-type)] /Names [(API-probe-type) 513 0 R] >> endobj 5799 0 obj << /Limits [(API-probefunc) (API-probefunc)] /Names [(API-probefunc) 516 0 R] >> endobj 5800 0 obj << /Limits [(API-probemod) (API-probemod)] /Names [(API-probemod) 519 0 R] >> endobj 5801 0 obj << /Limits [(API-proc-mem-data) (API-proc-mem-data)] /Names [(API-proc-mem-data) 1212 0 R] >> endobj 5802 0 obj << /Limits [(API-proc-mem-rss) (API-proc-mem-rss)] /Names [(API-proc-mem-rss) 1215 0 R] >> endobj 5803 0 obj << /Limits [(API-proc-mem-shr) (API-proc-mem-shr)] /Names [(API-proc-mem-shr) 1218 0 R] >> endobj 5804 0 obj << /Limits [(API-proc-mem-size) (API-proc-mem-size)] /Names [(API-proc-mem-size) 1221 0 R] >> endobj 5805 0 obj << /Limits [(API-proc-mem-string) (API-proc-mem-string)] /Names [(API-proc-mem-string) 1224 0 R] >> endobj 5806 0 obj << /Limits [(API-proc-mem-txt) (API-proc-mem-txt)] /Names [(API-proc-mem-txt) 1227 0 R] >> endobj 5807 0 obj << /Limits [(API-pstrace) (API-pstrace)] /Names [(API-pstrace) 522 0 R] >> endobj 5808 0 obj << /Limits [(API-qs-done) (API-qs-done)] /Names [(API-qs-done) 3207 0 R] >> endobj 5809 0 obj << /Limits [(API-qs-run) (API-qs-run)] /Names [(API-qs-run) 3210 0 R] >> endobj 5810 0 obj << /Limits [(API-qs-wait) (API-qs-wait)] /Names [(API-qs-wait) 3213 0 R] >> endobj 5811 0 obj << /Limits [(API-qsq-blocked) (API-qsq-blocked)] /Names [(API-qsq-blocked) 3216 0 R] >> endobj 5812 0 obj << /Limits [(API-qsq-print) (API-qsq-print)] /Names [(API-qsq-print) 3219 0 R] >> endobj 5813 0 obj << /Limits [(API-qsq-service-time) (API-qsq-service-time)] /Names [(API-qsq-service-time) 3222 0 R] >> endobj 5814 0 obj << /Limits [(API-qsq-start) (API-qsq-start)] /Names [(API-qsq-start) 3225 0 R] >> endobj 5815 0 obj << /Limits [(API-qsq-throughput) (API-qsq-throughput)] /Names [(API-qsq-throughput) 3228 0 R] >> endobj 5816 0 obj << /Limits [(API-qsq-utilization) (API-qsq-utilization)] /Names [(API-qsq-utilization) 3231 0 R] >> endobj 5817 0 obj << /Limits [(API-qsq-wait-queue-length) (API-qsq-wait-queue-length)] /Names [(API-qsq-wait-queue-length) 3234 0 R] >> endobj 5818 0 obj << /Limits [(API-qsq-wait-time) (API-qsq-wait-time)] /Names [(API-qsq-wait-time) 3237 0 R] >> endobj 5819 0 obj << /Limits [(API-raise) (API-raise)] /Names [(API-raise) 3843 0 R] >> endobj 5820 0 obj << /Limits [(API-randint) (API-randint)] /Names [(API-randint) 3243 0 R] >> endobj 5821 0 obj << /Limits [(API-read-stopwatch-ms) (API-read-stopwatch-ms)] /Names [(API-read-stopwatch-ms) 1158 0 R] >> endobj 5822 0 obj << /Limits [(API-read-stopwatch-ns) (API-read-stopwatch-ns)] /Names [(API-read-stopwatch-ns) 1161 0 R] >> endobj 5823 0 obj << /Limits [(API-read-stopwatch-s) (API-read-stopwatch-s)] /Names [(API-read-stopwatch-s) 1164 0 R] >> endobj 5824 0 obj << /Limits [(API-read-stopwatch-us) (API-read-stopwatch-us)] /Names [(API-read-stopwatch-us) 1167 0 R] >> endobj 5825 0 obj << /Limits [(API-real-mount) (API-real-mount)] /Names [(API-real-mount) 2997 0 R] >> endobj 5826 0 obj << /Limits [(API-register) (API-register)] /Names [(API-register) 525 0 R] >> endobj 5827 0 obj << /Limits [(API-registers-valid) (API-registers-valid)] /Names [(API-registers-valid) 528 0 R] >> endobj 5828 0 obj << /Limits [(API-regparm) (API-regparm)] /Names [(API-regparm) 531 0 R] >> endobj 5829 0 obj << /Limits [(API-remote-id) (API-remote-id)] /Names [(API-remote-id) 534 0 R] >> endobj 5830 0 obj << /Limits [(API-remote-uri) (API-remote-uri)] /Names [(API-remote-uri) 537 0 R] >> endobj 5831 0 obj << /Limits [(API-return-str) (API-return-str)] /Names [(API-return-str) 2943 0 R] >> endobj 5832 0 obj << /Limits [(API-returnstr) (API-returnstr)] /Names [(API-returnstr) 2946 0 R] >> endobj 5833 0 obj << /Limits [(API-returnval) (API-returnval)] /Names [(API-returnval) 2949 0 R] >> endobj 5834 0 obj << /Limits [(API-reverse-path-walk) (API-reverse-path-walk)] /Names [(API-reverse-path-walk) 3000 0 R] >> endobj 5835 0 obj << /Limits [(API-rlimit-from-str) (API-rlimit-from-str)] /Names [(API-rlimit-from-str) 2955 0 R] >> endobj 5836 0 obj << /Limits [(API-s32-arg) (API-s32-arg)] /Names [(API-s32-arg) 540 0 R] >> endobj 5837 0 obj << /Limits [(API-s64-arg) (API-s64-arg)] /Names [(API-s64-arg) 543 0 R] >> endobj 5838 0 obj << /Limits [(API-sa-flags-str) (API-sa-flags-str)] /Names [(API-sa-flags-str) 2847 0 R] >> endobj 5839 0 obj << /Limits [(API-sa-handler-str) (API-sa-handler-str)] /Names [(API-sa-handler-str) 2850 0 R] >> endobj 5840 0 obj << /Limits [(API-scheduler-balance) (API-scheduler-balance)] /Names [(API-scheduler-balance) 1482 0 R] >> endobj 5841 0 obj << /Limits [(API-scheduler-cpu-off) (API-scheduler-cpu-off)] /Names [(API-scheduler-cpu-off) 1485 0 R] >> endobj 5842 0 obj << /Limits [(API-scheduler-cpu-on) (API-scheduler-cpu-on)] /Names [(API-scheduler-cpu-on) 1488 0 R] >> endobj 5843 0 obj << /Limits [(API-scheduler-ctxswitch) (API-scheduler-ctxswitch)] /Names [(API-scheduler-ctxswitch) 1491 0 R] >> endobj 5844 0 obj << /Limits [(API-scheduler-kthread-stop) (API-scheduler-kthread-stop)] /Names [(API-scheduler-kthread-stop) 1494 0 R] >> endobj 5845 0 obj << /Limits [(API-scheduler-kthread-stop-return) (API-scheduler-kthread-stop-return)] /Names [(API-scheduler-kthread-stop-return) 1497 0 R] >> endobj 5846 0 obj << /Limits [(API-scheduler-migrate) (API-scheduler-migrate)] /Names [(API-scheduler-migrate) 1500 0 R] >> endobj 5847 0 obj << /Limits [(API-scheduler-process-exit) (API-scheduler-process-exit)] /Names [(API-scheduler-process-exit) 1503 0 R] >> endobj 5848 0 obj << /Limits [(API-scheduler-process-fork) (API-scheduler-process-fork)] /Names [(API-scheduler-process-fork) 1506 0 R] >> endobj 5849 0 obj << /Limits [(API-scheduler-process-free) (API-scheduler-process-free)] /Names [(API-scheduler-process-free) 1509 0 R] >> endobj 5850 0 obj << /Limits [(API-scheduler-process-wait) (API-scheduler-process-wait)] /Names [(API-scheduler-process-wait) 1512 0 R] >> endobj 5851 0 obj << /Limits [(API-scheduler-signal-send) (API-scheduler-signal-send)] /Names [(API-scheduler-signal-send) 1515 0 R] >> endobj 5852 0 obj << /Limits [(API-scheduler-tick) (API-scheduler-tick)] /Names [(API-scheduler-tick) 1518 0 R] >> endobj 5853 0 obj << /Limits [(API-scheduler-wait-task) (API-scheduler-wait-task)] /Names [(API-scheduler-wait-task) 1521 0 R] >> endobj 5854 0 obj << /Limits [(API-scheduler-wakeup) (API-scheduler-wakeup)] /Names [(API-scheduler-wakeup) 1524 0 R] >> endobj 5855 0 obj << /Limits [(API-scheduler-wakeup-new) (API-scheduler-wakeup-new)] /Names [(API-scheduler-wakeup-new) 1527 0 R] >> endobj 5856 0 obj << /Limits [(API-scsi-iocompleted) (API-scsi-iocompleted)] /Names [(API-scsi-iocompleted) 1590 0 R] >> endobj 5857 0 obj << /Limits [(API-scsi-iodispatching) (API-scsi-iodispatching)] /Names [(API-scsi-iodispatching) 1593 0 R] >> endobj 5858 0 obj << /Limits [(API-scsi-iodone) (API-scsi-iodone)] /Names [(API-scsi-iodone) 1596 0 R] >> endobj 5859 0 obj << /Limits [(API-scsi-ioentry) (API-scsi-ioentry)] /Names [(API-scsi-ioentry) 1599 0 R] >> endobj 5860 0 obj << /Limits [(API-scsi-ioexecute) (API-scsi-ioexecute)] /Names [(API-scsi-ioexecute) 1602 0 R] >> endobj 5861 0 obj << /Limits [(API-scsi-set-state) (API-scsi-set-state)] /Names [(API-scsi-set-state) 1605 0 R] >> endobj 5862 0 obj << /Limits [(API-set-int-arg) (API-set-int-arg)] /Names [(API-set-int-arg) 546 0 R] >> endobj 5863 0 obj << /Limits [(API-set-kernel-char) (API-set-kernel-char)] /Names [(API-set-kernel-char) 3621 0 R] >> endobj 5864 0 obj << /Limits [(API-set-kernel-int) (API-set-kernel-int)] /Names [(API-set-kernel-int) 3624 0 R] >> endobj 5865 0 obj << /Limits [(API-set-kernel-long) (API-set-kernel-long)] /Names [(API-set-kernel-long) 3627 0 R] >> endobj 5866 0 obj << /Limits [(API-set-kernel-pointer) (API-set-kernel-pointer)] /Names [(API-set-kernel-pointer) 3630 0 R] >> endobj 5867 0 obj << /Limits [(API-set-kernel-short) (API-set-kernel-short)] /Names [(API-set-kernel-short) 3633 0 R] >> endobj 5868 0 obj << /Limits [(API-set-kernel-string) (API-set-kernel-string)] /Names [(API-set-kernel-string) 3636 0 R] >> endobj 5869 0 obj << /Limits [(API-set-kernel-string-n) (API-set-kernel-string-n)] /Names [(API-set-kernel-string-n) 3639 0 R] >> endobj 5870 0 obj << /Limits [(API-set-long-arg) (API-set-long-arg)] /Names [(API-set-long-arg) 549 0 R] >> endobj 5871 0 obj << /Limits [(API-set-longlong-arg) (API-set-longlong-arg)] /Names [(API-set-longlong-arg) 552 0 R] >> endobj 5872 0 obj << /Limits [(API-set-pointer-arg) (API-set-pointer-arg)] /Names [(API-set-pointer-arg) 555 0 R] >> endobj 5873 0 obj << /Limits [(API-set-s32-arg) (API-set-s32-arg)] /Names [(API-set-s32-arg) 558 0 R] >> endobj 5874 0 obj << /Limits [(API-set-s64-arg) (API-set-s64-arg)] /Names [(API-set-s64-arg) 561 0 R] >> endobj 5875 0 obj << /Limits [(API-set-u32-arg) (API-set-u32-arg)] /Names [(API-set-u32-arg) 564 0 R] >> endobj 5876 0 obj << /Limits [(API-set-u64-arg) (API-set-u64-arg)] /Names [(API-set-u64-arg) 567 0 R] >> endobj 5877 0 obj << /Limits [(API-set-uint-arg) (API-set-uint-arg)] /Names [(API-set-uint-arg) 570 0 R] >> endobj 5878 0 obj << /Limits [(API-set-ulong-arg) (API-set-ulong-arg)] /Names [(API-set-ulong-arg) 573 0 R] >> endobj 5879 0 obj << /Limits [(API-set-ulonglong-arg) (API-set-ulonglong-arg)] /Names [(API-set-ulonglong-arg) 576 0 R] >> endobj 5880 0 obj << /Limits [(API-set-user-char) (API-set-user-char)] /Names [(API-set-user-char) 3642 0 R] >> endobj 5881 0 obj << /Limits [(API-set-user-int) (API-set-user-int)] /Names [(API-set-user-int) 3645 0 R] >> endobj 5882 0 obj << /Limits [(API-set-user-long) (API-set-user-long)] /Names [(API-set-user-long) 3648 0 R] >> endobj 5883 0 obj << /Limits [(API-set-user-pointer) (API-set-user-pointer)] /Names [(API-set-user-pointer) 3651 0 R] >> endobj 5884 0 obj << /Limits [(API-set-user-short) (API-set-user-short)] /Names [(API-set-user-short) 3654 0 R] >> endobj 5885 0 obj << /Limits [(API-set-user-string) (API-set-user-string)] /Names [(API-set-user-string) 3657 0 R] >> endobj 5886 0 obj << /Limits [(API-set-user-string-arg) (API-set-user-string-arg)] /Names [(API-set-user-string-arg) 3660 0 R] >> endobj 5887 0 obj << /Limits [(API-set-user-string-n) (API-set-user-string-n)] /Names [(API-set-user-string-n) 3831 0 R] >> endobj 5888 0 obj << /Limits [(API-sid) (API-sid)] /Names [(API-sid) 579 0 R] >> endobj 5889 0 obj << /Limits [(API-signal-check-ignored) (API-signal-check-ignored)] /Names [(API-signal-check-ignored) 2859 0 R] >> endobj 5890 0 obj << /Limits [(API-signal-check-ignored-return) (API-signal-check-ignored-return)] /Names [(API-signal-check-ignored-return) 2862 0 R] >> endobj 5891 0 obj << /Limits [(API-signal-checkperm) (API-signal-checkperm)] /Names [(API-signal-checkperm) 2865 0 R] >> endobj 5892 0 obj << /Limits [(API-signal-checkperm-return) (API-signal-checkperm-return)] /Names [(API-signal-checkperm-return) 2868 0 R] >> endobj 5893 0 obj << /Limits [(API-signal-do-action) (API-signal-do-action)] /Names [(API-signal-do-action) 2871 0 R] >> endobj 5894 0 obj << /Limits [(API-signal-do-action-return) (API-signal-do-action-return)] /Names [(API-signal-do-action-return) 2874 0 R] >> endobj 5895 0 obj << /Limits [(API-signal-flush) (API-signal-flush)] /Names [(API-signal-flush) 2877 0 R] >> endobj 5896 0 obj << /Limits [(API-signal-force-segv) (API-signal-force-segv)] /Names [(API-signal-force-segv) 2880 0 R] >> endobj 5897 0 obj << /Limits [(API-signal-force-segv-return) (API-signal-force-segv-return)] /Names [(API-signal-force-segv-return) 2883 0 R] >> endobj 5898 0 obj << /Limits [(API-signal-handle) (API-signal-handle)] /Names [(API-signal-handle) 2886 0 R] >> endobj 5899 0 obj << /Limits [(API-signal-handle-return) (API-signal-handle-return)] /Names [(API-signal-handle-return) 2889 0 R] >> endobj 5900 0 obj << /Limits [(API-signal-pending) (API-signal-pending)] /Names [(API-signal-pending) 2892 0 R] >> endobj 5901 0 obj << /Limits [(API-signal-pending-return) (API-signal-pending-return)] /Names [(API-signal-pending-return) 2895 0 R] >> endobj 5902 0 obj << /Limits [(API-signal-procmask) (API-signal-procmask)] /Names [(API-signal-procmask) 2898 0 R] >> endobj 5903 0 obj << /Limits [(API-signal-procmask-return) (API-signal-procmask-return)] /Names [(API-signal-procmask-return) 2901 0 R] >> endobj 5904 0 obj << /Limits [(API-signal-send) (API-signal-send)] /Names [(API-signal-send) 2904 0 R] >> endobj 5905 0 obj << /Limits [(API-signal-send-return) (API-signal-send-return)] /Names [(API-signal-send-return) 2907 0 R] >> endobj 5906 0 obj << /Limits [(API-signal-send-sig-queue) (API-signal-send-sig-queue)] /Names [(API-signal-send-sig-queue) 2910 0 R] >> endobj 5907 0 obj << /Limits [(API-signal-send-sig-queue-return) (API-signal-send-sig-queue-return)] /Names [(API-signal-send-sig-queue-return) 2913 0 R] >> endobj 5908 0 obj << /Limits [(API-signal-str) (API-signal-str)] /Names [(API-signal-str) 2853 0 R] >> endobj 5909 0 obj << /Limits [(API-signal-sys-tgkill) (API-signal-sys-tgkill)] /Names [(API-signal-sys-tgkill) 2916 0 R] >> endobj 5910 0 obj << /Limits [(API-signal-sys-tgkill-return) (API-signal-sys-tgkill-return)] /Names [(API-signal-sys-tgkill-return) 2919 0 R] >> endobj 5911 0 obj << /Limits [(API-signal-sys-tkill) (API-signal-sys-tkill)] /Names [(API-signal-sys-tkill) 2922 0 R] >> endobj 5912 0 obj << /Limits [(API-signal-syskill) (API-signal-syskill)] /Names [(API-signal-syskill) 2925 0 R] >> endobj 5913 0 obj << /Limits [(API-signal-syskill-return) (API-signal-syskill-return)] /Names [(API-signal-syskill-return) 2928 0 R] >> endobj 5914 0 obj << /Limits [(API-signal-systkill-return) (API-signal-systkill-return)] /Names [(API-signal-systkill-return) 2931 0 R] >> endobj 5915 0 obj << /Limits [(API-signal-wakeup) (API-signal-wakeup)] /Names [(API-signal-wakeup) 2934 0 R] >> endobj 5916 0 obj << /Limits [(API-sigset-mask-str) (API-sigset-mask-str)] /Names [(API-sigset-mask-str) 2856 0 R] >> endobj 5917 0 obj << /Limits [(API-sock-fam-num2str) (API-sock-fam-num2str)] /Names [(API-sock-fam-num2str) 2268 0 R] >> endobj 5918 0 obj << /Limits [(API-sock-fam-str2num) (API-sock-fam-str2num)] /Names [(API-sock-fam-str2num) 2271 0 R] >> endobj 5919 0 obj << /Limits [(API-sock-prot-num2str) (API-sock-prot-num2str)] /Names [(API-sock-prot-num2str) 2274 0 R] >> endobj 5920 0 obj << /Limits [(API-sock-prot-str2num) (API-sock-prot-str2num)] /Names [(API-sock-prot-str2num) 2277 0 R] >> endobj 5921 0 obj << /Limits [(API-sock-state-num2str) (API-sock-state-num2str)] /Names [(API-sock-state-num2str) 2280 0 R] >> endobj 5922 0 obj << /Limits [(API-sock-state-str2num) (API-sock-state-str2num)] /Names [(API-sock-state-str2num) 2283 0 R] >> endobj 5923 0 obj << /Limits [(API-socket-aio-read) (API-socket-aio-read)] /Names [(API-socket-aio-read) 2286 0 R] >> endobj 5924 0 obj << /Limits [(API-socket-aio-read-return) (API-socket-aio-read-return)] /Names [(API-socket-aio-read-return) 2289 0 R] >> endobj 5925 0 obj << /Limits [(API-socket-aio-write) (API-socket-aio-write)] /Names [(API-socket-aio-write) 2292 0 R] >> endobj 5926 0 obj << /Limits [(API-socket-aio-write-return) (API-socket-aio-write-return)] /Names [(API-socket-aio-write-return) 2295 0 R] >> endobj 5927 0 obj << /Limits [(API-socket-close) (API-socket-close)] /Names [(API-socket-close) 2298 0 R] >> endobj 5928 0 obj << /Limits [(API-socket-close-return) (API-socket-close-return)] /Names [(API-socket-close-return) 2301 0 R] >> endobj 5929 0 obj << /Limits [(API-socket-create) (API-socket-create)] /Names [(API-socket-create) 2304 0 R] >> endobj 5930 0 obj << /Limits [(API-socket-create-return) (API-socket-create-return)] /Names [(API-socket-create-return) 2307 0 R] >> endobj 5931 0 obj << /Limits [(API-socket-read-iter) (API-socket-read-iter)] /Names [(API-socket-read-iter) 2310 0 R] >> endobj 5932 0 obj << /Limits [(API-socket-read-iter-return) (API-socket-read-iter-return)] /Names [(API-socket-read-iter-return) 2313 0 R] >> endobj 5933 0 obj << /Limits [(API-socket-readv) (API-socket-readv)] /Names [(API-socket-readv) 2316 0 R] >> endobj 5934 0 obj << /Limits [(API-socket-readv-return) (API-socket-readv-return)] /Names [(API-socket-readv-return) 2319 0 R] >> endobj 5935 0 obj << /Limits [(API-socket-receive) (API-socket-receive)] /Names [(API-socket-receive) 2322 0 R] >> endobj 5936 0 obj << /Limits [(API-socket-recvmsg) (API-socket-recvmsg)] /Names [(API-socket-recvmsg) 2325 0 R] >> endobj 5937 0 obj << /Limits [(API-socket-recvmsg-return) (API-socket-recvmsg-return)] /Names [(API-socket-recvmsg-return) 2328 0 R] >> endobj 5938 0 obj << /Limits [(API-socket-send) (API-socket-send)] /Names [(API-socket-send) 2331 0 R] >> endobj 5939 0 obj << /Limits [(API-socket-sendmsg) (API-socket-sendmsg)] /Names [(API-socket-sendmsg) 2334 0 R] >> endobj 5940 0 obj << /Limits [(API-socket-sendmsg-return) (API-socket-sendmsg-return)] /Names [(API-socket-sendmsg-return) 2337 0 R] >> endobj 5941 0 obj << /Limits [(API-socket-write-iter) (API-socket-write-iter)] /Names [(API-socket-write-iter) 2340 0 R] >> endobj 5942 0 obj << /Limits [(API-socket-write-iter-return) (API-socket-write-iter-return)] /Names [(API-socket-write-iter-return) 2511 0 R] >> endobj 5943 0 obj << /Limits [(API-socket-writev) (API-socket-writev)] /Names [(API-socket-writev) 2514 0 R] >> endobj 5944 0 obj << /Limits [(API-socket-writev-return) (API-socket-writev-return)] /Names [(API-socket-writev-return) 2517 0 R] >> endobj 5945 0 obj << /Limits [(API-softirq-entry) (API-softirq-entry)] /Names [(API-softirq-entry) 1860 0 R] >> endobj 5946 0 obj << /Limits [(API-softirq-exit) (API-softirq-exit)] /Names [(API-softirq-exit) 1863 0 R] >> endobj 5947 0 obj << /Limits [(API-speculate) (API-speculate)] /Names [(API-speculate) 4557 0 R] >> endobj 5948 0 obj << /Limits [(API-speculation) (API-speculation)] /Names [(API-speculation) 4560 0 R] >> endobj 5949 0 obj << /Limits [(API-sprint-backtrace) (API-sprint-backtrace)] /Names [(API-sprint-backtrace) 582 0 R] >> endobj 5950 0 obj << /Limits [(API-sprint-loadavg) (API-sprint-loadavg)] /Names [(API-sprint-loadavg) 2640 0 R] >> endobj 5951 0 obj << /Limits [(API-sprint-stack) (API-sprint-stack)] /Names [(API-sprint-stack) 585 0 R] >> endobj 5952 0 obj << /Limits [(API-sprint-syms) (API-sprint-syms)] /Names [(API-sprint-syms) 588 0 R] >> endobj 5953 0 obj << /Limits [(API-sprint-ubacktrace) (API-sprint-ubacktrace)] /Names [(API-sprint-ubacktrace) 591 0 R] >> endobj 5954 0 obj << /Limits [(API-sprint-ustack) (API-sprint-ustack)] /Names [(API-sprint-ustack) 594 0 R] >> endobj 5955 0 obj << /Limits [(API-sprint-usyms) (API-sprint-usyms)] /Names [(API-sprint-usyms) 597 0 R] >> endobj 5956 0 obj << /Limits [(API-stack) (API-stack)] /Names [(API-stack) 600 0 R] >> endobj 5957 0 obj << /Limits [(API-stack-size) (API-stack-size)] /Names [(API-stack-size) 603 0 R] >> endobj 5958 0 obj << /Limits [(API-stack-unused) (API-stack-unused)] /Names [(API-stack-unused) 606 0 R] >> endobj 5959 0 obj << /Limits [(API-stack-used) (API-stack-used)] /Names [(API-stack-used) 609 0 R] >> endobj 5960 0 obj << /Limits [(API-stap-cache-add-mod) (API-stap-cache-add-mod)] /Names [(API-stap-cache-add-mod) 3942 0 R] >> endobj 5961 0 obj << /Limits [(API-stap-cache-add-nss) (API-stap-cache-add-nss)] /Names [(API-stap-cache-add-nss) 3945 0 R] >> endobj 5962 0 obj << /Limits [(API-stap-cache-add-src) (API-stap-cache-add-src)] /Names [(API-stap-cache-add-src) 3948 0 R] >> endobj 5963 0 obj << /Limits [(API-stap-cache-clean) (API-stap-cache-clean)] /Names [(API-stap-cache-clean) 3951 0 R] >> endobj 5964 0 obj << /Limits [(API-stap-cache-get) (API-stap-cache-get)] /Names [(API-stap-cache-get) 3954 0 R] >> endobj 5965 0 obj << /Limits [(API-stap-pass0) (API-stap-pass0)] /Names [(API-stap-pass0) 3957 0 R] >> endobj 5966 0 obj << /Limits [(API-stap-pass0-end) (API-stap-pass0-end)] /Names [(API-stap-pass0-end) 3960 0 R] >> endobj 5967 0 obj << /Limits [(API-stap-pass1-end) (API-stap-pass1-end)] /Names [(API-stap-pass1-end) 3963 0 R] >> endobj 5968 0 obj << /Limits [(API-stap-pass1a) (API-stap-pass1a)] /Names [(API-stap-pass1a) 3966 0 R] >> endobj 5969 0 obj << /Limits [(API-stap-pass1b) (API-stap-pass1b)] /Names [(API-stap-pass1b) 3969 0 R] >> endobj 5970 0 obj << /Limits [(API-stap-pass2) (API-stap-pass2)] /Names [(API-stap-pass2) 3972 0 R] >> endobj 5971 0 obj << /Limits [(API-stap-pass2-end) (API-stap-pass2-end)] /Names [(API-stap-pass2-end) 3975 0 R] >> endobj 5972 0 obj << /Limits [(API-stap-pass3) (API-stap-pass3)] /Names [(API-stap-pass3) 3978 0 R] >> endobj 5973 0 obj << /Limits [(API-stap-pass3-end) (API-stap-pass3-end)] /Names [(API-stap-pass3-end) 3981 0 R] >> endobj 5974 0 obj << /Limits [(API-stap-pass4) (API-stap-pass4)] /Names [(API-stap-pass4) 3984 0 R] >> endobj 5975 0 obj << /Limits [(API-stap-pass4-end) (API-stap-pass4-end)] /Names [(API-stap-pass4-end) 3987 0 R] >> endobj 5976 0 obj << /Limits [(API-stap-pass5) (API-stap-pass5)] /Names [(API-stap-pass5) 3990 0 R] >> endobj 5977 0 obj << /Limits [(API-stap-pass5-end) (API-stap-pass5-end)] /Names [(API-stap-pass5-end) 4161 0 R] >> endobj 5978 0 obj << /Limits [(API-stap-pass6) (API-stap-pass6)] /Names [(API-stap-pass6) 4164 0 R] >> endobj 5979 0 obj << /Limits [(API-stap-pass6-end) (API-stap-pass6-end)] /Names [(API-stap-pass6-end) 4167 0 R] >> endobj 5980 0 obj << /Limits [(API-stap-system) (API-stap-system)] /Names [(API-stap-system) 4170 0 R] >> endobj 5981 0 obj << /Limits [(API-stap-system-return) (API-stap-system-return)] /Names [(API-stap-system-return) 4173 0 R] >> endobj 5982 0 obj << /Limits [(API-stap-system-spawn) (API-stap-system-spawn)] /Names [(API-stap-system-spawn) 4176 0 R] >> endobj 5983 0 obj << /Limits [(API-stapio-receive-control-message) (API-stapio-receive-control-message)] /Names [(API-stapio-receive-control-message) 4179 0 R] >> endobj 5984 0 obj << /Limits [(API-staprun-insert-module) (API-staprun-insert-module)] /Names [(API-staprun-insert-module) 4182 0 R] >> endobj 5985 0 obj << /Limits [(API-staprun-remove-module) (API-staprun-remove-module)] /Names [(API-staprun-remove-module) 4185 0 R] >> endobj 5986 0 obj << /Limits [(API-staprun-send-control-message) (API-staprun-send-control-message)] /Names [(API-staprun-send-control-message) 4188 0 R] >> endobj 5987 0 obj << /Limits [(API-start-stopwatch) (API-start-stopwatch)] /Names [(API-start-stopwatch) 1170 0 R] >> endobj 5988 0 obj << /Limits [(API-stop-stopwatch) (API-stop-stopwatch)] /Names [(API-stop-stopwatch) 1173 0 R] >> endobj 5989 0 obj << /Limits [(API-stp-pid) (API-stp-pid)] /Names [(API-stp-pid) 612 0 R] >> endobj 5990 0 obj << /Limits [(API-str-replace) (API-str-replace)] /Names [(API-str-replace) 3867 0 R] >> endobj 5991 0 obj << /Limits [(API-string-quoted) (API-string-quoted)] /Names [(API-string-quoted) 3870 0 R] >> endobj 5992 0 obj << /Limits [(API-string-to-fp) (API-string-to-fp)] /Names [(API-string-to-fp) 4650 0 R] >> endobj 5993 0 obj << /Limits [(API-stringat) (API-stringat)] /Names [(API-stringat) 3873 0 R] >> endobj 5994 0 obj << /Limits [(API-strlen) (API-strlen)] /Names [(API-strlen) 3876 0 R] >> endobj 5995 0 obj << /Limits [(API-strpos) (API-strpos)] /Names [(API-strpos) 3879 0 R] >> endobj 5996 0 obj << /Limits [(API-strtol) (API-strtol)] /Names [(API-strtol) 3882 0 R] >> endobj 5997 0 obj << /Limits [(API-substr) (API-substr)] /Names [(API-substr) 3885 0 R] >> endobj 5998 0 obj << /Limits [(API-sunrpc-clnt-bind-new-program) (API-sunrpc-clnt-bind-new-program)] /Names [(API-sunrpc-clnt-bind-new-program) 1986 0 R] >> endobj 5999 0 obj << /Limits [(API-sunrpc-clnt-call-async) (API-sunrpc-clnt-call-async)] /Names [(API-sunrpc-clnt-call-async) 1989 0 R] >> endobj 6000 0 obj << /Limits [(API-sunrpc-clnt-call-sync) (API-sunrpc-clnt-call-sync)] /Names [(API-sunrpc-clnt-call-sync) 1992 0 R] >> endobj 6001 0 obj << /Limits [(API-sunrpc-clnt-clone-client) (API-sunrpc-clnt-clone-client)] /Names [(API-sunrpc-clnt-clone-client) 1995 0 R] >> endobj 6002 0 obj << /Limits [(API-sunrpc-clnt-create-client) (API-sunrpc-clnt-create-client)] /Names [(API-sunrpc-clnt-create-client) 1998 0 R] >> endobj 6003 0 obj << /Limits [(API-sunrpc-clnt-restart-call) (API-sunrpc-clnt-restart-call)] /Names [(API-sunrpc-clnt-restart-call) 2001 0 R] >> endobj 6004 0 obj << /Limits [(API-sunrpc-clnt-shutdown-client) (API-sunrpc-clnt-shutdown-client)] /Names [(API-sunrpc-clnt-shutdown-client) 2004 0 R] >> endobj 6005 0 obj << /Limits [(API-sunrpc-sched-delay) (API-sunrpc-sched-delay)] /Names [(API-sunrpc-sched-delay) 2007 0 R] >> endobj 6006 0 obj << /Limits [(API-sunrpc-sched-execute) (API-sunrpc-sched-execute)] /Names [(API-sunrpc-sched-execute) 2010 0 R] >> endobj 6007 0 obj << /Limits [(API-sunrpc-sched-new-task) (API-sunrpc-sched-new-task)] /Names [(API-sunrpc-sched-new-task) 2181 0 R] >> endobj 6008 0 obj << /Limits [(API-sunrpc-sched-release-task) (API-sunrpc-sched-release-task)] /Names [(API-sunrpc-sched-release-task) 2184 0 R] >> endobj 6009 0 obj << /Limits [(API-sunrpc-svc-create) (API-sunrpc-svc-create)] /Names [(API-sunrpc-svc-create) 2187 0 R] >> endobj 6010 0 obj << /Limits [(API-sunrpc-svc-destroy) (API-sunrpc-svc-destroy)] /Names [(API-sunrpc-svc-destroy) 2190 0 R] >> endobj 6011 0 obj << /Limits [(API-sunrpc-svc-drop) (API-sunrpc-svc-drop)] /Names [(API-sunrpc-svc-drop) 2193 0 R] >> endobj 6012 0 obj << /Limits [(API-sunrpc-svc-process) (API-sunrpc-svc-process)] /Names [(API-sunrpc-svc-process) 2196 0 R] >> endobj 6013 0 obj << /Limits [(API-sunrpc-svc-recv) (API-sunrpc-svc-recv)] /Names [(API-sunrpc-svc-recv) 2199 0 R] >> endobj 6014 0 obj << /Limits [(API-sunrpc-svc-register) (API-sunrpc-svc-register)] /Names [(API-sunrpc-svc-register) 2202 0 R] >> endobj 6015 0 obj << /Limits [(API-sunrpc-svc-send) (API-sunrpc-svc-send)] /Names [(API-sunrpc-svc-send) 2205 0 R] >> endobj 6016 0 obj << /Limits [(API-switch-file) (API-switch-file)] /Names [(API-switch-file) 4608 0 R] >> endobj 6017 0 obj << /Limits [(API-symdata) (API-symdata)] /Names [(API-symdata) 615 0 R] >> endobj 6018 0 obj << /Limits [(API-symfile) (API-symfile)] /Names [(API-symfile) 618 0 R] >> endobj 6019 0 obj << /Limits [(API-symfileline) (API-symfileline)] /Names [(API-symfileline) 621 0 R] >> endobj 6020 0 obj << /Limits [(API-symline) (API-symline)] /Names [(API-symline) 624 0 R] >> endobj 6021 0 obj << /Limits [(API-symname) (API-symname)] /Names [(API-symname) 627 0 R] >> endobj 6022 0 obj << /Limits [(API-syscall-any) (API-syscall-any)] /Names [(API-syscall-any) 4683 0 R] >> endobj 6023 0 obj << /Limits [(API-syscall-any-return) (API-syscall-any-return)] /Names [(API-syscall-any-return) 4686 0 R] >> endobj 6024 0 obj << /Limits [(API-system) (API-system)] /Names [(API-system) 1194 0 R] >> endobj 6025 0 obj << /Limits [(API-target) (API-target)] /Names [(API-target) 630 0 R] >> endobj 6026 0 obj << /Limits [(API-target-set-pid) (API-target-set-pid)] /Names [(API-target-set-pid) 2643 0 R] >> endobj 6027 0 obj << /Limits [(API-target-set-report) (API-target-set-report)] /Names [(API-target-set-report) 2646 0 R] >> endobj 6028 0 obj << /Limits [(API-task-ancestry) (API-task-ancestry)] /Names [(API-task-ancestry) 633 0 R] >> endobj 6029 0 obj << /Limits [(API-task-backtrace) (API-task-backtrace)] /Names [(API-task-backtrace) 636 0 R] >> endobj 6030 0 obj << /Limits [(API-task-cpu) (API-task-cpu)] /Names [(API-task-cpu) 639 0 R] >> endobj 6031 0 obj << /Limits [(API-task-current) (API-task-current)] /Names [(API-task-current) 642 0 R] >> endobj 6032 0 obj << /Limits [(API-task-cwd-path) (API-task-cwd-path)] /Names [(API-task-cwd-path) 645 0 R] >> endobj 6033 0 obj << /Limits [(API-task-dentry-path) (API-task-dentry-path)] /Names [(API-task-dentry-path) 3171 0 R] >> endobj 6034 0 obj << /Limits [(API-task-egid) (API-task-egid)] /Names [(API-task-egid) 648 0 R] >> endobj 6035 0 obj << /Limits [(API-task-euid) (API-task-euid)] /Names [(API-task-euid) 651 0 R] >> endobj 6036 0 obj << /Limits [(API-task-exe-file) (API-task-exe-file)] /Names [(API-task-exe-file) 822 0 R] >> endobj 6037 0 obj << /Limits [(API-task-execname) (API-task-execname)] /Names [(API-task-execname) 825 0 R] >> endobj 6038 0 obj << /Limits [(API-task-fd-lookup) (API-task-fd-lookup)] /Names [(API-task-fd-lookup) 828 0 R] >> endobj 6039 0 obj << /Limits [(API-task-gid) (API-task-gid)] /Names [(API-task-gid) 831 0 R] >> endobj 6040 0 obj << /Limits [(API-task-max-file-handles) (API-task-max-file-handles)] /Names [(API-task-max-file-handles) 834 0 R] >> endobj 6041 0 obj << /Limits [(API-task-nice) (API-task-nice)] /Names [(API-task-nice) 837 0 R] >> endobj 6042 0 obj << /Limits [(API-task-ns-egid) (API-task-ns-egid)] /Names [(API-task-ns-egid) 840 0 R] >> endobj 6043 0 obj << /Limits [(API-task-ns-euid) (API-task-ns-euid)] /Names [(API-task-ns-euid) 843 0 R] >> endobj 6044 0 obj << /Limits [(API-task-ns-gid) (API-task-ns-gid)] /Names [(API-task-ns-gid) 846 0 R] >> endobj 6045 0 obj << /Limits [(API-task-ns-pid) (API-task-ns-pid)] /Names [(API-task-ns-pid) 849 0 R] >> endobj 6046 0 obj << /Limits [(API-task-ns-tid) (API-task-ns-tid)] /Names [(API-task-ns-tid) 852 0 R] >> endobj 6047 0 obj << /Limits [(API-task-ns-uid) (API-task-ns-uid)] /Names [(API-task-ns-uid) 855 0 R] >> endobj 6048 0 obj << /Limits [(API-task-open-file-handles) (API-task-open-file-handles)] /Names [(API-task-open-file-handles) 858 0 R] >> endobj 6049 0 obj << /Limits [(API-task-parent) (API-task-parent)] /Names [(API-task-parent) 861 0 R] >> endobj 6050 0 obj << /Limits [(API-task-pid) (API-task-pid)] /Names [(API-task-pid) 864 0 R] >> endobj 6051 0 obj << /Limits [(API-task-prio) (API-task-prio)] /Names [(API-task-prio) 867 0 R] >> endobj 6052 0 obj << /Limits [(API-task-start-time) (API-task-start-time)] /Names [(API-task-start-time) 1293 0 R] >> endobj 6053 0 obj << /Limits [(API-task-state) (API-task-state)] /Names [(API-task-state) 870 0 R] >> endobj 6054 0 obj << /Limits [(API-task-stime) (API-task-stime)] /Names [(API-task-stime) 1296 0 R] >> endobj 6055 0 obj << /Limits [(API-task-tid) (API-task-tid)] /Names [(API-task-tid) 873 0 R] >> endobj 6056 0 obj << /Limits [(API-task-time-string) (API-task-time-string)] /Names [(API-task-time-string) 1299 0 R] >> endobj 6057 0 obj << /Limits [(API-task-time-string-tid) (API-task-time-string-tid)] /Names [(API-task-time-string-tid) 1302 0 R] >> endobj 6058 0 obj << /Limits [(API-task-uid) (API-task-uid)] /Names [(API-task-uid) 876 0 R] >> endobj 6059 0 obj << /Limits [(API-task-utime) (API-task-utime)] /Names [(API-task-utime) 1305 0 R] >> endobj 6060 0 obj << /Limits [(API-tcp-disconnect) (API-tcp-disconnect)] /Names [(API-tcp-disconnect) 2208 0 R] >> endobj 6061 0 obj << /Limits [(API-tcp-disconnect-return) (API-tcp-disconnect-return)] /Names [(API-tcp-disconnect-return) 2211 0 R] >> endobj 6062 0 obj << /Limits [(API-tcp-receive) (API-tcp-receive)] /Names [(API-tcp-receive) 2214 0 R] >> endobj 6063 0 obj << /Limits [(API-tcp-recvmsg) (API-tcp-recvmsg)] /Names [(API-tcp-recvmsg) 2217 0 R] >> endobj 6064 0 obj << /Limits [(API-tcp-recvmsg-return) (API-tcp-recvmsg-return)] /Names [(API-tcp-recvmsg-return) 2220 0 R] >> endobj 6065 0 obj << /Limits [(API-tcp-sendmsg) (API-tcp-sendmsg)] /Names [(API-tcp-sendmsg) 2223 0 R] >> endobj 6066 0 obj << /Limits [(API-tcp-sendmsg-return) (API-tcp-sendmsg-return)] /Names [(API-tcp-sendmsg-return) 2226 0 R] >> endobj 6067 0 obj << /Limits [(API-tcp-setsockopt) (API-tcp-setsockopt)] /Names [(API-tcp-setsockopt) 2229 0 R] >> endobj 6068 0 obj << /Limits [(API-tcp-setsockopt-return) (API-tcp-setsockopt-return)] /Names [(API-tcp-setsockopt-return) 2232 0 R] >> endobj 6069 0 obj << /Limits [(API-tcpmib-ActiveOpens) (API-tcpmib-ActiveOpens)] /Names [(API-tcpmib-ActiveOpens) 2607 0 R] >> endobj 6070 0 obj << /Limits [(API-tcpmib-AttemptFails) (API-tcpmib-AttemptFails)] /Names [(API-tcpmib-AttemptFails) 2610 0 R] >> endobj 6071 0 obj << /Limits [(API-tcpmib-CurrEstab) (API-tcpmib-CurrEstab)] /Names [(API-tcpmib-CurrEstab) 2613 0 R] >> endobj 6072 0 obj << /Limits [(API-tcpmib-EstabResets) (API-tcpmib-EstabResets)] /Names [(API-tcpmib-EstabResets) 2616 0 R] >> endobj 6073 0 obj << /Limits [(API-tcpmib-InSegs) (API-tcpmib-InSegs)] /Names [(API-tcpmib-InSegs) 2619 0 R] >> endobj 6074 0 obj << /Limits [(API-tcpmib-OutRsts) (API-tcpmib-OutRsts)] /Names [(API-tcpmib-OutRsts) 2622 0 R] >> endobj 6075 0 obj << /Limits [(API-tcpmib-OutSegs) (API-tcpmib-OutSegs)] /Names [(API-tcpmib-OutSegs) 2625 0 R] >> endobj 6076 0 obj << /Limits [(API-tcpmib-PassiveOpens) (API-tcpmib-PassiveOpens)] /Names [(API-tcpmib-PassiveOpens) 2628 0 R] >> endobj 6077 0 obj << /Limits [(API-tcpmib-RetransSegs) (API-tcpmib-RetransSegs)] /Names [(API-tcpmib-RetransSegs) 2631 0 R] >> endobj 6078 0 obj << /Limits [(API-tcpmib-filter-key) (API-tcpmib-filter-key)] /Names [(API-tcpmib-filter-key) 2544 0 R] >> endobj 6079 0 obj << /Limits [(API-tcpmib-get-state) (API-tcpmib-get-state)] /Names [(API-tcpmib-get-state) 2547 0 R] >> endobj 6080 0 obj << /Limits [(API-tcpmib-local-addr) (API-tcpmib-local-addr)] /Names [(API-tcpmib-local-addr) 2550 0 R] >> endobj 6081 0 obj << /Limits [(API-tcpmib-local-port) (API-tcpmib-local-port)] /Names [(API-tcpmib-local-port) 2553 0 R] >> endobj 6082 0 obj << /Limits [(API-tcpmib-remote-addr) (API-tcpmib-remote-addr)] /Names [(API-tcpmib-remote-addr) 2556 0 R] >> endobj 6083 0 obj << /Limits [(API-tcpmib-remote-port) (API-tcpmib-remote-port)] /Names [(API-tcpmib-remote-port) 2559 0 R] >> endobj 6084 0 obj << /Limits [(API-text-str) (API-text-str)] /Names [(API-text-str) 3888 0 R] >> endobj 6085 0 obj << /Limits [(API-text-strn) (API-text-strn)] /Names [(API-text-strn) 3891 0 R] >> endobj 6086 0 obj << /Limits [(API-thread-indent) (API-thread-indent)] /Names [(API-thread-indent) 3933 0 R] >> endobj 6087 0 obj << /Limits [(API-thread-indent-depth) (API-thread-indent-depth)] /Names [(API-thread-indent-depth) 3936 0 R] >> endobj 6088 0 obj << /Limits [(API-tid) (API-tid)] /Names [(API-tid) 879 0 R] >> endobj 6089 0 obj << /Limits [(API-tokenize) (API-tokenize)] /Names [(API-tokenize) 3894 0 R] >> endobj 6090 0 obj << /Limits [(API-tty-init) (API-tty-init)] /Names [(API-tty-init) 1611 0 R] >> endobj 6091 0 obj << /Limits [(API-tty-ioctl) (API-tty-ioctl)] /Names [(API-tty-ioctl) 1614 0 R] >> endobj 6092 0 obj << /Limits [(API-tty-open) (API-tty-open)] /Names [(API-tty-open) 1617 0 R] >> endobj 6093 0 obj << /Limits [(API-tty-poll) (API-tty-poll)] /Names [(API-tty-poll) 1620 0 R] >> endobj 6094 0 obj << /Limits [(API-tty-read) (API-tty-read)] /Names [(API-tty-read) 1623 0 R] >> endobj 6095 0 obj << /Limits [(API-tty-receive) (API-tty-receive)] /Names [(API-tty-receive) 1626 0 R] >> endobj 6096 0 obj << /Limits [(API-tty-register) (API-tty-register)] /Names [(API-tty-register) 1629 0 R] >> endobj 6097 0 obj << /Limits [(API-tty-release) (API-tty-release)] /Names [(API-tty-release) 1632 0 R] >> endobj 6098 0 obj << /Limits [(API-tty-resize) (API-tty-resize)] /Names [(API-tty-resize) 1635 0 R] >> endobj 6099 0 obj << /Limits [(API-tty-unregister) (API-tty-unregister)] /Names [(API-tty-unregister) 1638 0 R] >> endobj 6100 0 obj << /Limits [(API-tty-write) (API-tty-write)] /Names [(API-tty-write) 1641 0 R] >> endobj 6101 0 obj << /Limits [(API-tz-ctime) (API-tz-ctime)] /Names [(API-tz-ctime) 1182 0 R] >> endobj 6102 0 obj << /Limits [(API-tz-gmtoff) (API-tz-gmtoff)] /Names [(API-tz-gmtoff) 1185 0 R] >> endobj 6103 0 obj << /Limits [(API-tz-name) (API-tz-name)] /Names [(API-tz-name) 1188 0 R] >> endobj 6104 0 obj << /Limits [(API-u-register) (API-u-register)] /Names [(API-u-register) 888 0 R] >> endobj 6105 0 obj << /Limits [(API-u32-arg) (API-u32-arg)] /Names [(API-u32-arg) 882 0 R] >> endobj 6106 0 obj << /Limits [(API-u64-arg) (API-u64-arg)] /Names [(API-u64-arg) 885 0 R] >> endobj 6107 0 obj << /Limits [(API-uaddr) (API-uaddr)] /Names [(API-uaddr) 891 0 R] >> endobj 6108 0 obj << /Limits [(API-ubacktrace) (API-ubacktrace)] /Names [(API-ubacktrace) 894 0 R] >> endobj 6109 0 obj << /Limits [(API-ucallers) (API-ucallers)] /Names [(API-ucallers) 897 0 R] >> endobj 6110 0 obj << /Limits [(API-udelay) (API-udelay)] /Names [(API-udelay) 3846 0 R] >> endobj 6111 0 obj << /Limits [(API-udp-disconnect) (API-udp-disconnect)] /Names [(API-udp-disconnect) 2235 0 R] >> endobj 6112 0 obj << /Limits [(API-udp-disconnect-return) (API-udp-disconnect-return)] /Names [(API-udp-disconnect-return) 2238 0 R] >> endobj 6113 0 obj << /Limits [(API-udp-recvmsg) (API-udp-recvmsg)] /Names [(API-udp-recvmsg) 2241 0 R] >> endobj 6114 0 obj << /Limits [(API-udp-recvmsg-return) (API-udp-recvmsg-return)] /Names [(API-udp-recvmsg-return) 2244 0 R] >> endobj 6115 0 obj << /Limits [(API-udp-sendmsg) (API-udp-sendmsg)] /Names [(API-udp-sendmsg) 2247 0 R] >> endobj 6116 0 obj << /Limits [(API-udp-sendmsg-return) (API-udp-sendmsg-return)] /Names [(API-udp-sendmsg-return) 2250 0 R] >> endobj 6117 0 obj << /Limits [(API-uid) (API-uid)] /Names [(API-uid) 900 0 R] >> endobj 6118 0 obj << /Limits [(API-uint-arg) (API-uint-arg)] /Names [(API-uint-arg) 903 0 R] >> endobj 6119 0 obj << /Limits [(API-ulong-arg) (API-ulong-arg)] /Names [(API-ulong-arg) 906 0 R] >> endobj 6120 0 obj << /Limits [(API-ulonglong-arg) (API-ulonglong-arg)] /Names [(API-ulonglong-arg) 909 0 R] >> endobj 6121 0 obj << /Limits [(API-umodname) (API-umodname)] /Names [(API-umodname) 912 0 R] >> endobj 6122 0 obj << /Limits [(API-usecs-to-string) (API-usecs-to-string)] /Names [(API-usecs-to-string) 1308 0 R] >> endobj 6123 0 obj << /Limits [(API-user-buffer-quoted) (API-user-buffer-quoted)] /Names [(API-user-buffer-quoted) 3306 0 R] >> endobj 6124 0 obj << /Limits [(API-user-buffer-quoted-error) (API-user-buffer-quoted-error)] /Names [(API-user-buffer-quoted-error) 3309 0 R] >> endobj 6125 0 obj << /Limits [(API-user-char) (API-user-char)] /Names [(API-user-char) 3312 0 R] >> endobj 6126 0 obj << /Limits [(API-user-char-error) (API-user-char-error)] /Names [(API-user-char-error) 3315 0 R] >> endobj 6127 0 obj << /Limits [(API-user-char-warn) (API-user-char-warn)] /Names [(API-user-char-warn) 3318 0 R] >> endobj 6128 0 obj << /Limits [(API-user-int) (API-user-int)] /Names [(API-user-int) 3321 0 R] >> endobj 6129 0 obj << /Limits [(API-user-int-error) (API-user-int-error)] /Names [(API-user-int-error) 3516 0 R] >> endobj 6130 0 obj << /Limits [(API-user-int-warn) (API-user-int-warn)] /Names [(API-user-int-warn) 3519 0 R] >> endobj 6131 0 obj << /Limits [(API-user-int16) (API-user-int16)] /Names [(API-user-int16) 3324 0 R] >> endobj 6132 0 obj << /Limits [(API-user-int16-error) (API-user-int16-error)] /Names [(API-user-int16-error) 3327 0 R] >> endobj 6133 0 obj << /Limits [(API-user-int32) (API-user-int32)] /Names [(API-user-int32) 3330 0 R] >> endobj 6134 0 obj << /Limits [(API-user-int32-error) (API-user-int32-error)] /Names [(API-user-int32-error) 3501 0 R] >> endobj 6135 0 obj << /Limits [(API-user-int64) (API-user-int64)] /Names [(API-user-int64) 3504 0 R] >> endobj 6136 0 obj << /Limits [(API-user-int64-error) (API-user-int64-error)] /Names [(API-user-int64-error) 3507 0 R] >> endobj 6137 0 obj << /Limits [(API-user-int8) (API-user-int8)] /Names [(API-user-int8) 3510 0 R] >> endobj 6138 0 obj << /Limits [(API-user-int8-error) (API-user-int8-error)] /Names [(API-user-int8-error) 3513 0 R] >> endobj 6139 0 obj << /Limits [(API-user-long) (API-user-long)] /Names [(API-user-long) 3522 0 R] >> endobj 6140 0 obj << /Limits [(API-user-long-error) (API-user-long-error)] /Names [(API-user-long-error) 3525 0 R] >> endobj 6141 0 obj << /Limits [(API-user-long-warn) (API-user-long-warn)] /Names [(API-user-long-warn) 3528 0 R] >> endobj 6142 0 obj << /Limits [(API-user-mode) (API-user-mode)] /Names [(API-user-mode) 915 0 R] >> endobj 6143 0 obj << /Limits [(API-user-short) (API-user-short)] /Names [(API-user-short) 3531 0 R] >> endobj 6144 0 obj << /Limits [(API-user-short-error) (API-user-short-error)] /Names [(API-user-short-error) 3534 0 R] >> endobj 6145 0 obj << /Limits [(API-user-short-warn) (API-user-short-warn)] /Names [(API-user-short-warn) 3537 0 R] >> endobj 6146 0 obj << /Limits [(API-user-string) (API-user-string)] /Names [(API-user-string) 3540 0 R] >> endobj 6147 0 obj << /Limits [(API-user-string-n) (API-user-string-n)] /Names [(API-user-string-n) 3543 0 R] >> endobj 6148 0 obj << /Limits [(API-user-string-n-nofault) (API-user-string-n-nofault)] /Names [(API-user-string-n-nofault) 3546 0 R] >> endobj 6149 0 obj << /Limits [(API-user-string-n-quoted) (API-user-string-n-quoted)] /Names [(API-user-string-n-quoted) 3549 0 R] >> endobj 6150 0 obj << /Limits [(API-user-string-n-warn) (API-user-string-n-warn)] /Names [(API-user-string-n-warn) 3552 0 R] >> endobj 6151 0 obj << /Limits [(API-user-string-nofault) (API-user-string-nofault)] /Names [(API-user-string-nofault) 3555 0 R] >> endobj 6152 0 obj << /Limits [(API-user-string-quoted) (API-user-string-quoted)] /Names [(API-user-string-quoted) 3558 0 R] >> endobj 6153 0 obj << /Limits [(API-user-string-quoted-utf16) (API-user-string-quoted-utf16)] /Names [(API-user-string-quoted-utf16) 3561 0 R] >> endobj 6154 0 obj << /Limits [(API-user-string-quoted-utf32) (API-user-string-quoted-utf32)] /Names [(API-user-string-quoted-utf32) 3564 0 R] >> endobj 6155 0 obj << /Limits [(API-user-string-utf16) (API-user-string-utf16)] /Names [(API-user-string-utf16) 3567 0 R] >> endobj 6156 0 obj << /Limits [(API-user-string-utf32) (API-user-string-utf32)] /Names [(API-user-string-utf32) 3570 0 R] >> endobj 6157 0 obj << /Limits [(API-user-string-warn) (API-user-string-warn)] /Names [(API-user-string-warn) 3573 0 R] >> endobj 6158 0 obj << /Limits [(API-user-uint16) (API-user-uint16)] /Names [(API-user-uint16) 3576 0 R] >> endobj 6159 0 obj << /Limits [(API-user-uint16-error) (API-user-uint16-error)] /Names [(API-user-uint16-error) 3579 0 R] >> endobj 6160 0 obj << /Limits [(API-user-uint32) (API-user-uint32)] /Names [(API-user-uint32) 3582 0 R] >> endobj 6161 0 obj << /Limits [(API-user-uint32-error) (API-user-uint32-error)] /Names [(API-user-uint32-error) 3585 0 R] >> endobj 6162 0 obj << /Limits [(API-user-uint64) (API-user-uint64)] /Names [(API-user-uint64) 3588 0 R] >> endobj 6163 0 obj << /Limits [(API-user-uint64-error) (API-user-uint64-error)] /Names [(API-user-uint64-error) 3591 0 R] >> endobj 6164 0 obj << /Limits [(API-user-uint8) (API-user-uint8)] /Names [(API-user-uint8) 3594 0 R] >> endobj 6165 0 obj << /Limits [(API-user-uint8-error) (API-user-uint8-error)] /Names [(API-user-uint8-error) 3597 0 R] >> endobj 6166 0 obj << /Limits [(API-user-ulong) (API-user-ulong)] /Names [(API-user-ulong) 3600 0 R] >> endobj 6167 0 obj << /Limits [(API-user-ulong-error) (API-user-ulong-error)] /Names [(API-user-ulong-error) 3603 0 R] >> endobj 6168 0 obj << /Limits [(API-user-ulong-warn) (API-user-ulong-warn)] /Names [(API-user-ulong-warn) 3606 0 R] >> endobj 6169 0 obj << /Limits [(API-user-ushort) (API-user-ushort)] /Names [(API-user-ushort) 3609 0 R] >> endobj 6170 0 obj << /Limits [(API-user-ushort-error) (API-user-ushort-error)] /Names [(API-user-ushort-error) 3612 0 R] >> endobj 6171 0 obj << /Limits [(API-user-ushort-warn) (API-user-ushort-warn)] /Names [(API-user-ushort-warn) 3615 0 R] >> endobj 6172 0 obj << /Limits [(API-usrdev2kerndev) (API-usrdev2kerndev)] /Names [(API-usrdev2kerndev) 2970 0 R] >> endobj 6173 0 obj << /Limits [(API-ustack) (API-ustack)] /Names [(API-ustack) 918 0 R] >> endobj 6174 0 obj << /Limits [(API-usymdata) (API-usymdata)] /Names [(API-usymdata) 921 0 R] >> endobj 6175 0 obj << /Limits [(API-usymfile) (API-usymfile)] /Names [(API-usymfile) 924 0 R] >> endobj 6176 0 obj << /Limits [(API-usymfileline) (API-usymfileline)] /Names [(API-usymfileline) 927 0 R] >> endobj 6177 0 obj << /Limits [(API-usymline) (API-usymline)] /Names [(API-usymline) 930 0 R] >> endobj 6178 0 obj << /Limits [(API-usymname) (API-usymname)] /Names [(API-usymname) 933 0 R] >> endobj 6179 0 obj << /Limits [(API-vm-brk) (API-vm-brk)] /Names [(API-vm-brk) 1233 0 R] >> endobj 6180 0 obj << /Limits [(API-vm-fault-contains) (API-vm-fault-contains)] /Names [(API-vm-fault-contains) 1230 0 R] >> endobj 6181 0 obj << /Limits [(API-vm-kfree) (API-vm-kfree)] /Names [(API-vm-kfree) 1236 0 R] >> endobj 6182 0 obj << /Limits [(API-vm-kmalloc) (API-vm-kmalloc)] /Names [(API-vm-kmalloc) 1239 0 R] >> endobj 6183 0 obj << /Limits [(API-vm-kmalloc-node) (API-vm-kmalloc-node)] /Names [(API-vm-kmalloc-node) 1242 0 R] >> endobj 6184 0 obj << /Limits [(API-vm-kmem-cache-alloc) (API-vm-kmem-cache-alloc)] /Names [(API-vm-kmem-cache-alloc) 1245 0 R] >> endobj 6185 0 obj << /Limits [(API-vm-kmem-cache-alloc-node) (API-vm-kmem-cache-alloc-node)] /Names [(API-vm-kmem-cache-alloc-node) 1248 0 R] >> endobj 6186 0 obj << /Limits [(API-vm-kmem-cache-free) (API-vm-kmem-cache-free)] /Names [(API-vm-kmem-cache-free) 1251 0 R] >> endobj 6187 0 obj << /Limits [(API-vm-mmap) (API-vm-mmap)] /Names [(API-vm-mmap) 1254 0 R] >> endobj 6188 0 obj << /Limits [(API-vm-munmap) (API-vm-munmap)] /Names [(API-vm-munmap) 1257 0 R] >> endobj 6189 0 obj << /Limits [(API-vm-oom-kill) (API-vm-oom-kill)] /Names [(API-vm-oom-kill) 1260 0 R] >> endobj 6190 0 obj << /Limits [(API-vm-pagefault) (API-vm-pagefault)] /Names [(API-vm-pagefault) 1263 0 R] >> endobj 6191 0 obj << /Limits [(API-vm-pagefault-return) (API-vm-pagefault-return)] /Names [(API-vm-pagefault-return) 1266 0 R] >> endobj 6192 0 obj << /Limits [(API-vm-write-shared) (API-vm-write-shared)] /Names [(API-vm-write-shared) 1269 0 R] >> endobj 6193 0 obj << /Limits [(API-vm-write-shared-copy) (API-vm-write-shared-copy)] /Names [(API-vm-write-shared-copy) 1272 0 R] >> endobj 6194 0 obj << /Limits [(API-warn) (API-warn)] /Names [(API-warn) 3201 0 R] >> endobj 6195 0 obj << /Limits [(API-workqueue-create) (API-workqueue-create)] /Names [(API-workqueue-create) 1866 0 R] >> endobj 6196 0 obj << /Limits [(API-workqueue-destroy) (API-workqueue-destroy)] /Names [(API-workqueue-destroy) 1869 0 R] >> endobj 6197 0 obj << /Limits [(API-workqueue-execute) (API-workqueue-execute)] /Names [(API-workqueue-execute) 1872 0 R] >> endobj 6198 0 obj << /Limits [(API-workqueue-insert) (API-workqueue-insert)] /Names [(API-workqueue-insert) 1875 0 R] >> endobj 6199 0 obj << /Limits [(TapsetRef) (TapsetRef)] /Names [(TapsetRef) 4705 0 R] >> endobj 6200 0 obj << /Limits [(ansi.stp) (ansi.stp)] /Names [(ansi.stp) 3897 0 R] >> endobj 6201 0 obj << /Limits [(context_stp) (context_stp)] /Names [(context_stp) 174 0 R] >> endobj 6202 0 obj << /Limits [(conversions-guru.stp) (conversions-guru.stp)] /Names [(conversions-guru.stp) 3618 0 R] >> endobj 6203 0 obj << /Limits [(conversions.stp) (conversions.stp)] /Names [(conversions.stp) 3246 0 R] >> endobj 6204 0 obj << /Limits [(ctime.stp) (ctime.stp)] /Names [(ctime.stp) 1176 0 R] >> endobj 6205 0 obj << /Limits [(dentry.stp) (dentry.stp)] /Names [(dentry.stp) 2973 0 R] >> endobj 6206 0 obj << /Limits [(dev.stp) (dev.stp)] /Names [(dev.stp) 2958 0 R] >> endobj 6207 0 obj << /Limits [(errno.stp) (errno.stp)] /Names [(errno.stp) 2937 0 R] >> endobj 6208 0 obj << /Limits [(floatingpoint.stp) (floatingpoint.stp)] /Names [(floatingpoint.stp) 4611 0 R] >> endobj 6209 0 obj << /Limits [(guru-delay.stp) (guru-delay.stp)] /Names [(guru-delay.stp) 3834 0 R] >> endobj 6210 0 obj << /Limits [(introduction) (introduction)] /Names [(introduction) 171 0 R] >> endobj 6211 0 obj << /Limits [(iosched.stp) (iosched.stp)] /Names [(iosched.stp) 1530 0 R] >> endobj 6212 0 obj << /Limits [(irq.stp) (irq.stp)] /Names [(irq.stp) 1851 0 R] >> endobj 6213 0 obj << /Limits [(json.stp) (json.stp)] /Names [(json.stp) 4563 0 R] >> endobj 6214 0 obj << /Limits [(kprocess.stp) (kprocess.stp)] /Names [(kprocess.stp) 2634 0 R] >> endobj 6215 0 obj << /Limits [(livepatch.stp) (livepatch.stp)] /Names [(livepatch.stp) 4689 0 R] >> endobj 6216 0 obj << /Limits [(logging.stp) (logging.stp)] /Names [(logging.stp) 3174 0 R] >> endobj 6217 0 obj << /Limits [(memory_stp) (memory_stp)] /Names [(memory_stp) 1197 0 R] >> endobj 6218 0 obj << /Limits [(networking.stp) (networking.stp)] /Names [(networking.stp) 1878 0 R] >> endobj 6219 0 obj << /Limits [(nfsd.stp) (nfsd.stp)] /Names [(nfsd.stp) 4191 0 R] >> endobj 6220 0 obj << /Limits [(queue_stats.stp) (queue_stats.stp)] /Names [(queue_stats.stp) 3204 0 R] >> endobj 6221 0 obj << /Limits [(random.stp) (random.stp)] /Names [(random.stp) 3240 0 R] >> endobj 6222 0 obj << /Limits [(rlimit.stp) (rlimit.stp)] /Names [(rlimit.stp) 2952 0 R] >> endobj 6223 0 obj << /Limits [(sched.stp) (sched.stp)] /Names [(sched.stp) 1311 0 R] >> endobj 6224 0 obj << /Limits [(scsi.stp) (scsi.stp)] /Names [(scsi.stp) 1587 0 R] >> endobj 6225 0 obj << /Limits [(signal.stp) (signal.stp)] /Names [(signal.stp) 2667 0 R] >> endobj 6226 0 obj << /Limits [(snmp.stp) (snmp.stp)] /Names [(snmp.stp) 2520 0 R] >> endobj 6227 0 obj << /Limits [(socket.stp) (socket.stp)] /Names [(socket.stp) 2253 0 R] >> endobj 6228 0 obj << /Limits [(speculation.stp) (speculation.stp)] /Names [(speculation.stp) 4548 0 R] >> endobj 6229 0 obj << /Limits [(stap_staticmarkers.stp) (stap_staticmarkers.stp)] /Names [(stap_staticmarkers.stp) 3939 0 R] >> endobj 6230 0 obj << /Limits [(string.stp) (string.stp)] /Names [(string.stp) 3849 0 R] >> endobj 6231 0 obj << /Limits [(switchfile.stp) (switchfile.stp)] /Names [(switchfile.stp) 4605 0 R] >> endobj 6232 0 obj << /Limits [(syscall_any.stp) (syscall_any.stp)] /Names [(syscall_any.stp) 4680 0 R] >> endobj 6233 0 obj << /Limits [(system.stp) (system.stp)] /Names [(system.stp) 1191 0 R] >> endobj 6234 0 obj << /Limits [(task_time_stp) (task_time_stp)] /Names [(task_time_stp) 1275 0 R] >> endobj 6235 0 obj << /Limits [(timestamp_stp) (timestamp_stp)] /Names [(timestamp_stp) 936 0 R] >> endobj 6236 0 obj << /Limits [(tty.stp) (tty.stp)] /Names [(tty.stp) 1608 0 R] >> endobj 6237 0 obj << /Limits [(API-) (tty.stp)] /Kids [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 6114 0 R 6115 0 R 6116 0 R 6117 0 R 6118 0 R 6119 0 R 6120 0 R 6121 0 R 6122 0 R 6123 0 R 6124 0 R 6125 0 R 6126 0 R 6127 0 R 6128 0 R 6129 0 R 6130 0 R 6131 0 R 6132 0 R 6133 0 R 6134 0 R 6135 0 R 6136 0 R 6137 0 R 6138 0 R 6139 0 R 6140 0 R 6141 0 R 6142 0 R 6143 0 R 6144 0 R 6145 0 R 6146 0 R 6147 0 R 6148 0 R 6149 0 R 6150 0 R 6151 0 R 6152 0 R 6153 0 R 6154 0 R 6155 0 R 6156 0 R 6157 0 R 6158 0 R 6159 0 R 6160 0 R 6161 0 R 6162 0 R 6163 0 R 6164 0 R 6165 0 R 6166 0 R 6167 0 R 6168 0 R 6169 0 R 6170 0 R 6171 0 R 6172 0 R 6173 0 R 6174 0 R 6175 0 R 6176 0 R 6177 0 R 6178 0 R 6179 0 R 6180 0 R 6181 0 R 6182 0 R 6183 0 R 6184 0 R 6185 0 R 6186 0 R 6187 0 R 6188 0 R 6189 0 R 6190 0 R 6191 0 R 6192 0 R 6193 0 R 6194 0 R 6195 0 R 6196 0 R 6197 0 R 6198 0 R 6199 0 R 6200 0 R 6201 0 R 6202 0 R 6203 0 R 6204 0 R 6205 0 R 6206 0 R 6207 0 R 6208 0 R 6209 0 R 6210 0 R 6211 0 R 6212 0 R 6213 0 R 6214 0 R 6215 0 R 6216 0 R 6217 0 R 6218 0 R 6219 0 R 6220 0 R 6221 0 R 6222 0 R 6223 0 R 6224 0 R 6225 0 R 6226 0 R 6227 0 R 6228 0 R 6229 0 R 6230 0 R 6231 0 R 6232 0 R 6233 0 R 6234 0 R 6235 0 R 6236 0 R] >> endobj 12 0 obj << /Type /Pages /Count 790 /Kids [10 0 R 15 0 R 327 0 R 657 0 R 987 0 R 1317 0 R 1647 0 R 2016 0 R 2346 0 R 2676 0 R 3006 0 R 3336 0 R 3666 0 R 3996 0 R 4326 0 R 4656 0 R 4704 0 R 19 0 R 22 0 R 25 0 R 28 0 R 31 0 R 34 0 R 37 0 R 40 0 R 43 0 R 46 0 R 49 0 R 52 0 R 55 0 R 58 0 R 61 0 R 64 0 R 67 0 R 70 0 R 73 0 R 76 0 R 79 0 R 82 0 R 85 0 R 88 0 R 91 0 R 94 0 R 97 0 R 100 0 R 103 0 R 106 0 R 109 0 R 112 0 R 115 0 R 118 0 R 121 0 R 124 0 R 127 0 R 130 0 R 133 0 R 136 0 R 139 0 R 142 0 R 145 0 R 148 0 R 151 0 R 154 0 R 157 0 R 160 0 R 163 0 R 166 0 R 169 0 R 331 0 R 334 0 R 337 0 R 340 0 R 343 0 R 346 0 R 349 0 R 352 0 R 355 0 R 358 0 R 361 0 R 364 0 R 367 0 R 370 0 R 373 0 R 376 0 R 379 0 R 382 0 R 385 0 R 388 0 R 391 0 R 394 0 R 397 0 R 400 0 R 403 0 R 406 0 R 409 0 R 412 0 R 415 0 R 418 0 R 421 0 R 424 0 R 427 0 R 430 0 R 433 0 R 436 0 R 439 0 R 442 0 R 445 0 R 448 0 R 451 0 R 454 0 R 457 0 R 460 0 R 463 0 R 466 0 R 469 0 R 472 0 R 475 0 R 478 0 R 481 0 R 484 0 R 487 0 R 490 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 817 0 R 820 0 R 991 0 R 994 0 R 997 0 R 1000 0 R 1003 0 R 1006 0 R 1009 0 R 1012 0 R 1015 0 R 1018 0 R 1021 0 R 1024 0 R 1027 0 R 1030 0 R 1033 0 R 1036 0 R 1039 0 R 1042 0 R 1045 0 R 1048 0 R 1051 0 R 1054 0 R 1057 0 R 1060 0 R 1063 0 R 1066 0 R 1069 0 R 1072 0 R 1075 0 R 1078 0 R 1081 0 R 1084 0 R 1087 0 R 1090 0 R 1093 0 R 1096 0 R 1099 0 R 1102 0 R 1105 0 R 1108 0 R 1111 0 R 1114 0 R 1117 0 R 1120 0 R 1123 0 R 1126 0 R 1129 0 R 1132 0 R 1135 0 R 1138 0 R 1141 0 R 1144 0 R 1147 0 R 1150 0 R 1321 0 R 1324 0 R 1327 0 R 1330 0 R 1333 0 R 1336 0 R 1339 0 R 1342 0 R 1345 0 R 1348 0 R 1351 0 R 1354 0 R 1357 0 R 1360 0 R 1363 0 R 1366 0 R 1369 0 R 1372 0 R 1375 0 R 1378 0 R 1381 0 R 1384 0 R 1387 0 R 1390 0 R 1393 0 R 1396 0 R 1399 0 R 1402 0 R 1405 0 R 1408 0 R 1411 0 R 1414 0 R 1417 0 R 1420 0 R 1423 0 R 1426 0 R 1429 0 R 1432 0 R 1435 0 R 1438 0 R 1441 0 R 1444 0 R 1447 0 R 1450 0 R 1453 0 R 1456 0 R 1459 0 R 1462 0 R 1465 0 R 1468 0 R 1471 0 R 1474 0 R 1477 0 R 1480 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 1840 0 R 1843 0 R 1846 0 R 1849 0 R 2020 0 R 2023 0 R 2026 0 R 2029 0 R 2032 0 R 2035 0 R 2038 0 R 2041 0 R 2044 0 R 2047 0 R 2050 0 R 2053 0 R 2056 0 R 2059 0 R 2062 0 R 2065 0 R 2068 0 R 2071 0 R 2074 0 R 2077 0 R 2080 0 R 2083 0 R 2086 0 R 2089 0 R 2092 0 R 2095 0 R 2098 0 R 2101 0 R 2104 0 R 2107 0 R 2110 0 R 2113 0 R 2116 0 R 2119 0 R 2122 0 R 2125 0 R 2128 0 R 2131 0 R 2134 0 R 2137 0 R 2140 0 R 2143 0 R 2146 0 R 2149 0 R 2152 0 R 2155 0 R 2158 0 R 2161 0 R 2164 0 R 2167 0 R 2170 0 R 2173 0 R 2176 0 R 2179 0 R 2350 0 R 2353 0 R 2356 0 R 2359 0 R 2362 0 R 2365 0 R 2368 0 R 2371 0 R 2374 0 R 2377 0 R 2380 0 R 2383 0 R 2386 0 R 2389 0 R 2392 0 R 2395 0 R 2398 0 R 2401 0 R 2404 0 R 2407 0 R 2410 0 R 2413 0 R 2416 0 R 2419 0 R 2422 0 R 2425 0 R 2428 0 R 2431 0 R 2434 0 R 2437 0 R 2440 0 R 2443 0 R 2446 0 R 2449 0 R 2452 0 R 2455 0 R 2458 0 R 2461 0 R 2464 0 R 2467 0 R 2470 0 R 2473 0 R 2476 0 R 2479 0 R 2482 0 R 2485 0 R 2488 0 R 2491 0 R 2494 0 R 2497 0 R 2500 0 R 2503 0 R 2506 0 R 2509 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 2824 0 R 2827 0 R 2830 0 R 2833 0 R 2836 0 R 2839 0 R 3010 0 R 3013 0 R 3016 0 R 3019 0 R 3022 0 R 3025 0 R 3028 0 R 3031 0 R 3034 0 R 3037 0 R 3040 0 R 3043 0 R 3046 0 R 3049 0 R 3052 0 R 3055 0 R 3058 0 R 3061 0 R 3064 0 R 3067 0 R 3070 0 R 3073 0 R 3076 0 R 3079 0 R 3082 0 R 3085 0 R 3088 0 R 3091 0 R 3094 0 R 3097 0 R 3100 0 R 3103 0 R 3106 0 R 3109 0 R 3112 0 R 3115 0 R 3118 0 R 3121 0 R 3124 0 R 3127 0 R 3130 0 R 3133 0 R 3136 0 R 3139 0 R 3142 0 R 3145 0 R 3148 0 R 3151 0 R 3154 0 R 3157 0 R 3160 0 R 3163 0 R 3166 0 R 3169 0 R 3340 0 R 3343 0 R 3346 0 R 3349 0 R 3352 0 R 3355 0 R 3358 0 R 3361 0 R 3364 0 R 3367 0 R 3370 0 R 3373 0 R 3376 0 R 3379 0 R 3382 0 R 3385 0 R 3388 0 R 3391 0 R 3394 0 R 3397 0 R 3400 0 R 3403 0 R 3406 0 R 3409 0 R 3412 0 R 3415 0 R 3418 0 R 3421 0 R 3424 0 R 3427 0 R 3430 0 R 3433 0 R 3436 0 R 3439 0 R 3442 0 R 3445 0 R 3448 0 R 3451 0 R 3454 0 R 3457 0 R 3460 0 R 3463 0 R 3466 0 R 3469 0 R 3472 0 R 3475 0 R 3478 0 R 3481 0 R 3484 0 R 3487 0 R 3490 0 R 3493 0 R 3496 0 R 3499 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 3808 0 R 3811 0 R 3814 0 R 3817 0 R 3820 0 R 3823 0 R 3826 0 R 3829 0 R 4000 0 R 4003 0 R 4006 0 R 4009 0 R 4012 0 R 4015 0 R 4018 0 R 4021 0 R 4024 0 R 4027 0 R 4030 0 R 4033 0 R 4036 0 R 4039 0 R 4042 0 R 4045 0 R 4048 0 R 4051 0 R 4054 0 R 4057 0 R 4060 0 R 4063 0 R 4066 0 R 4069 0 R 4072 0 R 4075 0 R 4078 0 R 4081 0 R 4084 0 R 4087 0 R 4090 0 R 4093 0 R 4096 0 R 4099 0 R 4102 0 R 4105 0 R 4108 0 R 4111 0 R 4114 0 R 4117 0 R 4120 0 R 4123 0 R 4126 0 R 4129 0 R 4132 0 R 4135 0 R 4138 0 R 4141 0 R 4144 0 R 4147 0 R 4150 0 R 4153 0 R 4156 0 R 4159 0 R 4330 0 R 4333 0 R 4336 0 R 4339 0 R 4342 0 R 4345 0 R 4348 0 R 4351 0 R 4354 0 R 4357 0 R 4360 0 R 4363 0 R 4366 0 R 4369 0 R 4372 0 R 4375 0 R 4378 0 R 4381 0 R 4384 0 R 4387 0 R 4390 0 R 4393 0 R 4396 0 R 4399 0 R 4402 0 R 4405 0 R 4408 0 R 4411 0 R 4414 0 R 4417 0 R 4420 0 R 4423 0 R 4426 0 R 4429 0 R 4432 0 R 4435 0 R 4438 0 R 4441 0 R 4444 0 R 4447 0 R 4450 0 R 4453 0 R 4456 0 R 4459 0 R 4462 0 R 4465 0 R 4468 0 R 4471 0 R 4474 0 R 4477 0 R 4480 0 R 4483 0 R 4486 0 R 4489 0 R 4660 0 R 4663 0 R 4666 0 R 4669 0 R 4672 0 R 4675 0 R 4678 0 R ] >> endobj 6238 0 obj << /Type /Catalog /Pages 12 0 R /Lang (en) /Metadata 5 0 R /PageLabels 6239 0 R /Outlines 4707 0 R /PageMode /UseOutlines /Names 6240 0 R >> endobj 11 0 obj << /Font << /F6 5470 0 R /F7 5471 0 R /F9 5472 0 R /F10 5473 0 R /F3 5474 0 R /F5 5475 0 R >> /ProcSet [/PDF /ImageB /ImageC /Text] /ColorSpace << /DefaultRGB 4 0 R >> >> endobj 6239 0 obj << /Nums [0 7 0 R 2 170 0 R 3 491 0 R 4 821 0 R 5 1151 0 R 6 1481 0 R 7 1850 0 R 8 2180 0 R 9 2510 0 R 10 2840 0 R 11 3170 0 R 12 3500 0 R 13 3830 0 R 14 4160 0 R 15 4490 0 R 16 4679 0 R 17 16 0 R 68 328 0 R 122 658 0 R 176 988 0 R 230 1318 0 R 284 1648 0 R 351 2017 0 R 405 2347 0 R 459 2677 0 R 513 3007 0 R 567 3337 0 R 621 3667 0 R 675 3997 0 R 729 4327 0 R 783 4657 0 R] >> endobj 4707 0 obj << /First 4706 0 R /Last 5464 0 R >> endobj 6240 0 obj << /Dests 6237 0 R >> endobj xref 0 6241 0000000000 65535 f 0000000015 00000 n 0000000219 00000 n 0000007105 00000 n 0000007125 00000 n 0000007158 00000 n 0000008373 00000 n 0000008393 00000 n 0000008420 00000 n 0000008671 00000 n 0000008690 00000 n 0001424679 00000 n 0001417535 00000 n 0000008883 00000 n 0000009855 00000 n 0000009875 00000 n 0000010069 00000 n 0000010097 00000 n 0000010994 00000 n 0000011014 00000 n 0000011208 00000 n 0000011732 00000 n 0000011752 00000 n 0000011946 00000 n 0000012688 00000 n 0000012708 00000 n 0000012902 00000 n 0000013524 00000 n 0000013544 00000 n 0000013738 00000 n 0000014465 00000 n 0000014485 00000 n 0000014679 00000 n 0000015382 00000 n 0000015402 00000 n 0000015596 00000 n 0000016153 00000 n 0000016173 00000 n 0000016367 00000 n 0000017116 00000 n 0000017136 00000 n 0000017330 00000 n 0000018062 00000 n 0000018082 00000 n 0000018276 00000 n 0000019200 00000 n 0000019220 00000 n 0000019414 00000 n 0000020065 00000 n 0000020085 00000 n 0000020279 00000 n 0000020819 00000 n 0000020839 00000 n 0000021033 00000 n 0000021647 00000 n 0000021667 00000 n 0000021861 00000 n 0000022599 00000 n 0000022619 00000 n 0000022813 00000 n 0000023367 00000 n 0000023387 00000 n 0000023581 00000 n 0000024260 00000 n 0000024280 00000 n 0000024474 00000 n 0000025034 00000 n 0000025054 00000 n 0000025248 00000 n 0000025809 00000 n 0000025829 00000 n 0000026023 00000 n 0000026648 00000 n 0000026668 00000 n 0000026862 00000 n 0000027414 00000 n 0000027434 00000 n 0000027628 00000 n 0000028232 00000 n 0000028252 00000 n 0000028446 00000 n 0000029033 00000 n 0000029053 00000 n 0000029247 00000 n 0000029816 00000 n 0000029836 00000 n 0000030030 00000 n 0000030687 00000 n 0000030707 00000 n 0000030901 00000 n 0000031473 00000 n 0000031493 00000 n 0000031687 00000 n 0000032450 00000 n 0000032470 00000 n 0000032664 00000 n 0000033307 00000 n 0000033327 00000 n 0000033521 00000 n 0000034098 00000 n 0000034118 00000 n 0000034313 00000 n 0000034968 00000 n 0000034989 00000 n 0000035185 00000 n 0000035844 00000 n 0000035865 00000 n 0000036061 00000 n 0000036719 00000 n 0000036740 00000 n 0000036936 00000 n 0000037598 00000 n 0000037619 00000 n 0000037815 00000 n 0000038392 00000 n 0000038413 00000 n 0000038609 00000 n 0000039292 00000 n 0000039313 00000 n 0000039509 00000 n 0000040244 00000 n 0000040265 00000 n 0000040461 00000 n 0000041121 00000 n 0000041142 00000 n 0000041338 00000 n 0000041989 00000 n 0000042010 00000 n 0000042206 00000 n 0000042773 00000 n 0000042794 00000 n 0000042990 00000 n 0000043545 00000 n 0000043566 00000 n 0000043762 00000 n 0000044311 00000 n 0000044332 00000 n 0000044528 00000 n 0000045101 00000 n 0000045122 00000 n 0000045318 00000 n 0000045891 00000 n 0000045912 00000 n 0000046108 00000 n 0000046772 00000 n 0000046793 00000 n 0000046989 00000 n 0000047702 00000 n 0000047723 00000 n 0000047919 00000 n 0000048530 00000 n 0000048551 00000 n 0000048747 00000 n 0000049413 00000 n 0000049434 00000 n 0000049630 00000 n 0000050314 00000 n 0000050335 00000 n 0000050531 00000 n 0000051099 00000 n 0000051120 00000 n 0000051316 00000 n 0000052001 00000 n 0000052022 00000 n 0000052218 00000 n 0000052905 00000 n 0000052926 00000 n 0000053122 00000 n 0000053702 00000 n 0000053723 00000 n 0000053919 00000 n 0000053954 00000 n 0000054033 00000 n 0000054173 00000 n 0000054315 00000 n 0000054394 00000 n 0000054534 00000 n 0000054676 00000 n 0000054755 00000 n 0000054894 00000 n 0000055032 00000 n 0000055111 00000 n 0000055250 00000 n 0000055392 00000 n 0000055471 00000 n 0000055609 00000 n 0000055751 00000 n 0000055830 00000 n 0000055968 00000 n 0000056106 00000 n 0000056185 00000 n 0000056324 00000 n 0000056462 00000 n 0000056541 00000 n 0000056680 00000 n 0000056822 00000 n 0000056901 00000 n 0000057040 00000 n 0000057178 00000 n 0000057257 00000 n 0000057396 00000 n 0000057534 00000 n 0000057613 00000 n 0000057752 00000 n 0000057894 00000 n 0000057973 00000 n 0000058112 00000 n 0000058250 00000 n 0000058329 00000 n 0000058468 00000 n 0000058610 00000 n 0000058689 00000 n 0000058828 00000 n 0000058970 00000 n 0000059049 00000 n 0000059188 00000 n 0000059330 00000 n 0000059409 00000 n 0000059547 00000 n 0000059689 00000 n 0000059768 00000 n 0000059907 00000 n 0000060049 00000 n 0000060128 00000 n 0000060267 00000 n 0000060405 00000 n 0000060484 00000 n 0000060623 00000 n 0000060765 00000 n 0000060844 00000 n 0000060983 00000 n 0000061121 00000 n 0000061200 00000 n 0000061339 00000 n 0000061481 00000 n 0000061560 00000 n 0000061699 00000 n 0000061841 00000 n 0000061920 00000 n 0000062059 00000 n 0000062197 00000 n 0000062276 00000 n 0000062415 00000 n 0000062553 00000 n 0000062632 00000 n 0000062771 00000 n 0000062909 00000 n 0000062988 00000 n 0000063127 00000 n 0000063265 00000 n 0000063344 00000 n 0000063483 00000 n 0000063621 00000 n 0000063701 00000 n 0000063840 00000 n 0000063982 00000 n 0000064062 00000 n 0000064200 00000 n 0000064342 00000 n 0000064422 00000 n 0000064560 00000 n 0000064702 00000 n 0000064782 00000 n 0000064921 00000 n 0000065063 00000 n 0000065143 00000 n 0000065282 00000 n 0000065420 00000 n 0000065500 00000 n 0000065639 00000 n 0000065781 00000 n 0000065861 00000 n 0000066000 00000 n 0000066138 00000 n 0000066218 00000 n 0000066357 00000 n 0000066495 00000 n 0000066575 00000 n 0000066714 00000 n 0000066852 00000 n 0000066932 00000 n 0000067071 00000 n 0000067213 00000 n 0000067293 00000 n 0000067432 00000 n 0000067570 00000 n 0000067650 00000 n 0000067789 00000 n 0000067931 00000 n 0000068011 00000 n 0000068150 00000 n 0000068288 00000 n 0000068368 00000 n 0000068507 00000 n 0000068645 00000 n 0000068725 00000 n 0000068864 00000 n 0000069002 00000 n 0000069082 00000 n 0000069221 00000 n 0000069363 00000 n 0000069443 00000 n 0000069582 00000 n 0000069720 00000 n 0000069800 00000 n 0000069939 00000 n 0000070077 00000 n 0000070157 00000 n 0000070296 00000 n 0000070438 00000 n 0000070518 00000 n 0000070657 00000 n 0000070795 00000 n 0000070875 00000 n 0000071014 00000 n 0000071152 00000 n 0000071232 00000 n 0000071371 00000 n 0000071513 00000 n 0000071593 00000 n 0000071731 00000 n 0000071868 00000 n 0000071948 00000 n 0000072085 00000 n 0000072221 00000 n 0000087160 00000 n 0000087183 00000 n 0000088020 00000 n 0000088234 00000 n 0000088270 00000 n 0000089185 00000 n 0000089206 00000 n 0000089402 00000 n 0000090294 00000 n 0000090315 00000 n 0000090511 00000 n 0000091566 00000 n 0000091587 00000 n 0000091783 00000 n 0000092653 00000 n 0000092674 00000 n 0000092870 00000 n 0000093897 00000 n 0000093918 00000 n 0000094114 00000 n 0000095035 00000 n 0000095056 00000 n 0000095252 00000 n 0000096144 00000 n 0000096165 00000 n 0000096361 00000 n 0000097282 00000 n 0000097303 00000 n 0000097499 00000 n 0000098523 00000 n 0000098544 00000 n 0000098740 00000 n 0000099330 00000 n 0000099351 00000 n 0000099547 00000 n 0000100251 00000 n 0000100272 00000 n 0000100468 00000 n 0000101797 00000 n 0000101819 00000 n 0000102015 00000 n 0000102799 00000 n 0000102820 00000 n 0000103016 00000 n 0000103886 00000 n 0000103907 00000 n 0000104103 00000 n 0000104991 00000 n 0000105012 00000 n 0000105208 00000 n 0000105999 00000 n 0000106020 00000 n 0000106216 00000 n 0000106802 00000 n 0000106823 00000 n 0000107019 00000 n 0000107605 00000 n 0000107626 00000 n 0000107822 00000 n 0000108447 00000 n 0000108468 00000 n 0000108664 00000 n 0000109337 00000 n 0000109358 00000 n 0000109554 00000 n 0000110150 00000 n 0000110171 00000 n 0000110367 00000 n 0000110998 00000 n 0000111019 00000 n 0000111215 00000 n 0000111821 00000 n 0000111842 00000 n 0000112038 00000 n 0000112646 00000 n 0000112667 00000 n 0000112863 00000 n 0000113473 00000 n 0000113494 00000 n 0000113690 00000 n 0000114300 00000 n 0000114321 00000 n 0000114517 00000 n 0000115144 00000 n 0000115165 00000 n 0000115361 00000 n 0000116044 00000 n 0000116065 00000 n 0000116261 00000 n 0000116870 00000 n 0000116891 00000 n 0000117087 00000 n 0000117730 00000 n 0000117751 00000 n 0000117947 00000 n 0000119026 00000 n 0000119048 00000 n 0000119244 00000 n 0000120431 00000 n 0000120453 00000 n 0000120649 00000 n 0000121844 00000 n 0000121866 00000 n 0000122062 00000 n 0000123357 00000 n 0000123379 00000 n 0000123575 00000 n 0000124762 00000 n 0000124784 00000 n 0000124980 00000 n 0000126177 00000 n 0000126199 00000 n 0000126395 00000 n 0000127199 00000 n 0000127220 00000 n 0000127416 00000 n 0000127971 00000 n 0000127992 00000 n 0000128188 00000 n 0000128788 00000 n 0000128809 00000 n 0000129005 00000 n 0000129595 00000 n 0000129616 00000 n 0000129812 00000 n 0000130466 00000 n 0000130487 00000 n 0000130683 00000 n 0000131544 00000 n 0000131565 00000 n 0000131761 00000 n 0000132439 00000 n 0000132460 00000 n 0000132656 00000 n 0000133375 00000 n 0000133396 00000 n 0000133592 00000 n 0000134279 00000 n 0000134300 00000 n 0000134496 00000 n 0000135179 00000 n 0000135200 00000 n 0000135396 00000 n 0000136221 00000 n 0000136242 00000 n 0000136438 00000 n 0000137143 00000 n 0000137164 00000 n 0000137360 00000 n 0000138067 00000 n 0000138088 00000 n 0000138284 00000 n 0000138869 00000 n 0000138890 00000 n 0000139086 00000 n 0000139747 00000 n 0000139768 00000 n 0000139964 00000 n 0000140516 00000 n 0000140537 00000 n 0000140733 00000 n 0000141324 00000 n 0000141345 00000 n 0000141541 00000 n 0000142131 00000 n 0000142152 00000 n 0000142348 00000 n 0000142383 00000 n 0000142463 00000 n 0000142598 00000 n 0000142736 00000 n 0000142816 00000 n 0000142951 00000 n 0000143085 00000 n 0000143165 00000 n 0000143300 00000 n 0000143434 00000 n 0000143514 00000 n 0000143649 00000 n 0000143787 00000 n 0000143867 00000 n 0000144002 00000 n 0000144140 00000 n 0000144220 00000 n 0000144355 00000 n 0000144493 00000 n 0000144573 00000 n 0000144708 00000 n 0000144842 00000 n 0000144922 00000 n 0000145057 00000 n 0000145191 00000 n 0000145271 00000 n 0000145406 00000 n 0000145540 00000 n 0000145620 00000 n 0000145755 00000 n 0000145889 00000 n 0000145969 00000 n 0000146104 00000 n 0000146238 00000 n 0000146318 00000 n 0000146453 00000 n 0000146591 00000 n 0000146671 00000 n 0000146806 00000 n 0000146940 00000 n 0000147020 00000 n 0000147155 00000 n 0000147293 00000 n 0000147373 00000 n 0000147508 00000 n 0000147642 00000 n 0000147722 00000 n 0000147857 00000 n 0000147995 00000 n 0000148075 00000 n 0000148210 00000 n 0000148344 00000 n 0000148424 00000 n 0000148559 00000 n 0000148693 00000 n 0000148773 00000 n 0000148908 00000 n 0000149046 00000 n 0000149126 00000 n 0000149261 00000 n 0000149399 00000 n 0000149479 00000 n 0000149614 00000 n 0000149748 00000 n 0000149828 00000 n 0000149962 00000 n 0000150100 00000 n 0000150180 00000 n 0000150315 00000 n 0000150449 00000 n 0000150529 00000 n 0000150664 00000 n 0000150798 00000 n 0000150878 00000 n 0000151013 00000 n 0000151151 00000 n 0000151231 00000 n 0000151366 00000 n 0000151504 00000 n 0000151584 00000 n 0000151719 00000 n 0000151857 00000 n 0000151937 00000 n 0000152072 00000 n 0000152206 00000 n 0000152286 00000 n 0000152421 00000 n 0000152555 00000 n 0000152635 00000 n 0000152770 00000 n 0000152908 00000 n 0000152988 00000 n 0000153123 00000 n 0000153261 00000 n 0000153341 00000 n 0000153476 00000 n 0000153610 00000 n 0000153690 00000 n 0000153825 00000 n 0000153963 00000 n 0000154043 00000 n 0000154178 00000 n 0000154316 00000 n 0000154396 00000 n 0000154531 00000 n 0000154665 00000 n 0000154745 00000 n 0000154880 00000 n 0000155014 00000 n 0000155094 00000 n 0000155229 00000 n 0000155363 00000 n 0000155443 00000 n 0000155578 00000 n 0000155712 00000 n 0000155792 00000 n 0000155927 00000 n 0000156061 00000 n 0000156141 00000 n 0000156276 00000 n 0000156414 00000 n 0000156494 00000 n 0000156629 00000 n 0000156763 00000 n 0000156843 00000 n 0000156978 00000 n 0000157112 00000 n 0000157192 00000 n 0000157327 00000 n 0000157465 00000 n 0000157545 00000 n 0000157680 00000 n 0000157818 00000 n 0000157898 00000 n 0000158033 00000 n 0000158167 00000 n 0000158247 00000 n 0000158382 00000 n 0000158516 00000 n 0000158596 00000 n 0000158731 00000 n 0000158869 00000 n 0000158949 00000 n 0000159084 00000 n 0000159218 00000 n 0000159298 00000 n 0000159433 00000 n 0000159571 00000 n 0000159651 00000 n 0000159786 00000 n 0000159924 00000 n 0000160004 00000 n 0000160139 00000 n 0000160273 00000 n 0000160353 00000 n 0000160487 00000 n 0000160620 00000 n 0000160700 00000 n 0000160833 00000 n 0000160965 00000 n 0000161045 00000 n 0000161178 00000 n 0000161310 00000 n 0000176189 00000 n 0000176212 00000 n 0000177097 00000 n 0000177311 00000 n 0000177348 00000 n 0000177889 00000 n 0000177910 00000 n 0000178106 00000 n 0000178681 00000 n 0000178702 00000 n 0000178898 00000 n 0000179511 00000 n 0000179532 00000 n 0000179728 00000 n 0000180312 00000 n 0000180333 00000 n 0000180529 00000 n 0000181141 00000 n 0000181162 00000 n 0000181358 00000 n 0000181934 00000 n 0000181955 00000 n 0000182151 00000 n 0000182747 00000 n 0000182768 00000 n 0000182964 00000 n 0000183558 00000 n 0000183579 00000 n 0000183775 00000 n 0000184389 00000 n 0000184410 00000 n 0000184606 00000 n 0000185220 00000 n 0000185241 00000 n 0000185437 00000 n 0000186052 00000 n 0000186073 00000 n 0000186269 00000 n 0000186854 00000 n 0000186875 00000 n 0000187071 00000 n 0000187676 00000 n 0000187697 00000 n 0000187893 00000 n 0000188565 00000 n 0000188586 00000 n 0000188782 00000 n 0000189371 00000 n 0000189392 00000 n 0000189588 00000 n 0000190171 00000 n 0000190192 00000 n 0000190388 00000 n 0000191093 00000 n 0000191114 00000 n 0000191310 00000 n 0000191894 00000 n 0000191915 00000 n 0000192111 00000 n 0000192694 00000 n 0000192715 00000 n 0000192911 00000 n 0000193471 00000 n 0000193492 00000 n 0000193688 00000 n 0000194275 00000 n 0000194296 00000 n 0000194492 00000 n 0000195082 00000 n 0000195103 00000 n 0000195299 00000 n 0000195931 00000 n 0000195952 00000 n 0000196148 00000 n 0000196997 00000 n 0000197018 00000 n 0000197214 00000 n 0000198150 00000 n 0000198171 00000 n 0000198367 00000 n 0000199300 00000 n 0000199321 00000 n 0000199517 00000 n 0000200074 00000 n 0000200095 00000 n 0000200291 00000 n 0000200904 00000 n 0000200925 00000 n 0000201121 00000 n 0000201786 00000 n 0000201807 00000 n 0000202003 00000 n 0000202591 00000 n 0000202612 00000 n 0000202808 00000 n 0000203563 00000 n 0000203584 00000 n 0000203780 00000 n 0000204349 00000 n 0000204370 00000 n 0000204566 00000 n 0000205372 00000 n 0000205393 00000 n 0000205589 00000 n 0000206499 00000 n 0000206520 00000 n 0000206716 00000 n 0000207396 00000 n 0000207417 00000 n 0000207613 00000 n 0000208333 00000 n 0000208354 00000 n 0000208550 00000 n 0000209238 00000 n 0000209259 00000 n 0000209455 00000 n 0000210143 00000 n 0000210164 00000 n 0000210360 00000 n 0000210919 00000 n 0000210940 00000 n 0000211136 00000 n 0000211752 00000 n 0000211773 00000 n 0000211969 00000 n 0000212693 00000 n 0000212714 00000 n 0000212910 00000 n 0000213631 00000 n 0000213652 00000 n 0000213848 00000 n 0000214564 00000 n 0000214585 00000 n 0000214781 00000 n 0000215500 00000 n 0000215521 00000 n 0000215717 00000 n 0000216305 00000 n 0000216326 00000 n 0000216522 00000 n 0000217261 00000 n 0000217282 00000 n 0000217478 00000 n 0000218057 00000 n 0000218078 00000 n 0000218274 00000 n 0000218851 00000 n 0000218872 00000 n 0000219068 00000 n 0000219642 00000 n 0000219663 00000 n 0000219859 00000 n 0000220437 00000 n 0000220458 00000 n 0000220654 00000 n 0000221340 00000 n 0000221361 00000 n 0000221557 00000 n 0000222126 00000 n 0000222147 00000 n 0000222343 00000 n 0000223033 00000 n 0000223054 00000 n 0000223250 00000 n 0000223941 00000 n 0000223962 00000 n 0000224158 00000 n 0000224193 00000 n 0000224273 00000 n 0000224408 00000 n 0000224546 00000 n 0000224626 00000 n 0000224761 00000 n 0000224899 00000 n 0000224979 00000 n 0000225114 00000 n 0000225252 00000 n 0000225332 00000 n 0000225467 00000 n 0000225601 00000 n 0000225681 00000 n 0000225815 00000 n 0000225953 00000 n 0000226033 00000 n 0000226168 00000 n 0000226302 00000 n 0000226382 00000 n 0000226517 00000 n 0000226655 00000 n 0000226735 00000 n 0000226870 00000 n 0000227008 00000 n 0000227088 00000 n 0000227223 00000 n 0000227361 00000 n 0000227441 00000 n 0000227576 00000 n 0000227714 00000 n 0000227794 00000 n 0000227929 00000 n 0000228063 00000 n 0000228143 00000 n 0000228278 00000 n 0000228416 00000 n 0000228496 00000 n 0000228631 00000 n 0000228765 00000 n 0000228845 00000 n 0000228980 00000 n 0000229114 00000 n 0000229194 00000 n 0000229329 00000 n 0000229463 00000 n 0000229543 00000 n 0000229678 00000 n 0000229816 00000 n 0000229896 00000 n 0000230031 00000 n 0000230169 00000 n 0000230249 00000 n 0000230384 00000 n 0000230522 00000 n 0000230602 00000 n 0000230737 00000 n 0000230871 00000 n 0000230951 00000 n 0000231086 00000 n 0000231220 00000 n 0000231300 00000 n 0000231435 00000 n 0000231569 00000 n 0000231649 00000 n 0000231784 00000 n 0000231918 00000 n 0000231998 00000 n 0000232133 00000 n 0000232271 00000 n 0000232351 00000 n 0000232486 00000 n 0000232620 00000 n 0000232700 00000 n 0000232834 00000 n 0000232968 00000 n 0000233048 00000 n 0000233183 00000 n 0000233321 00000 n 0000233401 00000 n 0000233536 00000 n 0000233674 00000 n 0000233754 00000 n 0000233889 00000 n 0000234023 00000 n 0000234103 00000 n 0000234238 00000 n 0000234372 00000 n 0000234452 00000 n 0000234587 00000 n 0000234725 00000 n 0000234805 00000 n 0000234940 00000 n 0000235078 00000 n 0000235158 00000 n 0000235293 00000 n 0000235427 00000 n 0000235507 00000 n 0000235642 00000 n 0000235780 00000 n 0000235860 00000 n 0000235995 00000 n 0000236129 00000 n 0000236209 00000 n 0000236344 00000 n 0000236478 00000 n 0000236558 00000 n 0000236693 00000 n 0000236831 00000 n 0000236911 00000 n 0000237046 00000 n 0000237180 00000 n 0000237260 00000 n 0000237395 00000 n 0000237529 00000 n 0000237609 00000 n 0000237745 00000 n 0000237883 00000 n 0000237963 00000 n 0000238098 00000 n 0000238232 00000 n 0000238312 00000 n 0000238447 00000 n 0000238581 00000 n 0000238661 00000 n 0000238796 00000 n 0000238930 00000 n 0000239010 00000 n 0000239145 00000 n 0000239279 00000 n 0000239359 00000 n 0000239494 00000 n 0000239628 00000 n 0000239708 00000 n 0000239843 00000 n 0000239981 00000 n 0000240061 00000 n 0000240195 00000 n 0000240329 00000 n 0000240409 00000 n 0000240544 00000 n 0000240678 00000 n 0000240758 00000 n 0000240893 00000 n 0000241031 00000 n 0000241111 00000 n 0000241246 00000 n 0000241380 00000 n 0000241460 00000 n 0000241595 00000 n 0000241733 00000 n 0000241813 00000 n 0000241948 00000 n 0000242082 00000 n 0000242162 00000 n 0000242296 00000 n 0000242429 00000 n 0000242509 00000 n 0000242642 00000 n 0000242778 00000 n 0000242858 00000 n 0000242991 00000 n 0000243123 00000 n 0000258003 00000 n 0000258026 00000 n 0000258911 00000 n 0000259125 00000 n 0000259162 00000 n 0000259848 00000 n 0000259869 00000 n 0000260065 00000 n 0000260756 00000 n 0000260777 00000 n 0000260973 00000 n 0000261623 00000 n 0000261644 00000 n 0000261840 00000 n 0000262489 00000 n 0000262510 00000 n 0000262707 00000 n 0000263350 00000 n 0000263372 00000 n 0000263570 00000 n 0000264248 00000 n 0000264270 00000 n 0000264468 00000 n 0000265086 00000 n 0000265108 00000 n 0000265306 00000 n 0000265925 00000 n 0000265947 00000 n 0000266145 00000 n 0000266625 00000 n 0000266647 00000 n 0000266845 00000 n 0000268519 00000 n 0000268542 00000 n 0000268740 00000 n 0000269683 00000 n 0000269705 00000 n 0000269903 00000 n 0000270499 00000 n 0000270521 00000 n 0000270719 00000 n 0000271299 00000 n 0000271321 00000 n 0000271519 00000 n 0000271904 00000 n 0000271926 00000 n 0000272124 00000 n 0000272928 00000 n 0000272950 00000 n 0000273148 00000 n 0000273627 00000 n 0000273649 00000 n 0000273847 00000 n 0000274516 00000 n 0000274538 00000 n 0000274736 00000 n 0000275689 00000 n 0000275711 00000 n 0000275909 00000 n 0000276436 00000 n 0000276458 00000 n 0000276656 00000 n 0000277342 00000 n 0000277364 00000 n 0000277562 00000 n 0000278367 00000 n 0000278389 00000 n 0000278587 00000 n 0000279383 00000 n 0000279405 00000 n 0000279603 00000 n 0000280390 00000 n 0000280412 00000 n 0000280610 00000 n 0000281415 00000 n 0000281437 00000 n 0000281635 00000 n 0000282510 00000 n 0000282532 00000 n 0000282730 00000 n 0000283521 00000 n 0000283543 00000 n 0000283741 00000 n 0000284351 00000 n 0000284373 00000 n 0000284571 00000 n 0000285203 00000 n 0000285225 00000 n 0000285423 00000 n 0000286048 00000 n 0000286070 00000 n 0000286268 00000 n 0000286964 00000 n 0000286986 00000 n 0000287184 00000 n 0000287895 00000 n 0000287917 00000 n 0000288115 00000 n 0000288830 00000 n 0000288852 00000 n 0000289050 00000 n 0000289767 00000 n 0000289789 00000 n 0000289987 00000 n 0000290648 00000 n 0000290670 00000 n 0000290868 00000 n 0000291478 00000 n 0000291500 00000 n 0000291698 00000 n 0000292308 00000 n 0000292330 00000 n 0000292528 00000 n 0000293171 00000 n 0000293193 00000 n 0000293391 00000 n 0000294124 00000 n 0000294146 00000 n 0000294344 00000 n 0000295065 00000 n 0000295087 00000 n 0000295285 00000 n 0000296015 00000 n 0000296037 00000 n 0000296235 00000 n 0000296978 00000 n 0000297000 00000 n 0000297198 00000 n 0000297681 00000 n 0000297703 00000 n 0000297901 00000 n 0000298449 00000 n 0000298471 00000 n 0000298669 00000 n 0000299277 00000 n 0000299299 00000 n 0000299497 00000 n 0000300045 00000 n 0000300067 00000 n 0000300265 00000 n 0000301010 00000 n 0000301032 00000 n 0000301230 00000 n 0000301978 00000 n 0000302000 00000 n 0000302198 00000 n 0000302804 00000 n 0000302826 00000 n 0000303024 00000 n 0000303836 00000 n 0000303858 00000 n 0000304056 00000 n 0000304757 00000 n 0000304779 00000 n 0000304977 00000 n 0000305701 00000 n 0000305723 00000 n 0000305921 00000 n 0000306731 00000 n 0000306753 00000 n 0000306951 00000 n 0000307696 00000 n 0000307718 00000 n 0000307916 00000 n 0000308372 00000 n 0000308394 00000 n 0000308592 00000 n 0000308628 00000 n 0000308709 00000 n 0000308846 00000 n 0000308982 00000 n 0000309063 00000 n 0000309200 00000 n 0000309336 00000 n 0000309417 00000 n 0000309554 00000 n 0000309690 00000 n 0000309772 00000 n 0000309909 00000 n 0000310049 00000 n 0000310131 00000 n 0000310268 00000 n 0000310408 00000 n 0000310490 00000 n 0000310627 00000 n 0000310767 00000 n 0000310849 00000 n 0000310986 00000 n 0000311126 00000 n 0000311208 00000 n 0000311345 00000 n 0000311485 00000 n 0000311567 00000 n 0000311705 00000 n 0000311845 00000 n 0000311927 00000 n 0000312064 00000 n 0000312200 00000 n 0000312282 00000 n 0000312419 00000 n 0000312555 00000 n 0000312637 00000 n 0000312774 00000 n 0000312914 00000 n 0000312996 00000 n 0000313133 00000 n 0000313269 00000 n 0000313351 00000 n 0000313489 00000 n 0000313629 00000 n 0000313711 00000 n 0000313848 00000 n 0000313984 00000 n 0000314066 00000 n 0000314204 00000 n 0000314344 00000 n 0000314426 00000 n 0000314563 00000 n 0000314699 00000 n 0000314781 00000 n 0000314918 00000 n 0000315054 00000 n 0000315136 00000 n 0000315273 00000 n 0000315413 00000 n 0000315495 00000 n 0000315632 00000 n 0000315768 00000 n 0000315850 00000 n 0000315987 00000 n 0000316127 00000 n 0000316209 00000 n 0000316346 00000 n 0000316482 00000 n 0000316564 00000 n 0000316701 00000 n 0000316837 00000 n 0000316919 00000 n 0000317056 00000 n 0000317192 00000 n 0000317274 00000 n 0000317411 00000 n 0000317551 00000 n 0000317633 00000 n 0000317770 00000 n 0000317910 00000 n 0000317992 00000 n 0000318129 00000 n 0000318269 00000 n 0000318351 00000 n 0000318488 00000 n 0000318628 00000 n 0000318710 00000 n 0000318847 00000 n 0000318983 00000 n 0000319065 00000 n 0000319202 00000 n 0000319342 00000 n 0000319424 00000 n 0000319561 00000 n 0000319697 00000 n 0000319779 00000 n 0000319916 00000 n 0000320052 00000 n 0000320134 00000 n 0000320271 00000 n 0000320407 00000 n 0000320489 00000 n 0000320626 00000 n 0000320766 00000 n 0000320848 00000 n 0000320985 00000 n 0000321121 00000 n 0000321203 00000 n 0000321340 00000 n 0000321476 00000 n 0000321558 00000 n 0000321695 00000 n 0000321831 00000 n 0000321913 00000 n 0000322050 00000 n 0000322190 00000 n 0000322272 00000 n 0000322408 00000 n 0000322544 00000 n 0000322626 00000 n 0000322763 00000 n 0000322903 00000 n 0000322985 00000 n 0000323121 00000 n 0000323261 00000 n 0000323343 00000 n 0000323481 00000 n 0000323621 00000 n 0000323703 00000 n 0000323840 00000 n 0000323980 00000 n 0000324062 00000 n 0000324199 00000 n 0000324339 00000 n 0000324421 00000 n 0000324558 00000 n 0000324694 00000 n 0000324776 00000 n 0000324913 00000 n 0000325053 00000 n 0000325135 00000 n 0000325272 00000 n 0000325412 00000 n 0000325494 00000 n 0000325630 00000 n 0000325770 00000 n 0000325852 00000 n 0000325989 00000 n 0000326125 00000 n 0000326207 00000 n 0000326344 00000 n 0000326484 00000 n 0000326566 00000 n 0000326703 00000 n 0000326839 00000 n 0000326921 00000 n 0000327057 00000 n 0000327196 00000 n 0000327278 00000 n 0000327413 00000 n 0000327551 00000 n 0000327633 00000 n 0000327769 00000 n 0000327907 00000 n 0000342724 00000 n 0000342748 00000 n 0000343742 00000 n 0000343959 00000 n 0000343997 00000 n 0000344566 00000 n 0000344588 00000 n 0000344786 00000 n 0000345454 00000 n 0000345476 00000 n 0000345674 00000 n 0000346335 00000 n 0000346357 00000 n 0000346555 00000 n 0000347274 00000 n 0000347296 00000 n 0000347494 00000 n 0000348048 00000 n 0000348070 00000 n 0000348268 00000 n 0000348836 00000 n 0000348858 00000 n 0000349056 00000 n 0000349692 00000 n 0000349714 00000 n 0000349912 00000 n 0000350462 00000 n 0000350484 00000 n 0000350682 00000 n 0000351238 00000 n 0000351260 00000 n 0000351458 00000 n 0000352034 00000 n 0000352056 00000 n 0000352254 00000 n 0000352807 00000 n 0000352829 00000 n 0000353027 00000 n 0000353584 00000 n 0000353606 00000 n 0000353804 00000 n 0000354433 00000 n 0000354455 00000 n 0000354653 00000 n 0000355242 00000 n 0000355264 00000 n 0000355462 00000 n 0000356066 00000 n 0000356088 00000 n 0000356286 00000 n 0000356921 00000 n 0000356943 00000 n 0000357141 00000 n 0000357629 00000 n 0000357651 00000 n 0000357849 00000 n 0000359256 00000 n 0000359279 00000 n 0000359477 00000 n 0000360964 00000 n 0000360987 00000 n 0000361185 00000 n 0000362757 00000 n 0000362780 00000 n 0000362978 00000 n 0000364485 00000 n 0000364508 00000 n 0000364706 00000 n 0000366215 00000 n 0000366238 00000 n 0000366436 00000 n 0000367121 00000 n 0000367143 00000 n 0000367341 00000 n 0000368091 00000 n 0000368113 00000 n 0000368311 00000 n 0000369064 00000 n 0000369086 00000 n 0000369284 00000 n 0000369967 00000 n 0000369989 00000 n 0000370187 00000 n 0000370786 00000 n 0000370808 00000 n 0000371006 00000 n 0000371659 00000 n 0000371681 00000 n 0000371879 00000 n 0000372566 00000 n 0000372588 00000 n 0000372786 00000 n 0000373504 00000 n 0000373526 00000 n 0000373724 00000 n 0000374437 00000 n 0000374459 00000 n 0000374657 00000 n 0000375411 00000 n 0000375433 00000 n 0000375631 00000 n 0000376263 00000 n 0000376285 00000 n 0000376483 00000 n 0000377198 00000 n 0000377220 00000 n 0000377418 00000 n 0000378030 00000 n 0000378052 00000 n 0000378250 00000 n 0000378667 00000 n 0000378689 00000 n 0000378887 00000 n 0000379731 00000 n 0000379753 00000 n 0000379951 00000 n 0000380860 00000 n 0000380882 00000 n 0000381080 00000 n 0000381900 00000 n 0000381922 00000 n 0000382120 00000 n 0000382776 00000 n 0000382798 00000 n 0000382996 00000 n 0000383858 00000 n 0000383880 00000 n 0000384078 00000 n 0000384741 00000 n 0000384763 00000 n 0000384961 00000 n 0000385418 00000 n 0000385440 00000 n 0000385638 00000 n 0000386196 00000 n 0000386218 00000 n 0000386416 00000 n 0000386971 00000 n 0000386993 00000 n 0000387191 00000 n 0000387787 00000 n 0000387809 00000 n 0000388007 00000 n 0000388557 00000 n 0000388579 00000 n 0000388777 00000 n 0000389389 00000 n 0000389411 00000 n 0000389609 00000 n 0000390269 00000 n 0000390291 00000 n 0000390489 00000 n 0000391078 00000 n 0000391100 00000 n 0000391298 00000 n 0000391902 00000 n 0000391924 00000 n 0000392122 00000 n 0000392772 00000 n 0000392794 00000 n 0000392992 00000 n 0000393585 00000 n 0000393607 00000 n 0000393805 00000 n 0000394397 00000 n 0000394419 00000 n 0000394617 00000 n 0000394653 00000 n 0000394735 00000 n 0000394872 00000 n 0000395012 00000 n 0000395094 00000 n 0000395231 00000 n 0000395371 00000 n 0000395453 00000 n 0000395590 00000 n 0000395730 00000 n 0000395812 00000 n 0000395949 00000 n 0000396089 00000 n 0000396171 00000 n 0000396308 00000 n 0000396444 00000 n 0000396526 00000 n 0000396663 00000 n 0000396803 00000 n 0000396885 00000 n 0000397021 00000 n 0000397161 00000 n 0000397243 00000 n 0000397380 00000 n 0000397516 00000 n 0000397598 00000 n 0000397734 00000 n 0000397874 00000 n 0000397956 00000 n 0000398093 00000 n 0000398229 00000 n 0000398311 00000 n 0000398448 00000 n 0000398588 00000 n 0000398670 00000 n 0000398807 00000 n 0000398943 00000 n 0000399025 00000 n 0000399162 00000 n 0000399298 00000 n 0000399380 00000 n 0000399517 00000 n 0000399657 00000 n 0000399739 00000 n 0000399876 00000 n 0000400016 00000 n 0000400098 00000 n 0000400235 00000 n 0000400371 00000 n 0000400453 00000 n 0000400591 00000 n 0000400731 00000 n 0000400813 00000 n 0000400950 00000 n 0000401086 00000 n 0000401168 00000 n 0000401305 00000 n 0000401441 00000 n 0000401523 00000 n 0000401660 00000 n 0000401800 00000 n 0000401882 00000 n 0000402018 00000 n 0000402158 00000 n 0000402240 00000 n 0000402377 00000 n 0000402517 00000 n 0000402599 00000 n 0000402736 00000 n 0000402872 00000 n 0000402954 00000 n 0000403091 00000 n 0000403227 00000 n 0000403309 00000 n 0000403446 00000 n 0000403586 00000 n 0000403668 00000 n 0000403805 00000 n 0000403945 00000 n 0000404027 00000 n 0000404164 00000 n 0000404300 00000 n 0000404382 00000 n 0000404519 00000 n 0000404655 00000 n 0000404737 00000 n 0000404874 00000 n 0000405010 00000 n 0000405092 00000 n 0000405229 00000 n 0000405369 00000 n 0000405451 00000 n 0000405588 00000 n 0000405724 00000 n 0000405806 00000 n 0000405943 00000 n 0000406079 00000 n 0000406161 00000 n 0000406298 00000 n 0000406434 00000 n 0000406516 00000 n 0000406653 00000 n 0000406793 00000 n 0000406875 00000 n 0000407012 00000 n 0000407152 00000 n 0000407234 00000 n 0000407372 00000 n 0000407512 00000 n 0000407594 00000 n 0000407731 00000 n 0000407871 00000 n 0000407953 00000 n 0000408090 00000 n 0000408226 00000 n 0000408308 00000 n 0000408445 00000 n 0000408585 00000 n 0000408667 00000 n 0000408804 00000 n 0000408944 00000 n 0000409026 00000 n 0000409163 00000 n 0000409299 00000 n 0000409381 00000 n 0000409518 00000 n 0000409658 00000 n 0000409740 00000 n 0000409877 00000 n 0000410017 00000 n 0000410099 00000 n 0000410236 00000 n 0000410376 00000 n 0000410458 00000 n 0000410595 00000 n 0000410731 00000 n 0000410813 00000 n 0000410950 00000 n 0000411086 00000 n 0000411168 00000 n 0000411305 00000 n 0000411445 00000 n 0000411527 00000 n 0000411663 00000 n 0000411803 00000 n 0000411885 00000 n 0000412022 00000 n 0000412158 00000 n 0000412240 00000 n 0000412377 00000 n 0000412517 00000 n 0000412599 00000 n 0000412736 00000 n 0000412876 00000 n 0000412958 00000 n 0000413094 00000 n 0000413229 00000 n 0000413311 00000 n 0000413446 00000 n 0000413584 00000 n 0000413666 00000 n 0000413801 00000 n 0000413935 00000 n 0000428278 00000 n 0000428302 00000 n 0000429296 00000 n 0000429513 00000 n 0000429551 00000 n 0000430029 00000 n 0000430051 00000 n 0000430249 00000 n 0000431078 00000 n 0000431100 00000 n 0000431298 00000 n 0000432155 00000 n 0000432177 00000 n 0000432375 00000 n 0000433015 00000 n 0000433037 00000 n 0000433235 00000 n 0000433874 00000 n 0000433896 00000 n 0000434094 00000 n 0000434664 00000 n 0000434686 00000 n 0000434884 00000 n 0000435414 00000 n 0000435436 00000 n 0000435634 00000 n 0000436229 00000 n 0000436251 00000 n 0000436449 00000 n 0000437039 00000 n 0000437061 00000 n 0000437259 00000 n 0000437686 00000 n 0000437708 00000 n 0000437906 00000 n 0000438494 00000 n 0000438516 00000 n 0000438714 00000 n 0000439253 00000 n 0000439275 00000 n 0000439473 00000 n 0000440016 00000 n 0000440038 00000 n 0000440236 00000 n 0000440776 00000 n 0000440798 00000 n 0000440996 00000 n 0000441552 00000 n 0000441574 00000 n 0000441772 00000 n 0000442311 00000 n 0000442333 00000 n 0000442531 00000 n 0000443073 00000 n 0000443095 00000 n 0000443293 00000 n 0000443833 00000 n 0000443855 00000 n 0000444053 00000 n 0000444666 00000 n 0000444688 00000 n 0000444886 00000 n 0000445471 00000 n 0000445493 00000 n 0000445691 00000 n 0000446255 00000 n 0000446277 00000 n 0000446475 00000 n 0000447010 00000 n 0000447032 00000 n 0000447230 00000 n 0000447783 00000 n 0000447805 00000 n 0000448003 00000 n 0000448648 00000 n 0000448670 00000 n 0000448868 00000 n 0000449447 00000 n 0000449469 00000 n 0000449667 00000 n 0000450200 00000 n 0000450222 00000 n 0000450420 00000 n 0000451019 00000 n 0000451041 00000 n 0000451239 00000 n 0000451776 00000 n 0000451798 00000 n 0000451996 00000 n 0000452558 00000 n 0000452580 00000 n 0000452778 00000 n 0000453406 00000 n 0000453428 00000 n 0000453626 00000 n 0000454280 00000 n 0000454302 00000 n 0000454500 00000 n 0000455043 00000 n 0000455065 00000 n 0000455263 00000 n 0000456587 00000 n 0000456610 00000 n 0000456808 00000 n 0000457195 00000 n 0000457217 00000 n 0000457415 00000 n 0000458738 00000 n 0000458761 00000 n 0000458959 00000 n 0000459331 00000 n 0000459353 00000 n 0000459551 00000 n 0000460866 00000 n 0000460889 00000 n 0000461087 00000 n 0000461458 00000 n 0000461480 00000 n 0000461678 00000 n 0000463000 00000 n 0000463023 00000 n 0000463221 00000 n 0000463854 00000 n 0000463876 00000 n 0000464074 00000 n 0000465414 00000 n 0000465437 00000 n 0000465635 00000 n 0000466261 00000 n 0000466283 00000 n 0000466481 00000 n 0000467811 00000 n 0000467834 00000 n 0000468032 00000 n 0000468658 00000 n 0000468680 00000 n 0000468878 00000 n 0000470164 00000 n 0000470187 00000 n 0000470385 00000 n 0000470999 00000 n 0000471021 00000 n 0000471219 00000 n 0000472522 00000 n 0000472545 00000 n 0000472743 00000 n 0000473353 00000 n 0000473375 00000 n 0000473573 00000 n 0000474918 00000 n 0000474941 00000 n 0000475139 00000 n 0000475682 00000 n 0000475704 00000 n 0000475902 00000 n 0000477247 00000 n 0000477270 00000 n 0000477468 00000 n 0000478014 00000 n 0000478036 00000 n 0000478234 00000 n 0000479566 00000 n 0000479589 00000 n 0000479787 00000 n 0000480329 00000 n 0000480351 00000 n 0000480549 00000 n 0000481913 00000 n 0000481936 00000 n 0000482134 00000 n 0000482707 00000 n 0000482729 00000 n 0000482927 00000 n 0000484221 00000 n 0000484244 00000 n 0000484442 00000 n 0000484987 00000 n 0000485009 00000 n 0000485207 00000 n 0000485867 00000 n 0000485889 00000 n 0000486087 00000 n 0000486838 00000 n 0000486860 00000 n 0000487058 00000 n 0000487813 00000 n 0000487835 00000 n 0000488033 00000 n 0000488698 00000 n 0000488720 00000 n 0000488918 00000 n 0000489575 00000 n 0000489597 00000 n 0000489795 00000 n 0000490482 00000 n 0000490504 00000 n 0000490702 00000 n 0000491615 00000 n 0000491637 00000 n 0000491835 00000 n 0000492505 00000 n 0000492527 00000 n 0000492725 00000 n 0000493377 00000 n 0000493399 00000 n 0000493597 00000 n 0000493633 00000 n 0000493715 00000 n 0000493853 00000 n 0000493993 00000 n 0000494075 00000 n 0000494212 00000 n 0000494348 00000 n 0000494430 00000 n 0000494567 00000 n 0000494703 00000 n 0000494785 00000 n 0000494922 00000 n 0000495062 00000 n 0000495144 00000 n 0000495281 00000 n 0000495421 00000 n 0000495503 00000 n 0000495640 00000 n 0000495780 00000 n 0000495862 00000 n 0000495998 00000 n 0000496134 00000 n 0000496216 00000 n 0000496352 00000 n 0000496492 00000 n 0000496574 00000 n 0000496711 00000 n 0000496847 00000 n 0000496929 00000 n 0000497067 00000 n 0000497207 00000 n 0000497289 00000 n 0000497425 00000 n 0000497561 00000 n 0000497643 00000 n 0000497780 00000 n 0000497920 00000 n 0000498002 00000 n 0000498139 00000 n 0000498279 00000 n 0000498361 00000 n 0000498498 00000 n 0000498638 00000 n 0000498720 00000 n 0000498857 00000 n 0000498997 00000 n 0000499079 00000 n 0000499216 00000 n 0000499356 00000 n 0000499438 00000 n 0000499575 00000 n 0000499715 00000 n 0000499797 00000 n 0000499934 00000 n 0000500074 00000 n 0000500156 00000 n 0000500293 00000 n 0000500429 00000 n 0000500511 00000 n 0000500648 00000 n 0000500788 00000 n 0000500870 00000 n 0000501007 00000 n 0000501143 00000 n 0000501225 00000 n 0000501362 00000 n 0000501502 00000 n 0000501584 00000 n 0000501721 00000 n 0000501861 00000 n 0000501943 00000 n 0000502080 00000 n 0000502216 00000 n 0000502298 00000 n 0000502435 00000 n 0000502571 00000 n 0000502653 00000 n 0000502790 00000 n 0000502930 00000 n 0000503012 00000 n 0000503149 00000 n 0000503289 00000 n 0000503371 00000 n 0000503508 00000 n 0000503644 00000 n 0000503726 00000 n 0000503863 00000 n 0000503999 00000 n 0000504081 00000 n 0000504218 00000 n 0000504358 00000 n 0000504440 00000 n 0000504577 00000 n 0000504713 00000 n 0000504795 00000 n 0000504932 00000 n 0000505068 00000 n 0000505150 00000 n 0000505287 00000 n 0000505423 00000 n 0000505505 00000 n 0000505642 00000 n 0000505782 00000 n 0000505864 00000 n 0000506001 00000 n 0000506137 00000 n 0000506219 00000 n 0000506356 00000 n 0000506492 00000 n 0000506574 00000 n 0000506711 00000 n 0000506851 00000 n 0000506933 00000 n 0000507070 00000 n 0000507206 00000 n 0000507288 00000 n 0000507424 00000 n 0000507560 00000 n 0000507642 00000 n 0000507778 00000 n 0000507914 00000 n 0000507996 00000 n 0000508133 00000 n 0000508269 00000 n 0000508351 00000 n 0000508488 00000 n 0000508628 00000 n 0000508710 00000 n 0000508847 00000 n 0000508987 00000 n 0000509069 00000 n 0000509206 00000 n 0000509342 00000 n 0000509424 00000 n 0000509561 00000 n 0000509697 00000 n 0000509779 00000 n 0000509916 00000 n 0000510052 00000 n 0000510134 00000 n 0000510270 00000 n 0000510410 00000 n 0000510492 00000 n 0000510629 00000 n 0000510769 00000 n 0000510851 00000 n 0000510988 00000 n 0000511124 00000 n 0000511206 00000 n 0000511343 00000 n 0000511479 00000 n 0000511561 00000 n 0000511698 00000 n 0000511838 00000 n 0000511920 00000 n 0000512055 00000 n 0000512190 00000 n 0000512272 00000 n 0000512407 00000 n 0000512541 00000 n 0000512623 00000 n 0000512757 00000 n 0000512891 00000 n 0000527412 00000 n 0000527436 00000 n 0000528430 00000 n 0000528647 00000 n 0000528685 00000 n 0000529330 00000 n 0000529352 00000 n 0000529550 00000 n 0000530347 00000 n 0000530369 00000 n 0000530567 00000 n 0000531164 00000 n 0000531186 00000 n 0000531384 00000 n 0000532143 00000 n 0000532165 00000 n 0000532363 00000 n 0000533046 00000 n 0000533068 00000 n 0000533266 00000 n 0000533999 00000 n 0000534021 00000 n 0000534219 00000 n 0000534850 00000 n 0000534872 00000 n 0000535070 00000 n 0000535790 00000 n 0000535812 00000 n 0000536010 00000 n 0000536701 00000 n 0000536723 00000 n 0000536921 00000 n 0000537656 00000 n 0000537678 00000 n 0000537876 00000 n 0000538485 00000 n 0000538507 00000 n 0000538705 00000 n 0000539509 00000 n 0000539531 00000 n 0000539729 00000 n 0000540475 00000 n 0000540497 00000 n 0000540695 00000 n 0000541446 00000 n 0000541468 00000 n 0000541666 00000 n 0000542301 00000 n 0000542323 00000 n 0000542521 00000 n 0000543145 00000 n 0000543167 00000 n 0000543365 00000 n 0000544157 00000 n 0000544179 00000 n 0000544377 00000 n 0000544986 00000 n 0000545008 00000 n 0000545206 00000 n 0000545963 00000 n 0000545985 00000 n 0000546183 00000 n 0000546928 00000 n 0000546950 00000 n 0000547148 00000 n 0000547898 00000 n 0000547920 00000 n 0000548118 00000 n 0000548895 00000 n 0000548917 00000 n 0000549115 00000 n 0000549868 00000 n 0000549890 00000 n 0000550088 00000 n 0000550718 00000 n 0000550740 00000 n 0000550938 00000 n 0000551358 00000 n 0000551380 00000 n 0000551578 00000 n 0000552126 00000 n 0000552148 00000 n 0000552346 00000 n 0000552900 00000 n 0000552922 00000 n 0000553120 00000 n 0000553674 00000 n 0000553696 00000 n 0000553894 00000 n 0000554440 00000 n 0000554462 00000 n 0000554660 00000 n 0000555211 00000 n 0000555233 00000 n 0000555431 00000 n 0000556022 00000 n 0000556044 00000 n 0000556242 00000 n 0000556787 00000 n 0000556809 00000 n 0000557007 00000 n 0000557580 00000 n 0000557602 00000 n 0000557800 00000 n 0000558345 00000 n 0000558367 00000 n 0000558565 00000 n 0000559120 00000 n 0000559142 00000 n 0000559340 00000 n 0000560123 00000 n 0000560145 00000 n 0000560343 00000 n 0000561195 00000 n 0000561217 00000 n 0000561415 00000 n 0000562194 00000 n 0000562216 00000 n 0000562414 00000 n 0000563272 00000 n 0000563294 00000 n 0000563492 00000 n 0000564209 00000 n 0000564231 00000 n 0000564429 00000 n 0000565054 00000 n 0000565076 00000 n 0000565274 00000 n 0000565997 00000 n 0000566019 00000 n 0000566217 00000 n 0000567013 00000 n 0000567035 00000 n 0000567233 00000 n 0000568016 00000 n 0000568038 00000 n 0000568236 00000 n 0000569085 00000 n 0000569107 00000 n 0000569305 00000 n 0000570083 00000 n 0000570105 00000 n 0000570303 00000 n 0000571154 00000 n 0000571176 00000 n 0000571374 00000 n 0000572104 00000 n 0000572126 00000 n 0000572324 00000 n 0000573093 00000 n 0000573115 00000 n 0000573313 00000 n 0000574161 00000 n 0000574183 00000 n 0000574381 00000 n 0000575117 00000 n 0000575139 00000 n 0000575337 00000 n 0000576114 00000 n 0000576136 00000 n 0000576334 00000 n 0000577171 00000 n 0000577193 00000 n 0000577391 00000 n 0000578167 00000 n 0000578189 00000 n 0000578387 00000 n 0000578423 00000 n 0000578505 00000 n 0000578642 00000 n 0000578782 00000 n 0000578864 00000 n 0000579001 00000 n 0000579137 00000 n 0000579219 00000 n 0000579356 00000 n 0000579492 00000 n 0000579574 00000 n 0000579711 00000 n 0000579847 00000 n 0000579929 00000 n 0000580066 00000 n 0000580202 00000 n 0000580284 00000 n 0000580421 00000 n 0000580561 00000 n 0000580643 00000 n 0000580780 00000 n 0000580916 00000 n 0000580998 00000 n 0000581135 00000 n 0000581275 00000 n 0000581357 00000 n 0000581494 00000 n 0000581630 00000 n 0000581712 00000 n 0000581849 00000 n 0000581985 00000 n 0000582067 00000 n 0000582203 00000 n 0000582343 00000 n 0000582425 00000 n 0000582562 00000 n 0000582698 00000 n 0000582780 00000 n 0000582917 00000 n 0000583057 00000 n 0000583139 00000 n 0000583276 00000 n 0000583416 00000 n 0000583498 00000 n 0000583635 00000 n 0000583771 00000 n 0000583853 00000 n 0000583990 00000 n 0000584126 00000 n 0000584208 00000 n 0000584345 00000 n 0000584481 00000 n 0000584563 00000 n 0000584700 00000 n 0000584836 00000 n 0000584918 00000 n 0000585054 00000 n 0000585190 00000 n 0000585272 00000 n 0000585409 00000 n 0000585545 00000 n 0000585627 00000 n 0000585764 00000 n 0000585904 00000 n 0000585986 00000 n 0000586123 00000 n 0000586259 00000 n 0000586341 00000 n 0000586478 00000 n 0000586614 00000 n 0000586696 00000 n 0000586833 00000 n 0000586973 00000 n 0000587055 00000 n 0000587193 00000 n 0000587333 00000 n 0000587415 00000 n 0000587552 00000 n 0000587692 00000 n 0000587774 00000 n 0000587910 00000 n 0000588050 00000 n 0000588132 00000 n 0000588269 00000 n 0000588409 00000 n 0000588491 00000 n 0000588628 00000 n 0000588764 00000 n 0000588846 00000 n 0000588983 00000 n 0000589123 00000 n 0000589205 00000 n 0000589342 00000 n 0000589482 00000 n 0000589564 00000 n 0000589701 00000 n 0000589841 00000 n 0000589923 00000 n 0000590060 00000 n 0000590200 00000 n 0000590282 00000 n 0000590419 00000 n 0000590555 00000 n 0000590637 00000 n 0000590774 00000 n 0000590910 00000 n 0000590992 00000 n 0000591129 00000 n 0000591269 00000 n 0000591351 00000 n 0000591488 00000 n 0000591628 00000 n 0000591710 00000 n 0000591847 00000 n 0000591983 00000 n 0000592065 00000 n 0000592202 00000 n 0000592342 00000 n 0000592424 00000 n 0000592561 00000 n 0000592701 00000 n 0000592783 00000 n 0000592920 00000 n 0000593060 00000 n 0000593142 00000 n 0000593279 00000 n 0000593415 00000 n 0000593497 00000 n 0000593634 00000 n 0000593774 00000 n 0000593856 00000 n 0000593993 00000 n 0000594129 00000 n 0000594211 00000 n 0000594347 00000 n 0000594487 00000 n 0000594569 00000 n 0000594706 00000 n 0000594842 00000 n 0000594924 00000 n 0000595061 00000 n 0000595201 00000 n 0000595283 00000 n 0000595420 00000 n 0000595560 00000 n 0000595642 00000 n 0000595779 00000 n 0000595919 00000 n 0000596001 00000 n 0000596138 00000 n 0000596274 00000 n 0000596356 00000 n 0000596493 00000 n 0000596633 00000 n 0000596715 00000 n 0000596851 00000 n 0000596986 00000 n 0000597068 00000 n 0000597203 00000 n 0000597341 00000 n 0000597423 00000 n 0000597558 00000 n 0000597696 00000 n 0000612238 00000 n 0000612262 00000 n 0000613256 00000 n 0000613473 00000 n 0000613511 00000 n 0000614363 00000 n 0000614385 00000 n 0000614583 00000 n 0000615355 00000 n 0000615377 00000 n 0000615575 00000 n 0000616432 00000 n 0000616454 00000 n 0000616652 00000 n 0000617135 00000 n 0000617157 00000 n 0000617355 00000 n 0000618272 00000 n 0000618294 00000 n 0000618492 00000 n 0000619105 00000 n 0000619127 00000 n 0000619325 00000 n 0000619985 00000 n 0000620007 00000 n 0000620205 00000 n 0000620872 00000 n 0000620894 00000 n 0000621092 00000 n 0000621754 00000 n 0000621776 00000 n 0000621974 00000 n 0000622641 00000 n 0000622663 00000 n 0000622861 00000 n 0000623731 00000 n 0000623753 00000 n 0000623951 00000 n 0000624830 00000 n 0000624852 00000 n 0000625050 00000 n 0000625639 00000 n 0000625661 00000 n 0000625859 00000 n 0000626465 00000 n 0000626487 00000 n 0000626685 00000 n 0000627286 00000 n 0000627308 00000 n 0000627506 00000 n 0000628113 00000 n 0000628135 00000 n 0000628333 00000 n 0000628934 00000 n 0000628956 00000 n 0000629154 00000 n 0000630008 00000 n 0000630030 00000 n 0000630228 00000 n 0000631078 00000 n 0000631100 00000 n 0000631298 00000 n 0000632130 00000 n 0000632152 00000 n 0000632350 00000 n 0000633213 00000 n 0000633235 00000 n 0000633433 00000 n 0000634271 00000 n 0000634293 00000 n 0000634491 00000 n 0000635351 00000 n 0000635373 00000 n 0000635571 00000 n 0000636419 00000 n 0000636441 00000 n 0000636639 00000 n 0000637507 00000 n 0000637529 00000 n 0000637727 00000 n 0000638574 00000 n 0000638596 00000 n 0000638794 00000 n 0000639664 00000 n 0000639686 00000 n 0000639884 00000 n 0000640728 00000 n 0000640750 00000 n 0000640948 00000 n 0000641798 00000 n 0000641820 00000 n 0000642018 00000 n 0000642887 00000 n 0000642909 00000 n 0000643107 00000 n 0000643977 00000 n 0000643999 00000 n 0000644197 00000 n 0000645063 00000 n 0000645085 00000 n 0000645283 00000 n 0000646128 00000 n 0000646150 00000 n 0000646348 00000 n 0000647200 00000 n 0000647222 00000 n 0000647420 00000 n 0000648245 00000 n 0000648267 00000 n 0000648465 00000 n 0000649301 00000 n 0000649323 00000 n 0000649521 00000 n 0000650374 00000 n 0000650396 00000 n 0000650594 00000 n 0000651415 00000 n 0000651437 00000 n 0000651635 00000 n 0000652454 00000 n 0000652476 00000 n 0000652674 00000 n 0000653523 00000 n 0000653545 00000 n 0000653743 00000 n 0000654604 00000 n 0000654626 00000 n 0000654824 00000 n 0000655283 00000 n 0000655305 00000 n 0000655503 00000 n 0000656360 00000 n 0000656382 00000 n 0000656580 00000 n 0000657225 00000 n 0000657247 00000 n 0000657445 00000 n 0000658163 00000 n 0000658185 00000 n 0000658383 00000 n 0000658967 00000 n 0000658989 00000 n 0000659187 00000 n 0000659930 00000 n 0000659952 00000 n 0000660150 00000 n 0000661064 00000 n 0000661086 00000 n 0000661284 00000 n 0000662139 00000 n 0000662161 00000 n 0000662359 00000 n 0000663073 00000 n 0000663095 00000 n 0000663293 00000 n 0000664195 00000 n 0000664217 00000 n 0000664415 00000 n 0000665014 00000 n 0000665036 00000 n 0000665234 00000 n 0000665655 00000 n 0000665677 00000 n 0000665875 00000 n 0000666419 00000 n 0000666441 00000 n 0000666639 00000 n 0000666676 00000 n 0000666758 00000 n 0000666895 00000 n 0000667035 00000 n 0000667117 00000 n 0000667254 00000 n 0000667390 00000 n 0000667472 00000 n 0000667609 00000 n 0000667749 00000 n 0000667831 00000 n 0000667969 00000 n 0000668109 00000 n 0000668191 00000 n 0000668328 00000 n 0000668464 00000 n 0000668546 00000 n 0000668683 00000 n 0000668823 00000 n 0000668905 00000 n 0000669042 00000 n 0000669182 00000 n 0000669264 00000 n 0000669401 00000 n 0000669541 00000 n 0000669623 00000 n 0000669759 00000 n 0000669899 00000 n 0000669981 00000 n 0000670118 00000 n 0000670258 00000 n 0000670340 00000 n 0000670477 00000 n 0000670613 00000 n 0000670695 00000 n 0000670832 00000 n 0000670968 00000 n 0000671050 00000 n 0000671187 00000 n 0000671327 00000 n 0000671409 00000 n 0000671546 00000 n 0000671682 00000 n 0000671764 00000 n 0000671901 00000 n 0000672041 00000 n 0000672123 00000 n 0000672260 00000 n 0000672400 00000 n 0000672482 00000 n 0000672619 00000 n 0000672759 00000 n 0000672841 00000 n 0000672977 00000 n 0000673113 00000 n 0000673195 00000 n 0000673332 00000 n 0000673472 00000 n 0000673554 00000 n 0000673691 00000 n 0000673831 00000 n 0000673913 00000 n 0000674050 00000 n 0000674190 00000 n 0000674272 00000 n 0000674409 00000 n 0000674549 00000 n 0000674631 00000 n 0000674767 00000 n 0000674907 00000 n 0000674989 00000 n 0000675125 00000 n 0000675261 00000 n 0000675343 00000 n 0000675479 00000 n 0000675615 00000 n 0000675697 00000 n 0000675834 00000 n 0000675974 00000 n 0000676056 00000 n 0000676193 00000 n 0000676333 00000 n 0000676415 00000 n 0000676552 00000 n 0000676692 00000 n 0000676774 00000 n 0000676911 00000 n 0000677051 00000 n 0000677133 00000 n 0000677270 00000 n 0000677406 00000 n 0000677488 00000 n 0000677625 00000 n 0000677761 00000 n 0000677843 00000 n 0000677979 00000 n 0000678115 00000 n 0000678197 00000 n 0000678334 00000 n 0000678474 00000 n 0000678556 00000 n 0000678693 00000 n 0000678833 00000 n 0000678915 00000 n 0000679052 00000 n 0000679192 00000 n 0000679274 00000 n 0000679411 00000 n 0000679551 00000 n 0000679633 00000 n 0000679770 00000 n 0000679910 00000 n 0000679992 00000 n 0000680129 00000 n 0000680265 00000 n 0000680347 00000 n 0000680483 00000 n 0000680623 00000 n 0000680705 00000 n 0000680842 00000 n 0000680978 00000 n 0000681060 00000 n 0000681197 00000 n 0000681337 00000 n 0000681419 00000 n 0000681556 00000 n 0000681696 00000 n 0000681778 00000 n 0000681915 00000 n 0000682055 00000 n 0000682137 00000 n 0000682274 00000 n 0000682414 00000 n 0000682496 00000 n 0000682633 00000 n 0000682773 00000 n 0000682855 00000 n 0000682992 00000 n 0000683132 00000 n 0000683214 00000 n 0000683351 00000 n 0000683491 00000 n 0000683573 00000 n 0000683710 00000 n 0000683846 00000 n 0000683928 00000 n 0000684064 00000 n 0000684204 00000 n 0000684286 00000 n 0000684423 00000 n 0000684563 00000 n 0000684645 00000 n 0000684782 00000 n 0000684922 00000 n 0000685004 00000 n 0000685140 00000 n 0000685279 00000 n 0000685361 00000 n 0000685496 00000 n 0000685634 00000 n 0000685716 00000 n 0000685851 00000 n 0000685985 00000 n 0000700498 00000 n 0000700522 00000 n 0000701516 00000 n 0000701733 00000 n 0000701771 00000 n 0000702318 00000 n 0000702340 00000 n 0000702538 00000 n 0000703135 00000 n 0000703157 00000 n 0000703355 00000 n 0000703905 00000 n 0000703927 00000 n 0000704125 00000 n 0000704799 00000 n 0000704821 00000 n 0000705019 00000 n 0000705563 00000 n 0000705585 00000 n 0000705783 00000 n 0000706333 00000 n 0000706355 00000 n 0000706553 00000 n 0000707160 00000 n 0000707182 00000 n 0000707380 00000 n 0000707944 00000 n 0000707966 00000 n 0000708164 00000 n 0000708882 00000 n 0000708904 00000 n 0000709102 00000 n 0000709666 00000 n 0000709688 00000 n 0000709886 00000 n 0000710581 00000 n 0000710603 00000 n 0000710801 00000 n 0000711368 00000 n 0000711390 00000 n 0000711588 00000 n 0000712211 00000 n 0000712233 00000 n 0000712431 00000 n 0000713056 00000 n 0000713078 00000 n 0000713276 00000 n 0000713841 00000 n 0000713863 00000 n 0000714061 00000 n 0000714901 00000 n 0000714923 00000 n 0000715121 00000 n 0000715730 00000 n 0000715752 00000 n 0000715950 00000 n 0000716693 00000 n 0000716715 00000 n 0000716913 00000 n 0000717472 00000 n 0000717494 00000 n 0000717692 00000 n 0000718503 00000 n 0000718525 00000 n 0000718723 00000 n 0000719291 00000 n 0000719313 00000 n 0000719511 00000 n 0000720391 00000 n 0000720413 00000 n 0000720611 00000 n 0000722079 00000 n 0000722102 00000 n 0000722300 00000 n 0000722955 00000 n 0000722977 00000 n 0000723175 00000 n 0000723744 00000 n 0000723766 00000 n 0000723964 00000 n 0000724813 00000 n 0000724835 00000 n 0000725033 00000 n 0000725616 00000 n 0000725638 00000 n 0000725836 00000 n 0000726685 00000 n 0000726707 00000 n 0000726905 00000 n 0000727566 00000 n 0000727588 00000 n 0000727786 00000 n 0000728284 00000 n 0000728306 00000 n 0000728504 00000 n 0000729082 00000 n 0000729104 00000 n 0000729302 00000 n 0000730060 00000 n 0000730082 00000 n 0000730280 00000 n 0000730699 00000 n 0000730721 00000 n 0000730919 00000 n 0000731620 00000 n 0000731642 00000 n 0000731840 00000 n 0000732649 00000 n 0000732671 00000 n 0000732869 00000 n 0000733717 00000 n 0000733739 00000 n 0000733937 00000 n 0000734711 00000 n 0000734733 00000 n 0000734931 00000 n 0000735433 00000 n 0000735455 00000 n 0000735653 00000 n 0000736350 00000 n 0000736372 00000 n 0000736570 00000 n 0000737026 00000 n 0000737048 00000 n 0000737246 00000 n 0000737795 00000 n 0000737817 00000 n 0000738015 00000 n 0000738563 00000 n 0000738585 00000 n 0000738783 00000 n 0000739371 00000 n 0000739393 00000 n 0000739591 00000 n 0000740143 00000 n 0000740165 00000 n 0000740363 00000 n 0000740810 00000 n 0000740832 00000 n 0000741030 00000 n 0000741617 00000 n 0000741639 00000 n 0000741837 00000 n 0000742454 00000 n 0000742476 00000 n 0000742674 00000 n 0000743349 00000 n 0000743371 00000 n 0000743569 00000 n 0000744298 00000 n 0000744320 00000 n 0000744518 00000 n 0000745164 00000 n 0000745186 00000 n 0000745384 00000 n 0000745993 00000 n 0000746015 00000 n 0000746213 00000 n 0000746817 00000 n 0000746839 00000 n 0000747037 00000 n 0000747638 00000 n 0000747660 00000 n 0000747858 00000 n 0000748472 00000 n 0000748494 00000 n 0000748692 00000 n 0000748729 00000 n 0000748811 00000 n 0000748948 00000 n 0000749088 00000 n 0000749170 00000 n 0000749307 00000 n 0000749447 00000 n 0000749529 00000 n 0000749666 00000 n 0000749802 00000 n 0000749884 00000 n 0000750021 00000 n 0000750161 00000 n 0000750243 00000 n 0000750380 00000 n 0000750516 00000 n 0000750598 00000 n 0000750735 00000 n 0000750875 00000 n 0000750957 00000 n 0000751094 00000 n 0000751234 00000 n 0000751316 00000 n 0000751453 00000 n 0000751593 00000 n 0000751675 00000 n 0000751812 00000 n 0000751952 00000 n 0000752034 00000 n 0000752171 00000 n 0000752307 00000 n 0000752389 00000 n 0000752526 00000 n 0000752666 00000 n 0000752748 00000 n 0000752885 00000 n 0000753025 00000 n 0000753107 00000 n 0000753244 00000 n 0000753384 00000 n 0000753466 00000 n 0000753603 00000 n 0000753743 00000 n 0000753825 00000 n 0000753962 00000 n 0000754098 00000 n 0000754180 00000 n 0000754317 00000 n 0000754457 00000 n 0000754539 00000 n 0000754676 00000 n 0000754812 00000 n 0000754894 00000 n 0000755031 00000 n 0000755171 00000 n 0000755253 00000 n 0000755390 00000 n 0000755526 00000 n 0000755608 00000 n 0000755744 00000 n 0000755884 00000 n 0000755966 00000 n 0000756103 00000 n 0000756243 00000 n 0000756325 00000 n 0000756462 00000 n 0000756602 00000 n 0000756684 00000 n 0000756821 00000 n 0000756961 00000 n 0000757043 00000 n 0000757179 00000 n 0000757315 00000 n 0000757397 00000 n 0000757534 00000 n 0000757674 00000 n 0000757756 00000 n 0000757893 00000 n 0000758033 00000 n 0000758115 00000 n 0000758251 00000 n 0000758387 00000 n 0000758469 00000 n 0000758606 00000 n 0000758742 00000 n 0000758824 00000 n 0000758961 00000 n 0000759097 00000 n 0000759179 00000 n 0000759316 00000 n 0000759456 00000 n 0000759538 00000 n 0000759674 00000 n 0000759814 00000 n 0000759896 00000 n 0000760033 00000 n 0000760169 00000 n 0000760251 00000 n 0000760389 00000 n 0000760529 00000 n 0000760611 00000 n 0000760748 00000 n 0000760884 00000 n 0000760966 00000 n 0000761103 00000 n 0000761243 00000 n 0000761325 00000 n 0000761462 00000 n 0000761598 00000 n 0000761680 00000 n 0000761817 00000 n 0000761953 00000 n 0000762035 00000 n 0000762173 00000 n 0000762313 00000 n 0000762395 00000 n 0000762532 00000 n 0000762668 00000 n 0000762750 00000 n 0000762888 00000 n 0000763028 00000 n 0000763110 00000 n 0000763247 00000 n 0000763383 00000 n 0000763465 00000 n 0000763602 00000 n 0000763738 00000 n 0000763820 00000 n 0000763957 00000 n 0000764093 00000 n 0000764175 00000 n 0000764312 00000 n 0000764448 00000 n 0000764530 00000 n 0000764668 00000 n 0000764808 00000 n 0000764890 00000 n 0000765027 00000 n 0000765167 00000 n 0000765249 00000 n 0000765386 00000 n 0000765522 00000 n 0000765604 00000 n 0000765741 00000 n 0000765881 00000 n 0000765963 00000 n 0000766100 00000 n 0000766240 00000 n 0000766322 00000 n 0000766459 00000 n 0000766595 00000 n 0000766677 00000 n 0000766814 00000 n 0000766954 00000 n 0000767036 00000 n 0000767172 00000 n 0000767311 00000 n 0000767393 00000 n 0000767528 00000 n 0000767666 00000 n 0000767748 00000 n 0000767883 00000 n 0000768017 00000 n 0000782788 00000 n 0000782812 00000 n 0000783806 00000 n 0000784023 00000 n 0000784061 00000 n 0000784728 00000 n 0000784750 00000 n 0000784948 00000 n 0000785367 00000 n 0000785389 00000 n 0000785587 00000 n 0000786394 00000 n 0000786416 00000 n 0000786614 00000 n 0000787416 00000 n 0000787438 00000 n 0000787636 00000 n 0000788363 00000 n 0000788385 00000 n 0000788583 00000 n 0000789331 00000 n 0000789353 00000 n 0000789551 00000 n 0000790241 00000 n 0000790263 00000 n 0000790461 00000 n 0000791166 00000 n 0000791188 00000 n 0000791386 00000 n 0000792177 00000 n 0000792199 00000 n 0000792397 00000 n 0000793203 00000 n 0000793225 00000 n 0000793423 00000 n 0000794143 00000 n 0000794165 00000 n 0000794363 00000 n 0000794779 00000 n 0000794801 00000 n 0000794999 00000 n 0000795632 00000 n 0000795654 00000 n 0000795852 00000 n 0000796536 00000 n 0000796558 00000 n 0000796756 00000 n 0000797361 00000 n 0000797383 00000 n 0000797581 00000 n 0000798302 00000 n 0000798324 00000 n 0000798522 00000 n 0000799309 00000 n 0000799331 00000 n 0000799529 00000 n 0000800250 00000 n 0000800272 00000 n 0000800470 00000 n 0000801173 00000 n 0000801195 00000 n 0000801393 00000 n 0000802062 00000 n 0000802084 00000 n 0000802282 00000 n 0000802964 00000 n 0000802986 00000 n 0000803184 00000 n 0000803827 00000 n 0000803849 00000 n 0000804047 00000 n 0000804790 00000 n 0000804812 00000 n 0000805010 00000 n 0000805401 00000 n 0000805423 00000 n 0000805621 00000 n 0000806180 00000 n 0000806202 00000 n 0000806400 00000 n 0000806933 00000 n 0000806955 00000 n 0000807153 00000 n 0000807888 00000 n 0000807910 00000 n 0000808108 00000 n 0000808730 00000 n 0000808752 00000 n 0000808950 00000 n 0000810279 00000 n 0000810302 00000 n 0000810500 00000 n 0000811484 00000 n 0000811506 00000 n 0000811704 00000 n 0000812406 00000 n 0000812428 00000 n 0000812626 00000 n 0000813325 00000 n 0000813347 00000 n 0000813545 00000 n 0000814244 00000 n 0000814266 00000 n 0000814464 00000 n 0000815121 00000 n 0000815143 00000 n 0000815341 00000 n 0000816042 00000 n 0000816064 00000 n 0000816262 00000 n 0000816962 00000 n 0000816984 00000 n 0000817182 00000 n 0000817886 00000 n 0000817908 00000 n 0000818106 00000 n 0000818808 00000 n 0000818830 00000 n 0000819028 00000 n 0000819873 00000 n 0000819895 00000 n 0000820093 00000 n 0000820846 00000 n 0000820868 00000 n 0000821066 00000 n 0000821971 00000 n 0000821993 00000 n 0000822191 00000 n 0000822891 00000 n 0000822913 00000 n 0000823111 00000 n 0000823811 00000 n 0000823833 00000 n 0000824031 00000 n 0000824862 00000 n 0000824884 00000 n 0000825082 00000 n 0000825914 00000 n 0000825936 00000 n 0000826134 00000 n 0000827155 00000 n 0000827177 00000 n 0000827375 00000 n 0000828354 00000 n 0000828376 00000 n 0000828574 00000 n 0000829258 00000 n 0000829280 00000 n 0000829478 00000 n 0000830183 00000 n 0000830205 00000 n 0000830403 00000 n 0000831129 00000 n 0000831151 00000 n 0000831349 00000 n 0000832030 00000 n 0000832052 00000 n 0000832250 00000 n 0000832951 00000 n 0000832973 00000 n 0000833171 00000 n 0000833888 00000 n 0000833910 00000 n 0000834108 00000 n 0000834809 00000 n 0000834831 00000 n 0000835029 00000 n 0000835066 00000 n 0000835148 00000 n 0000835285 00000 n 0000835421 00000 n 0000835503 00000 n 0000835641 00000 n 0000835781 00000 n 0000835863 00000 n 0000836000 00000 n 0000836140 00000 n 0000836222 00000 n 0000836359 00000 n 0000836495 00000 n 0000836577 00000 n 0000836714 00000 n 0000836850 00000 n 0000836932 00000 n 0000837069 00000 n 0000837209 00000 n 0000837291 00000 n 0000837428 00000 n 0000837564 00000 n 0000837646 00000 n 0000837783 00000 n 0000837923 00000 n 0000838005 00000 n 0000838142 00000 n 0000838282 00000 n 0000838364 00000 n 0000838501 00000 n 0000838637 00000 n 0000838719 00000 n 0000838856 00000 n 0000838992 00000 n 0000839074 00000 n 0000839212 00000 n 0000839352 00000 n 0000839434 00000 n 0000839571 00000 n 0000839707 00000 n 0000839789 00000 n 0000839926 00000 n 0000840062 00000 n 0000840144 00000 n 0000840280 00000 n 0000840420 00000 n 0000840502 00000 n 0000840639 00000 n 0000840779 00000 n 0000840861 00000 n 0000840998 00000 n 0000841138 00000 n 0000841220 00000 n 0000841357 00000 n 0000841497 00000 n 0000841579 00000 n 0000841715 00000 n 0000841851 00000 n 0000841933 00000 n 0000842070 00000 n 0000842210 00000 n 0000842292 00000 n 0000842429 00000 n 0000842565 00000 n 0000842647 00000 n 0000842784 00000 n 0000842924 00000 n 0000843006 00000 n 0000843143 00000 n 0000843283 00000 n 0000843365 00000 n 0000843502 00000 n 0000843642 00000 n 0000843724 00000 n 0000843861 00000 n 0000844001 00000 n 0000844083 00000 n 0000844221 00000 n 0000844361 00000 n 0000844443 00000 n 0000844579 00000 n 0000844715 00000 n 0000844797 00000 n 0000844934 00000 n 0000845070 00000 n 0000845152 00000 n 0000845289 00000 n 0000845429 00000 n 0000845511 00000 n 0000845648 00000 n 0000845788 00000 n 0000845870 00000 n 0000846007 00000 n 0000846143 00000 n 0000846225 00000 n 0000846362 00000 n 0000846498 00000 n 0000846580 00000 n 0000846717 00000 n 0000846853 00000 n 0000846935 00000 n 0000847072 00000 n 0000847212 00000 n 0000847294 00000 n 0000847431 00000 n 0000847571 00000 n 0000847653 00000 n 0000847790 00000 n 0000847930 00000 n 0000848012 00000 n 0000848149 00000 n 0000848289 00000 n 0000848371 00000 n 0000848508 00000 n 0000848644 00000 n 0000848726 00000 n 0000848863 00000 n 0000848999 00000 n 0000849081 00000 n 0000849218 00000 n 0000849358 00000 n 0000849440 00000 n 0000849577 00000 n 0000849713 00000 n 0000849795 00000 n 0000849932 00000 n 0000850072 00000 n 0000850154 00000 n 0000850291 00000 n 0000850431 00000 n 0000850513 00000 n 0000850650 00000 n 0000850790 00000 n 0000850872 00000 n 0000851009 00000 n 0000851149 00000 n 0000851231 00000 n 0000851367 00000 n 0000851507 00000 n 0000851589 00000 n 0000851726 00000 n 0000851866 00000 n 0000851948 00000 n 0000852085 00000 n 0000852221 00000 n 0000852303 00000 n 0000852440 00000 n 0000852576 00000 n 0000852658 00000 n 0000852795 00000 n 0000852931 00000 n 0000853013 00000 n 0000853150 00000 n 0000853290 00000 n 0000853372 00000 n 0000853508 00000 n 0000853643 00000 n 0000853725 00000 n 0000853860 00000 n 0000853998 00000 n 0000854080 00000 n 0000854215 00000 n 0000854349 00000 n 0000869045 00000 n 0000869069 00000 n 0000870063 00000 n 0000870280 00000 n 0000870318 00000 n 0000871035 00000 n 0000871057 00000 n 0000871255 00000 n 0000871956 00000 n 0000871978 00000 n 0000872176 00000 n 0000872893 00000 n 0000872915 00000 n 0000873113 00000 n 0000873813 00000 n 0000873835 00000 n 0000874033 00000 n 0000874749 00000 n 0000874771 00000 n 0000874969 00000 n 0000875674 00000 n 0000875696 00000 n 0000875894 00000 n 0000876623 00000 n 0000876645 00000 n 0000876843 00000 n 0000877647 00000 n 0000877669 00000 n 0000877867 00000 n 0000878689 00000 n 0000878711 00000 n 0000878909 00000 n 0000879751 00000 n 0000879773 00000 n 0000879971 00000 n 0000880661 00000 n 0000880683 00000 n 0000880881 00000 n 0000881589 00000 n 0000881611 00000 n 0000881809 00000 n 0000882540 00000 n 0000882562 00000 n 0000882760 00000 n 0000883628 00000 n 0000883650 00000 n 0000883848 00000 n 0000884775 00000 n 0000884797 00000 n 0000884995 00000 n 0000885759 00000 n 0000885781 00000 n 0000885979 00000 n 0000887288 00000 n 0000887311 00000 n 0000887509 00000 n 0000888559 00000 n 0000888581 00000 n 0000888779 00000 n 0000889484 00000 n 0000889506 00000 n 0000889704 00000 n 0000890616 00000 n 0000890638 00000 n 0000890836 00000 n 0000891534 00000 n 0000891556 00000 n 0000891754 00000 n 0000892452 00000 n 0000892474 00000 n 0000892672 00000 n 0000893499 00000 n 0000893521 00000 n 0000893719 00000 n 0000894546 00000 n 0000894568 00000 n 0000894766 00000 n 0000895731 00000 n 0000895753 00000 n 0000895951 00000 n 0000896663 00000 n 0000896685 00000 n 0000896883 00000 n 0000897612 00000 n 0000897634 00000 n 0000897832 00000 n 0000898544 00000 n 0000898566 00000 n 0000898764 00000 n 0000899493 00000 n 0000899515 00000 n 0000899713 00000 n 0000900425 00000 n 0000900447 00000 n 0000900645 00000 n 0000901374 00000 n 0000901396 00000 n 0000901594 00000 n 0000902303 00000 n 0000902325 00000 n 0000902523 00000 n 0000903249 00000 n 0000903271 00000 n 0000903469 00000 n 0000904288 00000 n 0000904310 00000 n 0000904508 00000 n 0000905342 00000 n 0000905364 00000 n 0000905562 00000 n 0000906437 00000 n 0000906459 00000 n 0000906657 00000 n 0000907358 00000 n 0000907380 00000 n 0000907578 00000 n 0000908296 00000 n 0000908318 00000 n 0000908516 00000 n 0000909256 00000 n 0000909278 00000 n 0000909476 00000 n 0000910106 00000 n 0000910128 00000 n 0000910326 00000 n 0000911070 00000 n 0000911092 00000 n 0000911290 00000 n 0000912035 00000 n 0000912057 00000 n 0000912255 00000 n 0000912998 00000 n 0000913020 00000 n 0000913218 00000 n 0000913968 00000 n 0000913990 00000 n 0000914188 00000 n 0000914936 00000 n 0000914958 00000 n 0000915156 00000 n 0000915885 00000 n 0000915907 00000 n 0000916105 00000 n 0000916892 00000 n 0000916914 00000 n 0000917112 00000 n 0000917857 00000 n 0000917879 00000 n 0000918077 00000 n 0000918820 00000 n 0000918842 00000 n 0000919040 00000 n 0000919780 00000 n 0000919802 00000 n 0000920000 00000 n 0000920748 00000 n 0000920770 00000 n 0000920968 00000 n 0000921709 00000 n 0000921731 00000 n 0000921929 00000 n 0000922660 00000 n 0000922682 00000 n 0000922880 00000 n 0000923607 00000 n 0000923629 00000 n 0000923827 00000 n 0000923864 00000 n 0000923946 00000 n 0000924083 00000 n 0000924223 00000 n 0000924305 00000 n 0000924442 00000 n 0000924578 00000 n 0000924660 00000 n 0000924797 00000 n 0000924937 00000 n 0000925019 00000 n 0000925156 00000 n 0000925296 00000 n 0000925378 00000 n 0000925515 00000 n 0000925655 00000 n 0000925737 00000 n 0000925874 00000 n 0000926010 00000 n 0000926092 00000 n 0000926228 00000 n 0000926364 00000 n 0000926446 00000 n 0000926583 00000 n 0000926723 00000 n 0000926805 00000 n 0000926942 00000 n 0000927078 00000 n 0000927160 00000 n 0000927297 00000 n 0000927437 00000 n 0000927519 00000 n 0000927656 00000 n 0000927792 00000 n 0000927874 00000 n 0000928011 00000 n 0000928147 00000 n 0000928229 00000 n 0000928366 00000 n 0000928506 00000 n 0000928588 00000 n 0000928725 00000 n 0000928865 00000 n 0000928947 00000 n 0000929084 00000 n 0000929220 00000 n 0000929302 00000 n 0000929439 00000 n 0000929579 00000 n 0000929661 00000 n 0000929798 00000 n 0000929934 00000 n 0000930016 00000 n 0000930153 00000 n 0000930289 00000 n 0000930371 00000 n 0000930508 00000 n 0000930644 00000 n 0000930726 00000 n 0000930863 00000 n 0000931003 00000 n 0000931085 00000 n 0000931222 00000 n 0000931362 00000 n 0000931444 00000 n 0000931581 00000 n 0000931721 00000 n 0000931803 00000 n 0000931940 00000 n 0000932080 00000 n 0000932162 00000 n 0000932299 00000 n 0000932439 00000 n 0000932521 00000 n 0000932658 00000 n 0000932798 00000 n 0000932880 00000 n 0000933017 00000 n 0000933157 00000 n 0000933239 00000 n 0000933376 00000 n 0000933516 00000 n 0000933598 00000 n 0000933735 00000 n 0000933875 00000 n 0000933957 00000 n 0000934094 00000 n 0000934234 00000 n 0000934316 00000 n 0000934453 00000 n 0000934593 00000 n 0000934675 00000 n 0000934812 00000 n 0000934952 00000 n 0000935034 00000 n 0000935171 00000 n 0000935307 00000 n 0000935389 00000 n 0000935526 00000 n 0000935666 00000 n 0000935748 00000 n 0000935885 00000 n 0000936025 00000 n 0000936107 00000 n 0000936244 00000 n 0000936380 00000 n 0000936462 00000 n 0000936599 00000 n 0000936739 00000 n 0000936821 00000 n 0000936958 00000 n 0000937094 00000 n 0000937176 00000 n 0000937313 00000 n 0000937453 00000 n 0000937535 00000 n 0000937672 00000 n 0000937812 00000 n 0000937894 00000 n 0000938032 00000 n 0000938172 00000 n 0000938254 00000 n 0000938390 00000 n 0000938526 00000 n 0000938608 00000 n 0000938745 00000 n 0000938885 00000 n 0000938967 00000 n 0000939104 00000 n 0000939240 00000 n 0000939322 00000 n 0000939459 00000 n 0000939595 00000 n 0000939677 00000 n 0000939814 00000 n 0000939954 00000 n 0000940036 00000 n 0000940173 00000 n 0000940309 00000 n 0000940391 00000 n 0000940528 00000 n 0000940668 00000 n 0000940750 00000 n 0000940887 00000 n 0000941023 00000 n 0000941105 00000 n 0000941242 00000 n 0000941378 00000 n 0000941460 00000 n 0000941597 00000 n 0000941737 00000 n 0000941819 00000 n 0000941956 00000 n 0000942096 00000 n 0000942178 00000 n 0000942314 00000 n 0000942449 00000 n 0000942531 00000 n 0000942666 00000 n 0000942804 00000 n 0000942886 00000 n 0000943021 00000 n 0000943159 00000 n 0000957161 00000 n 0000957185 00000 n 0000958179 00000 n 0000958396 00000 n 0000958434 00000 n 0000959220 00000 n 0000959242 00000 n 0000959440 00000 n 0000959980 00000 n 0000960002 00000 n 0000960200 00000 n 0000960809 00000 n 0000960831 00000 n 0000961029 00000 n 0000961696 00000 n 0000961718 00000 n 0000961916 00000 n 0000962623 00000 n 0000962645 00000 n 0000962843 00000 n 0000963451 00000 n 0000963473 00000 n 0000963671 00000 n 0000964172 00000 n 0000964194 00000 n 0000964392 00000 n 0000965056 00000 n 0000965078 00000 n 0000965276 00000 n 0000965960 00000 n 0000965982 00000 n 0000966180 00000 n 0000967047 00000 n 0000967069 00000 n 0000967267 00000 n 0000967942 00000 n 0000967964 00000 n 0000968162 00000 n 0000969039 00000 n 0000969061 00000 n 0000969259 00000 n 0000969988 00000 n 0000970010 00000 n 0000970208 00000 n 0000970998 00000 n 0000971020 00000 n 0000971218 00000 n 0000971969 00000 n 0000971991 00000 n 0000972189 00000 n 0000972808 00000 n 0000972830 00000 n 0000973028 00000 n 0000973873 00000 n 0000973895 00000 n 0000974093 00000 n 0000974841 00000 n 0000974863 00000 n 0000975061 00000 n 0000975846 00000 n 0000975868 00000 n 0000976066 00000 n 0000976777 00000 n 0000976799 00000 n 0000976997 00000 n 0000977921 00000 n 0000977943 00000 n 0000978141 00000 n 0000979305 00000 n 0000979328 00000 n 0000979526 00000 n 0000980045 00000 n 0000980067 00000 n 0000980265 00000 n 0000980942 00000 n 0000980964 00000 n 0000981162 00000 n 0000981748 00000 n 0000981770 00000 n 0000981968 00000 n 0000982701 00000 n 0000982723 00000 n 0000982921 00000 n 0000983566 00000 n 0000983588 00000 n 0000983786 00000 n 0000984383 00000 n 0000984405 00000 n 0000984603 00000 n 0000985187 00000 n 0000985209 00000 n 0000985407 00000 n 0000985989 00000 n 0000986011 00000 n 0000986209 00000 n 0000986847 00000 n 0000986869 00000 n 0000987067 00000 n 0000988278 00000 n 0000988301 00000 n 0000988499 00000 n 0000989280 00000 n 0000989302 00000 n 0000989500 00000 n 0000990327 00000 n 0000990349 00000 n 0000990547 00000 n 0000991450 00000 n 0000991472 00000 n 0000991670 00000 n 0000992592 00000 n 0000992614 00000 n 0000992812 00000 n 0000993464 00000 n 0000993486 00000 n 0000993684 00000 n 0000994408 00000 n 0000994430 00000 n 0000994628 00000 n 0000995394 00000 n 0000995416 00000 n 0000995614 00000 n 0000996323 00000 n 0000996345 00000 n 0000996543 00000 n 0000997153 00000 n 0000997175 00000 n 0000997373 00000 n 0000998017 00000 n 0000998039 00000 n 0000998237 00000 n 0000998839 00000 n 0000998861 00000 n 0000999059 00000 n 0000999697 00000 n 0000999719 00000 n 0000999917 00000 n 0001000530 00000 n 0001000552 00000 n 0001000750 00000 n 0001001391 00000 n 0001001413 00000 n 0001001611 00000 n 0001002208 00000 n 0001002230 00000 n 0001002428 00000 n 0001003063 00000 n 0001003085 00000 n 0001003283 00000 n 0001003894 00000 n 0001003916 00000 n 0001004114 00000 n 0001004745 00000 n 0001004767 00000 n 0001004965 00000 n 0001005577 00000 n 0001005599 00000 n 0001005797 00000 n 0001006445 00000 n 0001006467 00000 n 0001006665 00000 n 0001007292 00000 n 0001007314 00000 n 0001007512 00000 n 0001008152 00000 n 0001008174 00000 n 0001008372 00000 n 0001008409 00000 n 0001008491 00000 n 0001008628 00000 n 0001008768 00000 n 0001008850 00000 n 0001008988 00000 n 0001009128 00000 n 0001009210 00000 n 0001009347 00000 n 0001009487 00000 n 0001009569 00000 n 0001009706 00000 n 0001009846 00000 n 0001009928 00000 n 0001010065 00000 n 0001010205 00000 n 0001010287 00000 n 0001010424 00000 n 0001010560 00000 n 0001010642 00000 n 0001010780 00000 n 0001010920 00000 n 0001011002 00000 n 0001011138 00000 n 0001011278 00000 n 0001011360 00000 n 0001011497 00000 n 0001011633 00000 n 0001011715 00000 n 0001011852 00000 n 0001011988 00000 n 0001012070 00000 n 0001012207 00000 n 0001012347 00000 n 0001012429 00000 n 0001012566 00000 n 0001012706 00000 n 0001012788 00000 n 0001012925 00000 n 0001013061 00000 n 0001013143 00000 n 0001013280 00000 n 0001013416 00000 n 0001013498 00000 n 0001013635 00000 n 0001013771 00000 n 0001013853 00000 n 0001013990 00000 n 0001014126 00000 n 0001014208 00000 n 0001014345 00000 n 0001014481 00000 n 0001014563 00000 n 0001014700 00000 n 0001014840 00000 n 0001014922 00000 n 0001015059 00000 n 0001015195 00000 n 0001015277 00000 n 0001015414 00000 n 0001015550 00000 n 0001015632 00000 n 0001015769 00000 n 0001015905 00000 n 0001015987 00000 n 0001016124 00000 n 0001016260 00000 n 0001016342 00000 n 0001016480 00000 n 0001016620 00000 n 0001016702 00000 n 0001016839 00000 n 0001016979 00000 n 0001017061 00000 n 0001017198 00000 n 0001017338 00000 n 0001017420 00000 n 0001017557 00000 n 0001017697 00000 n 0001017779 00000 n 0001017915 00000 n 0001018055 00000 n 0001018137 00000 n 0001018274 00000 n 0001018410 00000 n 0001018492 00000 n 0001018628 00000 n 0001018764 00000 n 0001018846 00000 n 0001018983 00000 n 0001019119 00000 n 0001019201 00000 n 0001019338 00000 n 0001019474 00000 n 0001019556 00000 n 0001019693 00000 n 0001019829 00000 n 0001019911 00000 n 0001020048 00000 n 0001020184 00000 n 0001020266 00000 n 0001020403 00000 n 0001020543 00000 n 0001020625 00000 n 0001020762 00000 n 0001020898 00000 n 0001020980 00000 n 0001021116 00000 n 0001021252 00000 n 0001021334 00000 n 0001021472 00000 n 0001021612 00000 n 0001021694 00000 n 0001021831 00000 n 0001021971 00000 n 0001022053 00000 n 0001022190 00000 n 0001022330 00000 n 0001022412 00000 n 0001022548 00000 n 0001022688 00000 n 0001022770 00000 n 0001022906 00000 n 0001023042 00000 n 0001023124 00000 n 0001023261 00000 n 0001023397 00000 n 0001023479 00000 n 0001023616 00000 n 0001023752 00000 n 0001023834 00000 n 0001023970 00000 n 0001024110 00000 n 0001024192 00000 n 0001024328 00000 n 0001024468 00000 n 0001024550 00000 n 0001024686 00000 n 0001024822 00000 n 0001024904 00000 n 0001025041 00000 n 0001025181 00000 n 0001025263 00000 n 0001025400 00000 n 0001025536 00000 n 0001025618 00000 n 0001025754 00000 n 0001025894 00000 n 0001025976 00000 n 0001026113 00000 n 0001026249 00000 n 0001026331 00000 n 0001026467 00000 n 0001026607 00000 n 0001026689 00000 n 0001026825 00000 n 0001026960 00000 n 0001027042 00000 n 0001027176 00000 n 0001027314 00000 n 0001027396 00000 n 0001027531 00000 n 0001027665 00000 n 0001042714 00000 n 0001042738 00000 n 0001043732 00000 n 0001043949 00000 n 0001043987 00000 n 0001044594 00000 n 0001044616 00000 n 0001044814 00000 n 0001045424 00000 n 0001045446 00000 n 0001045644 00000 n 0001046238 00000 n 0001046260 00000 n 0001046458 00000 n 0001047065 00000 n 0001047087 00000 n 0001047285 00000 n 0001047969 00000 n 0001047991 00000 n 0001048189 00000 n 0001048797 00000 n 0001048819 00000 n 0001049017 00000 n 0001049731 00000 n 0001049753 00000 n 0001049951 00000 n 0001050563 00000 n 0001050585 00000 n 0001050783 00000 n 0001051401 00000 n 0001051423 00000 n 0001051621 00000 n 0001052320 00000 n 0001052342 00000 n 0001052540 00000 n 0001052974 00000 n 0001052996 00000 n 0001053194 00000 n 0001053804 00000 n 0001053826 00000 n 0001054024 00000 n 0001054490 00000 n 0001054512 00000 n 0001054710 00000 n 0001055446 00000 n 0001055468 00000 n 0001055666 00000 n 0001056554 00000 n 0001056576 00000 n 0001056774 00000 n 0001057509 00000 n 0001057531 00000 n 0001057729 00000 n 0001058462 00000 n 0001058484 00000 n 0001058682 00000 n 0001059390 00000 n 0001059412 00000 n 0001059610 00000 n 0001060600 00000 n 0001060622 00000 n 0001060820 00000 n 0001061720 00000 n 0001061742 00000 n 0001061940 00000 n 0001062953 00000 n 0001062975 00000 n 0001063173 00000 n 0001064037 00000 n 0001064059 00000 n 0001064257 00000 n 0001065110 00000 n 0001065132 00000 n 0001065330 00000 n 0001065991 00000 n 0001066013 00000 n 0001066211 00000 n 0001066741 00000 n 0001066763 00000 n 0001066961 00000 n 0001067549 00000 n 0001067571 00000 n 0001067769 00000 n 0001068339 00000 n 0001068361 00000 n 0001068559 00000 n 0001069209 00000 n 0001069231 00000 n 0001069429 00000 n 0001070115 00000 n 0001070137 00000 n 0001070335 00000 n 0001071215 00000 n 0001071237 00000 n 0001071435 00000 n 0001072044 00000 n 0001072066 00000 n 0001072264 00000 n 0001072930 00000 n 0001072952 00000 n 0001073150 00000 n 0001073972 00000 n 0001073994 00000 n 0001074192 00000 n 0001074758 00000 n 0001074780 00000 n 0001074978 00000 n 0001075769 00000 n 0001075791 00000 n 0001075989 00000 n 0001076654 00000 n 0001076676 00000 n 0001076874 00000 n 0001077511 00000 n 0001077533 00000 n 0001077731 00000 n 0001078720 00000 n 0001078742 00000 n 0001078940 00000 n 0001079814 00000 n 0001079836 00000 n 0001080034 00000 n 0001080891 00000 n 0001080913 00000 n 0001081111 00000 n 0001081822 00000 n 0001081844 00000 n 0001082042 00000 n 0001082650 00000 n 0001082672 00000 n 0001082870 00000 n 0001083590 00000 n 0001083612 00000 n 0001083810 00000 n 0001084526 00000 n 0001084548 00000 n 0001084746 00000 n 0001085588 00000 n 0001085610 00000 n 0001085808 00000 n 0001086613 00000 n 0001086635 00000 n 0001086833 00000 n 0001087573 00000 n 0001087595 00000 n 0001087793 00000 n 0001088506 00000 n 0001088528 00000 n 0001088726 00000 n 0001089398 00000 n 0001089420 00000 n 0001089618 00000 n 0001090338 00000 n 0001090360 00000 n 0001090558 00000 n 0001091406 00000 n 0001091428 00000 n 0001091626 00000 n 0001092351 00000 n 0001092373 00000 n 0001092571 00000 n 0001093484 00000 n 0001093506 00000 n 0001093704 00000 n 0001094561 00000 n 0001094583 00000 n 0001094781 00000 n 0001094818 00000 n 0001094900 00000 n 0001095036 00000 n 0001095176 00000 n 0001095258 00000 n 0001095395 00000 n 0001095531 00000 n 0001095613 00000 n 0001095749 00000 n 0001095889 00000 n 0001095971 00000 n 0001096108 00000 n 0001096248 00000 n 0001096330 00000 n 0001096466 00000 n 0001096606 00000 n 0001096688 00000 n 0001096825 00000 n 0001096961 00000 n 0001097043 00000 n 0001097179 00000 n 0001097319 00000 n 0001097401 00000 n 0001097538 00000 n 0001097678 00000 n 0001097760 00000 n 0001097897 00000 n 0001098037 00000 n 0001098119 00000 n 0001098256 00000 n 0001098396 00000 n 0001098478 00000 n 0001098616 00000 n 0001098756 00000 n 0001098838 00000 n 0001098975 00000 n 0001099115 00000 n 0001099197 00000 n 0001099334 00000 n 0001099474 00000 n 0001099556 00000 n 0001099693 00000 n 0001099833 00000 n 0001099915 00000 n 0001100052 00000 n 0001100188 00000 n 0001100270 00000 n 0001100407 00000 n 0001100543 00000 n 0001100625 00000 n 0001100762 00000 n 0001100902 00000 n 0001100984 00000 n 0001101121 00000 n 0001101261 00000 n 0001101343 00000 n 0001101480 00000 n 0001101616 00000 n 0001101698 00000 n 0001101835 00000 n 0001101975 00000 n 0001102057 00000 n 0001102194 00000 n 0001102330 00000 n 0001102412 00000 n 0001102549 00000 n 0001102689 00000 n 0001102771 00000 n 0001102908 00000 n 0001103044 00000 n 0001103126 00000 n 0001103263 00000 n 0001103403 00000 n 0001103485 00000 n 0001103622 00000 n 0001103762 00000 n 0001103844 00000 n 0001103981 00000 n 0001104121 00000 n 0001104203 00000 n 0001104340 00000 n 0001104476 00000 n 0001104558 00000 n 0001104695 00000 n 0001104831 00000 n 0001104913 00000 n 0001105049 00000 n 0001105189 00000 n 0001105271 00000 n 0001105408 00000 n 0001105544 00000 n 0001105626 00000 n 0001105763 00000 n 0001105899 00000 n 0001105981 00000 n 0001106118 00000 n 0001106254 00000 n 0001106336 00000 n 0001106473 00000 n 0001106609 00000 n 0001106691 00000 n 0001106828 00000 n 0001106968 00000 n 0001107050 00000 n 0001107187 00000 n 0001107323 00000 n 0001107405 00000 n 0001107542 00000 n 0001107682 00000 n 0001107764 00000 n 0001107901 00000 n 0001108041 00000 n 0001108123 00000 n 0001108260 00000 n 0001108396 00000 n 0001108478 00000 n 0001108615 00000 n 0001108751 00000 n 0001108833 00000 n 0001108970 00000 n 0001109106 00000 n 0001109188 00000 n 0001109325 00000 n 0001109465 00000 n 0001109547 00000 n 0001109684 00000 n 0001109820 00000 n 0001109902 00000 n 0001110038 00000 n 0001110174 00000 n 0001110256 00000 n 0001110393 00000 n 0001110529 00000 n 0001110611 00000 n 0001110748 00000 n 0001110888 00000 n 0001110970 00000 n 0001111107 00000 n 0001111247 00000 n 0001111329 00000 n 0001111466 00000 n 0001111606 00000 n 0001111688 00000 n 0001111825 00000 n 0001111961 00000 n 0001112043 00000 n 0001112180 00000 n 0001112316 00000 n 0001112398 00000 n 0001112535 00000 n 0001112671 00000 n 0001112753 00000 n 0001112890 00000 n 0001113030 00000 n 0001113112 00000 n 0001113248 00000 n 0001113387 00000 n 0001113469 00000 n 0001113604 00000 n 0001113738 00000 n 0001113820 00000 n 0001113955 00000 n 0001114093 00000 n 0001128598 00000 n 0001128622 00000 n 0001129616 00000 n 0001129833 00000 n 0001129871 00000 n 0001130814 00000 n 0001130836 00000 n 0001131034 00000 n 0001131636 00000 n 0001131658 00000 n 0001131856 00000 n 0001132558 00000 n 0001132580 00000 n 0001132778 00000 n 0001133566 00000 n 0001133588 00000 n 0001133786 00000 n 0001134832 00000 n 0001134854 00000 n 0001135052 00000 n 0001135700 00000 n 0001135722 00000 n 0001135920 00000 n 0001136556 00000 n 0001136578 00000 n 0001136776 00000 n 0001137436 00000 n 0001137458 00000 n 0001137656 00000 n 0001138395 00000 n 0001138417 00000 n 0001138615 00000 n 0001139324 00000 n 0001139346 00000 n 0001139544 00000 n 0001140276 00000 n 0001140298 00000 n 0001140496 00000 n 0001141296 00000 n 0001141318 00000 n 0001141516 00000 n 0001142227 00000 n 0001142249 00000 n 0001142447 00000 n 0001143137 00000 n 0001143159 00000 n 0001143357 00000 n 0001144187 00000 n 0001144209 00000 n 0001144407 00000 n 0001145163 00000 n 0001145185 00000 n 0001145383 00000 n 0001146031 00000 n 0001146053 00000 n 0001146251 00000 n 0001146906 00000 n 0001146928 00000 n 0001147126 00000 n 0001147892 00000 n 0001147914 00000 n 0001148112 00000 n 0001148600 00000 n 0001148622 00000 n 0001148820 00000 n 0001149504 00000 n 0001149526 00000 n 0001149724 00000 n 0001150273 00000 n 0001150295 00000 n 0001150493 00000 n 0001151135 00000 n 0001151157 00000 n 0001151355 00000 n 0001152103 00000 n 0001152125 00000 n 0001152323 00000 n 0001152799 00000 n 0001152821 00000 n 0001153019 00000 n 0001153755 00000 n 0001153777 00000 n 0001153975 00000 n 0001154721 00000 n 0001154743 00000 n 0001154941 00000 n 0001155637 00000 n 0001155659 00000 n 0001155857 00000 n 0001156530 00000 n 0001156552 00000 n 0001156750 00000 n 0001157391 00000 n 0001157413 00000 n 0001157611 00000 n 0001158323 00000 n 0001158345 00000 n 0001158543 00000 n 0001159402 00000 n 0001159424 00000 n 0001159622 00000 n 0001160482 00000 n 0001160504 00000 n 0001160702 00000 n 0001161334 00000 n 0001161356 00000 n 0001161554 00000 n 0001162188 00000 n 0001162210 00000 n 0001162408 00000 n 0001163170 00000 n 0001163192 00000 n 0001163390 00000 n 0001164148 00000 n 0001164170 00000 n 0001164368 00000 n 0001165311 00000 n 0001165333 00000 n 0001165531 00000 n 0001165938 00000 n 0001165960 00000 n 0001166158 00000 n 0001166973 00000 n 0001166995 00000 n 0001167193 00000 n 0001167636 00000 n 0001167658 00000 n 0001167856 00000 n 0001168452 00000 n 0001168474 00000 n 0001168672 00000 n 0001169287 00000 n 0001169309 00000 n 0001169507 00000 n 0001170120 00000 n 0001170142 00000 n 0001170340 00000 n 0001170959 00000 n 0001170981 00000 n 0001171179 00000 n 0001171799 00000 n 0001171821 00000 n 0001172019 00000 n 0001172627 00000 n 0001172649 00000 n 0001172847 00000 n 0001173469 00000 n 0001173491 00000 n 0001173689 00000 n 0001174266 00000 n 0001174288 00000 n 0001174486 00000 n 0001175100 00000 n 0001175122 00000 n 0001175320 00000 n 0001176227 00000 n 0001176249 00000 n 0001176447 00000 n 0001177206 00000 n 0001177228 00000 n 0001177426 00000 n 0001178017 00000 n 0001178039 00000 n 0001178237 00000 n 0001178925 00000 n 0001178947 00000 n 0001179145 00000 n 0001179182 00000 n 0001179264 00000 n 0001179401 00000 n 0001179541 00000 n 0001179623 00000 n 0001179759 00000 n 0001179895 00000 n 0001179977 00000 n 0001180114 00000 n 0001180250 00000 n 0001180332 00000 n 0001180469 00000 n 0001180605 00000 n 0001180687 00000 n 0001180824 00000 n 0001180964 00000 n 0001181046 00000 n 0001181183 00000 n 0001181323 00000 n 0001181405 00000 n 0001181542 00000 n 0001181682 00000 n 0001181764 00000 n 0001181901 00000 n 0001182037 00000 n 0001182119 00000 n 0001182256 00000 n 0001182392 00000 n 0001182474 00000 n 0001182611 00000 n 0001182751 00000 n 0001182833 00000 n 0001182969 00000 n 0001183105 00000 n 0001183187 00000 n 0001183324 00000 n 0001183464 00000 n 0001183546 00000 n 0001183683 00000 n 0001183823 00000 n 0001183905 00000 n 0001184042 00000 n 0001184178 00000 n 0001184260 00000 n 0001184397 00000 n 0001184537 00000 n 0001184619 00000 n 0001184756 00000 n 0001184892 00000 n 0001184974 00000 n 0001185111 00000 n 0001185247 00000 n 0001185329 00000 n 0001185466 00000 n 0001185606 00000 n 0001185688 00000 n 0001185824 00000 n 0001185960 00000 n 0001186042 00000 n 0001186180 00000 n 0001186320 00000 n 0001186402 00000 n 0001186539 00000 n 0001186679 00000 n 0001186761 00000 n 0001186898 00000 n 0001187038 00000 n 0001187120 00000 n 0001187256 00000 n 0001187396 00000 n 0001187478 00000 n 0001187615 00000 n 0001187755 00000 n 0001187837 00000 n 0001187975 00000 n 0001188115 00000 n 0001188197 00000 n 0001188334 00000 n 0001188474 00000 n 0001188556 00000 n 0001188693 00000 n 0001188829 00000 n 0001188911 00000 n 0001189048 00000 n 0001189188 00000 n 0001189270 00000 n 0001189407 00000 n 0001189547 00000 n 0001189629 00000 n 0001189766 00000 n 0001189906 00000 n 0001189988 00000 n 0001190125 00000 n 0001190261 00000 n 0001190343 00000 n 0001190480 00000 n 0001190616 00000 n 0001190698 00000 n 0001190835 00000 n 0001190971 00000 n 0001191053 00000 n 0001191190 00000 n 0001191330 00000 n 0001191412 00000 n 0001191549 00000 n 0001191689 00000 n 0001191771 00000 n 0001191908 00000 n 0001192048 00000 n 0001192130 00000 n 0001192267 00000 n 0001192403 00000 n 0001192485 00000 n 0001192622 00000 n 0001192762 00000 n 0001192844 00000 n 0001192981 00000 n 0001193121 00000 n 0001193203 00000 n 0001193340 00000 n 0001193480 00000 n 0001193562 00000 n 0001193700 00000 n 0001193840 00000 n 0001193922 00000 n 0001194059 00000 n 0001194195 00000 n 0001194277 00000 n 0001194414 00000 n 0001194554 00000 n 0001194636 00000 n 0001194773 00000 n 0001194909 00000 n 0001194991 00000 n 0001195128 00000 n 0001195268 00000 n 0001195350 00000 n 0001195487 00000 n 0001195627 00000 n 0001195709 00000 n 0001195846 00000 n 0001195982 00000 n 0001196064 00000 n 0001196201 00000 n 0001196341 00000 n 0001196423 00000 n 0001196560 00000 n 0001196700 00000 n 0001196782 00000 n 0001196919 00000 n 0001197055 00000 n 0001197137 00000 n 0001197274 00000 n 0001197414 00000 n 0001197496 00000 n 0001197632 00000 n 0001197767 00000 n 0001197849 00000 n 0001197984 00000 n 0001198122 00000 n 0001198204 00000 n 0001198339 00000 n 0001198473 00000 n 0001213279 00000 n 0001213303 00000 n 0001214297 00000 n 0001214514 00000 n 0001214552 00000 n 0001215144 00000 n 0001215166 00000 n 0001215364 00000 n 0001216257 00000 n 0001216279 00000 n 0001216477 00000 n 0001217441 00000 n 0001217463 00000 n 0001217661 00000 n 0001218397 00000 n 0001218419 00000 n 0001218617 00000 n 0001219290 00000 n 0001219312 00000 n 0001219510 00000 n 0001220209 00000 n 0001220231 00000 n 0001220429 00000 n 0001221111 00000 n 0001221133 00000 n 0001221331 00000 n 0001221368 00000 n 0001221450 00000 n 0001221588 00000 n 0001221728 00000 n 0001221810 00000 n 0001221947 00000 n 0001222083 00000 n 0001222165 00000 n 0001222302 00000 n 0001222442 00000 n 0001222524 00000 n 0001222662 00000 n 0001222802 00000 n 0001222884 00000 n 0001223021 00000 n 0001223161 00000 n 0001223243 00000 n 0001223380 00000 n 0001223516 00000 n 0001223598 00000 n 0001223735 00000 n 0001223875 00000 n 0001226177 00000 n 0001226200 00000 n 0001226348 00000 n 0001226565 00000 n 0001226645 00000 n 0001425281 00000 n 0001226840 00000 n 0001226759 00000 n 0001226954 00000 n 0001227146 00000 n 0001243673 00000 n 0001227404 00000 n 0001243575 00000 n 0001227498 00000 n 0001227614 00000 n 0001227729 00000 n 0001227841 00000 n 0001227958 00000 n 0001228071 00000 n 0001228188 00000 n 0001228306 00000 n 0001228423 00000 n 0001228532 00000 n 0001228643 00000 n 0001228765 00000 n 0001228875 00000 n 0001228988 00000 n 0001229098 00000 n 0001229212 00000 n 0001229326 00000 n 0001229435 00000 n 0001229548 00000 n 0001229663 00000 n 0001229778 00000 n 0001229892 00000 n 0001230010 00000 n 0001230123 00000 n 0001230240 00000 n 0001230357 00000 n 0001230470 00000 n 0001230583 00000 n 0001230695 00000 n 0001230808 00000 n 0001230920 00000 n 0001231033 00000 n 0001231145 00000 n 0001231257 00000 n 0001231369 00000 n 0001231484 00000 n 0001231594 00000 n 0001231703 00000 n 0001231821 00000 n 0001231935 00000 n 0001232043 00000 n 0001232156 00000 n 0001232273 00000 n 0001232381 00000 n 0001232493 00000 n 0001232603 00000 n 0001232724 00000 n 0001232854 00000 n 0001232970 00000 n 0001233087 00000 n 0001233203 00000 n 0001233325 00000 n 0001233453 00000 n 0001233584 00000 n 0001233702 00000 n 0001233819 00000 n 0001233935 00000 n 0001234050 00000 n 0001234164 00000 n 0001234277 00000 n 0001234391 00000 n 0001234512 00000 n 0001234625 00000 n 0001234740 00000 n 0001234856 00000 n 0001234969 00000 n 0001235082 00000 n 0001235199 00000 n 0001235317 00000 n 0001235439 00000 n 0001235560 00000 n 0001235677 00000 n 0001235794 00000 n 0001235911 00000 n 0001236028 00000 n 0001236146 00000 n 0001236265 00000 n 0001236388 00000 n 0001236497 00000 n 0001236619 00000 n 0001236737 00000 n 0001236854 00000 n 0001236977 00000 n 0001237096 00000 n 0001237214 00000 n 0001237325 00000 n 0001237441 00000 n 0001237559 00000 n 0001237675 00000 n 0001237788 00000 n 0001237901 00000 n 0001238014 00000 n 0001238131 00000 n 0001238244 00000 n 0001238357 00000 n 0001238469 00000 n 0001238588 00000 n 0001238708 00000 n 0001238822 00000 n 0001238940 00000 n 0001239059 00000 n 0001239174 00000 n 0001239289 00000 n 0001239408 00000 n 0001239527 00000 n 0001239647 00000 n 0001239761 00000 n 0001239888 00000 n 0001240003 00000 n 0001240121 00000 n 0001240239 00000 n 0001240356 00000 n 0001240473 00000 n 0001240590 00000 n 0001240707 00000 n 0001240835 00000 n 0001240952 00000 n 0001241066 00000 n 0001241181 00000 n 0001241297 00000 n 0001241411 00000 n 0001241525 00000 n 0001241634 00000 n 0001241747 00000 n 0001241860 00000 n 0001241976 00000 n 0001242087 00000 n 0001242203 00000 n 0001242317 00000 n 0001242426 00000 n 0001242540 00000 n 0001242655 00000 n 0001242774 00000 n 0001242888 00000 n 0001243003 00000 n 0001243115 00000 n 0001243229 00000 n 0001243343 00000 n 0001243461 00000 n 0001246656 00000 n 0001243938 00000 n 0001246551 00000 n 0001244030 00000 n 0001244148 00000 n 0001244266 00000 n 0001244383 00000 n 0001244501 00000 n 0001244623 00000 n 0001244739 00000 n 0001244860 00000 n 0001244981 00000 n 0001245101 00000 n 0001245222 00000 n 0001245335 00000 n 0001245453 00000 n 0001245573 00000 n 0001245693 00000 n 0001245813 00000 n 0001245934 00000 n 0001246058 00000 n 0001246182 00000 n 0001246305 00000 n 0001246429 00000 n 0001247358 00000 n 0001246933 00000 n 0001247260 00000 n 0001247029 00000 n 0001247144 00000 n 0001247720 00000 n 0001247639 00000 n 0001250905 00000 n 0001247962 00000 n 0001250797 00000 n 0001248065 00000 n 0001248187 00000 n 0001248307 00000 n 0001248429 00000 n 0001248549 00000 n 0001248668 00000 n 0001248787 00000 n 0001248907 00000 n 0001249029 00000 n 0001249148 00000 n 0001249272 00000 n 0001249382 00000 n 0001249494 00000 n 0001249608 00000 n 0001249727 00000 n 0001249850 00000 n 0001249978 00000 n 0001250100 00000 n 0001250211 00000 n 0001250324 00000 n 0001250439 00000 n 0001250555 00000 n 0001250678 00000 n 0001252469 00000 n 0001251159 00000 n 0001252363 00000 n 0001251266 00000 n 0001251390 00000 n 0001251513 00000 n 0001251635 00000 n 0001251757 00000 n 0001251879 00000 n 0001251996 00000 n 0001252119 00000 n 0001252246 00000 n 0001254670 00000 n 0001252723 00000 n 0001254562 00000 n 0001252828 00000 n 0001252949 00000 n 0001253069 00000 n 0001253192 00000 n 0001253318 00000 n 0001253451 00000 n 0001253572 00000 n 0001253698 00000 n 0001253824 00000 n 0001253950 00000 n 0001254076 00000 n 0001254201 00000 n 0001254319 00000 n 0001254442 00000 n 0001257320 00000 n 0001254988 00000 n 0001257202 00000 n 0001255087 00000 n 0001255206 00000 n 0001255330 00000 n 0001255451 00000 n 0001255576 00000 n 0001255707 00000 n 0001255841 00000 n 0001255975 00000 n 0001256112 00000 n 0001256244 00000 n 0001256383 00000 n 0001256522 00000 n 0001256665 00000 n 0001256804 00000 n 0001256945 00000 n 0001257071 00000 n 0001258234 00000 n 0001257557 00000 n 0001258132 00000 n 0001257661 00000 n 0001257783 00000 n 0001257898 00000 n 0001258014 00000 n 0001259688 00000 n 0001258468 00000 n 0001259591 00000 n 0001258564 00000 n 0001258677 00000 n 0001258789 00000 n 0001258901 00000 n 0001259013 00000 n 0001259128 00000 n 0001259244 00000 n 0001259359 00000 n 0001259473 00000 n 0001260925 00000 n 0001260001 00000 n 0001260821 00000 n 0001260106 00000 n 0001260226 00000 n 0001260343 00000 n 0001260459 00000 n 0001260579 00000 n 0001260700 00000 n 0001269423 00000 n 0001261187 00000 n 0001269317 00000 n 0001261291 00000 n 0001261403 00000 n 0001261516 00000 n 0001261628 00000 n 0001261742 00000 n 0001261854 00000 n 0001261967 00000 n 0001262079 00000 n 0001262200 00000 n 0001262321 00000 n 0001262446 00000 n 0001262562 00000 n 0001262682 00000 n 0001262806 00000 n 0001262922 00000 n 0001263037 00000 n 0001263155 00000 n 0001263274 00000 n 0001263387 00000 n 0001263513 00000 n 0001263632 00000 n 0001263753 00000 n 0001263878 00000 n 0001263998 00000 n 0001264119 00000 n 0001264247 00000 n 0001264376 00000 n 0001264506 00000 n 0001264639 00000 n 0001264771 00000 n 0001264895 00000 n 0001265020 00000 n 0001265146 00000 n 0001265275 00000 n 0001265403 00000 n 0001265535 00000 n 0001265661 00000 n 0001265786 00000 n 0001265914 00000 n 0001266043 00000 n 0001266171 00000 n 0001266302 00000 n 0001266424 00000 n 0001266548 00000 n 0001266673 00000 n 0001266802 00000 n 0001266923 00000 n 0001267045 00000 n 0001267164 00000 n 0001267286 00000 n 0001267405 00000 n 0001267528 00000 n 0001267647 00000 n 0001267765 00000 n 0001267890 00000 n 0001268005 00000 n 0001268120 00000 n 0001268242 00000 n 0001268357 00000 n 0001268479 00000 n 0001268597 00000 n 0001268722 00000 n 0001268840 00000 n 0001268965 00000 n 0001269080 00000 n 0001269202 00000 n 0001273547 00000 n 0001269669 00000 n 0001273439 00000 n 0001269778 00000 n 0001269901 00000 n 0001270026 00000 n 0001270152 00000 n 0001270275 00000 n 0001270398 00000 n 0001270522 00000 n 0001270646 00000 n 0001270771 00000 n 0001270896 00000 n 0001271015 00000 n 0001271141 00000 n 0001271261 00000 n 0001271388 00000 n 0001271504 00000 n 0001271627 00000 n 0001271744 00000 n 0001271868 00000 n 0001271988 00000 n 0001272115 00000 n 0001272231 00000 n 0001272354 00000 n 0001272472 00000 n 0001272590 00000 n 0001272715 00000 n 0001272830 00000 n 0001272948 00000 n 0001273073 00000 n 0001273194 00000 n 0001273322 00000 n 0001278340 00000 n 0001273833 00000 n 0001278234 00000 n 0001273940 00000 n 0001274062 00000 n 0001274185 00000 n 0001274309 00000 n 0001274436 00000 n 0001274564 00000 n 0001274690 00000 n 0001274814 00000 n 0001274937 00000 n 0001275061 00000 n 0001275185 00000 n 0001275310 00000 n 0001275435 00000 n 0001275558 00000 n 0001275677 00000 n 0001275794 00000 n 0001275916 00000 n 0001276036 00000 n 0001276156 00000 n 0001276276 00000 n 0001276401 00000 n 0001276522 00000 n 0001276642 00000 n 0001276764 00000 n 0001276888 00000 n 0001277012 00000 n 0001277140 00000 n 0001277271 00000 n 0001277393 00000 n 0001277516 00000 n 0001277636 00000 n 0001277758 00000 n 0001277875 00000 n 0001277993 00000 n 0001278111 00000 n 0001279793 00000 n 0001278618 00000 n 0001279691 00000 n 0001278726 00000 n 0001278847 00000 n 0001278968 00000 n 0001279092 00000 n 0001279211 00000 n 0001279328 00000 n 0001279454 00000 n 0001279571 00000 n 0001284039 00000 n 0001280039 00000 n 0001283938 00000 n 0001280142 00000 n 0001280263 00000 n 0001280384 00000 n 0001280503 00000 n 0001280624 00000 n 0001280741 00000 n 0001280863 00000 n 0001280987 00000 n 0001281118 00000 n 0001281238 00000 n 0001281365 00000 n 0001281485 00000 n 0001281612 00000 n 0001281728 00000 n 0001281849 00000 n 0001281977 00000 n 0001282094 00000 n 0001282218 00000 n 0001282336 00000 n 0001282461 00000 n 0001282580 00000 n 0001282706 00000 n 0001282821 00000 n 0001282943 00000 n 0001283068 00000 n 0001283200 00000 n 0001283321 00000 n 0001283449 00000 n 0001283569 00000 n 0001283687 00000 n 0001283812 00000 n 0001284713 00000 n 0001284280 00000 n 0001284613 00000 n 0001284380 00000 n 0001284497 00000 n 0001285048 00000 n 0001284958 00000 n 0001285718 00000 n 0001285293 00000 n 0001285613 00000 n 0001285389 00000 n 0001285501 00000 n 0001287214 00000 n 0001286036 00000 n 0001287107 00000 n 0001286133 00000 n 0001286246 00000 n 0001286373 00000 n 0001286505 00000 n 0001286632 00000 n 0001286749 00000 n 0001286866 00000 n 0001286983 00000 n 0001288443 00000 n 0001287463 00000 n 0001288348 00000 n 0001287559 00000 n 0001287672 00000 n 0001287789 00000 n 0001287901 00000 n 0001288012 00000 n 0001288125 00000 n 0001288235 00000 n 0001290002 00000 n 0001288729 00000 n 0001289898 00000 n 0001288827 00000 n 0001288940 00000 n 0001289054 00000 n 0001289172 00000 n 0001289288 00000 n 0001289411 00000 n 0001289527 00000 n 0001289648 00000 n 0001289770 00000 n 0001290369 00000 n 0001290287 00000 n 0001298946 00000 n 0001290735 00000 n 0001298839 00000 n 0001290842 00000 n 0001290960 00000 n 0001291087 00000 n 0001291220 00000 n 0001291338 00000 n 0001291455 00000 n 0001291573 00000 n 0001291708 00000 n 0001291849 00000 n 0001291990 00000 n 0001292111 00000 n 0001292230 00000 n 0001292350 00000 n 0001292472 00000 n 0001292599 00000 n 0001292732 00000 n 0001292865 00000 n 0001292991 00000 n 0001293117 00000 n 0001293242 00000 n 0001293373 00000 n 0001293489 00000 n 0001293611 00000 n 0001293732 00000 n 0001293847 00000 n 0001293964 00000 n 0001294087 00000 n 0001294204 00000 n 0001294327 00000 n 0001294444 00000 n 0001294567 00000 n 0001294683 00000 n 0001294805 00000 n 0001294926 00000 n 0001295046 00000 n 0001295162 00000 n 0001295284 00000 n 0001295405 00000 n 0001295522 00000 n 0001295645 00000 n 0001295767 00000 n 0001295885 00000 n 0001296005 00000 n 0001296133 00000 n 0001296260 00000 n 0001296385 00000 n 0001296511 00000 n 0001296636 00000 n 0001296767 00000 n 0001296898 00000 n 0001297022 00000 n 0001297146 00000 n 0001297269 00000 n 0001297387 00000 n 0001297511 00000 n 0001297629 00000 n 0001297753 00000 n 0001297871 00000 n 0001297995 00000 n 0001298112 00000 n 0001298235 00000 n 0001298352 00000 n 0001298475 00000 n 0001298597 00000 n 0001298715 00000 n 0001301106 00000 n 0001299300 00000 n 0001300998 00000 n 0001299406 00000 n 0001299527 00000 n 0001299649 00000 n 0001299774 00000 n 0001299897 00000 n 0001300021 00000 n 0001300147 00000 n 0001300267 00000 n 0001300386 00000 n 0001300506 00000 n 0001300629 00000 n 0001300750 00000 n 0001300872 00000 n 0001301765 00000 n 0001301347 00000 n 0001301668 00000 n 0001301444 00000 n 0001301556 00000 n 0001303816 00000 n 0001302123 00000 n 0001303717 00000 n 0001302221 00000 n 0001302335 00000 n 0001302449 00000 n 0001302567 00000 n 0001302681 00000 n 0001302799 00000 n 0001302919 00000 n 0001303034 00000 n 0001303147 00000 n 0001303260 00000 n 0001303373 00000 n 0001303486 00000 n 0001303601 00000 n 0001305778 00000 n 0001304226 00000 n 0001305668 00000 n 0001304334 00000 n 0001304457 00000 n 0001304580 00000 n 0001304706 00000 n 0001304829 00000 n 0001304952 00000 n 0001305072 00000 n 0001305195 00000 n 0001305316 00000 n 0001305429 00000 n 0001305548 00000 n 0001309266 00000 n 0001306080 00000 n 0001309150 00000 n 0001306186 00000 n 0001306308 00000 n 0001306430 00000 n 0001306550 00000 n 0001306668 00000 n 0001306782 00000 n 0001306900 00000 n 0001307018 00000 n 0001307133 00000 n 0001307248 00000 n 0001307362 00000 n 0001307480 00000 n 0001307594 00000 n 0001307712 00000 n 0001307826 00000 n 0001307944 00000 n 0001308058 00000 n 0001308176 00000 n 0001308290 00000 n 0001308408 00000 n 0001308523 00000 n 0001308645 00000 n 0001308766 00000 n 0001308900 00000 n 0001309025 00000 n 0001316924 00000 n 0001309572 00000 n 0001316826 00000 n 0001309672 00000 n 0001309776 00000 n 0001309897 00000 n 0001310017 00000 n 0001310138 00000 n 0001310262 00000 n 0001310388 00000 n 0001310511 00000 n 0001310632 00000 n 0001310753 00000 n 0001310875 00000 n 0001310995 00000 n 0001311116 00000 n 0001311239 00000 n 0001311356 00000 n 0001311473 00000 n 0001311591 00000 n 0001311707 00000 n 0001311823 00000 n 0001311939 00000 n 0001312055 00000 n 0001312176 00000 n 0001312295 00000 n 0001312415 00000 n 0001312532 00000 n 0001312654 00000 n 0001312773 00000 n 0001312897 00000 n 0001313022 00000 n 0001313141 00000 n 0001313270 00000 n 0001313389 00000 n 0001313506 00000 n 0001313623 00000 n 0001313745 00000 n 0001313868 00000 n 0001313988 00000 n 0001314107 00000 n 0001314226 00000 n 0001314350 00000 n 0001314475 00000 n 0001314593 00000 n 0001314716 00000 n 0001314840 00000 n 0001314954 00000 n 0001315069 00000 n 0001315184 00000 n 0001315301 00000 n 0001315418 00000 n 0001315533 00000 n 0001315646 00000 n 0001315766 00000 n 0001315886 00000 n 0001316006 00000 n 0001316124 00000 n 0001316244 00000 n 0001316364 00000 n 0001316483 00000 n 0001316596 00000 n 0001316711 00000 n 0001317590 00000 n 0001317161 00000 n 0001317488 00000 n 0001317258 00000 n 0001317372 00000 n 0001319458 00000 n 0001317828 00000 n 0001319361 00000 n 0001317933 00000 n 0001318069 00000 n 0001318204 00000 n 0001318334 00000 n 0001318463 00000 n 0001318585 00000 n 0001318720 00000 n 0001318854 00000 n 0001318978 00000 n 0001319104 00000 n 0001319233 00000 n 0001319849 00000 n 0001319763 00000 n 0001321632 00000 n 0001320171 00000 n 0001321529 00000 n 0001320274 00000 n 0001320387 00000 n 0001320499 00000 n 0001320611 00000 n 0001320723 00000 n 0001320836 00000 n 0001320949 00000 n 0001321063 00000 n 0001321176 00000 n 0001321293 00000 n 0001321412 00000 n 0001322102 00000 n 0001321897 00000 n 0001321996 00000 n 0001322371 00000 n 0001322602 00000 n 0001322478 00000 n 0001322707 00000 n 0001322818 00000 n 0001322927 00000 n 0001323033 00000 n 0001323147 00000 n 0001323260 00000 n 0001323370 00000 n 0001323443 00000 n 0001323521 00000 n 0001323609 00000 n 0001323697 00000 n 0001323785 00000 n 0001323873 00000 n 0001323957 00000 n 0001324066 00000 n 0001324190 00000 n 0001324311 00000 n 0001324432 00000 n 0001324562 00000 n 0001324683 00000 n 0001324804 00000 n 0001324916 00000 n 0001325037 00000 n 0001325152 00000 n 0001325254 00000 n 0001325345 00000 n 0001325466 00000 n 0001325572 00000 n 0001325671 00000 n 0001325789 00000 n 0001325879 00000 n 0001325984 00000 n 0001326077 00000 n 0001326182 00000 n 0001326290 00000 n 0001326395 00000 n 0001326486 00000 n 0001326567 00000 n 0001326675 00000 n 0001326783 00000 n 0001326888 00000 n 0001326996 00000 n 0001327083 00000 n 0001327204 00000 n 0001327328 00000 n 0001327449 00000 n 0001327537 00000 n 0001327657 00000 n 0001327778 00000 n 0001327902 00000 n 0001328017 00000 n 0001328108 00000 n 0001328199 00000 n 0001328319 00000 n 0001328413 00000 n 0001328516 00000 n 0001328600 00000 n 0001328693 00000 n 0001328793 00000 n 0001328881 00000 n 0001328965 00000 n 0001329061 00000 n 0001329146 00000 n 0001329242 00000 n 0001329354 00000 n 0001329445 00000 n 0001329533 00000 n 0001329621 00000 n 0001329709 00000 n 0001329800 00000 n 0001329891 00000 n 0001329985 00000 n 0001330076 00000 n 0001330179 00000 n 0001330288 00000 n 0001330397 00000 n 0001330488 00000 n 0001330621 00000 n 0001330769 00000 n 0001330902 00000 n 0001331004 00000 n 0001331128 00000 n 0001331237 00000 n 0001331352 00000 n 0001331469 00000 n 0001331586 00000 n 0001331700 00000 n 0001331817 00000 n 0001331898 00000 n 0001331986 00000 n 0001332077 00000 n 0001332165 00000 n 0001332256 00000 n 0001332365 00000 n 0001332492 00000 n 0001332613 00000 n 0001332740 00000 n 0001332870 00000 n 0001332973 00000 n 0001333076 00000 n 0001333169 00000 n 0001333275 00000 n 0001333393 00000 n 0001333526 00000 n 0001333650 00000 n 0001333786 00000 n 0001333940 00000 n 0001334103 00000 n 0001334266 00000 n 0001334438 00000 n 0001334595 00000 n 0001334773 00000 n 0001334951 00000 n 0001335141 00000 n 0001335319 00000 n 0001335503 00000 n 0001335642 00000 n 0001335796 00000 n 0001335959 00000 n 0001336053 00000 n 0001336183 00000 n 0001336301 00000 n 0001336413 00000 n 0001336540 00000 n 0001336661 00000 n 0001336782 00000 n 0001336903 00000 n 0001337039 00000 n 0001337163 00000 n 0001337284 00000 n 0001337411 00000 n 0001337532 00000 n 0001337650 00000 n 0001337771 00000 n 0001337895 00000 n 0001338028 00000 n 0001338164 00000 n 0001338288 00000 n 0001338409 00000 n 0001338508 00000 n 0001338607 00000 n 0001338722 00000 n 0001338816 00000 n 0001338910 00000 n 0001339003 00000 n 0001339118 00000 n 0001339278 00000 n 0001339435 00000 n 0001339577 00000 n 0001339716 00000 n 0001339816 00000 n 0001339982 00000 n 0001340145 00000 n 0001340278 00000 n 0001340417 00000 n 0001340565 00000 n 0001340710 00000 n 0001340828 00000 n 0001340961 00000 n 0001341112 00000 n 0001341218 00000 n 0001341321 00000 n 0001341427 00000 n 0001341584 00000 n 0001341759 00000 n 0001341934 00000 n 0001342049 00000 n 0001342158 00000 n 0001342270 00000 n 0001342388 00000 n 0001342521 00000 n 0001342672 00000 n 0001342823 00000 n 0001342953 00000 n 0001343083 00000 n 0001343201 00000 n 0001343313 00000 n 0001343452 00000 n 0001343564 00000 n 0001343685 00000 n 0001343800 00000 n 0001343908 00000 n 0001344041 00000 n 0001344174 00000 n 0001344319 00000 n 0001344473 00000 n 0001344603 00000 n 0001344717 00000 n 0001344831 00000 n 0001344943 00000 n 0001345058 00000 n 0001345140 00000 n 0001345236 00000 n 0001345339 00000 n 0001345447 00000 n 0001345541 00000 n 0001345647 00000 n 0001345738 00000 n 0001345850 00000 n 0001345943 00000 n 0001346048 00000 n 0001346153 00000 n 0001346271 00000 n 0001346395 00000 n 0001346519 00000 n 0001346655 00000 n 0001346764 00000 n 0001346885 00000 n 0001347018 00000 n 0001347127 00000 n 0001347233 00000 n 0001347348 00000 n 0001347466 00000 n 0001347566 00000 n 0001347705 00000 n 0001347823 00000 n 0001347947 00000 n 0001348083 00000 n 0001348204 00000 n 0001348328 00000 n 0001348473 00000 n 0001348621 00000 n 0001348772 00000 n 0001348932 00000 n 0001349089 00000 n 0001349222 00000 n 0001349358 00000 n 0001349497 00000 n 0001349645 00000 n 0001349790 00000 n 0001349914 00000 n 0001350035 00000 n 0001350159 00000 n 0001350292 00000 n 0001350431 00000 n 0001350561 00000 n 0001350685 00000 n 0001350809 00000 n 0001350936 00000 n 0001351057 00000 n 0001351181 00000 n 0001351311 00000 n 0001351423 00000 n 0001351535 00000 n 0001351650 00000 n 0001351759 00000 n 0001351868 00000 n 0001351977 00000 n 0001352086 00000 n 0001352210 00000 n 0001352328 00000 n 0001352449 00000 n 0001352561 00000 n 0001352688 00000 n 0001352806 00000 n 0001352939 00000 n 0001353075 00000 n 0001353193 00000 n 0001353341 00000 n 0001353459 00000 n 0001353571 00000 n 0001353683 00000 n 0001353810 00000 n 0001353940 00000 n 0001354061 00000 n 0001354179 00000 n 0001354297 00000 n 0001354430 00000 n 0001354566 00000 n 0001354681 00000 n 0001354811 00000 n 0001354944 00000 n 0001355047 00000 n 0001355153 00000 n 0001355259 00000 n 0001355371 00000 n 0001355483 00000 n 0001355589 00000 n 0001355689 00000 n 0001355810 00000 n 0001355931 00000 n 0001356052 00000 n 0001356167 00000 n 0001356288 00000 n 0001356409 00000 n 0001356527 00000 n 0001356627 00000 n 0001356733 00000 n 0001356839 00000 n 0001356942 00000 n 0001357042 00000 n 0001357136 00000 n 0001357229 00000 n 0001357322 00000 n 0001357412 00000 n 0001357505 00000 n 0001357595 00000 n 0001357688 00000 n 0001357778 00000 n 0001357868 00000 n 0001357958 00000 n 0001358076 00000 n 0001358164 00000 n 0001358255 00000 n 0001358343 00000 n 0001358461 00000 n 0001358549 00000 n 0001358648 00000 n 0001358732 00000 n 0001358813 00000 n 0001358921 00000 n 0001359017 00000 n 0001359095 00000 n 0001359188 00000 n 0001359293 00000 n 0001359371 00000 n 0001359461 00000 n 0001359545 00000 n 0001359662 00000 n 0001359806 00000 n 0001359908 00000 n 0001360013 00000 n 0001360115 00000 n 0001360235 00000 n 0001360373 00000 n 0001360520 00000 n 0001360628 00000 n 0001360733 00000 n 0001360824 00000 n 0001360926 00000 n 0001361025 00000 n 0001361121 00000 n 0001361233 00000 n 0001361342 00000 n 0001361451 00000 n 0001361563 00000 n 0001361681 00000 n 0001361790 00000 n 0001361883 00000 n 0001361977 00000 n 0001362068 00000 n 0001362162 00000 n 0001362268 00000 n 0001362368 00000 n 0001362489 00000 n 0001362589 00000 n 0001362704 00000 n 0001362822 00000 n 0001362958 00000 n 0001363070 00000 n 0001363158 00000 n 0001363252 00000 n 0001363376 00000 n 0001363500 00000 n 0001363621 00000 n 0001363745 00000 n 0001363848 00000 n 0001363944 00000 n 0001364061 00000 n 0001364154 00000 n 0001364253 00000 n 0001364355 00000 n 0001364458 00000 n 0001364558 00000 n 0001364658 00000 n 0001364782 00000 n 0001364900 00000 n 0001364993 00000 n 0001365086 00000 n 0001365195 00000 n 0001365310 00000 n 0001365434 00000 n 0001365558 00000 n 0001365679 00000 n 0001365809 00000 n 0001365948 00000 n 0001366108 00000 n 0001366232 00000 n 0001366371 00000 n 0001366510 00000 n 0001366649 00000 n 0001366788 00000 n 0001366924 00000 n 0001367039 00000 n 0001367169 00000 n 0001367290 00000 n 0001367423 00000 n 0001367544 00000 n 0001367671 00000 n 0001367777 00000 n 0001367886 00000 n 0001368001 00000 n 0001368116 00000 n 0001368221 00000 n 0001368339 00000 n 0001368454 00000 n 0001368572 00000 n 0001368699 00000 n 0001368820 00000 n 0001368944 00000 n 0001369074 00000 n 0001369182 00000 n 0001369302 00000 n 0001369419 00000 n 0001369524 00000 n 0001369629 00000 n 0001369734 00000 n 0001369839 00000 n 0001369947 00000 n 0001370058 00000 n 0001370181 00000 n 0001370293 00000 n 0001370402 00000 n 0001370514 00000 n 0001370635 00000 n 0001370750 00000 n 0001370868 00000 n 0001370998 00000 n 0001371122 00000 n 0001371203 00000 n 0001371336 00000 n 0001371490 00000 n 0001371611 00000 n 0001371753 00000 n 0001371874 00000 n 0001372016 00000 n 0001372125 00000 n 0001372249 00000 n 0001372394 00000 n 0001372506 00000 n 0001372639 00000 n 0001372754 00000 n 0001372890 00000 n 0001373008 00000 n 0001373147 00000 n 0001373253 00000 n 0001373380 00000 n 0001373516 00000 n 0001373673 00000 n 0001373776 00000 n 0001373900 00000 n 0001374045 00000 n 0001374166 00000 n 0001374281 00000 n 0001374417 00000 n 0001374556 00000 n 0001374668 00000 n 0001374786 00000 n 0001374907 00000 n 0001375028 00000 n 0001375152 00000 n 0001375276 00000 n 0001375403 00000 n 0001375530 00000 n 0001375648 00000 n 0001375787 00000 n 0001375908 00000 n 0001376050 00000 n 0001376159 00000 n 0001376289 00000 n 0001376401 00000 n 0001376534 00000 n 0001376655 00000 n 0001376797 00000 n 0001376906 00000 n 0001377036 00000 n 0001377151 00000 n 0001377266 00000 n 0001377402 00000 n 0001377508 00000 n 0001377623 00000 n 0001377759 00000 n 0001377883 00000 n 0001378028 00000 n 0001378140 00000 n 0001378273 00000 n 0001378385 00000 n 0001378494 00000 n 0001378594 00000 n 0001378700 00000 n 0001378820 00000 n 0001378935 00000 n 0001379043 00000 n 0001379148 00000 n 0001379271 00000 n 0001379382 00000 n 0001379490 00000 n 0001379577 00000 n 0001379679 00000 n 0001379787 00000 n 0001379889 00000 n 0001380016 00000 n 0001380143 00000 n 0001380270 00000 n 0001380391 00000 n 0001380506 00000 n 0001380609 00000 n 0001380724 00000 n 0001380839 00000 n 0001380945 00000 n 0001381051 00000 n 0001381154 00000 n 0001381269 00000 n 0001381372 00000 n 0001381487 00000 n 0001381590 00000 n 0001381705 00000 n 0001381808 00000 n 0001381923 00000 n 0001382026 00000 n 0001382141 00000 n 0001382247 00000 n 0001382374 00000 n 0001382498 00000 n 0001382661 00000 n 0001382797 00000 n 0001382933 00000 n 0001383090 00000 n 0001383208 00000 n 0001383323 00000 n 0001383416 00000 n 0001383522 00000 n 0001383634 00000 n 0001383743 00000 n 0001383840 00000 n 0001383931 00000 n 0001384022 00000 n 0001384113 00000 n 0001384204 00000 n 0001384361 00000 n 0001384500 00000 n 0001384636 00000 n 0001384781 00000 n 0001384929 00000 n 0001385074 00000 n 0001385228 00000 n 0001385355 00000 n 0001385488 00000 n 0001385624 00000 n 0001385772 00000 n 0001385896 00000 n 0001386023 00000 n 0001386141 00000 n 0001386268 00000 n 0001386386 00000 n 0001386516 00000 n 0001386634 00000 n 0001386740 00000 n 0001386833 00000 n 0001386926 00000 n 0001387031 00000 n 0001387124 00000 n 0001387217 00000 n 0001387323 00000 n 0001387450 00000 n 0001387541 00000 n 0001387631 00000 n 0001387746 00000 n 0001387870 00000 n 0001387981 00000 n 0001388095 00000 n 0001388191 00000 n 0001388299 00000 n 0001388410 00000 n 0001388531 00000 n 0001388630 00000 n 0001388729 00000 n 0001388840 00000 n 0001388951 00000 n 0001389065 00000 n 0001389161 00000 n 0001389296 00000 n 0001389395 00000 n 0001389503 00000 n 0001389611 00000 n 0001389716 00000 n 0001389821 00000 n 0001389926 00000 n 0001390031 00000 n 0001390169 00000 n 0001390274 00000 n 0001390370 00000 n 0001390469 00000 n 0001390587 00000 n 0001390689 00000 n 0001390792 00000 n 0001390888 00000 n 0001391009 00000 n 0001391142 00000 n 0001391238 00000 n 0001391341 00000 n 0001391456 00000 n 0001391592 00000 n 0001391698 00000 n 0001391804 00000 n 0001391931 00000 n 0001392037 00000 n 0001392164 00000 n 0001392279 00000 n 0001392415 00000 n 0001392542 00000 n 0001392672 00000 n 0001392793 00000 n 0001392920 00000 n 0001393032 00000 n 0001393147 00000 n 0001393262 00000 n 0001393392 00000 n 0001393519 00000 n 0001393643 00000 n 0001393764 00000 n 0001393888 00000 n 0001394012 00000 n 0001394139 00000 n 0001394266 00000 n 0001394363 00000 n 0001394463 00000 n 0001394575 00000 n 0001394705 00000 n 0001394786 00000 n 0001394883 00000 n 0001394980 00000 n 0001395080 00000 n 0001395177 00000 n 0001395274 00000 n 0001395371 00000 n 0001395477 00000 n 0001395586 00000 n 0001395692 00000 n 0001395795 00000 n 0001395910 00000 n 0001396010 00000 n 0001396107 00000 n 0001396207 00000 n 0001396301 00000 n 0001396403 00000 n 0001396496 00000 n 0001396589 00000 n 0001396676 00000 n 0001396778 00000 n 0001396874 00000 n 0001396965 00000 n 0001397080 00000 n 0001397216 00000 n 0001397322 00000 n 0001397449 00000 n 0001397555 00000 n 0001397682 00000 n 0001397763 00000 n 0001397859 00000 n 0001397958 00000 n 0001398069 00000 n 0001398165 00000 n 0001398283 00000 n 0001398410 00000 n 0001398555 00000 n 0001398655 00000 n 0001398773 00000 n 0001398888 00000 n 0001398985 00000 n 0001399100 00000 n 0001399212 00000 n 0001399315 00000 n 0001399436 00000 n 0001399539 00000 n 0001399660 00000 n 0001399763 00000 n 0001399884 00000 n 0001399984 00000 n 0001400102 00000 n 0001400202 00000 n 0001400320 00000 n 0001400435 00000 n 0001400534 00000 n 0001400637 00000 n 0001400758 00000 n 0001400876 00000 n 0001400982 00000 n 0001401094 00000 n 0001401230 00000 n 0001401363 00000 n 0001401490 00000 n 0001401620 00000 n 0001401747 00000 n 0001401892 00000 n 0001402037 00000 n 0001402161 00000 n 0001402285 00000 n 0001402406 00000 n 0001402512 00000 n 0001402636 00000 n 0001402742 00000 n 0001402866 00000 n 0001402972 00000 n 0001403096 00000 n 0001403199 00000 n 0001403320 00000 n 0001403423 00000 n 0001403544 00000 n 0001403662 00000 n 0001403768 00000 n 0001403892 00000 n 0001404013 00000 n 0001404128 00000 n 0001404218 00000 n 0001404314 00000 n 0001404410 00000 n 0001404518 00000 n 0001404614 00000 n 0001404710 00000 n 0001404801 00000 n 0001404925 00000 n 0001405022 00000 n 0001405125 00000 n 0001405243 00000 n 0001405373 00000 n 0001405518 00000 n 0001405645 00000 n 0001405739 00000 n 0001405839 00000 n 0001405945 00000 n 0001406054 00000 n 0001406184 00000 n 0001406302 00000 n 0001406435 00000 n 0001406520 00000 n 0001406641 00000 n 0001406765 00000 n 0001406889 00000 n 0001407010 00000 n 0001407098 00000 n 0001407183 00000 n 0001407276 00000 n 0001407397 00000 n 0001407503 00000 n 0001407591 00000 n 0001407682 00000 n 0001407764 00000 n 0001407852 00000 n 0001407964 00000 n 0001408067 00000 n 0001408163 00000 n 0001408257 00000 n 0001408339 00000 n 0001408424 00000 n 0001408521 00000 n 0001408621 00000 n 0001408715 00000 n 0001408806 00000 n 0001408909 00000 n 0001408994 00000 n 0001409100 00000 n 0001409191 00000 n 0001409282 00000 n 0001409370 00000 n 0001409455 00000 n 0001409546 00000 n 0001409631 00000 n 0001409722 00000 n 0001409828 00000 n 0001409955 00000 n 0001410046 00000 n 0001410149 00000 n 0001410255 00000 n 0001410346 00000 n 0001410446 00000 n 0001410545 00000 n 0001410627 00000 n 0001424504 00000 n 0001424884 00000 n 0001425337 00000 n trailer << /Root 6238 0 R /Info 1 0 R /ID [ ] /Size 6241 >> startxref 1425377 %%EOF systemtap-5.3/doc/SystemTap_Tapset_Reference/tapsets.tmpl000066400000000000000000000366061500444254400240040ustar00rootroot00000000000000 SystemTap Tapset Reference Manual 2008-2025 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 CVE Livepatching Tapset Utility functions and control variables which can be used to create standardized CVE patches. The globals are cve_notify_p (non-zero if the patch should be verbose), cve_fix_p (non-zero if the fix should be applied), cve_trace_p (non-zero if only a trace should be run), cve_enabled_p (non-zero if the patch should be enabled). The controls can be changed in /proc/systemtap/MODULE_NAME/* and the recorded prometheus metrics can be viewed in the same directory. !Itapset/livepatch.stp !Syscalls systemtap-5.3/doc/Tapset_Reference_Guide/000077500000000000000000000000001500444254400205145ustar00rootroot00000000000000systemtap-5.3/doc/Tapset_Reference_Guide/Makefile000066400000000000000000000006411500444254400221550ustar00rootroot00000000000000#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-5.3/doc/Tapset_Reference_Guide/README000066400000000000000000000032661500444254400214030ustar00rootroot00000000000000The 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-5.3/doc/Tapset_Reference_Guide/en-US/000077500000000000000000000000001500444254400214435ustar00rootroot00000000000000systemtap-5.3/doc/Tapset_Reference_Guide/en-US/Author_Group.xml000066400000000000000000000013371500444254400246070ustar00rootroot00000000000000 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-5.3/doc/Tapset_Reference_Guide/en-US/Book_Info.xml000066400000000000000000000023111500444254400240270ustar00rootroot00000000000000 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-5.3/doc/Tapset_Reference_Guide/en-US/Introduction.xml000066400000000000000000000046631500444254400246570ustar00rootroot00000000000000 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-5.3/doc/Tapset_Reference_Guide/en-US/Legal_Notice.xml000066400000000000000000000017221500444254400245140ustar00rootroot00000000000000 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-5.3/doc/Tapset_Reference_Guide/en-US/Preface.xml000066400000000000000000000011361500444254400235330ustar00rootroot00000000000000 Preface systemtap-5.3/doc/Tapset_Reference_Guide/en-US/Tapset_Dev_Guide.xml000066400000000000000000000220311500444254400253360ustar00rootroot00000000000000 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-5.3/doc/Tapset_Reference_Guide/en-US/Tapset_Reference_Guide.ent000066400000000000000000000002521500444254400265050ustar00rootroot00000000000000 systemtap-5.3/doc/Tapset_Reference_Guide/en-US/Tapset_Reference_Guide.xml000066400000000000000000036366731500444254400265500ustar00rootroot00000000000000 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 probe::vm.kfree 3stap probe::vm.kfree Fires when kfree is requested Synopsis vm.kfree Values name name of the probe point 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 LINUX SystemTap Tapset Reference April 2025 probe::vm.kmalloc 3stap probe::vm.kmalloc Fires when kmalloc is requested Synopsis vm.kmalloc Values bytes_req requested Bytes gfp_flags type of kmemory to allocate name name of the probe point ptr pointer to the kmemory allocated bytes_alloc allocated Bytes caller_function name of the caller function gfp_flag_name type of kmemory to allocate (in String format) call_site address of the kmemory function LINUX SystemTap Tapset Reference April 2025 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) call_site address of the function caling this kmemory function caller_function name of the caller function bytes_alloc allocated Bytes name name of the probe point bytes_req requested Bytes gfp_flags type of kmemory to allocate ptr pointer to the kmemory allocated LINUX SystemTap Tapset Reference April 2025 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 name name of the probe point ptr pointer to the kmemory allocated bytes_alloc allocated Bytes caller_function name of the caller function. gfp_flag_name type of kmemory to allocate(in string format) call_site address of the function calling this kmemory function. LINUX SystemTap Tapset Reference April 2025 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 ptr pointer to the kmemory allocated gfp_flags type of kmemory to allocate bytes_req requested Bytes name name of the probe point bytes_alloc allocated Bytes caller_function name of the caller function call_site address of the function calling this kmemory function gfp_flag_name type of kmemory to allocate(in string format) LINUX SystemTap Tapset Reference April 2025 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. call_site Address of the function calling this kmemory function ptr Pointer to the kmemory allocated which is returned by kmem_cache name Name of the probe point LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::vm.munmap 3stap probe::vm.munmap Fires when an munmap is requested Synopsis vm.munmap Values length the length of the memory segment address the requested address name name of the probe point Context The process calling munmap. LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::vm.pagefault 3stap probe::vm.pagefault Records that a page fault occurred Synopsis vm.pagefault Values write_access indicates whether this was a write or read access; 1 indicates a write, while 0 indicates a read name name of the probe point address the address of the faulting memory access; i.e. the address that caused the page fault Context The process which triggered the fault LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::vm.write_shared 3stap probe::vm.write_shared Attempts at writing to a shared page Synopsis vm.write_shared Values address the address of the shared write name name of the probe point 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 April 2025 probe::vm.write_shared_copy 3stap probe::vm.write_shared_copy Page copy for shared page write Synopsis vm.write_shared_copy Values name Name of the probe point 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. 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 probe::scheduler.cpu_off 3stap probe::scheduler.cpu_off Process is about to stop running on a cpu Synopsis scheduler.cpu_off Values task_next the process replacing current name name of the probe point task_prev the process leaving the cpu (same as current) idle boolean indicating whether current is the idle process Context The process leaving the cpu. LINUX SystemTap Tapset Reference April 2025 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 name name of the probe point task_prev the process that was previously running on this cpu Context The resuming process. LINUX SystemTap Tapset Reference April 2025 probe::scheduler.ctxswitch 3stap probe::scheduler.ctxswitch A context switch is occuring. Synopsis scheduler.ctxswitch Values prev_pid The PID of the process to be switched out prevtsk_state the state of the process to be switched out next_task_name The name of the process to be switched in prev_tid The TID of the process to be switched out prev_priority The priority of the process to be switched out name name of the probe point next_pid The PID of the process to be switched in nexttsk_state the state of the process to be switched in next_tid The TID of the process to be switched in next_priority The priority of the process to be switched in prev_task_name The name of the process to be switched out LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 probe::scheduler.migrate 3stap probe::scheduler.migrate Task migrating across cpus Synopsis scheduler.migrate Values pid PID of the task being migrated cpu_to the destination cpu priority priority of the task being migrated cpu_from the original cpu task the process that is being migrated name name of the probe point LINUX SystemTap Tapset Reference April 2025 probe::scheduler.process_exit 3stap probe::scheduler.process_exit Process exiting Synopsis scheduler.process_exit Values pid PID of the process exiting priority priority of the process exiting name name of the probe point LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 priority priority of the process getting freed pid PID of the process getting freed LINUX SystemTap Tapset Reference April 2025 probe::scheduler.process_wait 3stap probe::scheduler.process_wait Scheduler starting to wait on a process Synopsis scheduler.process_wait Values name name of the probe point pid PID of the process scheduler is waiting on LINUX SystemTap Tapset Reference April 2025 probe::scheduler.signal_send 3stap probe::scheduler.signal_send Sending a signal Synopsis scheduler.signal_send Values pid pid of the process sending signal name name of the probe point signal_number signal number LINUX SystemTap Tapset Reference April 2025 probe::scheduler.tick 3stap probe::scheduler.tick Schedulers internal tick, a processes timeslice accounting is updated Synopsis scheduler.tick Values idle boolean indicating whether current is the idle process name name of the probe point Context The process whose accounting will be updated. LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::scheduler.wakeup 3stap probe::scheduler.wakeup Task is woken up Synopsis scheduler.wakeup Values task_pid PID of the task being woken up name name of the probe point task_tid tid of the task being woken up task_state state of the task being woken up task_priority priority of the task being woken up task_cpu cpu of the task being woken up LINUX SystemTap Tapset Reference April 2025 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_cpu cpu of the task woken up task_tid TID of the new task woken up task_state state of the task woken up task_priority priority of the new task name name of the probe point task_pid PID of the new 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 April 2025 probe::ioblock.end 3stap probe::ioblock.end Fires whenever a block I/O transfer is complete. Synopsis ioblock.end Values ino i-node number of the mapped file error 0 on success devname block device name size total size in bytes bytes_done number of bytes transferred hw_segments number of segments after physical and DMA remapping hardware coalescing is performed phys_segments number of segments in this bio after physical address coalescing is performed. name name of the probe point vcnt bio vector count which represents number of array element (page, offset, length) which makes up this I/O request opf operations and flags idx offset into the bio vector array rw binary trace for read/write request sector beginning sector for the entire bio 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 April 2025 probe::ioblock.request 3stap probe::ioblock.request Fires whenever making a generic block I/O request. Synopsis ioblock.request Values 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 bdev_contains points to the device object which contains the partition (when bio structure represents a partition) sector beginning sector for the entire bio idx offset into the bio vector array rw binary trace for read/write request opf operations and flags 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 name name of the probe point hw_segments number of segments after physical and DMA remapping hardware coalescing is performed size total size in bytes devname block device name p_start_sect points to the start sector of the partition structure of the device ino i-node number of the mapped file bdev target block device Context The process makes block I/O request LINUX SystemTap Tapset Reference April 2025 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 name name of the probe point rw binary trace for read/write request idx offset into the bio vector array phys_segments - number of segments in this bio after physical address coalescing is performed. opf operations and flags vcnt bio vector count which represents number of array element (page, offset, length) which makes up this I/O request bdev_contains points to the device object which contains the partition (when bio structure represents a partition) sector beginning sector for the entire bio 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 bdev target block device ino i-node number of the mapped file p_start_sect points to the start sector of the partition structure of the device q request queue on which this bio was queued. bytes_done number of bytes transferred devname device for which a buffer bounce was needed. size total size in bytes Context The process creating a block IO request. LINUX SystemTap Tapset Reference April 2025 probe::ioblock_trace.end 3stap probe::ioblock_trace.end Fires whenever a block I/O transfer is complete. Synopsis ioblock_trace.end Values p_start_sect points to the start sector of the partition structure of the device q request queue on which this bio was queued. size total size in bytes devname block device name bytes_done number of bytes transferred bdev target block device ino i-node number of the mapped file sector beginning sector for the entire bio bdev_contains points to the device object which contains the partition (when bio structure represents a partition) 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 opf operations and flags vcnt bio vector count which represents number of array element (page, offset, length) which makes up this I/O request rw binary trace for read/write request idx offset into the bio vector array phys_segments - number of segments in this bio after physical address coalescing is performed. Context The process signals the transfer is done. LINUX SystemTap Tapset Reference April 2025 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 bdev target block device ino i-node number of the mapped file p_start_sect points to the start sector of the partition structure of the device q request queue on which this bio was queued. bytes_done number of bytes transferred devname block device name size total size in bytes name name of the probe point rw binary trace for read/write request idx offset into the bio vector array phys_segments - number of segments in this bio after physical address coalescing is performed. opf operations and flags vcnt bio vector count which represents number of array element (page, offset, length) which make up this I/O request bdev_contains points to the device object which contains the partition (when bio structure represents a partition) sector beginning sector for the entire bio 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 makes block I/O request LINUX SystemTap Tapset Reference April 2025 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 disk_major Disk major no of request. rq_flags Request flags. disk_minor Disk minor number of request. q Pointer to request queue. elevator_name The type of I/O elevator currently enabled. rq Address of request. LINUX SystemTap Tapset Reference April 2025 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 q pointer to request queue elevator_name The type of I/O elevator currently enabled name Name of the probe point rq Address of the request disk_major Disk major number of the request rq_flags Request flags disk_minor Disk minor number of the request LINUX SystemTap Tapset Reference April 2025 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 q Pointer to request queue. name Name of the probe point elevator_name The type of I/O elevator currently enabled. rq Address of request. disk_major Disk major no of request. rq_flags Request flags. disk_minor Disk minor number of request. LINUX SystemTap Tapset Reference April 2025 probe::ioscheduler.elv_completed_request 3stap probe::ioscheduler.elv_completed_request Fires when a request is completed Synopsis ioscheduler.elv_completed_request Values elevator_name The type of I/O elevator currently enabled name Name of the probe point rq Address of the request disk_major Disk major number of the request rq_flags Request flags disk_minor Disk minor number of the request LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 rq_flags Request flags disk_minor Disk minor number of the request name Name of the probe point rq Address of the request LINUX SystemTap Tapset Reference April 2025 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 name Name of the probe point elevator_name The type of I/O elevator currently enabled. rq Address of request. rq_flags Request flags. disk_major Disk major no of request. disk_minor Disk minor number of request. LINUX SystemTap Tapset Reference April 2025 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_flags Request flags. disk_major Disk major no of request. disk_minor Disk minor number of request. name Name of the probe point elevator_name The type of I/O elevator currently enabled. rq Address of request. Description completed. LINUX SystemTap Tapset Reference April 2025 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 disk_minor Disk minor number of request. disk_major Disk major no of request. rq_flags Request flags. rq Address of request. name Name of the probe point elevator_name The type of I/O elevator currently enabled. Description scheduled. LINUX SystemTap Tapset Reference April 2025 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 disk_major Disk major no of request. 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 rq Address of request. Description put back on the queue, when the hadware cannot accept more requests. LINUX SystemTap Tapset Reference April 2025 probe::ioscheduler_trace.plug 3stap probe::ioscheduler_trace.plug Fires when a request queue is plugged; Synopsis ioscheduler_trace.plug Values rq_queue request queue name Name of the probe point Description ie, requests in the queue cannot be serviced by block driver. LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::ioscheduler_trace.unplug_timer 3stap probe::ioscheduler_trace.unplug_timer Fires when unplug timer associated Synopsis ioscheduler_trace.unplug_timer Values name Name of the probe point rq_queue request queue 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 April 2025 probe::scsi.iocompleted 3stap probe::scsi.iocompleted SCSI mid-layer running the completion processing for block device I/O requests Synopsis scsi.iocompleted Values goodbytes The bytes completed channel The channel number 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 data_direction The data_direction specifies whether this command is from/to the device device_state_str The current state of the device, as a string dev_id The scsi device id req_addr The current struct request pointer, as a number LINUX SystemTap Tapset Reference April 2025 probe::scsi.iodispatching 3stap probe::scsi.iodispatching SCSI mid-layer dispatched low-level SCSI command Synopsis scsi.iodispatching Values request_buffer The request buffer address lun The lun number device_state The current state of the device request_bufflen The request buffer length channel The channel number host_no The host number data_direction_str Data direction, as a string 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) dev_id The scsi device id req_addr The current struct request pointer, as a number device_state_str The current state of the device, as a string LINUX SystemTap Tapset Reference April 2025 probe::scsi.iodone 3stap probe::scsi.iodone SCSI command completed by low level driver and enqueued into the done queue. Synopsis scsi.iodone Values channel The channel number host_no The host number device_state The current state of the device lun The lun number data_direction The data_direction specifies whether this command is from/to the device. data_direction_str Data direction, as a string device_state_str The current state of the device, as a string scsi_timer_pending 1 if a timer is pending on this request dev_id The scsi device id req_addr The current struct request pointer, as a number LINUX SystemTap Tapset Reference April 2025 probe::scsi.ioentry 3stap probe::scsi.ioentry Prepares a SCSI mid-layer request Synopsis scsi.ioentry Values req_addr The current struct request pointer, as a number disk_minor The minor number of the disk (-1 if no information) device_state_str The current state of the device, as a string disk_major The major number of the disk (-1 if no information) device_state The current state of the device LINUX SystemTap Tapset Reference April 2025 probe::scsi.ioexecute 3stap probe::scsi.ioexecute Create mid-layer SCSI request and wait for the result Synopsis scsi.ioexecute Values host_no The host number channel The channel number request_bufflen The data buffer buffer length timeout Request timeout in seconds lun The lun number request_buffer The data buffer address device_state The current state of the device retries Number of times to retry request dev_id The scsi device id device_state_str The current state of the device, as a string data_direction The data_direction specifies whether this command is from/to the device. data_direction_str Data direction, as a string LINUX SystemTap Tapset Reference April 2025 probe::scsi.set_state 3stap probe::scsi.set_state Order SCSI device state change Synopsis scsi.set_state Values host_no The host number channel The channel number old_state The current state of the device lun The lun number state The new state of the device state_str The new state of the device, as a string dev_id The scsi device id old_state_str The current state of the device, as a string TTY Tapset This family of probe points is used to probe TTY (Teletype) activities. It contains the following probe points: LINUX SystemTap Tapset Reference April 2025 probe::tty.init 3stap probe::tty.init Called when a tty is being initalized Synopsis tty.init Values name the driver .dev_name name module the module name driver_name the driver name LINUX SystemTap Tapset Reference April 2025 probe::tty.ioctl 3stap probe::tty.ioctl called when a ioctl is request to the tty Synopsis tty.ioctl Values name the file name cmd the ioctl command arg the ioctl argument LINUX SystemTap Tapset Reference April 2025 probe::tty.open 3stap probe::tty.open Called when a tty is opened Synopsis tty.open Values inode_state the inode state inode_flags the inode flags inode_number the inode number file_name the file name file_flags the file flags file_mode the file mode LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::tty.read 3stap probe::tty.read called when a tty line will be read Synopsis tty.read Values nr The amount of characters to be read buffer the buffer that will receive the characters file_name the file name lreated to the tty driver_name the driver name LINUX SystemTap Tapset Reference April 2025 probe::tty.receive 3stap probe::tty.receive called when a tty receives a message Synopsis tty.receive Values count The amount of characters received fp The flag buffer driver_name the driver name cp the buffer that was received id the tty id name the name of the module file index The tty Index LINUX SystemTap Tapset Reference April 2025 probe::tty.register 3stap probe::tty.register Called when a tty device is registred Synopsis tty.register Values driver_name the driver name name the driver .dev_name name module the module name index the tty index requested LINUX SystemTap Tapset Reference April 2025 probe::tty.release 3stap probe::tty.release Called when the tty is closed Synopsis tty.release Values file_mode the file mode file_name the file name file_flags the file flags inode_flags the inode flags inode_state the inode state inode_number the inode number LINUX SystemTap Tapset Reference April 2025 probe::tty.resize 3stap probe::tty.resize Called when a terminal resize happens Synopsis tty.resize Values new_row the new row value old_ypixel the old ypixel new_xpixel the new xpixel value new_col the new col value old_xpixel the old xpixel old_col the old col value name the tty name old_row the old row value new_ypixel the new ypixel value LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 probe::irq_handler.entry 3stap probe::irq_handler.entry Execution of interrupt handler starting Synopsis irq_handler.entry Values handler interrupt handler function thread_fn interrupt handler function for threaded interrupts action struct irqaction* for this interrupt num dev_name name of device dir pointer to the proc/irq/NN/name entry next_irqaction pointer to next irqaction for shared interrupts flags_str symbolic string representation of IRQ flags thread thread pointer for threaded interrupts flags Flags for IRQ handler dev_id Cookie to identify device irq irq number thread_flags Flags related to thread LINUX SystemTap Tapset Reference April 2025 probe::irq_handler.exit 3stap probe::irq_handler.exit Execution of interrupt handler completed Synopsis irq_handler.exit Values dir pointer to the proc/irq/NN/name entry flags_str symbolic string representation of IRQ flags next_irqaction pointer to next irqaction for shared interrupts flags flags for IRQ handler thread thread pointer for threaded interrupts irq interrupt number dev_id Cookie to identify device thread_flags Flags related to thread thread_fn interrupt handler function for threaded interrupts handler interrupt handler function that was executed ret return value of the handler action struct irqaction* dev_name name of device LINUX SystemTap Tapset Reference April 2025 probe::softirq.entry 3stap probe::softirq.entry Execution of handler for a pending softirq starting Synopsis softirq.entry Values action pointer to softirq handler just about to execute vec softirq_action vector h struct softirq_action* for current pending softirq vec_nr softirq vector number LINUX SystemTap Tapset Reference April 2025 probe::softirq.exit 3stap probe::softirq.exit Execution of handler for a pending softirq completed Synopsis softirq.exit Values vec softirq_action vector action pointer to softirq handler that just finished execution vec_nr softirq vector number h struct softirq_action* for just executed softirq LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 probe::workqueue.execute 3stap probe::workqueue.execute Executing deferred work Synopsis workqueue.execute Values wq_thread task_struct of the workqueue thread work work_struct* being executed work_func pointer to handler function LINUX SystemTap Tapset Reference April 2025 probe::workqueue.insert 3stap probe::workqueue.insert Queuing work on a workqueue Synopsis workqueue.insert Values work work_struct* being queued work_func pointer to handler function wq_thread task_struct of the workqueue thread Networking Tapset This family of probe points is used to probe the activities of the network device and protocol layers. LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 probe::netdev.change_mac 3stap probe::netdev.change_mac Called when the netdev_name has the MAC changed Synopsis netdev.change_mac Values dev_name The device that will have the MAC changed mac_len The MAC length old_mac The current MAC address new_mac The new MAC address LINUX SystemTap Tapset Reference April 2025 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 old_mtu The current MTU dev_name The device that will have the MTU changed LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 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 April 2025 probe::netdev.hard_transmit 3stap probe::netdev.hard_transmit Called when the devices is going to TX (hard) Synopsis netdev.hard_transmit Values dev_name The device scheduled to transmit protocol The protocol used in the transmission length The length of the transmit buffer. truesize The size of the data to be transmitted. LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 probe::netdev.receive 3stap probe::netdev.receive Data received from network device. Synopsis netdev.receive Values protocol Protocol of received packet. length The length of the receiving buffer. dev_name The name of the device. e.g: eth0, ath1. LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::netdev.rx 3stap probe::netdev.rx Called when the device is going to receive a packet Synopsis netdev.rx Values protocol The packet protocol dev_name The device received the packet LINUX SystemTap Tapset Reference April 2025 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 disable If the device is leaving promiscuity mode dev_name The device that is entering/leaving promiscuity mode enable If the device is entering promiscuity mode LINUX SystemTap Tapset Reference April 2025 probe::netdev.transmit 3stap probe::netdev.transmit Network device transmitting buffer Synopsis netdev.transmit Values dev_name The name of the device. e.g: eth0, ath1. length The length of the transmit buffer. protocol The protocol of this packet(defined in include/linux/if_ether.h). truesize The size of the data to be transmitted. LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::netfilter.arp.forward 3stap probe::netfilter.arp.forward - Called for each ARP packet to be forwarded Synopsis netfilter.arp.forward Values ar_tha Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address indev Address of net_device representing input device, 0 if unknown data_str A string representing the packet buffer contents nf_repeat Constant used to signify a 'repeat' verdict ar_hrd Format of hardware address arphdr Address of ARP header ar_pro Format of protocol address outdev Address of net_device representing output device, 0 if unknown ar_hln Length of hardware address data_hex A hexadecimal string representing the packet buffer contents nf_accept Constant used to signify an 'accept' verdict nf_stop Constant used to signify a 'stop' verdict length The length of the packet buffer contents, in bytes ar_pln Length of protocol address ar_tip Ethernet+IP only (ar_pro==0x800): target IP address nf_drop Constant used to signify a 'drop' verdict ar_sha Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address indev_name Name of network device packet was received on (if known) ar_op ARP opcode (command) pf Protocol family -- always arp ar_data Address of ARP packet data region (after the header) ar_sip Ethernet+IP only (ar_pro==0x800): source IP address nf_queue Constant used to signify a 'queue' verdict outdev_name Name of network device packet will be routed to (if known) nf_stolen Constant used to signify a 'stolen' verdict LINUX SystemTap Tapset Reference April 2025 probe::netfilter.arp.in 3stap probe::netfilter.arp.in - Called for each incoming ARP packet Synopsis netfilter.arp.in Values nf_queue Constant used to signify a 'queue' verdict nf_stolen Constant used to signify a 'stolen' verdict outdev_name Name of network device packet will be routed to (if known) ar_sip Ethernet+IP only (ar_pro==0x800): source IP address ar_data Address of ARP packet data region (after the header) pf Protocol family -- always arp ar_sha Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address ar_op ARP opcode (command) indev_name Name of network device packet was received on (if known) nf_drop Constant used to signify a 'drop' verdict length The length of the packet buffer contents, in bytes ar_pln Length of protocol address ar_tip Ethernet+IP only (ar_pro==0x800): target IP address outdev Address of net_device representing output device, 0 if unknown ar_hln Length of hardware address nf_accept Constant used to signify an 'accept' verdict nf_stop Constant used to signify a 'stop' verdict data_hex A hexadecimal string representing the packet buffer contents arphdr Address of ARP header indev Address of net_device representing input device, 0 if unknown ar_tha Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address nf_repeat Constant used to signify a 'repeat' verdict data_str A string representing the packet buffer contents ar_hrd Format of hardware address ar_pro Format of protocol address LINUX SystemTap Tapset Reference April 2025 probe::netfilter.arp.out 3stap probe::netfilter.arp.out - Called for each outgoing ARP packet Synopsis netfilter.arp.out Values nf_drop Constant used to signify a 'drop' verdict ar_pln Length of protocol address length The length of the packet buffer contents, in bytes ar_tip Ethernet+IP only (ar_pro==0x800): target IP address outdev Address of net_device representing output device, 0 if unknown ar_hln Length of hardware address data_hex A hexadecimal string representing the packet buffer contents nf_accept Constant used to signify an 'accept' verdict nf_stop Constant used to signify a 'stop' verdict ar_hrd Format of hardware address nf_repeat Constant used to signify a 'repeat' verdict data_str A string representing the packet buffer contents indev Address of net_device representing input device, 0 if unknown ar_tha Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address arphdr Address of ARP header ar_pro Format of protocol address nf_queue Constant used to signify a 'queue' verdict outdev_name Name of network device packet will be routed to (if known) nf_stolen Constant used to signify a 'stolen' verdict ar_sip Ethernet+IP only (ar_pro==0x800): source IP address ar_data Address of ARP packet data region (after the header) pf Protocol family -- always arp ar_sha Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address indev_name Name of network device packet was received on (if known) ar_op ARP opcode (command) LINUX SystemTap Tapset Reference April 2025 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 br_max Max age in 1/256 secs br_rid Identity of root bridge nf_repeat Constant used to signify a 'repeat' verdict data_str A string representing the packet buffer contents indev Address of net_device representing input device, 0 if unknown protocol Packet protocol br_htime Hello time in 1/256 secs data_hex A hexadecimal string representing the packet buffer contents nf_stop Constant used to signify a 'stop' verdict nf_accept Constant used to signify an 'accept' verdict outdev Address of net_device representing output device, 0 if unknown br_vid Protocol version identifier brhdr Address of bridge header length The length of the packet buffer contents, in bytes br_rmac Root bridge MAC address br_fd Forward delay in 1/256 secs br_mac Bridge MAC address nf_drop Constant used to signify a 'drop' verdict indev_name Name of network device packet was received on (if known) br_msg Message age in 1/256 secs pf Protocol family -- always bridge br_flags BPDU flags br_bid Identity of bridge br_poid Port identifier br_type BPDU type llcpdu Address of LLC Protocol Data Unit br_prid Protocol identifier llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet outdev_name Name of network device packet will be routed to (if known) nf_stolen Constant used to signify a 'stolen' verdict br_cost Total cost from transmitting bridge to root nf_queue Constant used to signify a 'queue' verdict LINUX SystemTap Tapset Reference April 2025 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 br_prid Protocol identifier llcpdu Address of LLC Protocol Data Unit nf_queue Constant used to signify a 'queue' verdict outdev_name Name of network device packet will be routed to (if known) llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_cost Total cost from transmitting bridge to root nf_stolen Constant used to signify a 'stolen' verdict br_msg Message age in 1/256 secs indev_name Name of network device packet was received on (if known) pf Protocol family -- always bridge br_type BPDU type br_poid Port identifier br_flags BPDU flags br_bid Identity of bridge length The length of the packet buffer contents, in bytes brhdr Address of bridge header nf_drop Constant used to signify a 'drop' verdict br_mac Bridge MAC address br_fd Forward delay in 1/256 secs br_rmac Root bridge MAC address indev Address of net_device representing input device, 0 if unknown nf_repeat Constant used to signify a 'repeat' verdict data_str A string representing the packet buffer contents br_rid Identity of root bridge protocol Packet protocol br_max Max age in 1/256 secs outdev Address of net_device representing output device, 0 if unknown br_vid Protocol version identifier data_hex A hexadecimal string representing the packet buffer contents br_htime Hello time in 1/256 secs nf_stop Constant used to signify a 'stop' verdict nf_accept Constant used to signify an 'accept' verdict LINUX SystemTap Tapset Reference April 2025 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 br_prid Protocol identifier llcpdu Address of LLC Protocol Data Unit nf_queue Constant used to signify a 'queue' verdict llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet outdev_name Name of network device packet will be routed to (if known) nf_stolen Constant used to signify a 'stolen' verdict br_cost Total cost from transmitting bridge to root br_msg Message age in 1/256 secs indev_name Name of network device packet was received on (if known) pf Protocol family -- always bridge br_flags BPDU flags br_bid Identity of bridge br_poid Port identifier br_type BPDU type length The length of the packet buffer contents, in bytes brhdr Address of bridge header br_mac Bridge MAC address nf_drop Constant used to signify a 'drop' verdict br_rmac Root bridge MAC address br_fd Forward delay in 1/256 secs nf_repeat Constant used to signify a 'repeat' verdict data_str A string representing the packet buffer contents br_rid Identity of root bridge indev Address of net_device representing input device, 0 if unknown protocol Packet protocol br_max Max age in 1/256 secs outdev Address of net_device representing output device, 0 if unknown br_vid Protocol version identifier br_htime Hello time in 1/256 secs data_hex A hexadecimal string representing the packet buffer contents nf_accept Constant used to signify an 'accept' verdict nf_stop Constant used to signify a 'stop' verdict LINUX SystemTap Tapset Reference April 2025 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 length The length of the packet buffer contents, in bytes brhdr Address of bridge header br_mac Bridge MAC address nf_drop Constant used to signify a 'drop' verdict br_rmac Root bridge MAC address br_fd Forward delay in 1/256 secs nf_repeat Constant used to signify a 'repeat' verdict data_str A string representing the packet buffer contents br_rid Identity of root bridge indev Address of net_device representing input device, 0 if unknown protocol Packet protocol br_max Max age in 1/256 secs outdev Address of net_device representing output device, 0 if unknown br_vid Protocol version identifier br_htime Hello time in 1/256 secs data_hex A hexadecimal string representing the packet buffer contents nf_accept Constant used to signify an 'accept' verdict nf_stop Constant used to signify a 'stop' verdict br_prid Protocol identifier llcpdu Address of LLC Protocol Data Unit nf_queue Constant used to signify a 'queue' verdict llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet outdev_name Name of network device packet will be routed to (if known) nf_stolen Constant used to signify a 'stolen' verdict br_cost Total cost from transmitting bridge to root br_msg Message age in 1/256 secs indev_name Name of network device packet was received on (if known) pf Protocol family -- always bridge br_bid Identity of bridge br_flags BPDU flags br_type BPDU type br_poid Port identifier LINUX SystemTap Tapset Reference April 2025 probe::netfilter.bridge.pre_routing 3stap probe::netfilter.bridge.pre_routing - Called before a bridging packet is routed Synopsis netfilter.bridge.pre_routing Values br_msg Message age in 1/256 secs indev_name Name of network device packet was received on (if known) br_type BPDU type br_poid Port identifier br_flags BPDU flags br_bid Identity of bridge pf Protocol family -- always bridge br_prid Protocol identifier llcpdu Address of LLC Protocol Data Unit nf_queue Constant used to signify a 'queue' verdict br_cost Total cost from transmitting bridge to root nf_stolen Constant used to signify a 'stolen' verdict outdev_name Name of network device packet will be routed to (if known) llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet protocol Packet protocol indev Address of net_device representing input device, 0 if unknown br_rid Identity of root bridge nf_repeat Constant used to signify a 'repeat' verdict data_str A string representing the packet buffer contents br_max Max age in 1/256 secs br_vid Protocol version identifier outdev Address of net_device representing output device, 0 if unknown nf_accept Constant used to signify an 'accept' verdict nf_stop Constant used to signify a 'stop' verdict data_hex A hexadecimal string representing the packet buffer contents br_htime Hello time in 1/256 secs brhdr Address of bridge header length The length of the packet buffer contents, in bytes nf_drop Constant used to signify a 'drop' verdict br_mac Bridge MAC address br_fd Forward delay in 1/256 secs br_rmac Root bridge MAC address LINUX SystemTap Tapset Reference April 2025 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 dport TCP or UDP destination port (ipv4 only) pf Protocol family -- either ipv4 or ipv6 iphdr Address of IP header sport TCP or UDP source port (ipv4 only) indev_name Name of network device packet was received on (if known) outdev_name Name of network device packet will be routed to (if known) nf_stolen Constant used to signify a 'stolen' verdict ipproto_tcp Constant used to signify that the packet protocol is TCP urg TCP URG flag (if protocol is TCP; ipv4 only) nf_queue Constant used to signify a 'queue' verdict rst TCP RST flag (if protocol is TCP; ipv4 only) syn TCP SYN flag (if protocol is TCP; ipv4 only) daddr A string representing the destination IP address fin TCP FIN flag (if protocol is TCP; ipv4 only) saddr A string representing the source IP address data_hex A hexadecimal string representing the packet buffer contents nf_accept Constant used to signify an 'accept' verdict nf_stop Constant used to signify a 'stop' verdict outdev Address of net_device representing output device, 0 if unknown ack TCP ACK flag (if protocol is TCP; ipv4 only) indev Address of net_device representing input device, 0 if unknown data_str A string representing the packet buffer contents nf_repeat Constant used to signify a 'repeat' verdict protocol Packet protocol from driver (ipv4 only) family IP address family nf_drop Constant used to signify a 'drop' verdict length The length of the packet buffer contents, in bytes ipproto_udp Constant used to signify that the packet protocol is UDP psh TCP PSH flag (if protocol is TCP; ipv4 only) LINUX SystemTap Tapset Reference April 2025 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 indev_name Name of network device packet was received on (if known) sport TCP or UDP source port (ipv4 only) pf Protocol family -- either ipv4 or ipv6 iphdr Address of IP header dport TCP or UDP destination port (ipv4 only) saddr A string representing the source IP address fin TCP FIN flag (if protocol is TCP; ipv4 only) syn TCP SYN flag (if protocol is TCP; ipv4 only) daddr A string representing the destination IP address rst TCP RST flag (if protocol is TCP; ipv4 only) nf_queue Constant used to signify a 'queue' verdict urg TCP URG flag (if protocol is TCP; ipv4 only) nf_stolen Constant used to signify a 'stolen' verdict ipproto_tcp Constant used to signify that the packet protocol is TCP outdev_name Name of network device packet will be routed to (if known) protocol Packet protocol from driver (ipv4 only) nf_repeat Constant used to signify a 'repeat' verdict data_str A string representing the packet buffer contents indev Address of net_device representing input device, 0 if unknown ack TCP ACK 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_stop Constant used to signify a 'stop' verdict data_hex A hexadecimal string representing the packet buffer contents psh TCP PSH flag (if protocol is TCP; ipv4 only) length The length of the packet buffer contents, in bytes ipproto_udp Constant used to signify that the packet protocol is UDP family IP address family nf_drop Constant used to signify a 'drop' verdict LINUX SystemTap Tapset Reference April 2025 probe::netfilter.ip.local_out 3stap probe::netfilter.ip.local_out Called on an outgoing IP packet Synopsis netfilter.ip.local_out Values syn TCP SYN flag (if protocol is TCP; ipv4 only) daddr A string representing the destination IP address fin TCP FIN flag (if protocol is TCP; ipv4 only) saddr A string representing the source IP address nf_stolen Constant used to signify a 'stolen' verdict ipproto_tcp Constant used to signify that the packet protocol is TCP outdev_name Name of network device packet will be routed to (if known) nf_queue Constant used to signify a 'queue' verdict rst TCP RST flag (if protocol is TCP; ipv4 only) urg TCP URG flag (if protocol is TCP; ipv4 only) indev_name Name of network device packet was received on (if known) dport TCP or UDP destination port (ipv4 only) iphdr Address of IP header pf Protocol family -- either ipv4 or ipv6 sport TCP or UDP source port (ipv4 only) length The length of the packet buffer contents, in bytes ipproto_udp Constant used to signify that the packet protocol is UDP psh TCP PSH flag (if protocol is TCP; ipv4 only) family IP address family nf_drop Constant used to signify a 'drop' verdict ack TCP ACK flag (if protocol is TCP; ipv4 only) protocol Packet protocol from driver (ipv4 only) indev Address of net_device representing input device, 0 if unknown data_str A string representing the packet buffer contents nf_repeat Constant used to signify a 'repeat' verdict nf_stop Constant used to signify a 'stop' verdict nf_accept Constant used to signify an 'accept' verdict data_hex A hexadecimal string representing the packet buffer contents outdev Address of net_device representing output device, 0 if unknown LINUX SystemTap Tapset Reference April 2025 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 saddr A string representing the source IP address fin TCP FIN flag (if protocol is TCP; ipv4 only) syn TCP SYN flag (if protocol is TCP; ipv4 only) daddr A string representing the destination IP address urg TCP URG flag (if protocol is TCP; ipv4 only) nf_queue Constant used to signify a 'queue' verdict rst TCP RST flag (if protocol is TCP; ipv4 only) outdev_name Name of network device packet will be routed to (if known) ipproto_tcp Constant used to signify that the packet protocol is TCP nf_stolen Constant used to signify a 'stolen' verdict indev_name Name of network device packet was received on (if known) sport TCP or UDP source port (ipv4 only) pf Protocol family -- either ipv4 or ipv6 iphdr Address of IP header dport TCP or UDP destination port (ipv4 only) psh TCP PSH flag (if protocol is TCP; ipv4 only) length The length of the packet buffer contents, in bytes ipproto_udp Constant used to signify that the packet protocol is UDP nf_drop Constant used to signify a 'drop' verdict family IP address family data_str A string representing the packet buffer contents nf_repeat Constant used to signify a 'repeat' verdict indev Address of net_device representing input device, 0 if unknown protocol Packet protocol from driver (ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) outdev Address of net_device representing output device, 0 if unknown data_hex A hexadecimal string representing the packet buffer contents nf_accept Constant used to signify an 'accept' verdict nf_stop Constant used to signify a 'stop' verdict LINUX SystemTap Tapset Reference April 2025 probe::netfilter.ip.pre_routing 3stap probe::netfilter.ip.pre_routing Called before an IP packet is routed Synopsis netfilter.ip.pre_routing Values indev_name Name of network device packet was received on (if known) sport TCP or UDP source port (ipv4 only) iphdr Address of IP header pf Protocol family - either 'ipv4' or 'ipv6' dport TCP or UDP destination port (ipv4 only) saddr A string representing the source IP address fin TCP FIN flag (if protocol is TCP; ipv4 only) daddr A string representing the destination IP address syn TCP SYN flag (if protocol is TCP; ipv4 only) urg TCP URG flag (if protocol is TCP; ipv4 only) nf_queue Constant used to signify a 'queue' verdict rst TCP RST flag (if protocol is TCP; ipv4 only) outdev_name Name of network device packet will be routed to (if known) nf_stolen Constant used to signify a 'stolen' verdict ipproto_tcp Constant used to signify that the packet protocol is TCP data_str A string representing the packet buffer contents nf_repeat Constant used to signify a 'repeat' verdict indev Address of net_device representing input device, 0 if unknown protocol Packet protocol from driver (ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) outdev Address of net_device representing output device, 0 if unknown data_hex A hexadecimal string representing the packet buffer contents nf_accept Constant used to signify an 'accept' verdict nf_stop Constant used to signify a 'stop' verdict psh TCP PSH flag (if protocol is TCP; ipv4 only) ipproto_udp Constant used to signify that the packet protocol is UDP length The length of the packet buffer contents, in bytes family IP address family nf_drop Constant used to signify a 'drop' verdict LINUX SystemTap Tapset Reference April 2025 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 progname the name of new RPC program servername the server machine name old_prog the number of old RPC program vers the version of new RPC program prog the number of new RPC program old_progname the name of old RPC program old_vers the version of old RPC program LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.clnt.call_async 3stap probe::sunrpc.clnt.call_async Make an asynchronous RPC call Synopsis sunrpc.clnt.call_async Values prog the RPC program number prot the IP protocol number port the port number vers the RPC program version number proc the procedure number in this RPC call dead whether this client is abandoned xid current transmission id servername the server machine name procname the procedure name in this RPC call flags flags progname the RPC program name LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.clnt.call_sync 3stap probe::sunrpc.clnt.call_sync Make a synchronous RPC call Synopsis sunrpc.clnt.call_sync Values flags flags procname the procedure name in this RPC call servername the server machine name xid current transmission id dead whether this client is abandoned progname the RPC program name prog the RPC program number proc the procedure number in this RPC call prot the IP protocol number port the port number vers the RPC program version number LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.clnt.clone_client 3stap probe::sunrpc.clnt.clone_client Clone an RPC client structure Synopsis sunrpc.clnt.clone_client Values prog the RPC program number servername the server machine name authflavor the authentication flavor progname the RPC program name prot the IP protocol number port the port number vers the RPC program version number LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.clnt.create_client 3stap probe::sunrpc.clnt.create_client Create an RPC client Synopsis sunrpc.clnt.create_client Values authflavor the authentication flavor servername the server machine name prog the RPC program number progname the RPC program name prot the IP protocol number vers the RPC program version number port the port number LINUX SystemTap Tapset Reference April 2025 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_priority the task priority prog the RPC program number tk_flags the task flags tk_runstate the task run status tk_pid the debugging aid of task LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.clnt.shutdown_client 3stap probe::sunrpc.clnt.shutdown_client Shutdown an RPC client Synopsis sunrpc.clnt.shutdown_client Values progname the RPC program name om_ops the count of operations clones the number of clones om_bytes_recv the count of bytes in om_rtt the RPC RTT jiffies servername the server machine name tasks the number of references authflavor the authentication flavor port the port number prot the IP protocol number vers the RPC program version number rpccnt the count of RPC calls om_bytes_sent the count of bytes out om_queue the jiffies queued for xmit netreconn the count of reconnections om_execute the RPC execution jiffies prog the RPC program number om_ntrans the count of RPC transmissions LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.sched.delay 3stap probe::sunrpc.sched.delay Delay an RPC task Synopsis sunrpc.sched.delay Values xid the transmission id in the RPC call prot the IP protocol in the RPC call vers the program version in the RPC call tk_pid the debugging id of the task delay the time delayed tk_flags the flags of the task prog the program number in the RPC call LINUX SystemTap Tapset Reference April 2025 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 tk_pid the debugging id of the task prog the program number in the RPC call tk_flags the flags of the task xid the transmission id in the RPC call LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.sched.new_task 3stap probe::sunrpc.sched.new_task Create new task for the specified client Synopsis sunrpc.sched.new_task Values xid the transmission id in the RPC call vers the program version in the RPC call prot the IP protocol in the RPC call prog the program number in the RPC call tk_flags the flags of the task LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.sched.release_task 3stap probe::sunrpc.sched.release_task Release all resources associated with a task Synopsis sunrpc.sched.release_task Values vers the program version in the RPC call prot the IP protocol in the RPC call prog the program number in the RPC call tk_flags the flags of the task xid the transmission id in the RPC call 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 April 2025 probe::sunrpc.svc.create 3stap probe::sunrpc.svc.create Create an RPC service Synopsis sunrpc.svc.create Values prog the number of the program progname the name of the program pg_nvers the number of supported versions bufsize the buffer size LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.svc.destroy 3stap probe::sunrpc.svc.destroy Destroy an RPC service Synopsis sunrpc.svc.destroy Values netcnt the count of received RPC requests sv_prog the number of the program nettcpconn the count of accepted TCP connections rpccnt the count of valid RPC requests sv_progname the name of the program sv_nrthreads the number of concurrent threads rpcbadauth the count of requests drooped for authentication failure sv_name the service name rpcbadfmt the count of requests dropped for bad formats LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.svc.drop 3stap probe::sunrpc.svc.drop Drop RPC request Synopsis sunrpc.svc.drop Values rq_vers the program version in the request rq_prog the program number in the request peer_ip the peer address where the request is from rq_xid the transmission id in the request rq_prot the IP protocol of the reqeust rq_proc the procedure number in the request sv_name the service name LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.svc.process 3stap probe::sunrpc.svc.process Process an RPC request Synopsis sunrpc.svc.process Values sv_nrthreads the number of concurrent threads rq_proc the procedure number in the request sv_name the service name rq_vers the program version in the request rq_prog the program number in the request rq_xid the transmission id in the request rq_prot the IP protocol of the reqeust peer_ip the peer address where the request is from sv_prog the number of the program LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.svc.recv 3stap probe::sunrpc.svc.recv Listen for the next RPC request on any socket Synopsis sunrpc.svc.recv Values sv_nrthreads the number of concurrent threads sv_name the service name timeout the timeout of waiting for data sv_prog the number of the program LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.svc.register 3stap probe::sunrpc.svc.register Register an RPC service with the local portmapper Synopsis sunrpc.svc.register Values progname the name of the program sv_name the service name prog the number of the program prot the IP protocol number port the port number Description If proto and port are both 0, then unregister a service. LINUX SystemTap Tapset Reference April 2025 probe::sunrpc.svc.send 3stap probe::sunrpc.svc.send Return reply to RPC client Synopsis sunrpc.svc.send Values rq_prog the program number in the request rq_vers the program version in the request rq_xid the transmission id in the request rq_prot the IP protocol of the reqeust peer_ip the peer address where the request is from rq_proc the procedure number in the request sv_name the service name LINUX SystemTap Tapset Reference April 2025 probe::tcp.disconnect 3stap probe::tcp.disconnect TCP socket disconnection Synopsis tcp.disconnect Values daddr A string representing the destination IP address sock Network socket family IP address family saddr A string representing the source IP address name Name of this probe sport TCP source port flags TCP flags (e.g. FIN, etc) dport TCP destination port Context The process which disconnects tcp LINUX SystemTap Tapset Reference April 2025 probe::tcp.disconnect.return 3stap probe::tcp.disconnect.return TCP socket disconnection complete Synopsis tcp.disconnect.return Values name Name of this probe ret Error code (0: no error) Context The process which disconnects tcp LINUX SystemTap Tapset Reference April 2025 probe::tcp.receive 3stap probe::tcp.receive Called when a TCP packet is received Synopsis tcp.receive Values saddr A string representing the source IP address protocol Packet protocol from driver family IP address family iphdr IP header address psh TCP PSH flag ack TCP ACK flag dport TCP destination port fin TCP FIN flag name Name of the probe point urg TCP URG flag daddr A string representing the destination IP address rst TCP RST flag sport TCP source port syn TCP SYN flag LINUX SystemTap Tapset Reference April 2025 probe::tcp.recvmsg 3stap probe::tcp.recvmsg Receiving TCP message Synopsis tcp.recvmsg Values daddr A string representing the destination IP address sock Network socket family IP address family size Number of bytes to be received saddr A string representing the source IP address name Name of this probe sport TCP source port dport TCP destination port Context The process which receives a tcp message LINUX SystemTap Tapset Reference April 2025 probe::tcp.recvmsg.return 3stap probe::tcp.recvmsg.return Receiving TCP message complete Synopsis tcp.recvmsg.return Values sport TCP source port dport TCP destination port size Number of bytes received or error code if an error occurred. family IP address family daddr A string representing the destination IP address name Name of this probe saddr A string representing the source IP address Context The process which receives a tcp message LINUX SystemTap Tapset Reference April 2025 probe::tcp.sendmsg 3stap probe::tcp.sendmsg Sending a tcp message Synopsis tcp.sendmsg Values name Name of this probe sock Network socket size Number of bytes to send family IP address family Context The process which sends a tcp message LINUX SystemTap Tapset Reference April 2025 probe::tcp.sendmsg.return 3stap probe::tcp.sendmsg.return Sending TCP message is done Synopsis tcp.sendmsg.return Values size Number of bytes sent or error code if an error occurred. name Name of this probe Context The process which sends a tcp message LINUX SystemTap Tapset Reference April 2025 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 sock Network socket family IP address family optstr Resolves optname to a human-readable format optlen Used to access values for setsockopt optname TCP socket options (e.g. TCP_NODELAY, TCP_MAXSEG, etc) name Name of this probe Context The process which calls setsockopt LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 flags Flags (e.g. FIN, etc) daddr A string representing the destination IP address family IP address family saddr A string representing the source IP address name The name of this probe sock Network socket used by the process Context The process which requests a UDP disconnection LINUX SystemTap Tapset Reference April 2025 probe::udp.disconnect.return 3stap probe::udp.disconnect.return UDP has been disconnected successfully Synopsis udp.disconnect.return Values dport UDP destination port sport UDP source port ret Error code (0: no error) name The name of this probe family IP address family saddr A string representing the source IP address daddr A string representing the destination IP address Context The process which requested a UDP disconnection LINUX SystemTap Tapset Reference April 2025 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 daddr A string representing the destination IP address size Number of bytes received by the process name The name of this probe saddr A string representing the source IP address family IP address family sock Network socket used by the process Context The process which received a UDP message LINUX SystemTap Tapset Reference April 2025 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 sport UDP source port dport UDP destination port daddr A string representing the destination IP address size Number of bytes received by the process name The name of this probe saddr A string representing the source IP address family IP address family Context The process which received a UDP message LINUX SystemTap Tapset Reference April 2025 probe::udp.sendmsg 3stap probe::udp.sendmsg Fires whenever a process sends a UDP message Synopsis udp.sendmsg Values sock Network socket used by the process saddr A string representing the source IP address family IP address family name The name of this probe daddr A string representing the destination IP address size Number of bytes sent by the process dport UDP destination port sport UDP source port Context The process which sent a UDP message LINUX SystemTap Tapset Reference April 2025 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 April 2025 function::inet_get_dest_port 3stap function::inet_get_dest_port Provide remote port number for a kernel socket Synopsis inet_get_dest_port:long(sock:long) Arguments sock pointer to the kernel socket LINUX SystemTap Tapset Reference April 2025 function::inet_get_ip_dest 3stap function::inet_get_ip_dest Provide IP destination address string for a kernel socket Synopsis inet_get_ip_dest:string(sock:long) Arguments sock pointer to the kernel socket LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 probe::socket.aio_read 3stap probe::socket.aio_read Receiving message via sock_aio_read Synopsis socket.aio_read Values family Protocol family value size Message size in bytes protocol Protocol value name Name of this probe type Socket type value state Socket state value flags Socket flags 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 April 2025 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 flags Socket flags value state Socket state value type Socket type value protocol Protocol value size Size of message received (in bytes) or error code if success = 0 name Name of this probe success Was receive successful? (1 = yes, 0 = no) family Protocol family 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 April 2025 probe::socket.aio_write 3stap probe::socket.aio_write Message send via sock_aio_write Synopsis socket.aio_write Values family Protocol family value state Socket state value type Socket type value protocol Protocol value size Message size in bytes name Name of this probe flags Socket flags 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 April 2025 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 state Socket state value type Socket type value name Name of this probe protocol Protocol value size Size of message received (in bytes) or error code if success = 0 success Was receive successful? (1 = yes, 0 = no) family Protocol family value flags Socket flags value 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 April 2025 probe::socket.close 3stap probe::socket.close Close a socket Synopsis socket.close Values flags Socket flags value family Protocol family value state Socket state value type Socket type value name Name of this probe protocol Protocol value Context The requester (user process or kernel) Description Fires at the beginning of closing a socket. LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::socket.create 3stap probe::socket.create Creation of a socket Synopsis socket.create Values name Name of this probe requester Requested by user process or the kernel (1 = kernel, 0 = user) protocol Protocol value type Socket type value family Protocol family value Context The requester (see requester variable) Description Fires at the beginning of creating a socket. LINUX SystemTap Tapset Reference April 2025 probe::socket.create.return 3stap probe::socket.create.return Return from Creation of a socket Synopsis socket.create.return Values err Error code if success == 0 name Name of this probe requester Requested by user process or the kernel (1 = kernel, 0 = user) protocol Protocol value type Socket type value success Was socket creation successful? (1 = yes, 0 = no) family Protocol family value Context The requester (user process or kernel) Description Fires at the conclusion of creating a socket. LINUX SystemTap Tapset Reference April 2025 probe::socket.read_iter 3stap probe::socket.read_iter Receiving message via sock_read_iter Synopsis socket.read_iter Values state Socket state value type Socket type value protocol Protocol value size Message size in bytes name Name of this probe family Protocol family value flags Socket flags 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 April 2025 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 flags Socket flags value state Socket state value type Socket type value protocol Protocol value size Size of message received (in bytes) or error code if success = 0 name Name of this probe family Protocol family value success Was receive successful? (1 = yes, 0 = no) 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 April 2025 probe::socket.readv 3stap probe::socket.readv Receiving a message via sock_readv Synopsis socket.readv Values flags Socket flags value type Socket type value state Socket state value protocol Protocol value size Message size in bytes name Name of this probe family Protocol family 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 April 2025 probe::socket.readv.return 3stap probe::socket.readv.return Conclusion of receiving a message via sock_readv Synopsis socket.readv.return Values family Protocol family value success Was receive successful? (1 = yes, 0 = no) name Name of this probe protocol Protocol value size Size of message received (in bytes) or error code if success = 0 state Socket state value type Socket type value flags Socket flags value 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 April 2025 probe::socket.receive 3stap probe::socket.receive Message received on a socket. Synopsis socket.receive Values flags Socket flags value protocol Protocol value name Name of this probe size Size of message received (in bytes) or error code if success = 0 state Socket state value type Socket type value family Protocol family value success Was send successful? (1 = yes, 0 = no) Context The message receiver LINUX SystemTap Tapset Reference April 2025 probe::socket.recvmsg 3stap probe::socket.recvmsg Message being received on socket Synopsis socket.recvmsg Values flags Socket flags value state Socket state value type Socket type value name Name of this probe protocol Protocol value size Message size in bytes family Protocol family 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 April 2025 probe::socket.recvmsg.return 3stap probe::socket.recvmsg.return Return from Message being received on socket Synopsis socket.recvmsg.return Values protocol Protocol value name Name of this probe size Size of message received (in bytes) or error code if success = 0 type Socket type value state Socket state value success Was receive successful? (1 = yes, 0 = no) family Protocol family value flags Socket flags 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 April 2025 probe::socket.send 3stap probe::socket.send Message sent on a socket. Synopsis socket.send Values size Size of message sent (in bytes) or error code if success = 0 protocol Protocol value name Name of this probe type Socket type value state Socket state value family Protocol family value success Was send successful? (1 = yes, 0 = no) flags Socket flags value Context The message sender LINUX SystemTap Tapset Reference April 2025 probe::socket.sendmsg 3stap probe::socket.sendmsg Message is currently being sent on a socket. Synopsis socket.sendmsg Values family Protocol family value state Socket state value type Socket type value name Name of this probe protocol Protocol value size Message size in bytes flags Socket flags 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 April 2025 probe::socket.sendmsg.return 3stap probe::socket.sendmsg.return Return from socket.sendmsg. Synopsis socket.sendmsg.return Values state Socket state value type Socket type value name Name of this probe protocol Protocol value size Size of message sent (in bytes) or error code if success = 0 family Protocol family value success Was send successful? (1 = yes, 0 = no) 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 April 2025 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 protocol Protocol value size Message size in bytes state Socket state value type Socket type value flags Socket flags 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 April 2025 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 flags Socket flags value state Socket state value type Socket type value name Name of this probe protocol Protocol value size Size of message received (in bytes) or error code if success = 0 family Protocol family value success Was receive successful? (1 = yes, 0 = no) 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 April 2025 probe::socket.writev 3stap probe::socket.writev Message sent via socket_writev Synopsis socket.writev Values flags Socket flags value protocol Protocol value name Name of this probe size Message size in bytes state Socket state value type Socket type value 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 April 2025 probe::socket.writev.return 3stap probe::socket.writev.return Conclusion of message sent via socket_writev Synopsis socket.writev.return Values state Socket state value type Socket type value size Size of message sent (in bytes) or error code if success = 0 protocol Protocol value name Name of this probe family Protocol family value success Was send successful? (1 = yes, 0 = no) flags Socket flags value 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 probe::ipmib.ForwDatagrams 3stap probe::ipmib.ForwDatagrams Count forwarded packet Synopsis ipmib.ForwDatagrams 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 ForwDatagrams (equivalent to SNMP's MIB IPSTATS_MIB_OUTFORWDATAGRAMS) LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 probe::ipmib.InAddrErrors 3stap probe::ipmib.InAddrErrors Count arriving packets with an incorrect address Synopsis ipmib.InAddrErrors 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 InAddrErrors (equivalent to SNMP's MIB IPSTATS_MIB_INADDRERRORS) LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::ipmib.InNoRoutes 3stap probe::ipmib.InNoRoutes Count an arriving packet with no matching socket Synopsis ipmib.InNoRoutes 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 InNoRoutes (equivalent to SNMP's MIB IPSTATS_MIB_INNOROUTES) LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 probe::linuxmib.DelayedACKs 3stap probe::linuxmib.DelayedACKs Count of delayed acks Synopsis linuxmib.DelayedACKs 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 DelayedACKs (equivalent to SNMP's MIB LINUX_MIB_DELAYEDACKS) LINUX SystemTap Tapset Reference April 2025 probe::linuxmib.ListenDrops 3stap probe::linuxmib.ListenDrops Count of times conn request that were dropped Synopsis linuxmib.ListenDrops 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 ListenDrops (equivalent to SNMP's MIB LINUX_MIB_LISTENDROPS) LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 probe::tcpmib.ActiveOpens 3stap probe::tcpmib.ActiveOpens Count an active opening of a socket Synopsis tcpmib.ActiveOpens 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 ActiveOpens (equivalent to SNMP's MIB TCP_MIB_ACTIVEOPENS) LINUX SystemTap Tapset Reference April 2025 probe::tcpmib.AttemptFails 3stap probe::tcpmib.AttemptFails Count a failed attempt to open a socket Synopsis tcpmib.AttemptFails 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 AttemptFails (equivalent to SNMP's MIB TCP_MIB_ATTEMPTFAILS) LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::tcpmib.EstabResets 3stap probe::tcpmib.EstabResets Count the reset of a socket Synopsis tcpmib.EstabResets 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 EstabResets (equivalent to SNMP's MIB TCP_MIB_ESTABRESETS) LINUX SystemTap Tapset Reference April 2025 probe::tcpmib.InSegs 3stap probe::tcpmib.InSegs Count an incoming tcp segment Synopsis tcpmib.InSegs 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 (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 April 2025 probe::tcpmib.OutRsts 3stap probe::tcpmib.OutRsts Count the sending of a reset packet Synopsis tcpmib.OutRsts 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 OutRsts (equivalent to SNMP's MIB TCP_MIB_OUTRSTS) LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 probe::kprocess.create 3stap probe::kprocess.create Fires whenever a new process or thread is successfully created Synopsis kprocess.create Values new_pid The PID of the newly created process new_tid The TID of the newly created task 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 April 2025 probe::kprocess.exec 3stap probe::kprocess.exec Attempt to exec to a new program Synopsis kprocess.exec Values name Name of the system call (execve) (SystemTap v2.5+) 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+) filename The path to the new executable 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 April 2025 probe::kprocess.exec_complete 3stap probe::kprocess.exec_complete Return from exec to a new program Synopsis kprocess.exec_complete Values 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 retstr A string representation of errno (SystemTap v2.5+) 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 April 2025 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 April 2025 probe::kprocess.release 3stap probe::kprocess.release Process released Synopsis kprocess.release Values released_tid TID of the task being released task A task handle to the process being released released_pid PID of the process being released pid Same as released_pid for compatibility (deprecated) 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 probe::signal.check_ignored 3stap probe::signal.check_ignored Checking to see signal is ignored Synopsis signal.check_ignored Values pid_name Name of the process receiving the signal sig The number of the signal sig_name A string representation of the signal sig_pid The PID of the process receiving the signal LINUX SystemTap Tapset Reference April 2025 probe::signal.check_ignored.return 3stap probe::signal.check_ignored.return Check to see signal is ignored completed Synopsis signal.check_ignored.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference April 2025 probe::signal.checkperm 3stap probe::signal.checkperm Check being performed on a sent signal Synopsis signal.checkperm Values si_code Indicates the signal type sig_pid The PID of the process receiving the signal name Name of the probe point sig The number of the signal sig_name A string representation of the signal pid_name Name of the process receiving the signal sinfo The address of the siginfo structure task A task handle to the signal recipient LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::signal.do_action 3stap probe::signal.do_action Examining or changing a signal action Synopsis signal.do_action Values oldsigact_addr The address of the old sigaction struct associated with the signal sig_name A string representation of the signal name Name of the probe point sig The signal to be examined/changed sa_mask The new mask of the signal sigact_addr The address of the new sigaction struct associated with the signal sa_handler The new handler of the signal LINUX SystemTap Tapset Reference April 2025 probe::signal.do_action.return 3stap probe::signal.do_action.return Examining or changing a signal action completed Synopsis signal.do_action.return Values retstr Return value as a string name Name of the probe point LINUX SystemTap Tapset Reference April 2025 probe::signal.flush 3stap probe::signal.flush Flushing all pending signals for a task Synopsis signal.flush Values name Name of the probe point sig_pid The PID of the process associated with the task performing the flush pid_name The name of the process associated with the task performing the flush task The task handler of the process performing the flush LINUX SystemTap Tapset Reference April 2025 probe::signal.force_segv 3stap probe::signal.force_segv Forcing send of SIGSEGV Synopsis signal.force_segv Values 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 name Name of the probe point sig The number of the signal LINUX SystemTap Tapset Reference April 2025 probe::signal.force_segv.return 3stap probe::signal.force_segv.return Forcing send of SIGSEGV complete Synopsis signal.force_segv.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference April 2025 probe::signal.handle 3stap probe::signal.handle Signal handler being invoked Synopsis signal.handle Values sig_mode Indicates whether the signal was a user-mode or kernel-mode signal sinfo The address of the siginfo table regs The address of the kernel-mode stack area (deprecated in SystemTap 2.1) oldset_addr The address of the bitmask array of blocked signals (deprecated in SystemTap 2.1) ka_addr The address of the k_sigaction table associated with the signal sig_name A string representation of the signal sig The signal number that invoked the signal handler name Name of the probe point sig_code The si_code value of the siginfo signal LINUX SystemTap Tapset Reference April 2025 probe::signal.handle.return 3stap probe::signal.handle.return Signal handler invocation completed Synopsis signal.handle.return Values retstr Return value as a string name Name of the probe point Description (deprecated in SystemTap 2.1) LINUX SystemTap Tapset Reference April 2025 probe::signal.pending 3stap probe::signal.pending Examining pending signal Synopsis signal.pending Values name Name of the probe point sigset_add The address of the user-space signal set (sigset_t) 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 April 2025 probe::signal.pending.return 3stap probe::signal.pending.return Examination of pending signal completed Synopsis signal.pending.return Values retstr Return value as a string name Name of the probe point LINUX SystemTap Tapset Reference April 2025 probe::signal.procmask 3stap probe::signal.procmask Examining or changing blocked signals Synopsis signal.procmask Values name Name of the probe point sigset The actual value to be set for sigset_t (correct?) sigset_addr The address of the signal set (sigset_t) to be implemented 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. oldsigset_addr The old address of the signal set (sigset_t) LINUX SystemTap Tapset Reference April 2025 probe::signal.procmask.return 3stap probe::signal.procmask.return Examining or changing blocked signals completed Synopsis signal.procmask.return Values retstr Return value as a string name Name of the probe point LINUX SystemTap Tapset Reference April 2025 probe::signal.send 3stap probe::signal.send Signal being sent to a process Synopsis signal.send Values task A task handle to the signal recipient shared Indicates whether the signal is shared by the thread group pid_name The name of the signal recipient sinfo The address of siginfo struct sig_pid The PID of the process receiving the signal name The name of the function used to send out the signal sig The number of the signal send2queue Indicates whether the signal is sent to an existing sigqueue (deprecated in SystemTap 2.1) sig_name A string representation of the signal si_code Indicates the signal type Context The signal's sender. LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::signal.send_sig_queue 3stap probe::signal.send_sig_queue Queuing a signal to a process Synopsis signal.send_sig_queue Values sig_pid The PID of the process to which the signal is queued sig The queued signal sig_name A string representation of the signal name Name of the probe point sigqueue_addr The address of the signal queue pid_name Name of the process to which the signal is queued LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::signal.sys_tgkill 3stap probe::signal.sys_tgkill Sending kill signal to a thread group Synopsis signal.sys_tgkill Values sig_pid The PID of the thread receiving the kill signal sig_name A string representation of the signal name Name of the probe point sig The specific kill signal sent to the process task A task handle to the signal recipient tgid The thread group ID of the thread receiving the kill signal pid_name The name of 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 April 2025 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 April 2025 probe::signal.sys_tkill 3stap probe::signal.sys_tkill Sending a kill signal to a thread Synopsis signal.sys_tkill Values pid_name The name of the signal recipient task A task handle to the signal recipient sig_pid The PID of the process receiving the kill signal name Name of the probe point sig_name A string representation of the signal sig The specific signal sent to the process 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 April 2025 probe::signal.syskill 3stap probe::signal.syskill Sending kill signal to a process Synopsis signal.syskill Values sig_pid The PID of the process receiving the signal sig_name A string representation of the signal name Name of the probe point sig The specific signal sent to the process task A task handle to the signal recipient pid_name The name of the signal recipient LINUX SystemTap Tapset Reference April 2025 probe::signal.syskill.return 3stap probe::signal.syskill.return Sending kill signal completed Synopsis signal.syskill.return Values None LINUX SystemTap Tapset Reference April 2025 probe::signal.systkill.return 3stap probe::signal.systkill.return Sending kill signal to a thread completed Synopsis signal.systkill.return Values name Name of the probe point retstr The return value to either __group_send_sig_info, LINUX SystemTap Tapset Reference April 2025 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 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 resume Indicates whether to wake up a task in a STOPPED or TRACED state Errno Tapset This set of functions is used to handle errno number values. It contains the following functions: LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 function::kernel_or_user_string_quoted 3stap function::kernel_or_user_string_quoted Retrieves and quotes string from kernel or user memory Synopsis kernel_or_user_string_quoted:string(addr:long) Arguments addr the kernel or user memory address to retrieve the string from Description Similar to kernel_string_quoted except user memory is a fallback method LINUX SystemTap Tapset Reference April 2025 function::kernel_or_user_string_quoted_utf16 3stap function::kernel_or_user_string_quoted_utf16 Retrieves and quotes UTF-16 string from kernel or user memory Synopsis kernel_or_user_string_quoted_utf16:string(addr:long) Arguments addr the kernel or user memory address to retrieve the string from Description Similar to kernel_string_quoted_utf16 except uses user memory as a fallback method LINUX SystemTap Tapset Reference April 2025 function::kernel_or_user_string_quoted_utf32 3stap function::kernel_or_user_string_quoted_utf32 Retrieves and quotes UTF-32 string from kernel or user memory Synopsis kernel_or_user_string_quoted_utf32:string(addr:long) Arguments addr the kernel or user memory address to retrieve the string from Description Similar to kernel_string_quoted_utf32 except user memory is a fallback method LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 probe::stap.system.spawn 3stap probe::stap.system.spawn stap spawned new process Synopsis stap.system.spawn Values ret the return value from posix_spawn pid the pid of the spawned process Description Fires just after the call to posix_spawn. LINUX SystemTap Tapset Reference April 2025 probe::stapio.receive_control_message 3stap probe::stapio.receive_control_message Received a control message Synopsis stapio.receive_control_message Values len the length (in bytes) of the data blob 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 Description Fires just after a message was receieved and before it's processed. LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 probe::staprun.send_control_message 3stap probe::staprun.send_control_message Sending a control message Synopsis staprun.send_control_message Values data a ptr to a binary blob of data sent as the control message len the length (in bytes) of the data blob type type of message being send; defined in runtime/transport/transport_msgs.h 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 April 2025 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 April 2025 probe:: 3stap probe:: Synopsis Values None LINUX SystemTap Tapset Reference April 2025 probe::nfs.aop.readahead 3stap probe::nfs.aop.readahead NFS client reading multiple pages Synopsis nfs.aop.readahead Values size number of pages attempted to read in this execution nr_pages number of pages attempted to read in this execution rsize read size (in bytes) dev device identifier ino inode number rpages read size (in pages) file filp argument Description Fires when in readahead way, read several pages once LINUX SystemTap Tapset Reference April 2025 probe::nfs.aop.readpage 3stap probe::nfs.aop.readpage NFS client synchronously reading a page Synopsis nfs.aop.readpage Values sb_flag super block flags page_index offset within mapping, can used a page identifier and position identifier in the page frame i_flag file flags i_size file length in bytes file file argument __page the address of page size number of pages to be read in this execution rsize read size (in bytes) ino inode number dev device identifier Description Read the page over, only fires when a previous async read operation failed LINUX SystemTap Tapset Reference April 2025 probe::nfs.aop.readpages 3stap probe::nfs.aop.readpages NFS client reading multiple pages Synopsis nfs.aop.readpages Values file filp argument rpages read size (in pages) ino inode number dev device identifier rsize read size (in bytes) size number of pages attempted to read in this execution nr_pages number of pages attempted to read in this execution Description Fires when in readahead way, read several pages once LINUX SystemTap Tapset Reference April 2025 probe::nfs.aop.release_page 3stap probe::nfs.aop.release_page NFS client releasing page Synopsis nfs.aop.release_page Values page_index offset within mapping, can used a page identifier and position identifier in the page frame size release pages __page the address of page ino inode number dev device identifier Description Fires when do a release operation on NFS. LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::nfs.aop.write_begin 3stap probe::nfs.aop.write_begin NFS client begin to write data Synopsis nfs.aop.write_begin Values size write bytes 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 ino inode number dev device identifier __page the address of page 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 April 2025 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 the address of page size write bytes offset start address of this write operation to end address of this write operation page_index offset within mapping, can used a page identifier and position identifier in the page frame sb_flag super block flags 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 April 2025 probe::nfs.aop.writepage 3stap probe::nfs.aop.writepage NFS client writing a mapped page to the NFS server Synopsis nfs.aop.writepage Values for_reclaim a flag of writeback_control, indicates if it's invoked from the page allocator page_index offset within mapping, can used a page identifier and position identifier in the page frame wsize write size sb_flag super block flags size number of pages to be written in this execution for_kupdate a flag of writeback_control, indicates if it's a kupdate writeback i_size file length in bytes i_flag file flags __page the address of page i_state inode state flags dev device identifier ino inode number Description The priority of wb is decided by the flags for_reclaim and for_kupdate. LINUX SystemTap Tapset Reference April 2025 probe::nfs.aop.writepages 3stap probe::nfs.aop.writepages NFS client writing several dirty pages to the NFS server Synopsis nfs.aop.writepages Values dev device identifier ino inode number for_kupdate a flag of writeback_control, indicates if it's a kupdate writeback nr_to_write number of pages attempted to be written in this execution wpages write size (in pages) size number of pages attempted to be written in this execution wsize write size 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 April 2025 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 pos current position of file file_name file name dev device identifier parent_name parent dir name count read bytes ino inode number 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 buf the address of buf in user space LINUX SystemTap Tapset Reference April 2025 probe::nfs.fop.aio_write 3stap probe::nfs.fop.aio_write NFS client aio_write file operation Synopsis nfs.fop.aio_write Values file_name file name parent_name parent dir name count read bytes ino inode number dev device identifier pos offset of the file buf the address of buf in user space LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::nfs.fop.flush 3stap probe::nfs.fop.flush NFS client flush file operation Synopsis nfs.fop.flush Values dev device identifier ino inode number ndirty number of dirty page mode file mode LINUX SystemTap Tapset Reference April 2025 probe::nfs.fop.fsync 3stap probe::nfs.fop.fsync NFS client fsync operation Synopsis nfs.fop.fsync Values ino inode number dev device identifier ndirty number of dirty pages LINUX SystemTap Tapset Reference April 2025 probe::nfs.fop.llseek 3stap probe::nfs.fop.llseek NFS client llseek operation Synopsis nfs.fop.llseek Values whence the position to seek from offset the offset of the file will be repositioned whence_str symbolic string representation of the position to seek from ino inode number dev device identifier LINUX SystemTap Tapset Reference April 2025 probe::nfs.fop.lock 3stap probe::nfs.fop.lock NFS client file lock operation Synopsis nfs.fop.lock Values fl_flag lock flags fl_start starting offset of locked region fl_type lock type dev device identifier fl_end ending offset of locked region ino inode number cmd cmd arguments i_mode file type and access rights LINUX SystemTap Tapset Reference April 2025 probe::nfs.fop.mmap 3stap probe::nfs.fop.mmap NFS client mmap operation Synopsis nfs.fop.mmap Values buf the address of buf in user space cache_valid cache related bit mask flag 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. vm_end the first byte after end address within vm_mm parent_name parent dir name ino inode number vm_start start address within vm_mm dev device identifier vm_flag vm flags file_name file name cache_time when we started read-caching this inode LINUX SystemTap Tapset Reference April 2025 probe::nfs.fop.open 3stap probe::nfs.fop.open NFS client file open operation Synopsis nfs.fop.open Values dev device identifier ino inode number file_name file name flag file flag i_size file length in bytes LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::nfs.fop.read_iter 3stap probe::nfs.fop.read_iter NFS client read_iter file operation Synopsis nfs.fop.read_iter Values pos current position of file cache_time when we started read-caching this inode ino inode number parent_name parent dir name count read bytes dev device identifier 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. cache_valid cache related bit mask flag LINUX SystemTap Tapset Reference April 2025 probe::nfs.fop.release 3stap probe::nfs.fop.release NFS client release page operation Synopsis nfs.fop.release Values dev device identifier ino inode number mode file mode LINUX SystemTap Tapset Reference April 2025 probe::nfs.fop.sendfile 3stap probe::nfs.fop.sendfile NFS client send file operation Synopsis nfs.fop.sendfile Values cache_valid cache related bit mask flag 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. dev device identifier ino inode number count read bytes cache_time when we started read-caching this inode LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::nfs.fop.write_iter 3stap probe::nfs.fop.write_iter NFS client write_iter file operation Synopsis nfs.fop.write_iter Values pos offset of the file file_name file name parent_name parent dir name ino inode number count read bytes dev device identifier LINUX SystemTap Tapset Reference April 2025 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 version NFS version bitmask1 V4 bitmask representing the set of attributes supported on this filesystem prot transfer protocol offset the file offset size read bytes in this execution server_ip IP address of server 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 April 2025 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 status result of last operation server_ip IP address of server valid fattr->valid, indicates which fields are valid version NFS version prot transfer protocol count number of bytes committed timestamp V4 timestamp, which is used for lease renewal 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 April 2025 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 server_ip IP address of server size bytes in this commit offset the file offset count bytes in this commit bitmask1 V4 bitmask representing the set of attributes supported on this filesystem prot transfer protocol version NFS version bitmask0 V4 bitmask representing the set of attributes supported on this filesystem 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 April 2025 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 version NFS version (the function is used for all NFS version) server_ip IP address of server filename file name flag indicates create mode (only for NFSv3 and NFSv4) fh file handle of parent dir LINUX SystemTap Tapset Reference April 2025 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 April 2025 probe::nfs.proc.lookup 3stap probe::nfs.proc.lookup NFS client opens/searches a file on server Synopsis nfs.proc.lookup Values server_ip IP address of server filename the name of file which client opens/searches on server bitmask1 V4 bitmask representing the set of attributes supported on this filesystem prot transfer protocol bitmask0 V4 bitmask representing the set of attributes supported on this filesystem name_len the length of file name version NFS version LINUX SystemTap Tapset Reference April 2025 probe::nfs.proc.open 3stap probe::nfs.proc.open NFS client allocates file read/write context information Synopsis nfs.proc.open Values server_ip IP address of server filename file name flag file flag prot transfer protocol mode file mode version NFS version (the function is used for all NFS version) Description Allocate file read/write context information LINUX SystemTap Tapset Reference April 2025 probe::nfs.proc.read 3stap probe::nfs.proc.read NFS client synchronously reads file from server Synopsis nfs.proc.read Values offset the file offset prot transfer protocol count read bytes in this execution version NFS version server_ip IP address of server flags used to set task->tk_flags in rpc_init_task function 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 April 2025 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 prot transfer protocol count number of bytes read version NFS version timestamp V4 timestamp, which is used for lease renewal status result of last operation 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 April 2025 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 server_ip IP address of server size read bytes in this execution offset the file offset count read bytes in this execution prot transfer protocol version NFS version 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 April 2025 probe::nfs.proc.release 3stap probe::nfs.proc.release NFS client releases file read/write context information Synopsis nfs.proc.release Values filename file name flag file flag server_ip IP address of server mode file mode version NFS version (the function is used for all NFS version) prot transfer protocol Description Release file read/write context information LINUX SystemTap Tapset Reference April 2025 probe::nfs.proc.remove 3stap probe::nfs.proc.remove NFS client removes a file on server Synopsis nfs.proc.remove Values prot transfer protocol version NFS version (the function is used for all NFS version) filelen length of file name fh file handle of parent dir server_ip IP address of server filename file name LINUX SystemTap Tapset Reference April 2025 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_name old file name prot transfer protocol new_name new file name old_fh file handle of old parent dir version NFS version (the function is used for all NFS version) old_filelen length of old file name server_ip IP address of server new_filelen length of new file name LINUX SystemTap Tapset Reference April 2025 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 version NFS version old_fh file handle of old parent dir prot transfer protocol timestamp V4 timestamp, which is used for lease renewal new_fh file handle of new parent dir 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 April 2025 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 April 2025 probe::nfs.proc.write 3stap probe::nfs.proc.write NFS client synchronously writes file to server Synopsis nfs.proc.write Values size read bytes in this execution offset the file offset bitmask1 V4 bitmask representing the set of attributes supported on this filesystem prot transfer protocol bitmask0 V4 bitmask representing the set of attributes supported on this filesystem version NFS version server_ip IP address of server flags used to set task->tk_flags in rpc_init_task function 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 April 2025 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 timestamp V4 timestamp, which is used for lease renewal prot transfer protocol count number of bytes written valid fattr->valid, indicates which fields are valid version NFS version server_ip IP address of server status result of last operation 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 April 2025 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 size bytes written in this execution offset the file offset bitmask1 V4 bitmask representing the set of attributes supported on this filesystem prot transfer protocol count bytes written in this execution bitmask0 V4 bitmask representing the set of attributes supported on this filesystem version NFS version server_ip IP address of server 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) 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 April 2025 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 April 2025 probe::nfsd.commit 3stap probe::nfsd.commit NFS server committing all pending writes to stable storage Synopsis nfsd.commit Values client_ip the ip address of client count read bytes size read bytes flag indicates whether this execution is a sync operation fh file handle (the first part is the length of the file handle) offset the offset of file LINUX SystemTap Tapset Reference April 2025 probe::nfsd.create 3stap probe::nfsd.create NFS server creating a file(regular,dir,device,fifo) for client Synopsis nfsd.create Values type file type(regular,dir,device,fifo ...) iap_mode file access mode fh file handle (the first part is the length of the file handle) filename file name iap_valid Attribute flags client_ip the ip address of client filelen the length of file name Description Sometimes nfsd will call nfsd_create_v3 instead of this this probe point. LINUX SystemTap Tapset Reference April 2025 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 client_ip the ip address of client filelen the length of file name iap_mode file access mode verifier file attributes (atime,mtime,mode). It's used to reset file attributes for CREATE_EXCLUSIVE filename file name createmode create mode .The possible values could be: NFS3_CREATE_EXCLUSIVE, NFS3_CREATE_UNCHECKED, or NFS3_CREATE_GUARDED fh file handle (the first part is the length of the file handle) truncp trunp arguments, indicates if the file shouldbe truncate 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 April 2025 probe::nfsd.dispatch 3stap probe::nfsd.dispatch NFS server receives an operation from client Synopsis nfsd.dispatch Values version nfs version client_ip the ip address of client prog program number proto transfer protocol xid transmission id proc procedure number LINUX SystemTap Tapset Reference April 2025 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 fh file handle of parent dir(the first part is the length of the file handle) filelen the length of file name client_ip the ip address of client LINUX SystemTap Tapset Reference April 2025 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) fh file handle (the first part is the length of the file handle) access indicates the type of open (read/write/commit/readdir...) client_ip the ip address of client LINUX SystemTap Tapset Reference April 2025 probe::nfsd.proc.commit 3stap probe::nfsd.proc.commit NFS server performing a commit operation for client Synopsis nfsd.proc.commit Values size read bytes fh file handle (the first part is the length of the file handle) offset the offset of file client_ip the ip address of client version nfs version proto transfer protocol uid requester's user id gid requester's group id count read bytes LINUX SystemTap Tapset Reference April 2025 probe::nfsd.proc.create 3stap probe::nfsd.proc.create NFS server creating a file for client Synopsis nfsd.proc.create Values proto transfer protocol client_ip the ip address of client version nfs version gid requester's group id uid requester's user id filelen length of file name fh file handle (the first part is the length of the file handle) filename file name LINUX SystemTap Tapset Reference April 2025 probe::nfsd.proc.lookup 3stap probe::nfsd.proc.lookup NFS server opening or searching for a file for client Synopsis nfsd.proc.lookup Values version nfs version client_ip the ip address of client proto transfer protocol filelen the length of file name uid requester's user id filename file name gid requester's group id fh file handle of parent dir (the first part is the length of the file handle) LINUX SystemTap Tapset Reference April 2025 probe::nfsd.proc.read 3stap probe::nfsd.proc.read NFS server reading file for client Synopsis nfsd.proc.read Values vec struct kvec, includes buf address in kernel address and length of each buffer size read bytes offset the offset of file fh file handle (the first part is the length of the file handle) proto transfer protocol version nfs version client_ip the ip address of client count read bytes gid requester's group id vlen read blocks uid requester's user id LINUX SystemTap Tapset Reference April 2025 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 proto transfer protocol version nfs version client_ip the ip address of client fh file handle (the first part is the length of the file handle) filename file name LINUX SystemTap Tapset Reference April 2025 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 fh file handler of old path tlen length of new file name tfh file handler of new path uid requester's user id tname new file name flen length of old file name gid requester's group id client_ip the ip address of client LINUX SystemTap Tapset Reference April 2025 probe::nfsd.proc.write 3stap probe::nfsd.proc.write NFS server writing data to file for client Synopsis nfsd.proc.write Values version nfs version client_ip the ip address of client proto transfer protocol uid requester's user id vlen read blocks gid requester's group id count read bytes size read bytes vec struct kvec, includes buf address in kernel address and length of each buffer stable argp->stable offset the offset of file fh file handle (the first part is the length of the file handle) LINUX SystemTap Tapset Reference April 2025 probe::nfsd.read 3stap probe::nfsd.read NFS server reading data from a file for client Synopsis nfsd.read Values fh file handle (the first part is the length of the file handle) offset the offset of file size read bytes file argument file, indicates if the file has been opened. vec struct kvec, includes buf address in kernel address and length of each buffer vlen read blocks count read bytes client_ip the ip address of client LINUX SystemTap Tapset Reference April 2025 probe::nfsd.rename 3stap probe::nfsd.rename NFS server renaming a file for client Synopsis nfsd.rename Values filename old file name fh file handler of old path tlen length of new file name tfh file handler of new path tname new file name flen length of old file name client_ip the ip address of client LINUX SystemTap Tapset Reference April 2025 probe::nfsd.unlink 3stap probe::nfsd.unlink NFS server removing a file or a directory for client Synopsis nfsd.unlink Values client_ip the ip address of client filelen the length of file name type file type (file or dir) fh file handle (the first part is the length of the file handle) filename file name LINUX SystemTap Tapset Reference April 2025 probe::nfsd.write 3stap probe::nfsd.write NFS server writing data to a file for client Synopsis nfsd.write Values size read bytes file argument file, indicates if the file has been opened. vec struct kvec, includes buf address in kernel address and length of each buffer fh file handle (the first part is the length of the file handle) offset the offset of file client_ip the ip address of client vlen read blocks 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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). The mechanism of switching files was changed by upstream commit 5b39471380a238469c8fc18136f12600e5e9aec7 . With this commit, the rotation only works if there is some actual systemtap output. Floating point processing Tapset Utility functions to extract, convert, and perform arithmetic on IEEE-754 doubles. LINUX SystemTap Tapset Reference April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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 April 2025 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. CVE Livepatching Tapset Utility functions and control variables which can be used to create standardized CVE patches. The globals are cve_notify_p (non-zero if the patch should be verbose), cve_fix_p (non-zero if the fix should be applied), cve_trace_p (non-zero if only a trace should be run), cve_enabled_p (non-zero if the patch should be enabled). The controls can be changed in /proc/systemtap/MODULE_NAME/* and the recorded prometheus metrics can be viewed in the same directory. LINUX SystemTap Tapset Reference April 2025 function::cve_count_metric 3stap function::cve_count_metric Increment the count of key Synopsis cve_count_metric(key:string) Arguments key The metric Description This function increments the count of the metric key by 1. The metrics can be accessed in /proc/systemtap/MODULE_NAME/__prometheus LINUX SystemTap Tapset Reference April 2025 function::cve_record_metric 3stap function::cve_record_metric Set the value of key Synopsis cve_record_metric(key:string,value:long) Arguments key The metric value The new value Description This function sets the value of the metric key. The metrics can be accessed in /proc/systemtap/MODULE_NAME/__prometheus LINUX SystemTap Tapset Reference April 2025 function::cve_tmpdisable 3stap function::cve_tmpdisable Disable the cve livepatch Synopsis cve_tmpdisable(duration:long) Arguments duration The number of seconds to disable Description This function temporarily disables the conditionals which use cve_enabled_p for duration seconds. If duration is -1, disable the livepatch until reenabled. systemtap-5.3/doc/Tapset_Reference_Guide/en-US/images/000077500000000000000000000000001500444254400227105ustar00rootroot00000000000000systemtap-5.3/doc/Tapset_Reference_Guide/en-US/images/icon.svg000066400000000000000000003301271500444254400243670ustar00rootroot00000000000000 image/svg+xml id="path2858" /> systemtap-5.3/doc/Tapset_Reference_Guide/manpager.sh000077500000000000000000000100621500444254400226440ustar00rootroot00000000000000#!/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-5.3/doc/Tapset_Reference_Guide/publicanize.sh000077500000000000000000000117231500444254400233640ustar00rootroot00000000000000#!/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-5.3/doc/beginners/000077500000000000000000000000001500444254400161355ustar00rootroot00000000000000systemtap-5.3/doc/beginners/Makefile.am000066400000000000000000000043201500444254400201700ustar00rootroot00000000000000# 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-5.3/doc/beginners/Makefile.in000066400000000000000000000425521500444254400202120ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 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@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ 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@ ENABLE_NLS = @ENABLE_NLS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ 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_LDFLAGS = @debuginfod_LDFLAGS@ 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@clean-local: @INSTALL_PREBUILT_DOCS_FALSE@uninstall-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-5.3/doc/langref.tex000066400000000000000000003275151500444254400163360ustar00rootroot00000000000000% 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 shallow 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{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_UPROBE == "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_UPROBE == "y" %? @define foo %( process.syscall %) %: @define foo %( **ERROR** %) %) // The following works properly as expected: @define foo %( %( CONFIG_UPROBE == "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-5.3/doc/tutorial.tex000066400000000000000000001475351500444254400165650ustar00rootroot00000000000000% 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-5.3/doc/tutorial/000077500000000000000000000000001500444254400160245ustar00rootroot00000000000000systemtap-5.3/doc/tutorial/embedded-C.stp000066400000000000000000000007061500444254400204700ustar00rootroot00000000000000%{ #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-5.3/doc/tutorial/functions.stp000066400000000000000000000006551500444254400205720ustar00rootroot00000000000000# 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-5.3/doc/tutorial/hello-world.stp000066400000000000000000000000651500444254400210050ustar00rootroot00000000000000probe begin { print ("hello world\n") exit () } systemtap-5.3/doc/tutorial/inode-watch.stp000066400000000000000000000007761500444254400207700ustar00rootroot00000000000000probe 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-5.3/doc/tutorial/probe-alias.stp000066400000000000000000000005701500444254400207540ustar00rootroot00000000000000probe 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-5.3/doc/tutorial/socket-trace.stp000066400000000000000000000003231500444254400211360ustar00rootroot00000000000000probe 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-5.3/doc/tutorial/strace-open.stp000066400000000000000000000002101500444254400207650ustar00rootroot00000000000000probe syscall.open { printf ("%s(%d) open (%s)\n", execname(), pid(), argstr) } probe timer.ms(4000) # after 4 seconds { exit () } systemtap-5.3/doc/tutorial/tapset-time-user.stp000066400000000000000000000002671500444254400217710ustar00rootroot00000000000000probe 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-5.3/doc/tutorial/tapset/000077500000000000000000000000001500444254400173245ustar00rootroot00000000000000systemtap-5.3/doc/tutorial/tapset/time-common.stp000066400000000000000000000002401500444254400222740ustar00rootroot00000000000000global __time_vars function timer_begin (name) { __time_vars[name] = __time_value () } function timer_end (name) { return __time_value() - __time_vars[name] } systemtap-5.3/doc/tutorial/tapset/time-default.stp000066400000000000000000000000701500444254400224310ustar00rootroot00000000000000function __time_value () { return gettimeofday_us () } systemtap-5.3/doc/tutorial/timer-jiffies.stp000066400000000000000000000004221500444254400213070ustar00rootroot00000000000000global 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-5.3/dtrace.in000066400000000000000000000426121500444254400152130ustar00rootroot00000000000000#!@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 hashlib import os import sys import time import atexit from shlex import split from subprocess import call 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 mktemp_determ(sources, suffix): # for reproducible-builds purposes, use a predictable tmpfile path sha = hashlib.sha256() for source in sources: sha.update(source.encode('utf-8')) fname = ".dtrace-temp." + sha.hexdigest()[:8] + suffix tries = 0 while True: tries += 1 if tries > 100: # if file exists due to previous crash or whatever raise Exception("cannot create temporary file \""+fname+"\"") try: wxmode = 'x' if sys.version_info > (3,0) else 'wx' fdesc = open(fname, mode=wxmode) break except FileExistsError: time.sleep(0.1) # vague estimate of elapsed time for concurrent identical gcc job pass # Try again return fdesc, fname 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) = mktemp_determ(["use_cpp", s_filename], 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() (fdesc, fname) = mktemp_determ(["build_source", s_filename], 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) (fdesc, fname) = mktemp_determ(["build_source", s_filename, filename], suffix=".c") if not keep_temps: atexit.register(os.remove, fname) # delete generated source at exit, even if error 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 keep_temps: 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()) # Local Variables: # mode: python # End: systemtap-5.3/dwarf_wrappers.cxx000066400000000000000000000165571500444254400172040ustar00rootroot00000000000000// -*- 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 "staputil.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-5.3/dwarf_wrappers.h000066400000000000000000000131171500444254400166160ustar00rootroot00000000000000// -*- 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-5.3/dwflpp.cxx000066400000000000000000005044451500444254400154500ustar00rootroot00000000000000// 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 "staputil.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)) || (dwarf_tag(die) == DW_TAG_call_site && dwarf_attr_die(die, DW_AT_call_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: case DW_TAG_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(); while (scope != NULL) { 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 != parents->end()) ? &it->second : NULL; } #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); // version padding if the symbol is not found if (range.first == range.second) { std::string function_with_ver = function + "@"; for (auto it = v->begin(); it != v->end(); ++it) if (it->first.find(function_with_ver) == 0) function_with_ver = it->first; range = v->equal_range(function_with_ver); } 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; // version padding if the pattern is not matched if ((function_name_matches_pattern (func_name, function)) || (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); // version padding if the symbol is not found if (range.first == range.second) { std::string function_with_ver = function + "@"; for (auto it = v->begin(); it != v->end(); ++it) if (it->first.find(function_with_ver) == 0) function_with_ver = it->first; range = v->equal_range(function_with_ver); } 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 // PR32401 XXX: what other languages should be listed? int srclang = dwarf_srclang(cu_die); bool has_inner_types; switch(srclang) { case DW_LANG_C_plus_plus: case DW_LANG_C_plus_plus_03: case DW_LANG_C_plus_plus_11: case DW_LANG_C_plus_plus_14: #if _ELFUTILS_PREREQ (0, 193) /* elfutils commit 04ba163e813f6b88 */ case DW_LANG_C_plus_plus_17: case DW_LANG_C_plus_plus_20: case DW_LANG_C_plus_plus_23: #endif has_inner_types = true; break; default: has_inner_types = false; } 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: case DW_TAG_call_site: if ((dwarf_tag(&die) == DW_TAG_GNU_call_site && dwarf_attr_die(&die, DW_AT_abstract_origin, &origin)) || (dwarf_tag(&die) == DW_TAG_call_site && dwarf_attr_die(&die, DW_AT_call_origin, &origin)) ) { callee.name = dwarf_diename(&origin) ?: ""; } else { 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) && (dwarf_attr_die(&die, DW_AT_call_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 && dwarf_lowpc(&origin, &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. DWARF4 (sec 5.5.6) * indicates either of these attributes may be used for struct data * members. */ if (dwarf_attr_integrate (&die, DW_AT_data_member_location, &attr)) { dies.insert(dies.begin(), die); locs.insert(locs.begin(), attr); } else if (dwarf_attr_integrate (&die, DW_AT_data_bit_offset, &attr)) { // We don't need to do anything here. Instead, // dwflpp::translate_final_fetch_or_store handles computation of // the overall byte offset and adjustment of bit addresses. } /* 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)); } // In the case of DW_AT_data_bit_offset, we need to offset the // calculated location address. This adjustment is done at // this stage, before translate_base_ref() turns the address // on the top of the ctx.location stack into a @deref() of // some kind. if (dwarf_hasattr_integrate (vardie, DW_AT_data_bit_offset)) { // The byte-offset part of this type of location is // already represented within the ctx.locations[]. Now // just need to synthesize the remaining // (byte-offset-compensated) bitfield access op. Dwarf_Attribute attr_mem; Dwarf_Word bit_offset; if (dwarf_attr_integrate (vardie, DW_AT_data_bit_offset, &attr_mem) == NULL || dwarf_formudata (&attr_mem, &bit_offset) != 0) throw SEMANTIC_ERROR (_F("cannot get data_bit_offset parameters: %s", dwarf_errmsg(-1)), e->tok); // Count how many bytes offset we need from top of object (ctx->location) // to the bitfield-containing byte_size word. Dwarf_Word member_location_offset = (bit_offset / 8) / byte_size * byte_size; location *l = ctx.locations.back(); location *lo = ctx.translate_offset(0, 0, 0, // << ignored parameters l, member_location_offset); ctx.locations.push_back(lo); } 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); } else if (dwarf_hasattr_integrate (vardie, DW_AT_data_bit_offset)) { // The byte-offset part of this type of location is // already represented within the ctx.locations[]. Now // just need to synthesize the remaining // (byte-offset-compensated) bitfield access op. Dwarf_Attribute attr_mem; Dwarf_Word bit_offset, bit_size; if (dwarf_attr_integrate (vardie, DW_AT_data_bit_offset, &attr_mem) == NULL || dwarf_formudata (&attr_mem, &bit_offset) != 0 || dwarf_attr_integrate (vardie, DW_AT_bit_size, &attr_mem) == NULL || dwarf_formudata (&attr_mem, &bit_size) != 0) throw SEMANTIC_ERROR (_F("cannot get data_bit_offset parameters: %s", dwarf_errmsg(-1)), e->tok); // Count how many bytes offset we need from top of object (ctx->location) // to the bitfield-containing byte_size word. Dwarf_Word member_location_offset = (bit_offset / 8) / byte_size * byte_size; Dwarf_Word relative_bit_offset = bit_offset - 8 * member_location_offset; if (sess.verbose > 2) clog << _F("bit_offset=%" PRIu64 ", bit_size=%" PRIu64 " byte_size=%" PRIu64 " -> offset=%" PRIu64 ", rel_bit_offset=%" PRIu64 "\n", bit_offset, bit_size, byte_size, member_location_offset, relative_bit_offset); translate_bitfield(ctx, byte_size, relative_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"); // PR31500 never probe kernel __init or __kprobes functions if (sess.guru_mode && !(module == TOK_KERNEL && blocklisted != dwflpp::blocklisted_section) && !(module == TOK_KERNEL && blocklisted != dwflpp::blocklisted_kprobes)) { 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"; 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-5.3/dwflpp.h000066400000000000000000000763771500444254400151050ustar00rootroot00000000000000// 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 #define write_uleb128(ptr,val) ({ \ uint32_t valv = (val); \ do \ { \ unsigned char c = valv & 0x7f; \ valv >>= 7; \ if (valv) \ c |= 0x80; \ *(ptr)++ = c; \ } \ while (valv); \ }) 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-5.3/elaborate.cxx000066400000000000000000007154071500444254400161140ustar00rootroot00000000000000// 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 "staputil.h" #include "task_finder.h" #include "stapregex.h" #include "stringtable.h" #include "analysis.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 { vector probes_list; base->collect_derivation_chain(probes_list); // excluding this probe's own pp o << " /* "; for (auto i : probes_list) { o << " <- "; i->printsig (o); } o << " */ "; } 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); // No further analysis is going to be done. // Free up the memory used by the Dyninst analysis. flush_analysis_caches(); } // 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 string monitor_mode_format_global(string name, exp_type t, int num_escape){ string s = ""; string escape(num_escape, '\\'); if (t == pe_stats){ /* For a stats variable v, we construct a json object of the form {"@foo": @foo(v), ...} */ string stats_vals; string stats_fmt = "{"; static const vector stats = { "@count", "@min", "@max", "@sum", "@avg" }; for(auto it = stats.begin(); it != stats.end(); ++it){ stats_vals += "(@count(" + name + ") != 0 ? " + *it + "(" + name + ")" + ": 0)"; stats_fmt += escape + "\"" + *it + escape + "\": " + "%d"; if(it != stats.end()-1){ stats_vals += ", "; stats_fmt += ", "; } } stats_fmt += "}"; s += "sprintf(\""+ stats_fmt +"\", " + stats_vals + ")"; } else if (t == pe_string) s += "sprintf(\""+escape+"\"%s"+escape+"\"\"," + name + ")"; else s += "sprint(" + name + ")"; return s; } static void monitor_mode_read(systemtap_session& s) { if (!s.monitor) return; gen_monitor_data(s); stringstream code; unsigned long total_arity = 0; for(auto it_g = s.globals.cbegin(); it_g != s.globals.cend(); ++it_g) total_arity += (*it_g)->arity + 1; // Each element needs some space, since an array needs more than a scalar would unsigned long rough_max_json_size = 2048 + total_arity * 1024 + // Give plenty of room, since stats can get big s.probes.size() * 512; 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 || !startswith((*it)->name, "__global_")) continue; if (it != s.globals.cbegin()) code << "$value .= sprintf(\",\\n\")" << endl; code << "$value .= sprintf(\"\\\"%s\\\":\", \"" << (*it)->unmangled_name << "\")" << endl; if ((*it)->arity == 0) // A scalar so just map name to formatted value { code << "$value .= " << monitor_mode_format_global((*it)->name.to_string(), (*it)->type, 1) << endl; } else if ((*it)->arity > 0) // An array, which requires a bit more work { // Example for array 'arr' string key_str = ""; // "arr_k1, arr_k2, ...arr_karity" string fmt_str = ""; // "%s, %s, ...%s" string glbl_str = ""; // value_of(arr_k1), ..., value_of(arr_karity) for(int i = 0; i < (*it)->arity; i++){ string k = (*it)->unmangled_name.to_string() + "_k" + to_string(i); key_str += k; fmt_str += "%s"; glbl_str += monitor_mode_format_global(k, (*it)->index_types[i], 3); if( i != (*it)->arity-1 ){ key_str += ", "; fmt_str += ", "; glbl_str += ", "; } } /* We construct (for the non-stats case) foreach ( arr_value = [arr_k1, arr_k2, ...arr_karity]) in arr ){ str_map .= sprintf("'(%s, %s, ...%s)' : %s", value_of(arr_k1), ..., value_of(arr_karity), value_of(arr with these keys)) } Stats are similar, but don't have a 'value =' part, they just maps [keys, ...] -> stats object (described above) we just */ code << "str_map = \"\"" << endl; string value = (*it)->unmangled_name.to_string() + "_value"; if((*it)->type != pe_stats) code << "foreach (" << value << " = [" << key_str << "] in " << (*it)->unmangled_name << " ) { str_map .= sprintf(\"\\\"(" << fmt_str << ")\\\" : %s, \", " << glbl_str << ", " << monitor_mode_format_global(value, (*it)->type, 1) << ") }" << endl; else code << "foreach ( [" << key_str << "] in " << (*it)->unmangled_name << " ) { str_map .= sprintf(\"\\\"(" << fmt_str << ")\\\" : %s, \", " << glbl_str << ", " << monitor_mode_format_global((*it)->unmangled_name.to_string() + '[' + key_str + "]" , (*it)->type, 1) << ") }" << endl; // Ensure that the json doesn't contain partial values. It either all fits, not its skipped code << "if (strlen(str_map) == 4096 - 1) { $value .= \"\\\"(MAXSTRINGLEN exceeded)\\\"\" }" << endl; //FIXME: How do I get MAXSTRINGLEN from within stap? code << "else {$value .= sprintf(\"{%s}\", str_map)}" << 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); // PR29801: NB: The probe is added to the group alongside the other synthetic derived_probe objects in semantic_pass_optimize1 // 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); // PR29801: NB: The probe is added to the group alongside the other synthetic derived_probe objects in semantic_pass_optimize1 // 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; /* PR30570: We track typeresolution_info within the session * so that not only semantic_pass_types but also other passes have access to * type resolution capabilities */ s.type_res_info = new typeresolution_info(s); 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(); // Type inference is complete delete s.type_res_info; s.type_res_info = NULL; 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) { #pragma GCC diagnostic push #if __GNUC__ >= 14 // c10s early snapshot GCC complains about this construct, which is // made safe via our dtor usage #pragma GCC diagnostic ignored "-Wdangling-pointer" #endif saved_session_symbol_resolver = s.symbol_resolver; s.symbol_resolver = this; // save resolver for early PR25841 function resolution #pragma GCC diagnostic pop } 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; /* PR30570: Since the unused error string is elided we assign the type of errvar (symbol) * and it's referent (symboldecl) here. * If this is not done then later type inference cannot determine the type as string since * s->catch_error_var is removed but the referent remains (in locals) */ if (!session.type_res_info) throw SEMANTIC_ERROR(_("internal error: type_res_info is NULL")); session.type_res_info->resolve(pe_string, s->catch_error_var); session.type_res_info->resolve(pe_string, s->catch_error_var->referent); 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; /* PR30570: Since the try block is elided we assign the type of s->catch_error_var and * the declaration (referent) here a bit early. Since this is before type inference, * if a type is inferred then that's what will be used, but if not then we'll have * already set this default value */ if (!session.type_res_info) throw SEMANTIC_ERROR(_("internal error: type_res_info is NULL")); if(s->catch_error_var){ session.type_res_info->resolve(pe_string, s->catch_error_var); session.type_res_info->resolve(pe_string, s->catch_error_var->referent); } 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 || s.empty_probes.find(p) == s.empty_probes.end()) { non_empty_probes.push_back(p); if(p->group) s.print_warning(_F("Probe '%s' is already in a group, but is joining another", ((string) p->locations[0]->components[0]->functor).c_str()), p->tok); p->join_group(s); } else if (s.unoptimized || s.dump_mode) 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 if (!s.type_res_info) throw SEMANTIC_ERROR(_("internal error: type_res_info is NULL")); typeresolution_info& ti = *s.type_res_info; 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++) 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; /* Try and resolve the types of the symbol and referent to be a pe_string * If either was already defined elsewhere with a different type, cause * a mismatching type semantic error */ resolve(t, e->catch_error_var); resolve(t, e->catch_error_var->referent); 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; } /* t type to attempt to resolve to * e the expression to resolve */ void typeresolution_info::resolve(exp_type t, expression* e){ const token* tok = e->tok; // The type has not been resolved yet so we can do so if (pe_unknown == e->type){ e->type = t; resolved (tok, t); } // The type was already resolved to a different type than // what is being attempted now else if (t != e->type) mismatch (tok, t, e->type); } /* t type to attempt to resolve to * d the symboldecl to resolve */ void typeresolution_info::resolve(exp_type t, symboldecl* d){ const token* tok = d->tok; // The type has not been resolved yet so we can do so if (pe_unknown == d->type){ d->type = t; resolved (tok, t, d); } // The type was already resolved to a different type than // what is being attempted now else if (t != d->type) mismatch (tok, t, d); } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-5.3/elaborate.h000066400000000000000000000516001500444254400155250ustar00rootroot00000000000000// -*- 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); void resolve(exp_type t, expression* e); void resolve(exp_type t, symboldecl* d); 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 lsp_method_text_document_completion; // Used for the language-server 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; friend class lsp_method_text_document_completion; }; // ------------------------------------------------------------------------ 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-5.3/emacs/000077500000000000000000000000001500444254400145045ustar00rootroot00000000000000systemtap-5.3/emacs/systemtap-init.el000066400000000000000000000003201500444254400200130ustar00rootroot00000000000000(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-5.3/emacs/systemtap-mode.el000066400000000000000000000132761500444254400200120ustar00rootroot00000000000000;;; 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-5.3/git_version.sh000077500000000000000000000312031500444254400163020ustar00rootroot00000000000000#!/bin/sh # # Generate some basic versioning information which can be piped to a header. # # Copyright (c) 2006-2007 Luc Verhaegen # Copyright (C) 2007-2008 Hans Ulrich Niedermann # Copyright (C) 2021 Lawrence Sebald # # 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. Later modified # for Sylverant by Lawrence Sebald. # # 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. # # Requires git >= 1.3.0 for the 'git foo' (with space) syntax, # and git >= 1.4 for some specific commands. # Help messages USAGE="[