#!/usr/bin/perl
# ---------------------------------------------------------------------------
# Copyright (C) 2000-2003 TJ Saunders <tj@castaglia.org>
#
# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
#
# Based on MacGuyver's genuser.pl script, this script generates password
# files suitable for use with proftpd's AuthUserFile directive, in passwd(5)
# format, or AuthGroupFile, in group(5) format.  The idea is somewhat similar
# to Apache's htpasswd program.
#
#  $Id: ftpasswd,v 1.10 2004/10/07 21:17:58 castaglia Exp $
#
# ---------------------------------------------------------------------------

use strict;

use File::Basename qw(basename);
use Getopt::Long;

# turn off auto abbreviation
$Getopt::Long::auto_abbrev = 0;

my $program = basename($0);
my $default_passwd_file = "./ftpd.passwd";
my $default_group_file = "./ftpd.group";
my $shell_file = "/etc/shells";
#my $default_cracklib_dict = "/usr/lib/cracklib_dict";
my $default_cracklib_dict = "/var/cache/cracklib";
my $cracklib_dict;
my $output_file;
my $version = "1.1.3";

my @data;

my %opts = ();
GetOptions(\%opts,
  'change-password',
  'delete-group',
  'delete-user',
  'des',
  'enable-group-passwd',
  'file=s',
  'F|force',
  'gecos=s',
  'gid=n',
  'group',
  'hash',
  'h|help',
  'home=s',
  'md5',
  'm|member=s@',
  'name=s',
  'not-previous-password',
  'not-system-password',
  'passwd',
  'shell=s',
  'stdin',
  'uid=n',
  'use-cracklib:s',
  'version',
);

usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined($opts{'h'}));

version() if (defined($opts{'
usage() if (defined