DD statements

This section describes the offline, online and BMP JCL statements that you can use to run Fast Path/EP jobs.

Fast Path/EP Series products use the following DD statements:

AMSOUT DD

Optional for the Restructure and Restart functions. The data set that is named in the AMSOUT DD statement contains the restart information that is required to restart post-processing tasks that failed. You can specify a partitioned data set, but BMC recommends that you specify a PDSE. The member name is the name of the restructured database. The AMSOUT data set can be used by all jobs that execute the Restructure and Restart functions.

Note

Do not modify the AMSOUT data set. Modifying the data set might make the information unusable when executing the Restart function.

The logical record length (LRECL) should be 80. The record format (RECFM) should be FB. The block size (BLKSIZE) can be any value that is appropriate for the LRECL and RECFM. The disposition (DISP) should be SHR.

For more information about using the AMSOUT DD statement, see the Fast Path Online Restructure/EP User Guide.

areaname DD

Required for offline mode; not used for online or BMP mode. The areaname DD statement identifies the offline area data set to be processed by Fast Path/EP. If the areaname DD statement is omitted from the JCL, Fast Path/EP attempts to dynamically allocate it.

The areaname DD statement works with Fast Path/EP commands as follows:

  • input area – The areaname DD statement identifies the area data set used as input to the following command functions:

    • ANALYZE

    • BUILD

    • DMAC_PRINT

    • EXTRACT

    • UNLOAD

    • VERIFY

  • output area – The areaname DD statement identifies the area data set used as output from the following command functions:

    • CHANGE

    • RELOAD

  • input/output area - The areaname DD statement identifies the area data set used as both input and output to the following command functions:

    • EXTEND

    • INITIALIZE

    • PROCESS_AREA

    • REORGANIZE

The database definition (DBD) is in the ACB library identified by the IMSACB DD statement.

If DBRC is active, and the area is registered with DBRC, and the areaname DD statement refers to an area data set, then the areaname DD statement data set must match the registered area data set name.

The areaname DD statement can identify an image copy data set for the following command functions:

  • ANALYZE

  • DMAC_PRINT

  • EXTRACT

  • PROCESS_AREA

  • UNLOAD

If you are using dynamic allocation, do not include the areaname DD statement. Fast Path/EP attempts, in the following order, to obtain the data set name for allocation:

  • If the INPUT_DSN_MASK keyword is specified, it is used to generate the data set name for the ANALYZE, BUILD, DMAC_PRINT, EXTEND, INITIALIZE, PROCESS_AREA, REORGANIZE, UNLOAD and VERIFY command functions.

  • If the OUTPUT_DSN_MASK keyword is specified, it is used to generate the data set name for the CHANGE and RELOAD command functions.

  • If DBRC is active and the area is registered, the registered area data set name is obtained from DBRC.

  • The STEPLIB is searched for the DFSMDA member that contains the data set name for this area.

The disposition of the dynamically allocated area data set depends on the function that is processed, as shown in Table 1 .

Table 1. Disposition of dynamically allocated area data set for Fast Path/EP commands

Command

Disposition

ANALYZE

DISP=SHR

BUILD (inputs)

DISP=SHR

CHANGE (outputs)

DISP=OLD

DMAC_PRINT

DISP=SHR

EXTEND

DISP=OLD

EXTRACT

DISP=SHR

INITIALIZE

DISP=OLD

PROCESS_AREA

DISP=OLD

RELOAD (outputs)

DISP=OLD

REORGANIZE

DISP=OLD

UNLOAD (inputs)

DISP=SHR

VERIFY (inputs)

DISP=SHR

IAREAxxx DD

Used for the change and reload functions; not used for other functions.

IARxxxxx DD

These DD statements are used to identify the input data sets for areas to be processed by the CHANGE or RELOAD command. For the change function only, these DD statements can refer to an area data set or an image copy data set. Depending on the total number of areas in a DEDB, the respective DD statements can be used as follows:

  • IAREAxxx – to identify an area number less than or equal to 999, where xxx is the area number preceded by leading zeroes (i.e., area number 4 would be IAREA004)

  • IARxxxxx – to identify an area number between 1 to 2048, where xxxxx is the area number preceded by leading zeroes (i.e., area number 2048 would be IAR02048)

If either of these DD statements is omitted from the JCL, Fast Path/EP attempts to dynamically allocate the input area or areas by using the INPUT_DSN_MASK keyword. If you specify the INPUT_DSN_MASK keyword to dynamically allocate the input data set, do not include the IAREAxxx DD or IARxxxxx statement.

Figure 1 shows a sample DBD for a database containing 2048 areas. The lines that contain dots indicate that not all areas in the DBD are shown in this example.

Figure 1. Sample DBD for 2048-area database

DBD   NAME=TESTDBD,ACCESS=DEDB,                       X
 RMNAME=DBFHDC40 
*
ARA0001 AREA   DD1=AR0001,DEVICE=3390,SIZE=8192,      X
 UOW=(24,5),ROOT=(10,4)
*
ARA0002 AREA   DD1=AR0002,DEVICE=3390,SIZE=8192,      X
 UOW=(24,5),ROOT=(10,4)
            .                      .
*          .                      .
ARA0999 AREA   DD1=AR0999,DEVICE=3390,SIZE=8192,      X
               UOW=(25,6),ROOT=(16,10)
            .                      .
 *          .                      .
ARA2048 AREA   DD1=AR2048,DEVICE=3390,SIZE=8192,      X
 UOW=(26,6),ROOT=(10,4)

The command set shown in Figure 2 uses IAREAxxx and IARxxxxx DD statements to identify input areas for a CHANGE command. This example shows how IAREAxxx and IAR xxxxx can be used interchangeably for area numbers less than 1000.

Figure 2. Using IAREAxxx and IARxxxxx on CHANGE command

//PFP      EXEC PGM=PFPMAIN,REGION=0M 
//STEPLIB  DD  DISP=SHR,DSN=BMC.PFP.LOAD 
//         DD  DISP=SHR,DSN=IMSVS.RESLIB 
//         DD  DISP=SHR,DSN=IMSVS.DFSMDA 
//OLDACB   DD  DSN=IMSVS.ACBLIB.OLD,DISP=SHR
//IMSACB   DD  DSN=IMSVS.ACBLIB.NEW,DISP=SHR
//IAREA001 DD  DSN=ara0001.database,DISP=SHR
//IAR00002 DD  DSN=ara0002.database,DISP=SHR
//IAREA999 DD  DSN=ara0999.database,DISP=SHR
//IAR02048 DD  DSN=ara2048.database,DISP=SHR
//PFPSYSIN DD   *
  CHANGE DBD=TESTDBD,
    IAREA=(ARA0001,ARA0002,ARA0999,ARA2048)
    OUTPUT_DSN_MASK='PFP.&DBD.&AREA'
/*
IMSACB DD

Required for offline mode; ignored in online mode. When it is allocated from the IMS control region, no dynamic allocation is provided for this DD statement. If not found in the JCL, the product searches for the MODSTAT DD statement or the OLCSTAT DD statement. For details about using the DD statements to identify the IMS ACB library, refer to the IMS/ESA System Administration Guide.

Note

The IMS/ESA release level of the ACB library must be the same as that of the RESLIB included in the STEPLIB DD statement concatenation.

IMSACBA / IMSACBB DD

Optional for online IMS ACB data sets. The active IMS ACB data set is allocated based on the value that is specified in the MODSTAT or OLCSTAT data set. Dynamic allocation can be used for these DD statements.

IMSDALIB DD

Optional. The IMSDALIB DD statement identifies the non-APF-authorized library containing the dynamic allocation (DFSMDA) member. When a Fast Path/EP product searches for a DFSMDA member, it first searches the library supplied by using the IMSDALIB DD. If the member is not found, it then searches the STEPLIB DD for the member that contains the data set name for the area.

IMSRESLB DD

Optional for all processes. The IMSRESLB DD statement identifies the library or libraries that contain randomizer and compression routines specified in the ACB contained within the IMSACB DD statement. It also identifies the libraries that contain sparsing and partitioning subroutines specified in the registrations within the PFXLIB DD statements.

Note

If the IMSRESLB DD statement is specified in the JCL, then the randomizer and compression routines only are loaded directly from the IMSRESLB DD statement. If the IMSRESLB DD statement is not present in the JCL, then these routines are loaded from the STEPLIB DD statement.

Using IMSRESLB enables you to make changes to the randomizer and compression routines for use with the specified process. The following conditions apply:

  • If COMPRESS=YES is specified, then the compression routine specified in IMSRESLB is used to compress segment data for the output area.

  • The randomizer specified in IMSRESLB is used to write the files for all defined processes except for unload.

indexname DD

Required for offline mode; not used for online or BMP mode. The indexname DD statement identifies the offline index data set to be processed by Fast Path/EP. If the indexname DD statement is omitted from the JCL, Fast Path/EP attempts to dynamically allocate it.

The indexname DD statement works with Fast Path/EP commands as follows:

  • input index – The indexname DD statement identifies the index data set used as input to the VERIFY command.

  • output index – The indexname DD statement identifies the index data set used as output from the BUILD command.

The database definition (DBD) is in the ACB library identified by the IMSACB DD statement.

If DBRC is active, and the index is registered with DBRC, and the indexname DD statement refers to an index data set, then the indexname DD statement data set must match the registered index data set name.

If you are using dynamic allocation, do not include the indexname DD statement. Fast Path/EP attempts, in the following order, to obtain the data set name for allocation:

  • If the INPUT_DSN_MASK keyword is specified on the IX subcommand for an index verification, it is used to generate the index data set name.

  • If the OUTPUT_DSN_MASK keyword is specified on the IX subcommand for an index build, it is used to generate the index data set name.

  • If DBRC is active and the index is registered, the registered index data set name is obtained from DBRC.

  • The STEPLIB is searched for the DFSMDA member that contains the data set name for this index.

The disposition of the dynamically allocated index data set depends on the function that is processed:

  • BUILD (outputs ): DISP=OLD

  • VERIFY (inputs): DISP=SHR

MODSTAT / MODSTAT2

Optional. Used to identify the active online IMS ACB data set (IMSACBA or IMSACBB). Dynamic allocation can be used for these DD statements.

When one of these DD statements is present, the MODSTAT data set is interrogated to determine whether IMSACBA or IMSACBB is the active library. If the IMSACBA or IMSACBB DD statement is not present in the JCL, the STEPLIB/LINKLIST are searched for a DFSMDA member.

If MODSTAT2 DD is present, the active MODSTAT data set is determined prior to ACBLIB selection. The MODSTAT2 data set is interrogated to determine whether IMSACBA or IMSACBB is the active library. If the IMSACBA or IMSACBB DD statement is not present in the JCL, the STEPLIB/LINKLIST are searched for a DFSMDA member.

If both OLCSTAT and MODSTAT DD statements are present, then OLCSTAT will be used and MODSTAT will be ignored.

NEWACB DD

Required for the Prepare, Shadow Initialization, Restructure, and unload functions. No dynamic allocation is provided for this DD statement. The NEWACB DD statement identifies the ACB library that contains the database definition that describes the database as it will appear when it is reloaded or restructured, and the IBM native indexes for the restructured database.

For the Restructure function, all control blocks in the data set will be copied to the IMSACBA/IMSACBB DD statements in your IMS control region.

Note

The IMS/ESA release level of the ACB library must be the same as that of the RESLIB included in the STEPLIB DD statement concatenation.

NEWPFXLB DD

Optional for the Prepare, Restructure, and Restart functions. This DD statement identifies the staging library that contains the modified PFX indexes for the restructured database. During the Restructure function, Fast Path Online Restructure/EP copies the contents of the NEWPFXLB data set to the PFXLIB data set. The NEWPFXLB DD statement is required when the following conditions exist:

  • Fast Path Indexer/EP is active in the IMS control region specified on the ACCESS keyword.

  • The IMS control region STEPLIB DD statement contains the PFXLEVEL member.

  • The IMS control region JCL includes the PFXLIB, PFXLIBA, or PFXLIBB DD statement.

NEWRESLB DD

Optional for the Prepare, Shadow Initialization, Restructure, and unload functions. The NEWRESLB DD statement identifies the library or libraries that contain randomizer and compression routines specified in the ACB contained within the NEWACB DD statement.

Note

If the NEWRESLB DD statement is specified in the JCL, then the randomizer and compression routines only are loaded directly from the NEWRESLB DD statement. If the NEWRESLB DD statement is not present in the JCL, then these routines are loaded from the STEPLIB DD statement or the IMSRESLB DD statement.

Using NEWRESLB enables you to make changes to the randomizer modules for use with the unload, while still retaining the old modules with the same name. The following conditions apply:

  • The compression routine specified in NEWRESLB is not used to write the unload output file. However, if EXPAND=YES is specified, then the compression routine must be specified in NEWRESLB so that Fast Path/EP can validate it.

  • The randomizer specified in NEWRESLB is used to write the unload output file.

OAREAxxx DD

Used for the unload and extract functions; not used for other functions.

OARxxxxx DD

These DD statements are used to identify the output area data sets for areas to be processed by the unload or extract command. Depending on the total number of areas in a DEDB, the respective DD statements can be used as follows:

  • OAREAxxx – to identify an area number less than or equal to 999, where xxx is the area number preceded by leading zeroes (i.e., area number 4 would be IAREA004)

  • OARxxxxx – to identify an area number between 1 to 2048, where xxxxx is the area number preceded by leading zeroes (i.e., area number 2048 would be IAR02048)

If either of these DD statements are omitted from the JCL, Fast Path/EP attempts to dynamically allocate the output area or areas using the OUTPUT_DSN_MASK keyword. If you specify the OUTPUT_DSN_MASK keyword to dynamically allocate the output unload data set or output extract file, do not include the OAREAxxx or OARxxxxx DD statement.

Figure 3 shows a sample DBD for a database containing 2048 areas.

Figure 3. DBD for 2048-area database

DBD   NAME=TESTDBD,ACCESS=DEDB,                       X
 RMNAME=DBFHDC40 
*
ARA0001 AREA   DD1=AR0001,DEVICE=3390,SIZE=8192,      X
 UOW=(24,5),ROOT=(10,4)
*
ARA0002 AREA   DD1=AR0002,DEVICE=3390,SIZE=8192,      X
 UOW=(24,5),ROOT=(10,4)
            .                      .
*          .                      .
ARA0999 AREA   DD1=AR0999,DEVICE=3390,SIZE=8192,      X
               UOW=(25,6),ROOT=(16,10)
            .                      .
 *          .                      .
ARA2048 AREA   DD1=AR12028,DEVICE=3390,SIZE=8192,      X
 UOW=(26,6),ROOT=(10,4)

The command set shown in Figure 4 uses OAREAxxx and OARxxxxx DD statements to identify areas for unload output. This example shows how OAREAxxx and OARxxxxx can be used interchangeably for area numbers less than 1000.

Figure 4. Using OAREAxxx and OARxxxxx on UNLOAD command

//PFPUNLD  EXEC  PGM=PFPMAIN,REGION=0M
//STEPLIB  DD  DSN=BMC.PFP.LOAD,DISP=SHR
//         DD  DSN=IMSVS.RESLIB,DISP=SHR
//         DD  DSN=IMSVS.DFSMDA,DISP=SHR
//IMSACB   DD  DSN=ACBLIB.OLD,DISP=SHR
//NEWACB   DD  DSN=ACBLIB.NEW,DISP=SHR
//OAREA001 DD  DSN=ara0001.unload,DISP=SHR
//OAR00002 DD  DSN=ara0002.unload,DISP=SHR
//OAREA999 DD  DSN=ara0999.unload,DISP=SHR
//OAR02048 DD  DSN=ara2048.unload,DISP=SHR
//PFPSYSIN DD *
  UNLOAD DBD=TESTDBD,IAREA=ALL,      OAREA=(ARA0001,ARA0002,ARA0999,ARA2048)
      INPUT_DSN_MASK='PFP.&DBD.&AREA'
/*
OLCSTAT DD

Optional. Used to identify the active online IMS ACB data set (IMSACBA or IMSACBB) in an IMS global online change environment. Dynamic allocation can be used for this DD statement.

When this DD statement is present, the OLCSTAT data set is interrogated to determine whether IMSACBA or IMSACBB is the active library. If the IMSACBA or IMSACBB DD statement is not present in the JCL, the STEPLIB/LNKLIST are searched for a DFSMDA member.

If both OLCSTAT and MODSTAT DD statements are present, then OLCSTAT will be used and MODSTAT will be ignored.

OLDACB DD

Required if using the change function. No dynamic allocation is provided for this DD statement. The OLDACB DD statement identifies the ACB library containing the database definitions that describe the database before it is changed.

Note

The IMS/ESA release level of the ACB library must be the same as that of the RESLIB included in the STEPLIB DD statement concatenation.

OLDLIB DD

Optional for index processing when using the change function. No dynamic allocation is provided for this DD statement. The OLDLIB DD statement identifies the PFX library containing the index registrations that describe the database before it is changed.

OLDRESLB DD

Optional for the change function. The OLDRESLB DD statement identifies the library or libraries that contain randomizer and compression routines specified in the ACB contained within the OLDACB DD statement. These routines are used by an area before it is changed.

Note

If the OLDRESLB DD statement is specified in the JCL, then the randomizer and compression routines only are loaded directly from the OLDRESLB DD statement. If the OLDRESLB DD statement is not present in the JCL, then these routines are loaded from the STEPLIB DD statement.

Using OLDRESLB lets you make changes to the randomizer and compression routines for use with the change, while still retaining the old routines. The following conditions apply:

  • If COMPRESS=YES is specified, then the compression routine specified in OLDRESLB is used to expand segment data for the input area.

  • The randomizer that is specified in OLDRESLB is not used to write the changed output area. However, it must be specified in OLDRESLB so that Fast Path/EP can validate it for other processes which might be defined.

PFPDFLTS DD

Optional. The PFPDFLTS DD control statement contains members that are used to specify custom keyword parameters for the OPTIONS and GLOBAL commands.

To use the PFPDFLTS DD statement, you must complete the following tasks:

  1. Create a partitioned data set (PDS) with DCB characteristics (REFCM=FB and LRECL=80).

  2. Create a member named OPTIONS to specify the OPTIONS command and keywords.

  3. Create a member named GLOBAL to specify the GLOBAL command and keywords.

Note

You may have an OPTIONS member, GLOBAL member, or both.

The following concatenation order applies to the OPTIONS command input:

  • read and process the OPTIONS member from PFPDFLTS

  • read and process the PFPOPTS DD statement

If both PFPDFLTS and PFPOPTS DD statements are specified in the JCL, then a keyword specified in PFPOPTS overrides the same keyword specified in the OPTIONS member.

The following concatenation order applies to the GLOBAL command input:

  • read and process the GLOBAL member from PFPDFLTS

  • read and process the GLOBAL command from the PFPSYSIN DD statement

If both PFPDFLTS and PFPSYSIN GLOBAL commands are specified in the JCL, then a keyword specified in the PFPSYSIN GLOBAL command overrides the same keyword specified in the GLOBAL member.

You can allocate the PFPDFLTS DD in the JCL or by using a dynamic allocation (DFSMDA) member named PFPDFLTS.

PFPEPR DD

Required to activate the Fast Path/EP repository feature and identify the repository catalog data set. If the PFPEPR DD statement is not specified in the JCL, and the REPOSITORY_DSNAME keyword is not specified on the OPTIONS command, Fast Path/EP dynamically allocates the repository data set by using the DFSMDA member. However, specifying the PFPEPR DD statement or the REPOSITORY_DSNAME overrides dynamic allocation of the DFSMDA member.

PFPOPTS DD

Optional. The PFPOPTS DD control statement contains the input control statements that set Fast Path/EP options. PFPOPTS uses the command statements that are in the Fast Path/EP command language. If no options are set with the PFPOPTS statement, internal defaults are used.

The PFPOPTS DD statement can refer to a standard input file, a sequential data set or PDS member that contains options settings.

PFPPRINT DD

Required only if you want to catalog your log output. The PFPPRINT DD statement identifies the processing log output data set. If the PFPPRINT DD statement is not specified in the JCL, Fast Path/EP dynamically allocates the data set using the following DCB characteristics:

  • RECFM=VBA

  • LRECL=137

  • BLKSIZE=4096

The output data set must be a standard SYSOUT or sequential data set. The record format (RECFM) can specify fixed or variable length records, blocked or unblocked, and can include ANSI carriage control.

The logical record length (LRECL) can be any length. If an output record exceeds the LRECL, Fast Path/EP attempts to split the record into multiple lines along word boundaries. If an output record is shorter than the LRECL, the record is padded with trailing blanks.

The block size (BLKSIZE) can be any value appropriate for the LRECL and RECFM.

If you specify ANSI carriage control, a control character is generated for each logical record. If you do not specify ANSI carriage control, the Fast Path/EP Series product generates blank lines to simulate any carriage control function requested.

PFPRPTS DD

Required only if you want to catalog your reports. The PFPRPTS DD statement identifies the report output data set. If omitted from the JCL, Fast Path/EP dynamically allocates the data set using the following DCB characteristics:

  • RECFM=VBA

  • LRECL=137

  • BLKSIZE=4096

The output data set must be a standard SYSOUT or sequential data set. The record format (RECFM) can specify fixed or variable length records, blocked or unblocked, and can include ANSI carriage control.

The logical record length (LRECL) can be any length. If an output record exceeds the LRECL, Fast Path/EP attempts to split the record into multiple lines along word boundaries. If an output record is shorter than the LRECL, the record is padded with trailing blanks.

The block size (BLKSIZE) can be any value appropriate for the LRECL and RECFM.

If you specify ANSI carriage control, a control character is generated for each logical record. If you do not specify ANSI carriage control, the Fast Path/EP Series product generates blank lines to simulate any carriage control function requested.

PFPSYSIN DD

Required. The PFPSYSIN DD statement identifies the input control statement data set that specifies the Fast Path/EP functions. The PFPSYSIN DD statement can be coded as a standard SYSIN file, a sequential data set, or PDS member.

PFPTOTAL DD

Optional for the unload, reload, or change function. This statement defines the area totals data set. When this DD is present, the unload, reload, or change process writes an output totals record, by area, for each segment type that is written. The record format is:

  • Area Number : PL2

  • Segment Name : CL8

  • Total Occurrences : PL5

  • Unload Date : PL4 (format 00YYDDD)

  • Unload Time : XL4 (format HHMMSSHH)

  • DBDname : CL8

  • Areaname : CL8

  • Reserved : XL21

The following DCB attributes of the file are set by the unload, reload, or change process, and do not need to be provided in the JCL:

  • DSORG=PS

  • LRECL=60

  • BLKSIZE=6000

PFXLIB DD

Required for index processing. This DD statement identifies the PFX registration library. If not found in the JCL, the product searches for the MODSTAT DD statement or the OLCSTAT DD statement.

PFXLIBA / PFXLIBB DD

BOptional, for online PFX registration data sets. The active PFX registration data set is allocated based on the active IMS ACB entry in the MODSTAT or OLCSTAT data set. Dynamic allocation can be used for these DD statements.

RECONn DD

Required when using the Data Base Recovery Control facility (DBRC) in offline mode; not used in online mode. If the RECONn DD statements are omitted from the JCL, Fast Path/EP attempts to dynamically allocate them using dynamic allocation members found in STEPLIB. The RECONn DD statements (RECON1, RECON2, and RECON3) define the data sets needed by DBRC.

STEPLIB DD

Required. The STEPLIB DD statement identifies the libraries containing the Fast Path/EP load modules (the Fast Path/EP library that was allocated and unloaded during installation) and the IMS RESLIB. It also identifies any libraries used for dynamic allocation.

The following requirements apply to the STEPLIB DD statement for certain Fast Path/EP products and functions:

  • The Fast Path/EP online products require that the installation library containing the BMC Software-supplied region controller module, BMCRRC00 (alias DFSRRC00), be concatenated preceding the IMS RESLIB data set in the STEPLIB DD statement. The BMC Software DFSRRC00 module is a replacement of the IMS region controller module.

  • For the following Fast Path/EP functions that provide a sort option, Fast Path/EP can optionally use the IMS zIIP Sort package, LGBSORT:

    • BUILD

    • EXTRACT

    • PFPSORT

    • RELOAD

    • RESYNC

    • VERIFY

    • XSCAN

    LGBSORT is located in the hlq.XXLIB (merged installation) or hlq.LGBLIB (non-merged installation) data set. To use LGBSORT, you must add the data set to the STEPLIB DD concatenation; otherwise, Fast Path/EP uses a standard sort, such as DFSORT or SYNCSORT.

    Note

    The variable hlq is a high-level qualifier that you provide.

  • The Fast Path Online Restructure/EP product requires the installation library containing IMS Database Utilities (DBU) load modules be included in the STEPLIB DD statement. BMC recommends that you also include the installation library containing the optional DELTA IMS (DLA) load modules in the STEPLIB DD statement.

    Note

    All data sets in this concatenation must be APF authorized.

Was this page helpful? Yes No Submitting... Thank you

Comments