synching with trunk

git-svn-id: https://svn.apache.org/repos/asf/juddi/branches/juddi-3.2.x@1483174 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/Doxyfile b/Doxyfile
new file mode 100644
index 0000000..519dd54
--- /dev/null
+++ b/Doxyfile
@@ -0,0 +1,1869 @@
+# Doxyfile 1.8.3.1

+

+# This file describes the settings to be used by the documentation system

+# doxygen (www.doxygen.org) for a project.

+#

+# All text after a hash (#) is considered a comment and will be ignored.

+# The format is:

+#       TAG = value [value, ...]

+# For lists items can also be appended using:

+#       TAG += value [value, ...]

+# Values that contain spaces should be placed between quotes (" ").

+

+#---------------------------------------------------------------------------

+# Project related configuration options

+#---------------------------------------------------------------------------

+

+# This tag specifies the encoding used for all characters in the config file

+# that follow. The default is UTF-8 which is also the encoding used for all

+# text before the first occurrence of this tag. Doxygen uses libiconv (or the

+# iconv built into libc) for the transcoding. See

+# http://www.gnu.org/software/libiconv for the list of possible encodings.

+

+DOXYFILE_ENCODING      = UTF-8

+

+# The PROJECT_NAME tag is a single word (or sequence of words) that should

+# identify the project. Note that if you do not use Doxywizard you need

+# to put quotes around the project name if it contains spaces.

+

+PROJECT_NAME           = "Apache jUDDI"

+

+# The PROJECT_NUMBER tag can be used to enter a project or revision number.

+# This could be handy for archiving the generated documentation or

+# if some version control system is used.

+

+PROJECT_NUMBER         = 3.2.0

+

+# Using the PROJECT_BRIEF tag one can provide an optional one line description

+# for a project that appears at the top of each page and should give viewer

+# a quick idea about the purpose of the project. Keep the description short.

+

+PROJECT_BRIEF          = 

+

+# With the PROJECT_LOGO tag one can specify an logo or icon that is

+# included in the documentation. The maximum height of the logo should not

+# exceed 55 pixels and the maximum width should not exceed 200 pixels.

+# Doxygen will copy the logo to the output directory.

+

+PROJECT_LOGO           = juddi-gui/web/img/logo2.png

+

+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)

+# base path where the generated documentation will be put.

+# If a relative path is entered, it will be relative to the location

+# where doxygen was started. If left blank the current directory will be used.

+

+OUTPUT_DIRECTORY       = docs

+

+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create

+# 4096 sub-directories (in 2 levels) under the output directory of each output

+# format and will distribute the generated files over these directories.

+# Enabling this option can be useful when feeding doxygen a huge amount of

+# source files, where putting all generated files in the same directory would

+# otherwise cause performance problems for the file system.

+

+CREATE_SUBDIRS         = NO

+

+# The OUTPUT_LANGUAGE tag is used to specify the language in which all

+# documentation generated by doxygen is written. Doxygen will use this

+# information to generate all constant output in the proper language.

+# The default language is English, other supported languages are:

+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,

+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,

+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English

+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,

+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,

+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.

+

+OUTPUT_LANGUAGE        = English

+

+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will

+# include brief member descriptions after the members that are listed in

+# the file and class documentation (similar to JavaDoc).

+# Set to NO to disable this.

+

+BRIEF_MEMBER_DESC      = YES

+

+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend

+# the brief description of a member or function before the detailed description.

+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the

+# brief descriptions will be completely suppressed.

+

+REPEAT_BRIEF           = YES

+

+# This tag implements a quasi-intelligent brief description abbreviator

+# that is used to form the text in various listings. Each string

+# in this list, if found as the leading text of the brief description, will be

+# stripped from the text and the result after processing the whole list, is

+# used as the annotated text. Otherwise, the brief description is used as-is.

+# If left blank, the following values are used ("$name" is automatically

+# replaced with the name of the entity): "The $name class" "The $name widget"

+# "The $name file" "is" "provides" "specifies" "contains"

+# "represents" "a" "an" "the"

+

+ABBREVIATE_BRIEF       =

+

+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then

+# Doxygen will generate a detailed section even if there is only a brief

+# description.

+

+ALWAYS_DETAILED_SEC    = NO

+

+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all

+# inherited members of a class in the documentation of that class as if those

+# members were ordinary class members. Constructors, destructors and assignment

+# operators of the base classes will not be shown.

+

+INLINE_INHERITED_MEMB  = NO

+

+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full

+# path before files name in the file list and in the header files. If set

+# to NO the shortest path that makes the file name unique will be used.

+

+FULL_PATH_NAMES        = YES

+

+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag

+# can be used to strip a user-defined part of the path. Stripping is

+# only done if one of the specified strings matches the left-hand part of

+# the path. The tag can be used to show relative paths in the file list.

+# If left blank the directory from which doxygen is run is used as the

+# path to strip. Note that you specify absolute paths here, but also

+# relative paths, which will be relative from the directory where doxygen is

+# started.

+

+STRIP_FROM_PATH        =

+

+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of

+# the path mentioned in the documentation of a class, which tells

+# the reader which header file to include in order to use a class.

+# If left blank only the name of the header file containing the class

+# definition is used. Otherwise one should specify the include paths that

+# are normally passed to the compiler using the -I flag.

+

+STRIP_FROM_INC_PATH    =

+

+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter

+# (but less readable) file names. This can be useful if your file system

+# doesn't support long names like on DOS, Mac, or CD-ROM.

+

+SHORT_NAMES            = NO

+

+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen

+# will interpret the first line (until the first dot) of a JavaDoc-style

+# comment as the brief description. If set to NO, the JavaDoc

+# comments will behave just like regular Qt-style comments

+# (thus requiring an explicit @brief command for a brief description.)

+

+JAVADOC_AUTOBRIEF      = YES

+

+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will

+# interpret the first line (until the first dot) of a Qt-style

+# comment as the brief description. If set to NO, the comments

+# will behave just like regular Qt-style comments (thus requiring

+# an explicit \brief command for a brief description.)

+

+QT_AUTOBRIEF           = NO

+

+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen

+# treat a multi-line C++ special comment block (i.e. a block of //! or ///

+# comments) as a brief description. This used to be the default behaviour.

+# The new default is to treat a multi-line C++ comment block as a detailed

+# description. Set this tag to YES if you prefer the old behaviour instead.

+

+MULTILINE_CPP_IS_BRIEF = NO

+

+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented

+# member inherits the documentation from any documented member that it

+# re-implements.

+

+INHERIT_DOCS           = YES

+

+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce

+# a new page for each member. If set to NO, the documentation of a member will

+# be part of the file/class/namespace that contains it.

+

+SEPARATE_MEMBER_PAGES  = NO

+

+# The TAB_SIZE tag can be used to set the number of spaces in a tab.

+# Doxygen uses this value to replace tabs by spaces in code fragments.

+

+TAB_SIZE               = 4

+

+# This tag can be used to specify a number of aliases that acts

+# as commands in the documentation. An alias has the form "name=value".

+# For example adding "sideeffect=\par Side Effects:\n" will allow you to

+# put the command \sideeffect (or @sideeffect) in the documentation, which

+# will result in a user-defined paragraph with heading "Side Effects:".

+# You can put \n's in the value part of an alias to insert newlines.

+

+ALIASES                =

+

+# This tag can be used to specify a number of word-keyword mappings (TCL only).

+# A mapping has the form "name=value". For example adding

+# "class=itcl::class" will allow you to use the command class in the

+# itcl::class meaning.

+

+TCL_SUBST              =

+

+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C

+# sources only. Doxygen will then generate output that is more tailored for C.

+# For instance, some of the names that are used will be different. The list

+# of all members will be omitted, etc.

+

+OPTIMIZE_OUTPUT_FOR_C  = NO

+

+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java

+# sources only. Doxygen will then generate output that is more tailored for

+# Java. For instance, namespaces will be presented as packages, qualified

+# scopes will look different, etc.

+

+OPTIMIZE_OUTPUT_JAVA   = YES

+

+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran

+# sources only. Doxygen will then generate output that is more tailored for

+# Fortran.

+

+OPTIMIZE_FOR_FORTRAN   = NO

+

+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL

+# sources. Doxygen will then generate output that is tailored for

+# VHDL.

+

+OPTIMIZE_OUTPUT_VHDL   = NO

+

+# Doxygen selects the parser to use depending on the extension of the files it

+# parses. With this tag you can assign which parser to use for a given

+# extension. Doxygen has a built-in mapping, but you can override or extend it

+# using this tag. The format is ext=language, where ext is a file extension,

+# and language is one of the parsers supported by doxygen: IDL, Java,

+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,

+# C++. For instance to make doxygen treat .inc files as Fortran files (default

+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note

+# that for custom extensions you also need to set FILE_PATTERNS otherwise the

+# files are not read by doxygen.

+

+EXTENSION_MAPPING      =

+

+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all

+# comments according to the Markdown format, which allows for more readable

+# documentation. See http://daringfireball.net/projects/markdown/ for details.

+# The output of markdown processing is further processed by doxygen, so you

+# can mix doxygen, HTML, and XML commands with Markdown formatting.

+# Disable only in case of backward compatibilities issues.

+

+MARKDOWN_SUPPORT       = YES

+

+# When enabled doxygen tries to link words that correspond to documented classes,

+# or namespaces to their corresponding documentation. Such a link can be

+# prevented in individual cases by by putting a % sign in front of the word or

+# globally by setting AUTOLINK_SUPPORT to NO.

+

+AUTOLINK_SUPPORT       = YES

+

+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want

+# to include (a tag file for) the STL sources as input, then you should

+# set this tag to YES in order to let doxygen match functions declarations and

+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.

+# func(std::string) {}). This also makes the inheritance and collaboration

+# diagrams that involve STL classes more complete and accurate.

+

+BUILTIN_STL_SUPPORT    = NO

+

+# If you use Microsoft's C++/CLI language, you should set this option to YES to

+# enable parsing support.

+

+CPP_CLI_SUPPORT        = NO

+

+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.

+# Doxygen will parse them like normal C++ but will assume all classes use public

+# instead of private inheritance when no explicit protection keyword is present.

+

+SIP_SUPPORT            = NO

+

+# For Microsoft's IDL there are propget and propput attributes to indicate

+# getter and setter methods for a property. Setting this option to YES (the

+# default) will make doxygen replace the get and set methods by a property in

+# the documentation. This will only work if the methods are indeed getting or

+# setting a simple type. If this is not the case, or you want to show the

+# methods anyway, you should set this option to NO.

+

+IDL_PROPERTY_SUPPORT   = YES

+

+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC

+# tag is set to YES, then doxygen will reuse the documentation of the first

+# member in the group (if any) for the other members of the group. By default

+# all members of a group must be documented explicitly.

+

+DISTRIBUTE_GROUP_DOC   = NO

+

+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of

+# the same type (for instance a group of public functions) to be put as a

+# subgroup of that type (e.g. under the Public Functions section). Set it to

+# NO to prevent subgrouping. Alternatively, this can be done per class using

+# the \nosubgrouping command.

+

+SUBGROUPING            = YES

+

+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and

+# unions are shown inside the group in which they are included (e.g. using

+# @ingroup) instead of on a separate page (for HTML and Man pages) or

+# section (for LaTeX and RTF).

+

+INLINE_GROUPED_CLASSES = NO

+

+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and

+# unions with only public data fields will be shown inline in the documentation

+# of the scope in which they are defined (i.e. file, namespace, or group

+# documentation), provided this scope is documented. If set to NO (the default),

+# structs, classes, and unions are shown on a separate page (for HTML and Man

+# pages) or section (for LaTeX and RTF).

+

+INLINE_SIMPLE_STRUCTS  = NO

+

+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum

+# is documented as struct, union, or enum with the name of the typedef. So

+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct

+# with name TypeT. When disabled the typedef will appear as a member of a file,

+# namespace, or class. And the struct will be named TypeS. This can typically

+# be useful for C code in case the coding convention dictates that all compound

+# types are typedef'ed and only the typedef is referenced, never the tag name.

+

+TYPEDEF_HIDES_STRUCT   = NO

+

+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to

+# determine which symbols to keep in memory and which to flush to disk.

+# When the cache is full, less often used symbols will be written to disk.

+# For small to medium size projects (<1000 input files) the default value is

+# probably good enough. For larger projects a too small cache size can cause

+# doxygen to be busy swapping symbols to and from disk most of the time

+# causing a significant performance penalty.

+# If the system has enough physical memory increasing the cache will improve the

+# performance by keeping more symbols in memory. Note that the value works on

+# a logarithmic scale so increasing the size by one will roughly double the

+# memory usage. The cache size is given by this formula:

+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,

+# corresponding to a cache size of 2^16 = 65536 symbols.

+

+SYMBOL_CACHE_SIZE      = 0

+

+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be

+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given

+# their name and scope. Since this can be an expensive process and often the

+# same symbol appear multiple times in the code, doxygen keeps a cache of

+# pre-resolved symbols. If the cache is too small doxygen will become slower.

+# If the cache is too large, memory is wasted. The cache size is given by this

+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,

+# corresponding to a cache size of 2^16 = 65536 symbols.

+

+LOOKUP_CACHE_SIZE      = 0

+

+#---------------------------------------------------------------------------

+# Build related configuration options

+#---------------------------------------------------------------------------

+

+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in

+# documentation are documented, even if no documentation was available.

+# Private class members and static file members will be hidden unless

+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES

+

+EXTRACT_ALL            = YES

+

+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class

+# will be included in the documentation.

+

+EXTRACT_PRIVATE        = NO

+

+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal

+# scope will be included in the documentation.

+

+EXTRACT_PACKAGE        = YES

+

+# If the EXTRACT_STATIC tag is set to YES all static members of a file

+# will be included in the documentation.

+

+EXTRACT_STATIC         = YES

+

+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)

+# defined locally in source files will be included in the documentation.

+# If set to NO only classes defined in header files are included.

+

+EXTRACT_LOCAL_CLASSES  = YES

+

+# This flag is only useful for Objective-C code. When set to YES local

+# methods, which are defined in the implementation section but not in

+# the interface are included in the documentation.

+# If set to NO (the default) only methods in the interface are included.

+

+EXTRACT_LOCAL_METHODS  = NO

+

+# If this flag is set to YES, the members of anonymous namespaces will be

+# extracted and appear in the documentation as a namespace called

+# 'anonymous_namespace{file}', where file will be replaced with the base

+# name of the file that contains the anonymous namespace. By default

+# anonymous namespaces are hidden.

+

+EXTRACT_ANON_NSPACES   = NO

+

+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all

+# undocumented members of documented classes, files or namespaces.

+# If set to NO (the default) these members will be included in the

+# various overviews, but no documentation section is generated.

+# This option has no effect if EXTRACT_ALL is enabled.

+

+HIDE_UNDOC_MEMBERS     = NO

+

+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all

+# undocumented classes that are normally visible in the class hierarchy.

+# If set to NO (the default) these classes will be included in the various

+# overviews. This option has no effect if EXTRACT_ALL is enabled.

+

+HIDE_UNDOC_CLASSES     = NO

+

+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all

+# friend (class|struct|union) declarations.

+# If set to NO (the default) these declarations will be included in the

+# documentation.

+

+HIDE_FRIEND_COMPOUNDS  = NO

+

+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any

+# documentation blocks found inside the body of a function.

+# If set to NO (the default) these blocks will be appended to the

+# function's detailed documentation block.

+

+HIDE_IN_BODY_DOCS      = NO

+

+# The INTERNAL_DOCS tag determines if documentation

+# that is typed after a \internal command is included. If the tag is set

+# to NO (the default) then the documentation will be excluded.

+# Set it to YES to include the internal documentation.

+

+INTERNAL_DOCS          = NO

+

+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate

+# file names in lower-case letters. If set to YES upper-case letters are also

+# allowed. This is useful if you have classes or files whose names only differ

+# in case and if your file system supports case sensitive file names. Windows

+# and Mac users are advised to set this option to NO.

+

+CASE_SENSE_NAMES       = NO

+

+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen

+# will show members with their full class and namespace scopes in the

+# documentation. If set to YES the scope will be hidden.

+

+HIDE_SCOPE_NAMES       = NO

+

+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen

+# will put a list of the files that are included by a file in the documentation

+# of that file.

+

+SHOW_INCLUDE_FILES     = YES

+

+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen

+# will list include files with double quotes in the documentation

+# rather than with sharp brackets.

+

+FORCE_LOCAL_INCLUDES   = NO

+

+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]

+# is inserted in the documentation for inline members.

+

+INLINE_INFO            = YES

+

+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen

+# will sort the (detailed) documentation of file and class members

+# alphabetically by member name. If set to NO the members will appear in

+# declaration order.

+

+SORT_MEMBER_DOCS       = YES

+

+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the

+# brief documentation of file, namespace and class members alphabetically

+# by member name. If set to NO (the default) the members will appear in

+# declaration order.

+

+SORT_BRIEF_DOCS        = NO

+

+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen

+# will sort the (brief and detailed) documentation of class members so that

+# constructors and destructors are listed first. If set to NO (the default)

+# the constructors will appear in the respective orders defined by

+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.

+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO

+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.

+

+SORT_MEMBERS_CTORS_1ST = NO

+

+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the

+# hierarchy of group names into alphabetical order. If set to NO (the default)

+# the group names will appear in their defined order.

+

+SORT_GROUP_NAMES       = NO

+

+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be

+# sorted by fully-qualified names, including namespaces. If set to

+# NO (the default), the class list will be sorted only by class name,

+# not including the namespace part.

+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.

+# Note: This option applies only to the class list, not to the

+# alphabetical list.

+

+SORT_BY_SCOPE_NAME     = NO

+

+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to

+# do proper type resolution of all parameters of a function it will reject a

+# match between the prototype and the implementation of a member function even

+# if there is only one candidate or it is obvious which candidate to choose

+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen

+# will still accept a match between prototype and implementation in such cases.

+

+STRICT_PROTO_MATCHING  = NO

+

+# The GENERATE_TODOLIST tag can be used to enable (YES) or

+# disable (NO) the todo list. This list is created by putting \todo

+# commands in the documentation.

+

+GENERATE_TODOLIST      = YES

+

+# The GENERATE_TESTLIST tag can be used to enable (YES) or

+# disable (NO) the test list. This list is created by putting \test

+# commands in the documentation.

+

+GENERATE_TESTLIST      = YES

+

+# The GENERATE_BUGLIST tag can be used to enable (YES) or

+# disable (NO) the bug list. This list is created by putting \bug

+# commands in the documentation.

+

+GENERATE_BUGLIST       = YES

+

+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or

+# disable (NO) the deprecated list. This list is created by putting

+# \deprecated commands in the documentation.

+

+GENERATE_DEPRECATEDLIST= YES

+

+# The ENABLED_SECTIONS tag can be used to enable conditional

+# documentation sections, marked by \if section-label ... \endif

+# and \cond section-label ... \endcond blocks.

+

+ENABLED_SECTIONS       =

+

+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines

+# the initial value of a variable or macro consists of for it to appear in

+# the documentation. If the initializer consists of more lines than specified

+# here it will be hidden. Use a value of 0 to hide initializers completely.

+# The appearance of the initializer of individual variables and macros in the

+# documentation can be controlled using \showinitializer or \hideinitializer

+# command in the documentation regardless of this setting.

+

+MAX_INITIALIZER_LINES  = 30

+

+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated

+# at the bottom of the documentation of classes and structs. If set to YES the

+# list will mention the files that were used to generate the documentation.

+

+SHOW_USED_FILES        = YES

+

+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.

+# This will remove the Files entry from the Quick Index and from the

+# Folder Tree View (if specified). The default is YES.

+

+SHOW_FILES             = YES

+

+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the

+# Namespaces page.

+# This will remove the Namespaces entry from the Quick Index

+# and from the Folder Tree View (if specified). The default is YES.

+

+SHOW_NAMESPACES        = YES

+

+# The FILE_VERSION_FILTER tag can be used to specify a program or script that

+# doxygen should invoke to get the current version for each file (typically from

+# the version control system). Doxygen will invoke the program by executing (via

+# popen()) the command <command> <input-file>, where <command> is the value of

+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file

+# provided by doxygen. Whatever the program writes to standard output

+# is used as the file version. See the manual for examples.

+

+FILE_VERSION_FILTER    =

+

+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed

+# by doxygen. The layout file controls the global structure of the generated

+# output files in an output format independent way. To create the layout file

+# that represents doxygen's defaults, run doxygen with the -l option.

+# You can optionally specify a file name after the option, if omitted

+# DoxygenLayout.xml will be used as the name of the layout file.

+

+LAYOUT_FILE            =

+

+# The CITE_BIB_FILES tag can be used to specify one or more bib files

+# containing the references data. This must be a list of .bib files. The

+# .bib extension is automatically appended if omitted. Using this command

+# requires the bibtex tool to be installed. See also

+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style

+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this

+# feature you need bibtex and perl available in the search path. Do not use

+# file names with spaces, bibtex cannot handle them.

+

+CITE_BIB_FILES         =

+

+#---------------------------------------------------------------------------

+# configuration options related to warning and progress messages

+#---------------------------------------------------------------------------

+

+# The QUIET tag can be used to turn on/off the messages that are generated

+# by doxygen. Possible values are YES and NO. If left blank NO is used.

+

+QUIET                  = NO

+

+# The WARNINGS tag can be used to turn on/off the warning messages that are

+# generated by doxygen. Possible values are YES and NO. If left blank

+# NO is used.

+

+WARNINGS               = YES

+

+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings

+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will

+# automatically be disabled.

+

+WARN_IF_UNDOCUMENTED   = YES

+

+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for

+# potential errors in the documentation, such as not documenting some

+# parameters in a documented function, or documenting parameters that

+# don't exist or using markup commands wrongly.

+

+WARN_IF_DOC_ERROR      = YES

+

+# The WARN_NO_PARAMDOC option can be enabled to get warnings for

+# functions that are documented, but have no documentation for their parameters

+# or return value. If set to NO (the default) doxygen will only warn about

+# wrong or incomplete parameter documentation, but not about the absence of

+# documentation.

+

+WARN_NO_PARAMDOC       = NO

+

+# The WARN_FORMAT tag determines the format of the warning messages that

+# doxygen can produce. The string should contain the $file, $line, and $text

+# tags, which will be replaced by the file and line number from which the

+# warning originated and the warning text. Optionally the format may contain

+# $version, which will be replaced by the version of the file (if it could

+# be obtained via FILE_VERSION_FILTER)

+

+WARN_FORMAT            = "$file:$line: $text"

+

+# The WARN_LOGFILE tag can be used to specify a file to which warning

+# and error messages should be written. If left blank the output is written

+# to stderr.

+

+WARN_LOGFILE           =

+

+#---------------------------------------------------------------------------

+# configuration options related to the input files

+#---------------------------------------------------------------------------

+

+# The INPUT tag can be used to specify the files and/or directories that contain

+# documented source files. You may enter file names like "myfile.cpp" or

+# directories like "/usr/src/myproject". Separate the files or directories

+# with spaces.

+

+INPUT                  = juddi-client/src/main/java juddi-console/src/main/java juddi-core/src/main/java juddi-extras/src/main/java juddi-gui/src/main/java juddi-gui-dsig/src/main/java uddi-tck/src/main/java uddi-tck-base/src/ uddi-ws/src/

+

+# This tag can be used to specify the character encoding of the source files

+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is

+# also the default input encoding. Doxygen uses libiconv (or the iconv built

+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for

+# the list of possible encodings.

+

+INPUT_ENCODING         = UTF-8

+

+# If the value of the INPUT tag contains directories, you can use the

+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp

+# and *.h) to filter out the source-files in the directories. If left

+# blank the following patterns are tested:

+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh

+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py

+# *.f90 *.f *.for *.vhd *.vhdl

+

+FILE_PATTERNS          = *.java *.jsp

+

+# The RECURSIVE tag can be used to turn specify whether or not subdirectories

+# should be searched for input files as well. Possible values are YES and NO.

+# If left blank NO is used.

+

+RECURSIVE              = YES

+

+# The EXCLUDE tag can be used to specify files and/or directories that should be

+# excluded from the INPUT source files. This way you can easily exclude a

+# subdirectory from a directory tree whose root is specified with the INPUT tag.

+# Note that relative paths are relative to the directory from which doxygen is

+# run.

+

+EXCLUDE                =

+

+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or

+# directories that are symbolic links (a Unix file system feature) are excluded

+# from the input.

+

+EXCLUDE_SYMLINKS       = NO

+

+# If the value of the INPUT tag contains directories, you can use the

+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude

+# certain files from those directories. Note that the wildcards are matched

+# against the file with absolute path, so to exclude all test directories

+# for example use the pattern */test/*

+

+EXCLUDE_PATTERNS       =

+

+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names

+# (namespaces, classes, functions, etc.) that should be excluded from the

+# output. The symbol name can be a fully qualified name, a word, or if the

+# wildcard * is used, a substring. Examples: ANamespace, AClass,

+# AClass::ANamespace, ANamespace::*Test

+

+EXCLUDE_SYMBOLS        =

+

+# The EXAMPLE_PATH tag can be used to specify one or more files or

+# directories that contain example code fragments that are included (see

+# the \include command).

+

+EXAMPLE_PATH           =

+

+# If the value of the EXAMPLE_PATH tag contains directories, you can use the

+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp

+# and *.h) to filter out the source-files in the directories. If left

+# blank all files are included.

+

+EXAMPLE_PATTERNS       =

+

+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be

+# searched for input files to be used with the \include or \dontinclude

+# commands irrespective of the value of the RECURSIVE tag.

+# Possible values are YES and NO. If left blank NO is used.

+

+EXAMPLE_RECURSIVE      = NO

+

+# The IMAGE_PATH tag can be used to specify one or more files or

+# directories that contain image that are included in the documentation (see

+# the \image command).

+

+IMAGE_PATH             =

+

+# The INPUT_FILTER tag can be used to specify a program that doxygen should

+# invoke to filter for each input file. Doxygen will invoke the filter program

+# by executing (via popen()) the command <filter> <input-file>, where <filter>

+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an

+# input file. Doxygen will then use the output that the filter program writes

+# to standard output.

+# If FILTER_PATTERNS is specified, this tag will be

+# ignored.

+

+INPUT_FILTER           =

+

+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern

+# basis.

+# Doxygen will compare the file name with each pattern and apply the

+# filter if there is a match.

+# The filters are a list of the form:

+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further

+# info on how filters are used. If FILTER_PATTERNS is empty or if

+# non of the patterns match the file name, INPUT_FILTER is applied.

+

+FILTER_PATTERNS        =

+

+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using

+# INPUT_FILTER) will be used to filter the input files when producing source

+# files to browse (i.e. when SOURCE_BROWSER is set to YES).

+

+FILTER_SOURCE_FILES    = NO

+

+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file

+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)

+# and it is also possible to disable source filtering for a specific pattern

+# using *.ext= (so without naming a filter). This option only has effect when

+# FILTER_SOURCE_FILES is enabled.

+

+FILTER_SOURCE_PATTERNS =

+

+# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that

+# is part of the input, its contents will be placed on the main page (index.html).

+# This can be useful if you have a project on for instance GitHub and want reuse

+# the introduction page also for the doxygen output.

+

+USE_MDFILE_AS_MAINPAGE =

+

+#---------------------------------------------------------------------------

+# configuration options related to source browsing

+#---------------------------------------------------------------------------

+

+# If the SOURCE_BROWSER tag is set to YES then a list of source files will

+# be generated. Documented entities will be cross-referenced with these sources.

+# Note: To get rid of all source code in the generated output, make sure also

+# VERBATIM_HEADERS is set to NO.

+

+SOURCE_BROWSER         = YES

+

+# Setting the INLINE_SOURCES tag to YES will include the body

+# of functions and classes directly in the documentation.

+

+INLINE_SOURCES         = NO

+

+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct

+# doxygen to hide any special comment blocks from generated source code

+# fragments. Normal C, C++ and Fortran comments will always remain visible.

+

+STRIP_CODE_COMMENTS    = YES

+

+# If the REFERENCED_BY_RELATION tag is set to YES

+# then for each documented function all documented

+# functions referencing it will be listed.

+

+REFERENCED_BY_RELATION = NO

+

+# If the REFERENCES_RELATION tag is set to YES

+# then for each documented function all documented entities

+# called/used by that function will be listed.

+

+REFERENCES_RELATION    = NO

+

+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)

+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from

+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will

+# link to the source code.

+# Otherwise they will link to the documentation.

+

+REFERENCES_LINK_SOURCE = YES

+

+# If the USE_HTAGS tag is set to YES then the references to source code

+# will point to the HTML generated by the htags(1) tool instead of doxygen

+# built-in source browser. The htags tool is part of GNU's global source

+# tagging system (see http://www.gnu.org/software/global/global.html). You

+# will need version 4.8.6 or higher.

+

+USE_HTAGS              = NO

+

+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen

+# will generate a verbatim copy of the header file for each class for

+# which an include is specified. Set to NO to disable this.

+

+VERBATIM_HEADERS       = YES

+

+#---------------------------------------------------------------------------

+# configuration options related to the alphabetical class index

+#---------------------------------------------------------------------------

+

+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index

+# of all compounds will be generated. Enable this if the project

+# contains a lot of classes, structs, unions or interfaces.

+

+ALPHABETICAL_INDEX     = YES

+

+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then

+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns

+# in which this list will be split (can be a number in the range [1..20])

+

+COLS_IN_ALPHA_INDEX    = 5

+

+# In case all classes in a project start with a common prefix, all

+# classes will be put under the same header in the alphabetical index.

+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that

+# should be ignored while generating the index headers.

+

+IGNORE_PREFIX          =

+

+#---------------------------------------------------------------------------

+# configuration options related to the HTML output

+#---------------------------------------------------------------------------

+

+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will

+# generate HTML output.

+

+GENERATE_HTML          = YES

+

+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.

+# If a relative path is entered the value of OUTPUT_DIRECTORY will be

+# put in front of it. If left blank `html' will be used as the default path.

+

+HTML_OUTPUT            = html

+

+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for

+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank

+# doxygen will generate files with .html extension.

+

+HTML_FILE_EXTENSION    = .html

+

+# The HTML_HEADER tag can be used to specify a personal HTML header for

+# each generated HTML page. If it is left blank doxygen will generate a

+# standard header. Note that when using a custom header you are responsible

+#  for the proper inclusion of any scripts and style sheets that doxygen

+# needs, which is dependent on the configuration options used.

+# It is advised to generate a default header using "doxygen -w html

+# header.html footer.html stylesheet.css YourConfigFile" and then modify

+# that header. Note that the header is subject to change so you typically

+# have to redo this when upgrading to a newer version of doxygen or when

+# changing the value of configuration settings such as GENERATE_TREEVIEW!

+

+HTML_HEADER            =

+

+# The HTML_FOOTER tag can be used to specify a personal HTML footer for

+# each generated HTML page. If it is left blank doxygen will generate a

+# standard footer.

+

+HTML_FOOTER            =

+

+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading

+# style sheet that is used by each HTML page. It can be used to

+# fine-tune the look of the HTML output. If left blank doxygen will

+# generate a default style sheet. Note that it is recommended to use

+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this

+# tag will in the future become obsolete.

+

+HTML_STYLESHEET        =

+

+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional

+# user-defined cascading style sheet that is included after the standard

+# style sheets created by doxygen. Using this option one can overrule

+# certain style aspects. This is preferred over using HTML_STYLESHEET

+# since it does not replace the standard style sheet and is therefor more

+# robust against future updates. Doxygen will copy the style sheet file to

+# the output directory.

+

+HTML_EXTRA_STYLESHEET  =

+

+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or

+# other source files which should be copied to the HTML output directory. Note

+# that these files will be copied to the base HTML output directory. Use the

+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these

+# files. In the HTML_STYLESHEET file, use the file name only. Also note that

+# the files will be copied as-is; there are no commands or markers available.

+

+HTML_EXTRA_FILES       =

+

+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.

+# Doxygen will adjust the colors in the style sheet and background images

+# according to this color. Hue is specified as an angle on a colorwheel,

+# see http://en.wikipedia.org/wiki/Hue for more information.

+# For instance the value 0 represents red, 60 is yellow, 120 is green,

+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.

+# The allowed range is 0 to 359.

+

+HTML_COLORSTYLE_HUE    = 240

+

+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of

+# the colors in the HTML output. For a value of 0 the output will use

+# grayscales only. A value of 255 will produce the most vivid colors.

+

+HTML_COLORSTYLE_SAT    = 100

+

+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to

+# the luminance component of the colors in the HTML output. Values below

+# 100 gradually make the output lighter, whereas values above 100 make

+# the output darker. The value divided by 100 is the actual gamma applied,

+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,

+# and 100 does not change the gamma.

+

+HTML_COLORSTYLE_GAMMA  = 80

+

+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML

+# page will contain the date and time when the page was generated. Setting

+# this to NO can help when comparing the output of multiple runs.

+

+HTML_TIMESTAMP         = YES

+

+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML

+# documentation will contain sections that can be hidden and shown after the

+# page has loaded.

+

+HTML_DYNAMIC_SECTIONS  = YES

+

+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of

+# entries shown in the various tree structured indices initially; the user

+# can expand and collapse entries dynamically later on. Doxygen will expand

+# the tree to such a level that at most the specified number of entries are

+# visible (unless a fully collapsed tree already exceeds this amount).

+# So setting the number of entries 1 will produce a full collapsed tree by

+# default. 0 is a special value representing an infinite number of entries

+# and will result in a full expanded tree by default.

+

+HTML_INDEX_NUM_ENTRIES = 100

+

+# If the GENERATE_DOCSET tag is set to YES, additional index files

+# will be generated that can be used as input for Apple's Xcode 3

+# integrated development environment, introduced with OSX 10.5 (Leopard).

+# To create a documentation set, doxygen will generate a Makefile in the

+# HTML output directory. Running make will produce the docset in that

+# directory and running "make install" will install the docset in

+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find

+# it at startup.

+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html

+# for more information.

+

+GENERATE_DOCSET        = NO

+

+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the

+# feed. A documentation feed provides an umbrella under which multiple

+# documentation sets from a single provider (such as a company or product suite)

+# can be grouped.

+

+DOCSET_FEEDNAME        = "Doxygen generated docs"

+

+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that

+# should uniquely identify the documentation set bundle. This should be a

+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen

+# will append .docset to the name.

+

+DOCSET_BUNDLE_ID       = org.doxygen.Project

+

+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely

+# identify the documentation publisher. This should be a reverse domain-name

+# style string, e.g. com.mycompany.MyDocSet.documentation.

+

+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher

+

+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.

+

+DOCSET_PUBLISHER_NAME  = Publisher

+

+# If the GENERATE_HTMLHELP tag is set to YES, additional index files

+# will be generated that can be used as input for tools like the

+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)

+# of the generated HTML documentation.

+

+GENERATE_HTMLHELP      = NO

+

+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can

+# be used to specify the file name of the resulting .chm file. You

+# can add a path in front of the file if the result should not be

+# written to the html output directory.

+

+CHM_FILE               =

+

+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can

+# be used to specify the location (absolute path including file name) of

+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run

+# the HTML help compiler on the generated index.hhp.

+

+HHC_LOCATION           =

+

+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag

+# controls if a separate .chi index file is generated (YES) or that

+# it should be included in the master .chm file (NO).

+

+GENERATE_CHI           = NO

+

+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING

+# is used to encode HtmlHelp index (hhk), content (hhc) and project file

+# content.

+

+CHM_INDEX_ENCODING     =

+

+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag

+# controls whether a binary table of contents is generated (YES) or a

+# normal table of contents (NO) in the .chm file.

+

+BINARY_TOC             = NO

+

+# The TOC_EXPAND flag can be set to YES to add extra items for group members

+# to the contents of the HTML help documentation and to the tree view.

+

+TOC_EXPAND             = NO

+

+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and

+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated

+# that can be used as input for Qt's qhelpgenerator to generate a

+# Qt Compressed Help (.qch) of the generated HTML documentation.

+

+GENERATE_QHP           = NO

+

+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can

+# be used to specify the file name of the resulting .qch file.

+# The path specified is relative to the HTML output folder.

+

+QCH_FILE               =

+

+# The QHP_NAMESPACE tag specifies the namespace to use when generating

+# Qt Help Project output. For more information please see

+# http://doc.trolltech.com/qthelpproject.html#namespace

+

+QHP_NAMESPACE          = org.doxygen.Project

+

+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating

+# Qt Help Project output. For more information please see

+# http://doc.trolltech.com/qthelpproject.html#virtual-folders

+

+QHP_VIRTUAL_FOLDER     = doc

+

+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to

+# add. For more information please see

+# http://doc.trolltech.com/qthelpproject.html#custom-filters

+

+QHP_CUST_FILTER_NAME   =

+

+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the

+# custom filter to add. For more information please see

+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">

+# Qt Help Project / Custom Filters</a>.

+

+QHP_CUST_FILTER_ATTRS  =

+

+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this

+# project's

+# filter section matches.

+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">

+# Qt Help Project / Filter Attributes</a>.

+

+QHP_SECT_FILTER_ATTRS  =

+

+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can

+# be used to specify the location of Qt's qhelpgenerator.

+# If non-empty doxygen will try to run qhelpgenerator on the generated

+# .qhp file.

+

+QHG_LOCATION           =

+

+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files

+#  will be generated, which together with the HTML files, form an Eclipse help

+# plugin. To install this plugin and make it available under the help contents

+# menu in Eclipse, the contents of the directory containing the HTML and XML

+# files needs to be copied into the plugins directory of eclipse. The name of

+# the directory within the plugins directory should be the same as

+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before

+# the help appears.

+

+GENERATE_ECLIPSEHELP   = NO

+

+# A unique identifier for the eclipse help plugin. When installing the plugin

+# the directory name containing the HTML and XML files should also have

+# this name.

+

+ECLIPSE_DOC_ID         = org.doxygen.Project

+

+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)

+# at top of each HTML page. The value NO (the default) enables the index and

+# the value YES disables it. Since the tabs have the same information as the

+# navigation tree you can set this option to NO if you already set

+# GENERATE_TREEVIEW to YES.

+

+DISABLE_INDEX          = NO

+

+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index

+# structure should be generated to display hierarchical information.

+# If the tag value is set to YES, a side panel will be generated

+# containing a tree-like index structure (just like the one that

+# is generated for HTML Help). For this to work a browser that supports

+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).

+# Windows users are probably better off using the HTML help feature.

+# Since the tree basically has the same information as the tab index you

+# could consider to set DISABLE_INDEX to NO when enabling this option.

+

+GENERATE_TREEVIEW      = NO

+

+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values

+# (range [0,1..20]) that doxygen will group on one line in the generated HTML

+# documentation. Note that a value of 0 will completely suppress the enum

+# values from appearing in the overview section.

+

+ENUM_VALUES_PER_LINE   = 4

+

+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be

+# used to set the initial width (in pixels) of the frame in which the tree

+# is shown.

+

+TREEVIEW_WIDTH         = 250

+

+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open

+# links to external symbols imported via tag files in a separate window.

+

+EXT_LINKS_IN_WINDOW    = NO

+

+# Use this tag to change the font size of Latex formulas included

+# as images in the HTML documentation. The default is 10. Note that

+# when you change the font size after a successful doxygen run you need

+# to manually remove any form_*.png images from the HTML output directory

+# to force them to be regenerated.

+

+FORMULA_FONTSIZE       = 10

+

+# Use the FORMULA_TRANPARENT tag to determine whether or not the images

+# generated for formulas are transparent PNGs. Transparent PNGs are

+# not supported properly for IE 6.0, but are supported on all modern browsers.

+# Note that when changing this option you need to delete any form_*.png files

+# in the HTML output before the changes have effect.

+

+FORMULA_TRANSPARENT    = YES

+

+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax

+# (see http://www.mathjax.org) which uses client side Javascript for the

+# rendering instead of using prerendered bitmaps. Use this if you do not

+# have LaTeX installed or if you want to formulas look prettier in the HTML

+# output. When enabled you may also need to install MathJax separately and

+# configure the path to it using the MATHJAX_RELPATH option.

+

+USE_MATHJAX            = NO

+

+# When MathJax is enabled you can set the default output format to be used for

+# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and

+# SVG. The default value is HTML-CSS, which is slower, but has the best

+# compatibility.

+

+MATHJAX_FORMAT         = HTML-CSS

+

+# When MathJax is enabled you need to specify the location relative to the

+# HTML output directory using the MATHJAX_RELPATH option. The destination

+# directory should contain the MathJax.js script. For instance, if the mathjax

+# directory is located at the same level as the HTML output directory, then

+# MATHJAX_RELPATH should be ../mathjax. The default value points to

+# the MathJax Content Delivery Network so you can quickly see the result without

+# installing MathJax.

+# However, it is strongly recommended to install a local

+# copy of MathJax from http://www.mathjax.org before deployment.

+

+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest

+

+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension

+# names that should be enabled during MathJax rendering.

+

+MATHJAX_EXTENSIONS     =

+

+# When the SEARCHENGINE tag is enabled doxygen will generate a search box

+# for the HTML output. The underlying search engine uses javascript

+# and DHTML and should work on any modern browser. Note that when using

+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets

+# (GENERATE_DOCSET) there is already a search function so this one should

+# typically be disabled. For large projects the javascript based search engine

+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.

+

+SEARCHENGINE           = YES

+

+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be

+# implemented using a web server instead of a web client using Javascript.

+# There are two flavours of web server based search depending on the

+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for

+# searching and an index file used by the script. When EXTERNAL_SEARCH is

+# enabled the indexing and searching needs to be provided by external tools.

+# See the manual for details.

+

+SERVER_BASED_SEARCH    = NO

+

+# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP

+# script for searching. Instead the search results are written to an XML file

+# which needs to be processed by an external indexer. Doxygen will invoke an

+# external search engine pointed to by the SEARCHENGINE_URL option to obtain

+# the search results. Doxygen ships with an example indexer (doxyindexer) and

+# search engine (doxysearch.cgi) which are based on the open source search engine

+# library Xapian. See the manual for configuration details.

+

+EXTERNAL_SEARCH        = NO

+

+# The SEARCHENGINE_URL should point to a search engine hosted by a web server

+# which will returned the search results when EXTERNAL_SEARCH is enabled.

+# Doxygen ships with an example search engine (doxysearch) which is based on

+# the open source search engine library Xapian. See the manual for configuration

+# details.

+

+SEARCHENGINE_URL       =

+

+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed

+# search data is written to a file for indexing by an external tool. With the

+# SEARCHDATA_FILE tag the name of this file can be specified.

+

+SEARCHDATA_FILE        = searchdata.xml

+

+# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the

+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is

+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple

+# projects and redirect the results back to the right project.

+

+EXTERNAL_SEARCH_ID     =

+

+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen

+# projects other than the one defined by this configuration file, but that are

+# all added to the same external search index. Each project needs to have a

+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id

+# of to a relative location where the documentation can be found.

+# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...

+

+EXTRA_SEARCH_MAPPINGS  =

+

+#---------------------------------------------------------------------------

+# configuration options related to the LaTeX output

+#---------------------------------------------------------------------------

+

+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will

+# generate Latex output.

+

+GENERATE_LATEX         = NO

+

+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.

+# If a relative path is entered the value of OUTPUT_DIRECTORY will be

+# put in front of it. If left blank `latex' will be used as the default path.

+

+LATEX_OUTPUT           = latex

+

+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be

+# invoked. If left blank `latex' will be used as the default command name.

+# Note that when enabling USE_PDFLATEX this option is only used for

+# generating bitmaps for formulas in the HTML output, but not in the

+# Makefile that is written to the output directory.

+

+LATEX_CMD_NAME         = latex

+

+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to

+# generate index for LaTeX. If left blank `makeindex' will be used as the

+# default command name.

+

+MAKEINDEX_CMD_NAME     = makeindex

+

+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact

+# LaTeX documents. This may be useful for small projects and may help to

+# save some trees in general.

+

+COMPACT_LATEX          = NO

+

+# The PAPER_TYPE tag can be used to set the paper type that is used

+# by the printer. Possible values are: a4, letter, legal and

+# executive. If left blank a4wide will be used.

+

+PAPER_TYPE             = a4

+

+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX

+# packages that should be included in the LaTeX output.

+

+EXTRA_PACKAGES         =

+

+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for

+# the generated latex document. The header should contain everything until

+# the first chapter. If it is left blank doxygen will generate a

+# standard header. Notice: only use this tag if you know what you are doing!

+

+LATEX_HEADER           =

+

+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for

+# the generated latex document. The footer should contain everything after

+# the last chapter. If it is left blank doxygen will generate a

+# standard footer. Notice: only use this tag if you know what you are doing!

+

+LATEX_FOOTER           =

+

+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated

+# is prepared for conversion to pdf (using ps2pdf). The pdf file will

+# contain links (just like the HTML output) instead of page references

+# This makes the output suitable for online browsing using a pdf viewer.

+

+PDF_HYPERLINKS         = YES

+

+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of

+# plain latex in the generated Makefile. Set this option to YES to get a

+# higher quality PDF documentation.

+

+USE_PDFLATEX           = YES

+

+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.

+# command to the generated LaTeX files. This will instruct LaTeX to keep

+# running if errors occur, instead of asking the user for help.

+# This option is also used when generating formulas in HTML.

+

+LATEX_BATCHMODE        = NO

+

+# If LATEX_HIDE_INDICES is set to YES then doxygen will not

+# include the index chapters (such as File Index, Compound Index, etc.)

+# in the output.

+

+LATEX_HIDE_INDICES     = NO

+

+# If LATEX_SOURCE_CODE is set to YES then doxygen will include

+# source code with syntax highlighting in the LaTeX output.

+# Note that which sources are shown also depends on other settings

+# such as SOURCE_BROWSER.

+

+LATEX_SOURCE_CODE      = NO

+

+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the

+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See

+# http://en.wikipedia.org/wiki/BibTeX for more info.

+

+LATEX_BIB_STYLE        = plain

+

+#---------------------------------------------------------------------------

+# configuration options related to the RTF output

+#---------------------------------------------------------------------------

+

+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output

+# The RTF output is optimized for Word 97 and may not look very pretty with

+# other RTF readers or editors.

+

+GENERATE_RTF           = NO

+

+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.

+# If a relative path is entered the value of OUTPUT_DIRECTORY will be

+# put in front of it. If left blank `rtf' will be used as the default path.

+

+RTF_OUTPUT             = rtf

+

+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact

+# RTF documents. This may be useful for small projects and may help to

+# save some trees in general.

+

+COMPACT_RTF            = NO

+

+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated

+# will contain hyperlink fields. The RTF file will

+# contain links (just like the HTML output) instead of page references.

+# This makes the output suitable for online browsing using WORD or other

+# programs which support those fields.

+# Note: wordpad (write) and others do not support links.

+

+RTF_HYPERLINKS         = NO

+

+# Load style sheet definitions from file. Syntax is similar to doxygen's

+# config file, i.e. a series of assignments. You only have to provide

+# replacements, missing definitions are set to their default value.

+

+RTF_STYLESHEET_FILE    =

+

+# Set optional variables used in the generation of an rtf document.

+# Syntax is similar to doxygen's config file.

+

+RTF_EXTENSIONS_FILE    =

+

+#---------------------------------------------------------------------------

+# configuration options related to the man page output

+#---------------------------------------------------------------------------

+

+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will

+# generate man pages

+

+GENERATE_MAN           = NO

+

+# The MAN_OUTPUT tag is used to specify where the man pages will be put.

+# If a relative path is entered the value of OUTPUT_DIRECTORY will be

+# put in front of it. If left blank `man' will be used as the default path.

+

+MAN_OUTPUT             = man

+

+# The MAN_EXTENSION tag determines the extension that is added to

+# the generated man pages (default is the subroutine's section .3)

+

+MAN_EXTENSION          = .3

+

+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,

+# then it will generate one additional man file for each entity

+# documented in the real man page(s). These additional files

+# only source the real man page, but without them the man command

+# would be unable to find the correct page. The default is NO.

+

+MAN_LINKS              = NO

+

+#---------------------------------------------------------------------------

+# configuration options related to the XML output

+#---------------------------------------------------------------------------

+

+# If the GENERATE_XML tag is set to YES Doxygen will

+# generate an XML file that captures the structure of

+# the code including all documentation.

+

+GENERATE_XML           = NO

+

+# The XML_OUTPUT tag is used to specify where the XML pages will be put.

+# If a relative path is entered the value of OUTPUT_DIRECTORY will be

+# put in front of it. If left blank `xml' will be used as the default path.

+

+XML_OUTPUT             = xml

+

+# The XML_SCHEMA tag can be used to specify an XML schema,

+# which can be used by a validating XML parser to check the

+# syntax of the XML files.

+

+XML_SCHEMA             =

+

+# The XML_DTD tag can be used to specify an XML DTD,

+# which can be used by a validating XML parser to check the

+# syntax of the XML files.

+

+XML_DTD                =

+

+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will

+# dump the program listings (including syntax highlighting

+# and cross-referencing information) to the XML output. Note that

+# enabling this will significantly increase the size of the XML output.

+

+XML_PROGRAMLISTING     = YES

+

+#---------------------------------------------------------------------------

+# configuration options for the AutoGen Definitions output

+#---------------------------------------------------------------------------

+

+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will

+# generate an AutoGen Definitions (see autogen.sf.net) file

+# that captures the structure of the code including all

+# documentation. Note that this feature is still experimental

+# and incomplete at the moment.

+

+GENERATE_AUTOGEN_DEF   = NO

+

+#---------------------------------------------------------------------------

+# configuration options related to the Perl module output

+#---------------------------------------------------------------------------

+

+# If the GENERATE_PERLMOD tag is set to YES Doxygen will

+# generate a Perl module file that captures the structure of

+# the code including all documentation. Note that this

+# feature is still experimental and incomplete at the

+# moment.

+

+GENERATE_PERLMOD       = NO

+

+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate

+# the necessary Makefile rules, Perl scripts and LaTeX code to be able

+# to generate PDF and DVI output from the Perl module output.

+

+PERLMOD_LATEX          = NO

+

+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be

+# nicely formatted so it can be parsed by a human reader.

+# This is useful

+# if you want to understand what is going on.

+# On the other hand, if this

+# tag is set to NO the size of the Perl module output will be much smaller

+# and Perl will parse it just the same.

+

+PERLMOD_PRETTY         = YES

+

+# The names of the make variables in the generated doxyrules.make file

+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.

+# This is useful so different doxyrules.make files included by the same

+# Makefile don't overwrite each other's variables.

+

+PERLMOD_MAKEVAR_PREFIX =

+

+#---------------------------------------------------------------------------

+# Configuration options related to the preprocessor

+#---------------------------------------------------------------------------

+

+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will

+# evaluate all C-preprocessor directives found in the sources and include

+# files.

+

+ENABLE_PREPROCESSING   = YES

+

+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro

+# names in the source code. If set to NO (the default) only conditional

+# compilation will be performed. Macro expansion can be done in a controlled

+# way by setting EXPAND_ONLY_PREDEF to YES.

+

+MACRO_EXPANSION        = NO

+

+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES

+# then the macro expansion is limited to the macros specified with the

+# PREDEFINED and EXPAND_AS_DEFINED tags.

+

+EXPAND_ONLY_PREDEF     = NO

+

+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files

+# pointed to by INCLUDE_PATH will be searched when a #include is found.

+

+SEARCH_INCLUDES        = YES

+

+# The INCLUDE_PATH tag can be used to specify one or more directories that

+# contain include files that are not input files but should be processed by

+# the preprocessor.

+

+INCLUDE_PATH           =

+

+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard

+# patterns (like *.h and *.hpp) to filter out the header-files in the

+# directories. If left blank, the patterns specified with FILE_PATTERNS will

+# be used.

+

+INCLUDE_FILE_PATTERNS  =

+

+# The PREDEFINED tag can be used to specify one or more macro names that

+# are defined before the preprocessor is started (similar to the -D option of

+# gcc). The argument of the tag is a list of macros of the form: name

+# or name=definition (no spaces). If the definition and the = are

+# omitted =1 is assumed. To prevent a macro definition from being

+# undefined via #undef or recursively expanded use the := operator

+# instead of the = operator.

+

+PREDEFINED             =

+

+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then

+# this tag can be used to specify a list of macro names that should be expanded.

+# The macro definition that is found in the sources will be used.

+# Use the PREDEFINED tag if you want to use a different macro definition that

+# overrules the definition found in the source code.

+

+EXPAND_AS_DEFINED      =

+

+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then

+# doxygen's preprocessor will remove all references to function-like macros

+# that are alone on a line, have an all uppercase name, and do not end with a

+# semicolon, because these will confuse the parser if not removed.

+

+SKIP_FUNCTION_MACROS   = YES

+

+#---------------------------------------------------------------------------

+# Configuration::additions related to external references

+#---------------------------------------------------------------------------

+

+# The TAGFILES option can be used to specify one or more tagfiles. For each

+# tag file the location of the external documentation should be added. The

+# format of a tag file without this location is as follows:

+#

+# TAGFILES = file1 file2 ...

+# Adding location for the tag files is done as follows:

+#

+# TAGFILES = file1=loc1 "file2 = loc2" ...

+# where "loc1" and "loc2" can be relative or absolute paths

+# or URLs. Note that each tag file must have a unique name (where the name does

+# NOT include the path). If a tag file is not located in the directory in which

+# doxygen is run, you must also specify the path to the tagfile here.

+

+TAGFILES               =

+

+# When a file name is specified after GENERATE_TAGFILE, doxygen will create

+# a tag file that is based on the input files it reads.

+

+GENERATE_TAGFILE       =

+

+# If the ALLEXTERNALS tag is set to YES all external classes will be listed

+# in the class index. If set to NO only the inherited external classes

+# will be listed.

+

+ALLEXTERNALS           = NO

+

+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed

+# in the modules index. If set to NO, only the current project's groups will

+# be listed.

+

+EXTERNAL_GROUPS        = YES

+

+# The PERL_PATH should be the absolute path and name of the perl script

+# interpreter (i.e. the result of `which perl').

+

+PERL_PATH              = /usr/bin/perl

+

+#---------------------------------------------------------------------------

+# Configuration options related to the dot tool

+#---------------------------------------------------------------------------

+

+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will

+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base

+# or super classes. Setting the tag to NO turns the diagrams off. Note that

+# this option also works with HAVE_DOT disabled, but it is recommended to

+# install and use dot, since it yields more powerful graphs.

+

+CLASS_DIAGRAMS         = YES

+

+# You can define message sequence charts within doxygen comments using the \msc

+# command. Doxygen will then run the mscgen tool (see

+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the

+# documentation. The MSCGEN_PATH tag allows you to specify the directory where

+# the mscgen tool resides. If left empty the tool is assumed to be found in the

+# default search path.

+

+MSCGEN_PATH            =

+

+# If set to YES, the inheritance and collaboration graphs will hide

+# inheritance and usage relations if the target is undocumented

+# or is not a class.

+

+HIDE_UNDOC_RELATIONS   = YES

+

+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is

+# available from the path. This tool is part of Graphviz, a graph visualization

+# toolkit from AT&T and Lucent Bell Labs. The other options in this section

+# have no effect if this option is set to NO (the default)

+

+HAVE_DOT               = YES

+

+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is

+# allowed to run in parallel. When set to 0 (the default) doxygen will

+# base this on the number of processors available in the system. You can set it

+# explicitly to a value larger than 0 to get control over the balance

+# between CPU load and processing speed.

+

+DOT_NUM_THREADS        = 0

+

+# By default doxygen will use the Helvetica font for all dot files that

+# doxygen generates. When you want a differently looking font you can specify

+# the font name using DOT_FONTNAME. You need to make sure dot is able to find

+# the font, which can be done by putting it in a standard location or by setting

+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the

+# directory containing the font.

+

+DOT_FONTNAME           = Helvetica

+

+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.

+# The default size is 10pt.

+

+DOT_FONTSIZE           = 10

+

+# By default doxygen will tell dot to use the Helvetica font.

+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to

+# set the path where dot can find it.

+

+DOT_FONTPATH           =

+

+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen

+# will generate a graph for each documented class showing the direct and

+# indirect inheritance relations. Setting this tag to YES will force the

+# CLASS_DIAGRAMS tag to NO.

+

+CLASS_GRAPH            = YES

+

+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen

+# will generate a graph for each documented class showing the direct and

+# indirect implementation dependencies (inheritance, containment, and

+# class references variables) of the class with other documented classes.

+

+COLLABORATION_GRAPH    = YES

+

+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen

+# will generate a graph for groups, showing the direct groups dependencies

+

+GROUP_GRAPHS           = YES

+

+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and

+# collaboration diagrams in a style similar to the OMG's Unified Modeling

+# Language.

+

+UML_LOOK               = NO

+

+# If the UML_LOOK tag is enabled, the fields and methods are shown inside

+# the class node. If there are many fields or methods and many nodes the

+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS

+# threshold limits the number of items for each type to make the size more

+# managable. Set this to 0 for no limit. Note that the threshold may be

+# exceeded by 50% before the limit is enforced.

+

+UML_LIMIT_NUM_FIELDS   = 10

+

+# If set to YES, the inheritance and collaboration graphs will show the

+# relations between templates and their instances.

+

+TEMPLATE_RELATIONS     = NO

+

+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT

+# tags are set to YES then doxygen will generate a graph for each documented

+# file showing the direct and indirect include dependencies of the file with

+# other documented files.

+

+INCLUDE_GRAPH          = YES

+

+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and

+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each

+# documented header file showing the documented files that directly or

+# indirectly include this file.

+

+INCLUDED_BY_GRAPH      = YES

+

+# If the CALL_GRAPH and HAVE_DOT options are set to YES then

+# doxygen will generate a call dependency graph for every global function

+# or class method. Note that enabling this option will significantly increase

+# the time of a run. So in most cases it will be better to enable call graphs

+# for selected functions only using the \callgraph command.

+

+CALL_GRAPH             = NO

+

+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then

+# doxygen will generate a caller dependency graph for every global function

+# or class method. Note that enabling this option will significantly increase

+# the time of a run. So in most cases it will be better to enable caller

+# graphs for selected functions only using the \callergraph command.

+

+CALLER_GRAPH           = NO

+

+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen

+# will generate a graphical hierarchy of all classes instead of a textual one.

+

+GRAPHICAL_HIERARCHY    = YES

+

+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES

+# then doxygen will show the dependencies a directory has on other directories

+# in a graphical way. The dependency relations are determined by the #include

+# relations between the files in the directories.

+

+DIRECTORY_GRAPH        = YES

+

+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images

+# generated by dot. Possible values are svg, png, jpg, or gif.

+# If left blank png will be used. If you choose svg you need to set

+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files

+# visible in IE 9+ (other browsers do not have this requirement).

+

+DOT_IMAGE_FORMAT       = png

+

+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to

+# enable generation of interactive SVG images that allow zooming and panning.

+# Note that this requires a modern browser other than Internet Explorer.

+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you

+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files

+# visible. Older versions of IE do not have SVG support.

+

+INTERACTIVE_SVG        = NO

+

+# The tag DOT_PATH can be used to specify the path where the dot tool can be

+# found. If left blank, it is assumed the dot tool can be found in the path.

+

+DOT_PATH               =

+

+# The DOTFILE_DIRS tag can be used to specify one or more directories that

+# contain dot files that are included in the documentation (see the

+# \dotfile command).

+

+DOTFILE_DIRS           =

+

+# The MSCFILE_DIRS tag can be used to specify one or more directories that

+# contain msc files that are included in the documentation (see the

+# \mscfile command).

+

+MSCFILE_DIRS           =

+

+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of

+# nodes that will be shown in the graph. If the number of nodes in a graph

+# becomes larger than this value, doxygen will truncate the graph, which is

+# visualized by representing a node as a red box. Note that doxygen if the

+# number of direct children of the root node in a graph is already larger than

+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note

+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.

+

+DOT_GRAPH_MAX_NODES    = 50

+

+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the

+# graphs generated by dot. A depth value of 3 means that only nodes reachable

+# from the root by following a path via at most 3 edges will be shown. Nodes

+# that lay further from the root node will be omitted. Note that setting this

+# option to 1 or 2 may greatly reduce the computation time needed for large

+# code bases. Also note that the size of a graph can be further restricted by

+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.

+

+MAX_DOT_GRAPH_DEPTH    = 0

+

+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent

+# background. This is disabled by default, because dot on Windows does not

+# seem to support this out of the box. Warning: Depending on the platform used,

+# enabling this option may lead to badly anti-aliased labels on the edges of

+# a graph (i.e. they become hard to read).

+

+DOT_TRANSPARENT        = NO

+

+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output

+# files in one run (i.e. multiple -o and -T options on the command line). This

+# makes dot run faster, but since only newer versions of dot (>1.8.10)

+# support this, this feature is disabled by default.

+

+DOT_MULTI_TARGETS      = NO

+

+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will

+# generate a legend page explaining the meaning of the various boxes and

+# arrows in the dot generated graphs.

+

+GENERATE_LEGEND        = YES

+

+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will

+# remove the intermediate dot files that are used to generate

+# the various graphs.

+

+DOT_CLEANUP            = YES

diff --git a/LICENSE b/LICENSE
index 43fe17c..5285897 100644
--- a/LICENSE
+++ b/LICENSE
@@ -246,3 +246,9 @@
 WSDL4J (http://sf.net/projects/wsdl4j) wsdl4j:wsdl4j:jar:1.6.2
     License: CPL  (http://www.opensource.org/licenses/cpl1.0.txt)
 
+
+	
+In addition, the jUDDI GUI project includes a number of components and libraries with separate 
+copyright notices and license terms. Your use of those components are 
+subject to the terms and conditions of the following licenses. 
+See juddi-gui\license for details.
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
index 899208f..6d0457a 100644
--- a/NOTICE
+++ b/NOTICE
@@ -30,4 +30,7 @@
 		followed, or as required to translate it into languages other than
 		English.
 
-
+This product includes files and components protected under the Open Font License.
+These fonts can only be distributed as part of a piece of software, but not individually. See the license for details.
+http://scripts.sil.org/OFL.  More information on included components for the jUDDI GUI are located
+within the source tree at juddi-gui/license
diff --git a/juddi-client/src/main/java/org/apache/juddi/v3/client/config/Constants.java b/juddi-client/src/main/java/org/apache/juddi/v3/client/config/Constants.java
index 7f8186d..0a60b18 100644
--- a/juddi-client/src/main/java/org/apache/juddi/v3/client/config/Constants.java
+++ b/juddi-client/src/main/java/org/apache/juddi/v3/client/config/Constants.java
@@ -17,10 +17,13 @@
 

 package org.apache.juddi.v3.client.config;

 

+import org.apache.juddi.v3.client.UDDIConstants;

+

 /**

  * Contains all the juddi client constants

  * 

  * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>

+ * @see UDDIConstants

  */

 public class Constants {

 	

diff --git a/juddi-client/src/main/java/org/apache/juddi/v3/client/config/Property.java b/juddi-client/src/main/java/org/apache/juddi/v3/client/config/Property.java
index 57a6b6c..c8c9fb1 100644
--- a/juddi-client/src/main/java/org/apache/juddi/v3/client/config/Property.java
+++ b/juddi-client/src/main/java/org/apache/juddi/v3/client/config/Property.java
@@ -15,14 +15,10 @@
  *
  */
 package org.apache.juddi.v3.client.config;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Properties;
-
-import javax.xml.namespace.QName;
-
+/**
+ * Contains a properties that are used in the juddi client config (uddi.xml)
+ * 
+ */
 public class Property 
 {
 	public final static String UDDI_RELOAD_DELAY  ="reloadDelay";
diff --git a/juddi-client/src/main/java/org/apache/juddi/v3/client/config/UDDIClerk.java b/juddi-client/src/main/java/org/apache/juddi/v3/client/config/UDDIClerk.java
index 0a1deda..ccd2aec 100644
--- a/juddi-client/src/main/java/org/apache/juddi/v3/client/config/UDDIClerk.java
+++ b/juddi-client/src/main/java/org/apache/juddi/v3/client/config/UDDIClerk.java
@@ -18,7 +18,6 @@
 
 import java.io.Serializable;
 import java.lang.reflect.UndeclaredThrowableException;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.rmi.RemoteException;
 import java.util.ArrayList;
@@ -29,7 +28,6 @@
 import java.util.Properties;
 
 import javax.wsdl.Definition;
-import javax.wsdl.WSDLException;
 import javax.xml.ws.Holder;
 import javax.xml.ws.soap.SOAPFaultException;
 
@@ -42,6 +40,7 @@
 import org.apache.juddi.api_v3.NodeDetail;
 import org.apache.juddi.api_v3.SaveClerk;
 import org.apache.juddi.api_v3.SaveNode;
+import org.apache.juddi.v3.client.UDDIConstants;
 import org.apache.juddi.v3.client.mapping.ReadWSDL;
 import org.apache.juddi.v3.client.mapping.URLLocalizerDefaultImpl;
 import org.apache.juddi.v3.client.mapping.WSDL2UDDI;
@@ -51,6 +50,7 @@
 import org.uddi.api_v3.BusinessDetail;
 import org.uddi.api_v3.BusinessEntity;
 import org.uddi.api_v3.BusinessService;
+import org.uddi.api_v3.CategoryBag;
 import org.uddi.api_v3.DeleteBinding;
 import org.uddi.api_v3.DeleteBusiness;
 import org.uddi.api_v3.DeleteService;
@@ -64,6 +64,10 @@
 import org.uddi.api_v3.GetBusinessDetail;
 import org.uddi.api_v3.GetServiceDetail;
 import org.uddi.api_v3.GetTModelDetail;
+import org.uddi.api_v3.KeyedReference;
+import org.uddi.api_v3.Name;
+import org.uddi.api_v3.OverviewDoc;
+import org.uddi.api_v3.OverviewURL;
 import org.uddi.api_v3.RelatedBusinessesList;
 import org.uddi.api_v3.Result;
 import org.uddi.api_v3.SaveBinding;
@@ -80,686 +84,801 @@
 
 public class UDDIClerk implements Serializable {
 
-	private static final long serialVersionUID = -8597375975981358134L;
-	private Log log = LogFactory.getLog(this.getClass());
-	
-	protected String name;
-	protected UDDINode uddiNode;
-	protected String publisher;
-	protected String password;
-	
-	private Date tokenBirthDate;
-	private String authToken;
-	private String[] classWithAnnotations;
-	private WSDL[] wsdls;
-	private String managerName;
+    private static final long serialVersionUID = -8597375975981358134L;
+    private Log log = LogFactory.getLog(this.getClass());
+    protected String name;
+    protected UDDINode uddiNode;
+    protected String publisher;
+    protected String password;
+    private Date tokenBirthDate;
+    private String authToken;
+    private String[] classWithAnnotations;
+    private WSDL[] wsdls;
+    private String managerName;
+    private Map<String, Properties> services = new HashMap<String, Properties>();
 
-	private Map<String,Properties> services = new HashMap<String,Properties>(); 
+    public UDDIClerk() {
+        super();
+        // TODO Auto-generated constructor stub
+    }
 
-	
-	
-	public UDDIClerk() {
-		super();
-		// TODO Auto-generated constructor stub
-	}
-	
-	public UDDIClerk(Clerk clerk) {
-		super();
-		this.name = clerk.getName();
-		this.password = clerk.getPassword();
-		this.publisher = clerk.getPublisher();
-		this.uddiNode = new UDDINode(clerk.getNode());
-	}
+    public UDDIClerk(Clerk clerk) {
+        super();
+        this.name = clerk.getName();
+        this.password = clerk.getPassword();
+        this.publisher = clerk.getPublisher();
+        this.uddiNode = new UDDINode(clerk.getNode());
+    }
 
-	public String[] getClassWithAnnotations() {
-		return classWithAnnotations;
-	}
+    public String[] getClassWithAnnotations() {
+        return classWithAnnotations;
+    }
 
-	public void setClassWithAnnotations(String[] classWithAnnotations) {
-		this.classWithAnnotations = classWithAnnotations;
-	}
+    public void setClassWithAnnotations(String[] classWithAnnotations) {
+        this.classWithAnnotations = classWithAnnotations;
+    }
 
-	public Map<String, Properties> getServices() {
-		return services;
-	}
+    public Map<String, Properties> getServices() {
+        return services;
+    }
 
-	public void setServices(Map<String, Properties> services) {
-		this.services = services;
-	}
+    public void setServices(Map<String, Properties> services) {
+        this.services = services;
+    }
 
-	public String getManagerName() {
-		return managerName;
-	}
+    public String getManagerName() {
+        return managerName;
+    }
 
-	public void setManagerName(String managerName) {
-		this.managerName = managerName;
-	}
-	
-	public void registerWsdls() {
-		if (this.getWsdls()!=null) {
-			Properties properties = new Properties();
-			properties.putAll(this.getUDDINode().getProperties());
-			
-			for (WSDL wsdl : this.getWsdls()) {
-				try {
-					URL wsdlUrl = this.getClass().getClassLoader().getResource(wsdl.getFileName());
-					ReadWSDL rw = new ReadWSDL();
-					Definition wsdlDefinition = rw.readWSDL(wsdlUrl);
-					if (wsdl.keyDomain!=null) properties.setProperty("keyDomain", wsdl.keyDomain);
-					if (wsdl.businessKey!=null) properties.setProperty("businessKey", wsdl.getBusinessKey());
-					
-					WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(this, new URLLocalizerDefaultImpl(), properties);
-					wsdl2UDDI.registerBusinessServices(wsdlDefinition);
-				} catch (Exception e) {
-					log.error("Unable to register wsdl " + wsdl.getFileName() + " ." + e.getMessage(),e);
-				} catch (Throwable t) {
-					log.error("Unable to register wsdl " + wsdl.getFileName() + " ." + t.getMessage(),t);
-				}
-			}
-		}
-	}
-	
-	public void unRegisterWsdls() {
-		if (this.getWsdls()!=null) {
-			Properties properties = new Properties();
-			properties.putAll(this.getUDDINode().getProperties());
-			
-			for (WSDL wsdl : this.getWsdls()) {
-				try {
-					URL wsdlUrl = this.getClass().getClassLoader().getResource(wsdl.getFileName());
-					ReadWSDL rw = new ReadWSDL();
-					Definition wsdlDefinition = rw.readWSDL(wsdlUrl);
-					if (wsdl.keyDomain!=null) properties.setProperty("keyDomain", wsdl.keyDomain);
-					if (wsdl.businessKey!=null) properties.setProperty("businessKey", wsdl.getBusinessKey());
-					
-					WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(this, new URLLocalizerDefaultImpl(), properties);
-					wsdl2UDDI.unRegisterBusinessServices(wsdlDefinition);
-				} catch (Exception e) {
-					log.error("Unable to register wsdl " + wsdl.getFileName() + " ." + e.getMessage(),e);
-				} catch (Throwable t) {
-					log.error("Unable to register wsdl " + wsdl.getFileName() + " ." + t.getMessage(),t);
-				}
-			}
-		}
-	}
-	
-	public Subscription register(Subscription subscription) {
-		return register(subscription, this.getUDDINode().getApiNode());
-	}
-	/**
-	 * Register a Subscription.
-	 */
-	public Subscription register(Subscription subscription, Node node) {
-		
-		log.info("Registering subscription with key " + subscription.getSubscriptionKey());
-		Holder<List<Subscription>> holder = new Holder<List<Subscription>>();
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl());
-			
-			List<Subscription> subscriptions = new ArrayList<Subscription>();
-			subscriptions.add(subscription);
-			holder.value = subscriptions;
-			getUDDINode().getTransport().getUDDISubscriptionService(node.getSubscriptionUrl()).saveSubscription(authToken, holder);
-			if (log.isDebugEnabled()) log.debug("Registering subscription " +  subscription.getSubscriptionKey() + " completed.");
-		} catch (Exception e) {
-			log.error("Unable to register subscription " +  subscription.getSubscriptionKey()
-					+ " ." + e.getMessage(),e);
-		} catch (Throwable t) {
-			log.error("Unable to register subscriptionl " +  subscription.getSubscriptionKey()
-					+ " ." + t.getMessage(),t);
-		}
-		subscription = holder.value.get(0);
-		return subscription;
-	}
-	/**
-	 * Register a tModel, using the node of current clerk ('this').
-	 * 
-	 * @param tModel
-	 * @return the TModelDetail of the newly registered TModel
-	 */
-	public TModelDetail register(TModel tModel) {
-		return register(tModel, this.getUDDINode().getApiNode());
-	}
-	/**
-	 * Register a tModel.
-	 */
-	public TModelDetail register(TModel tModel, Node node) {
-		TModelDetail tModelDetail = null;
-		log.info("Registering tModel with key " + tModel.getTModelKey());
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl());
-			SaveTModel saveTModel = new SaveTModel();
-			saveTModel.setAuthInfo(authToken);
-			saveTModel.getTModel().add(tModel);
-			tModelDetail = getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).saveTModel(saveTModel);
-			if (log.isDebugEnabled()) log.debug("Registering tModel " +  tModel.getTModelKey() + " completed.");
-		} catch (Exception e) {
-			log.error("Unable to register tModel " +  tModel.getTModelKey()
-					+ " ." + e.getMessage(),e);
-		} catch (Throwable t) {
-			log.error("Unable to register tModel " +  tModel.getTModelKey()
-					+ " ." + t.getMessage(),t);
-		}
-		return tModelDetail;
-	}
-	
-	/**
-	 * Register a BindingTemplate, using the node of current clerk ('this').
-	 * 
-	 */
-	public BindingTemplate register(BindingTemplate binding) {
-		return register(binding, this.getUDDINode().getApiNode());
-	}
-	/**
-	 * Register a BindingTemplate.
-	 * 
-	 */
-	public BindingTemplate register(BindingTemplate binding, Node node) {
-		
-		BindingTemplate bindingTemplate=null;
-		log.info("Registering bindingTemplate with key " + binding.getBindingKey());
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl());
-			SaveBinding saveBinding = new SaveBinding();
-			saveBinding.setAuthInfo(authToken);
-			saveBinding.getBindingTemplate().add(binding);
-			BindingDetail bindingDetail = getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).saveBinding(saveBinding);
-			bindingTemplate = bindingDetail.getBindingTemplate().get(0);
-			if (log.isDebugEnabled()) log.debug("Registering template binding " + binding.getBindingKey() + " completed.");
-		} catch (Exception e) {
-			log.error("Unable to register template binding " + bindingTemplate.getBindingKey()
-					+ " ." + e.getMessage(),e);
-		} catch (Throwable t) {
-			log.error("Unable to register template binding " + bindingTemplate.getBindingKey()
-					+ " ." + t.getMessage(),t);
-		}
-		return bindingTemplate;
-	}
-	/**
-	 * Register a service, using the node of current clerk ('this').
-	 * 
-	 */
-	public BusinessService register(BusinessService service) {
-		return register(service, this.getUDDINode().getApiNode());
-	}
-	/**
-	 * Register a service.
-	 * 
-	 */
-	public BusinessService register(BusinessService service, Node node) {
-		
-		BusinessService businessService=null;
-		log.info("Registering service " + service.getName().get(0).getValue()
-				+ " with key " + service.getServiceKey());
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl());
-			SaveService saveService = new SaveService();
-			saveService.setAuthInfo(authToken);
-			saveService.getBusinessService().add(service);
-			ServiceDetail serviceDetail = getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).saveService(saveService);
-			businessService = serviceDetail.getBusinessService().get(0);
-			if (log.isDebugEnabled()) log.debug("Registering service " + service.getName().get(0).getValue() + " completed.");
-		} catch (Exception e) {
-			log.error("Unable to register service " + service.getName().get(0).getValue()
-					+ " ." + e.getMessage(),e);
-		} catch (Throwable t) {
-			log.error("Unable to register service " + service.getName().get(0).getValue()
-					+ " ." + t.getMessage(),t);
-		}
-		return businessService;
-	}
-	public BusinessEntity register(BusinessEntity business) {
-		return register(business, this.getUDDINode().getApiNode());
-	}
-	/**
-	 * Register a service.
-	 * returns null if not successful 
-	 */
-	public BusinessEntity register(BusinessEntity business, Node node) {
-		
-		BusinessEntity businessEntity=null;
-		log.info("Registering business " + business.getName().get(0).getValue()
-				+ " with key " + business.getBusinessKey());
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl());
-			SaveBusiness saveBusiness = new SaveBusiness();
-			saveBusiness.setAuthInfo(authToken);
-			saveBusiness.getBusinessEntity().add(business);
-			BusinessDetail businessDetail = getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).saveBusiness(saveBusiness);
-			businessEntity = businessDetail.getBusinessEntity().get(0);
-			if (log.isDebugEnabled()) log.debug("Registering businessEntity " + businessEntity.getName().get(0).getValue() + " completed.");
-		} catch (Exception e) {
-			log.error("Unable to register business " + business.getName().get(0).getValue()
-					+ " ." + e.getMessage(),e);
-		} catch (Throwable t) {
-			log.error("Unable to register business " + business.getName().get(0).getValue()
-					+ " ." + t.getMessage(),t);
-		}
-		return businessEntity;
-	}
-	
-	public void unRegisterBusiness(String businessKey) {
-		unRegisterBusiness(businessKey, this.getUDDINode().getApiNode());
-	}
-	/**
-	 * Unregisters the service with specified serviceKey.
-	 * @param service
-	 */
-	public void unRegisterBusiness(String businessKey, Node node) {
-		log.info("UnRegistering the business " + businessKey);
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl()); 
-			DeleteBusiness deleteBusiness = new DeleteBusiness();
-			deleteBusiness.setAuthInfo(authToken);
-			deleteBusiness.getBusinessKey().add(businessKey);
-			getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).deleteBusiness(deleteBusiness);
-		} catch (Exception e) {
-			log.error("Unable to register service " + businessKey
-					+ " ." + e.getMessage(),e);
-		}
-	}
-	
-	public void unRegisterService(String serviceKey) {
-		unRegisterService(serviceKey, this.getUDDINode().getApiNode());
-	}
-	/**
-	 * Unregisters the service with specified serviceKey.
-	 * @param service
-	 */
-	public void unRegisterService(String serviceKey, Node node) {
-		log.info("UnRegistering the service " + serviceKey);
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl()); 
-			DeleteService deleteService = new DeleteService();
-			deleteService.setAuthInfo(authToken);
-			deleteService.getServiceKey().add(serviceKey);
-			getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).deleteService(deleteService);
-		} catch (Exception e) {
-			log.error("Unable to register service " + serviceKey
-					+ " ." + e.getMessage(),e);
-		}
-	}
-	public void unRegisterBinding(String bindingKey) {
-		unRegisterBinding(bindingKey, this.getUDDINode().getApiNode());
-	}
-	/**
-	 * Unregisters the BindingTemplate with specified bindingKey. 
-	 * @param bindingTemplate
-	 * @param node
-	 */
-	public void unRegisterBinding(String bindingKey, Node node) {
-		log.info("UnRegistering binding key " + bindingKey);
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl());
-			DeleteBinding deleteBinding = new DeleteBinding();
-			deleteBinding.setAuthInfo(authToken);
-			deleteBinding.getBindingKey().add(bindingKey);
-			getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).deleteBinding(deleteBinding);
-		} catch (Exception e) {
-			log.error("Unable to unregister bindingkey " + bindingKey
-					+ " ." + e.getMessage(),e);
-		}
-	}
-	
-	public void unRegisterTModel(String tModelKey) {
-		unRegisterTModel(tModelKey, this.getUDDINode().getApiNode());
-	}
-	/**
-	 * Unregisters the BindingTemplate with specified bindingKey. 
-	 * @param bindingTemplate
-	 * @param node
-	 */
-	public void unRegisterTModel(String tModelKey, Node node) {
-		log.info("UnRegistering tModel key " + tModelKey);
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl());
-			DeleteTModel deleteTModel = new DeleteTModel();
-			deleteTModel.setAuthInfo(authToken);
-			deleteTModel.getTModelKey().add(tModelKey);
-			getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).deleteTModel(deleteTModel);
-		} catch (Exception e) {
-			log.error("Unable to unregister tModelkey " + tModelKey
-					+ " ." + e.getMessage(),e);
-		}
-	}
-	
-	public void unRegisterSubscription(String subscriptionKey) {
-		unRegisterSubscription(subscriptionKey, this.getUDDINode().getApiNode());
-	}
-	
-	public void unRegisterSubscription(String subscriptionKey, Node node) {
-		log.info("UnRegistering subscription with key " + subscriptionKey);
-		try {
-			String authToken = getAuthToken(node.getSecurityUrl());
-			DeleteSubscription deleteSubscription = new DeleteSubscription();
-			deleteSubscription.setAuthInfo(authToken);
-			deleteSubscription.getSubscriptionKey().add(subscriptionKey);
-			getUDDINode().getTransport().getUDDISubscriptionService(node.getSubscriptionUrl()).deleteSubscription(deleteSubscription);
-		} catch (Exception e) {
-			log.error("Unable to unregister subscription key " + subscriptionKey
-					+ " ." + e.getMessage(),e);
-		}
-	}
-	
-	
-	public TModelList findTModel(FindTModel findTModel) throws RemoteException, ConfigurationException, TransportException {
-		return findTModel(findTModel, this.getUDDINode().getApiNode());
-	}
-			
-	public TModelList findTModel(FindTModel findTModel, Node node) throws RemoteException, 
-	TransportException, ConfigurationException  {
-		
-		findTModel.setAuthInfo(getAuthToken(node.getSecurityUrl()));
-		try {
-			TModelList tModelList = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).findTModel(findTModel);
-			return tModelList;
-		} catch (DispositionReportFaultMessage dr) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
-			checkForErrorInDispositionReport(report, null, null);
-		} catch (SOAPFaultException sfe) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
-			checkForErrorInDispositionReport(report, null, null);
-		} catch (UndeclaredThrowableException ute) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
-			checkForErrorInDispositionReport(report, null, null);
-		}
-		return null;
-	}
-	
-	public TModelDetail getTModelDetail(String tModelKey) throws RemoteException, ConfigurationException, TransportException {
-		GetTModelDetail getTModelDetail = new GetTModelDetail();
-		getTModelDetail.getTModelKey().add(tModelKey);
-		return getTModelDetail(getTModelDetail);
-	}
-	
-	public TModelDetail getTModelDetail(GetTModelDetail getTModelDetail) throws RemoteException, ConfigurationException, TransportException {
-		return getTModelDetail(getTModelDetail, this.getUDDINode().getApiNode());
-	}
-	
-	public TModelDetail getTModelDetail(GetTModelDetail getTModelDetail, Node node) throws RemoteException, 
-	TransportException, ConfigurationException  {
-		
-		getTModelDetail.setAuthInfo(getAuthToken(node.getSecurityUrl()));
-		try {
-			TModelDetail tModelDetail = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).getTModelDetail(getTModelDetail);
-			return tModelDetail;
-		} catch (DispositionReportFaultMessage dr) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
-			checkForErrorInDispositionReport(report, null, null);
-		} catch (SOAPFaultException sfe) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
-			checkForErrorInDispositionReport(report, null, null);
-		} catch (UndeclaredThrowableException ute) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
-			checkForErrorInDispositionReport(report, null, null);
-		}
-		return null;
-	}
-   
-	public BusinessService findService(String serviceKey) throws RemoteException, 
-	TransportException, ConfigurationException  {
-		return findService(serviceKey, this.getUDDINode().getApiNode());
-	}
-	
-	public BusinessService findService(String serviceKey, Node node) throws RemoteException, 
-	TransportException, ConfigurationException  {
-		GetServiceDetail getServiceDetail = new GetServiceDetail();
-		getServiceDetail.getServiceKey().add(serviceKey);
-		getServiceDetail.setAuthInfo(getAuthToken(node.getSecurityUrl()));
-		try {
-			ServiceDetail sd = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).getServiceDetail(getServiceDetail);
-			List<BusinessService> businessServiceList = sd.getBusinessService();
-			if (businessServiceList.size() == 0) throw new ConfigurationException("Could not find Service with key=" + serviceKey);
-			return businessServiceList.get(0);
-		} catch (DispositionReportFaultMessage dr) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, serviceKey);
-		} catch (SOAPFaultException sfe) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, serviceKey);
-		} catch (UndeclaredThrowableException ute) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, serviceKey);
-		}
-		return null;
-	}
-	
-	public BindingTemplate findServiceBinding(String bindingKey) throws DispositionReportFaultMessage, RemoteException, 
-	TransportException, ConfigurationException  {
-		return findServiceBinding(bindingKey, this.getUDDINode().getApiNode());
-	}
-	
-	public BindingTemplate findServiceBinding(String bindingKey, Node node) throws DispositionReportFaultMessage, RemoteException, 
-			TransportException, ConfigurationException  {
-		GetBindingDetail getBindingDetail = new GetBindingDetail();
-		getBindingDetail.getBindingKey().add(bindingKey);
-		getBindingDetail.setAuthInfo(getAuthToken(node.getSecurityUrl()));
-		try {
-			BindingDetail bd = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).getBindingDetail(getBindingDetail);
-			List<BindingTemplate> bindingTemplateList = bd.getBindingTemplate();
-			if (bindingTemplateList.size() == 0) throw new ConfigurationException("Could not find ServiceBinding with key=" + bindingKey);
-			return bindingTemplateList.get(0);
-		} catch (DispositionReportFaultMessage dr) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, bindingKey);
-		} catch (SOAPFaultException sfe) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, bindingKey);
-		} catch (UndeclaredThrowableException ute) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, bindingKey);
-		}
-		return null;
-	}
-	
-	public BusinessEntity findBusiness(String businessKey) throws RemoteException, 
-	TransportException, ConfigurationException  {
-		return findBusiness(businessKey, this.getUDDINode().getApiNode());
-	}
-	
-	/**
-	 * Looks up the BusinessEntiry in the registry, will return null if is not found.
-	 * 
-	 * @param businessKey - the key we are looking for
-	 * @param node - the node which is going to be queried
-	 * @return BusinessEntity is found, or null if not found.
-	 * @throws RemoteException
-	 * @throws TransportException
-	 * @throws ConfigurationException
-	 */
-	public BusinessEntity findBusiness(String businessKey, Node node) throws RemoteException, 
-			TransportException, ConfigurationException  {
-		GetBusinessDetail getBusinessDetail = new GetBusinessDetail();
-		getBusinessDetail.getBusinessKey().add(businessKey);
-		getBusinessDetail.setAuthInfo(node.getSecurityUrl());
-		try {
-			BusinessDetail bd = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).getBusinessDetail(getBusinessDetail);
-			return bd.getBusinessEntity().get(0);
-		} catch (DispositionReportFaultMessage dr) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
-		} catch (SOAPFaultException sfe) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
-		} catch (UndeclaredThrowableException ute) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
-		}
-		return null;
-	}
-	
-	/**
-	 * Looks up the BusinessEntiry in the registry, will return null if is not found.
-	 * 
-	 * @param businessKey - the key we are looking for
-	 * @param node - the node which is going to be queried
-	 * @return BusinessEntity is found, or null if not found.
-	 * @throws RemoteException
-	 * @throws TransportException
-	 * @throws ConfigurationException
-	 */
-	public RelatedBusinessesList findRelatedBusinesses(String businessKey, Node node) throws RemoteException, 
-			TransportException, ConfigurationException  {
-		FindRelatedBusinesses findRelatedBusinesses = new FindRelatedBusinesses();
-		findRelatedBusinesses.setBusinessKey(businessKey);
-		findRelatedBusinesses.setAuthInfo(node.getSecurityUrl());
-		try {
-			RelatedBusinessesList rbl = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).findRelatedBusinesses(findRelatedBusinesses);
-			return rbl;
-		} catch (DispositionReportFaultMessage dr) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
-		} catch (SOAPFaultException sfe) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
-		} catch (UndeclaredThrowableException ute) {
-			DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
-			checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
-		}
-		return null;
-	}
-	
-	private void checkForErrorInDispositionReport(DispositionReport report, String Error, String entityKey) {
-		
-		if (entityKey!=null && report!=null && report.countainsErrorCode(DispositionReport.E_INVALID_KEY_PASSED)) {
-			log.info("entityKey " + entityKey + " was not found in the registry");
-		} else {
-			if (report == null) {
-				log.info("Missing DispositionReport");
-			} else {
-				for (Result result : report.getResult()) {
-					log.error(result.getErrInfo().getErrCode() + " " + result.getErrInfo().getValue());
-				}
-			}
-		}
-	}
-	
-	private String getAuthToken(String endpointURL) throws TransportException, DispositionReportFaultMessage, RemoteException {
-		//if the token is older then 10 minutes discard it, and create a new one.
-		if ((authToken!=null && !"".equals(authToken)) && (tokenBirthDate !=null && System.currentTimeMillis() > tokenBirthDate.getTime() + 600000 )) {
-			DiscardAuthToken discardAuthToken = new DiscardAuthToken();
-			discardAuthToken.setAuthInfo(authToken);
-			getUDDINode().getTransport().getUDDISecurityService(endpointURL).discardAuthToken(discardAuthToken);
-			authToken=null;
-		}
-		if (authToken==null || "".equals(authToken)) {
-			tokenBirthDate = new Date();
-			GetAuthToken getAuthToken = new GetAuthToken();
-			getAuthToken.setUserID(getPublisher());
-			getAuthToken.setCred(getPassword());
-			authToken = getUDDINode().getTransport().getUDDISecurityService(endpointURL).getAuthToken(getAuthToken).getAuthInfo();
-		}
-		return authToken;
-	}
-	
-	public NodeDetail saveNode(Node node)  {
-		NodeDetail nodeDetail = null;
-		try {
-			log.info("Sending Node " + node.getName() + " info to jUDDI " + getUDDINode().getName());
-			SaveNode saveNode = new SaveNode();
-			saveNode.setAuthInfo(getAuthToken(node.getSecurityUrl()));
-			saveNode.getNode().add(node);
-			nodeDetail =getUDDINode().getTransport().getJUDDIApiService(node.getJuddiApiUrl()).saveNode(saveNode);
-		} catch (Exception e) {
-			log.error("Unable to save node " + node.getName()
-					+ " ." + e.getMessage(),e);
-		} catch (Throwable t) {
-			log.error("Unable to save node " + node.getName()
-					+ " ." + t.getMessage(),t);
-		}
-		return nodeDetail;
-	}
-	
-	public ClerkDetail saveClerk(UDDIClerk senderClerk)  {
-		ClerkDetail clerkDetail = null;
-		try {
-			log.debug("Sending Clerk " + senderClerk.getName() + " info to jUDDI " + getUDDINode().getName());
-			SaveClerk saveClerk = new SaveClerk();
-			saveClerk.setAuthInfo(getAuthToken(senderClerk.getUDDINode().getSecurityUrl()));
-			saveClerk.getClerk().add(getApiClerk());
-			clerkDetail = getUDDINode().getTransport().getJUDDIApiService(senderClerk.getUDDINode().getJuddiApiUrl()).saveClerk(saveClerk);
-		} catch (Exception e) {
-			log.error("Unable to save clerk " + getName()
-					+ " ." + e.getMessage(),e);
-		} catch (Throwable t) {
-			log.error("Unable to save clerk " + getName()
-					+ " ." + t.getMessage(),t);
-		}
-		return clerkDetail;
-	}
-	
-	public Clerk getApiClerk() {
-		Clerk apiClerk = new Clerk();
-		apiClerk.setName(name);
-		apiClerk.setNode(uddiNode.getApiNode());
-		apiClerk.setPassword(password);
-		apiClerk.setPublisher(publisher);
-		return apiClerk;
-	}
-	
-	public UDDINode getUDDINode() {
-		return uddiNode;
-	}
+    public void setManagerName(String managerName) {
+        this.managerName = managerName;
+    }
 
-	public String getName() {
-		return name;
-	}
+    public void registerWsdls() {
+        if (this.getWsdls() != null) {
+            Properties properties = new Properties();
+            properties.putAll(this.getUDDINode().getProperties());
 
-	public void setName(String name) {
-		this.name = name;
-	}
+            for (WSDL wsdl : this.getWsdls()) {
+                try {
+                    URL wsdlUrl = this.getClass().getClassLoader().getResource(wsdl.getFileName());
+                    ReadWSDL rw = new ReadWSDL();
+                    Definition wsdlDefinition = rw.readWSDL(wsdlUrl);
+                    if (wsdl.keyDomain != null) {
+                        properties.setProperty("keyDomain", wsdl.keyDomain);
+                    }
+                    if (wsdl.businessKey != null) {
+                        properties.setProperty("businessKey", wsdl.getBusinessKey());
+                    }
 
-	public void setUDDINode(UDDINode uddiNode) {
-		this.uddiNode = uddiNode;
-	}
+                    WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(this, new URLLocalizerDefaultImpl(), properties);
+                    wsdl2UDDI.registerBusinessServices(wsdlDefinition);
+                } catch (Exception e) {
+                    log.error("Unable to register wsdl " + wsdl.getFileName() + " ." + e.getMessage(), e);
+                } catch (Throwable t) {
+                    log.error("Unable to register wsdl " + wsdl.getFileName() + " ." + t.getMessage(), t);
+                }
+            }
+        }
+    }
 
-	public String getPublisher() {
-		return publisher;
-	}
+    public void registerWsdls(Definition wsdlDefinition, String keyDomain, String businessKey) {
 
-	public void setPublisher(String publisher) {
-		this.publisher = publisher;
-	}
+        try {
+            Properties properties = new Properties();
+            properties.putAll(this.getUDDINode().getProperties());
+            //Definition wsdlDefinition = rw.readWSDL(wsdlUrl);
+            if (keyDomain != null) {
+                properties.setProperty("keyDomain", keyDomain);
+            }
+            if (businessKey != null) {
+                properties.setProperty("businessKey", businessKey);
+            }
 
-	public String getPassword() {
-		return password;
-	}
+            WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(this, new URLLocalizerDefaultImpl(), properties);
+            wsdl2UDDI.registerBusinessServices(wsdlDefinition);
+        } catch (Exception e) {
+            log.error("Unable to register wsdl " + " ." + e.getMessage(), e);
+        } catch (Throwable t) {
+            log.error("Unable to register wsdl " + " ." + t.getMessage(), t);
+        }
+    }
 
-	public void setPassword(String password) {
-		this.password = password;
-	}
+    public void unRegisterWsdls() {
+        if (this.getWsdls() != null) {
+            Properties properties = new Properties();
+            properties.putAll(this.getUDDINode().getProperties());
 
-	public WSDL[] getWsdls() {
-		return wsdls;
-	}
+            for (WSDL wsdl : this.getWsdls()) {
+                try {
+                    URL wsdlUrl = this.getClass().getClassLoader().getResource(wsdl.getFileName());
+                    ReadWSDL rw = new ReadWSDL();
+                    Definition wsdlDefinition = rw.readWSDL(wsdlUrl);
+                    if (wsdl.keyDomain != null) {
+                        properties.setProperty("keyDomain", wsdl.keyDomain);
+                    }
+                    if (wsdl.businessKey != null) {
+                        properties.setProperty("businessKey", wsdl.getBusinessKey());
+                    }
 
-	public void setWsdls(WSDL[] wsdls) {
-		this.wsdls = wsdls;
-	}
+                    WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(this, new URLLocalizerDefaultImpl(), properties);
+                    wsdl2UDDI.unRegisterBusinessServices(wsdlDefinition);
+                } catch (Exception e) {
+                    log.error("Unable to register wsdl " + wsdl.getFileName() + " ." + e.getMessage(), e);
+                } catch (Throwable t) {
+                    log.error("Unable to register wsdl " + wsdl.getFileName() + " ." + t.getMessage(), t);
+                }
+            }
+        }
+    }
 
-	public class WSDL {
-		
-		private String businessKey;
-		private String keyDomain;
-		private String fileName;
-		public String getBusinessKey() {
-			return businessKey;
-		}
-		public void setBusinessKey(String businessKey) {
-			this.businessKey = businessKey;
-		}
-		public String getFileName() {
-			return fileName;
-		}
-		public void setFileName(String fileName) {
-			this.fileName = fileName;
-		}
-		public String getKeyDomain() {
-			return keyDomain;
-		}
-		public void setKeyDomain(String keyDomain) {
-			this.keyDomain = keyDomain;
-		}
-	}
+    public Subscription register(Subscription subscription) {
+        return register(subscription, this.getUDDINode().getApiNode());
+    }
 
+    /**
+     * Register a Subscription.
+     */
+    public Subscription register(Subscription subscription, Node node) {
+
+        log.info("Registering subscription with key " + subscription.getSubscriptionKey());
+        Holder<List<Subscription>> holder = new Holder<List<Subscription>>();
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+
+            List<Subscription> subscriptions = new ArrayList<Subscription>();
+            subscriptions.add(subscription);
+            holder.value = subscriptions;
+            getUDDINode().getTransport().getUDDISubscriptionService(node.getSubscriptionUrl()).saveSubscription(authToken, holder);
+            if (log.isDebugEnabled()) {
+                log.debug("Registering subscription " + subscription.getSubscriptionKey() + " completed.");
+            }
+        } catch (Exception e) {
+            log.error("Unable to register subscription " + subscription.getSubscriptionKey()
+                    + " ." + e.getMessage(), e);
+        } catch (Throwable t) {
+            log.error("Unable to register subscriptionl " + subscription.getSubscriptionKey()
+                    + " ." + t.getMessage(), t);
+        }
+        subscription = holder.value.get(0);
+        return subscription;
+    }
+
+    /**
+     * Register a tModel, using the node of current clerk ('this').
+     *
+     * @param tModel
+     * @return the TModelDetail of the newly registered TModel
+     */
+    public TModelDetail register(TModel tModel) {
+        return register(tModel, this.getUDDINode().getApiNode());
+    }
+
+    /**
+     * Register a tModel.
+     */
+    public TModelDetail register(TModel tModel, Node node) {
+        TModelDetail tModelDetail = null;
+        log.info("Registering tModel with key " + tModel.getTModelKey());
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+            SaveTModel saveTModel = new SaveTModel();
+            saveTModel.setAuthInfo(authToken);
+            saveTModel.getTModel().add(tModel);
+            tModelDetail = getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).saveTModel(saveTModel);
+            if (log.isDebugEnabled()) {
+                log.debug("Registering tModel " + tModel.getTModelKey() + " completed.");
+            }
+        } catch (Exception e) {
+            log.error("Unable to register tModel " + tModel.getTModelKey()
+                    + " ." + e.getMessage(), e);
+        } catch (Throwable t) {
+            log.error("Unable to register tModel " + tModel.getTModelKey()
+                    + " ." + t.getMessage(), t);
+        }
+        return tModelDetail;
+    }
+
+    /**
+     * Register a BindingTemplate, using the node of current clerk ('this').
+     *
+     */
+    public BindingTemplate register(BindingTemplate binding) {
+        return register(binding, this.getUDDINode().getApiNode());
+    }
+
+    /**
+     * Register a BindingTemplate.
+     *
+     */
+    public BindingTemplate register(BindingTemplate binding, Node node) {
+
+        BindingTemplate bindingTemplate = null;
+        log.info("Registering bindingTemplate with key " + binding.getBindingKey());
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+            SaveBinding saveBinding = new SaveBinding();
+            saveBinding.setAuthInfo(authToken);
+            saveBinding.getBindingTemplate().add(binding);
+            BindingDetail bindingDetail = getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).saveBinding(saveBinding);
+            bindingTemplate = bindingDetail.getBindingTemplate().get(0);
+            if (log.isDebugEnabled()) {
+                log.debug("Registering template binding " + binding.getBindingKey() + " completed.");
+            }
+        } catch (Exception e) {
+            log.error("Unable to register template binding " + bindingTemplate.getBindingKey()
+                    + " ." + e.getMessage(), e);
+        } catch (Throwable t) {
+            log.error("Unable to register template binding " + bindingTemplate.getBindingKey()
+                    + " ." + t.getMessage(), t);
+        }
+        return bindingTemplate;
+    }
+
+    /**
+     * Register a service, using the node of current clerk ('this').
+     *
+     */
+    public BusinessService register(BusinessService service) {
+        return register(service, this.getUDDINode().getApiNode());
+    }
+
+    /**
+     * Register a service.
+     *
+     */
+    public BusinessService register(BusinessService service, Node node) {
+
+        BusinessService businessService = null;
+        log.info("Registering service " + service.getName().get(0).getValue()
+                + " with key " + service.getServiceKey());
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+            SaveService saveService = new SaveService();
+            saveService.setAuthInfo(authToken);
+            saveService.getBusinessService().add(service);
+            ServiceDetail serviceDetail = getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).saveService(saveService);
+            businessService = serviceDetail.getBusinessService().get(0);
+            if (log.isDebugEnabled()) {
+                log.debug("Registering service " + service.getName().get(0).getValue() + " completed.");
+            }
+        } catch (Exception e) {
+            log.error("Unable to register service " + service.getName().get(0).getValue()
+                    + " ." + e.getMessage(), e);
+        } catch (Throwable t) {
+            log.error("Unable to register service " + service.getName().get(0).getValue()
+                    + " ." + t.getMessage(), t);
+        }
+        return businessService;
+    }
+
+    public BusinessEntity register(BusinessEntity business) {
+        return register(business, this.getUDDINode().getApiNode());
+    }
+
+    /**
+     * Register a service. returns null if not successful
+     */
+    public BusinessEntity register(BusinessEntity business, Node node) {
+
+        BusinessEntity businessEntity = null;
+        log.info("Registering business " + business.getName().get(0).getValue()
+                + " with key " + business.getBusinessKey());
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+            SaveBusiness saveBusiness = new SaveBusiness();
+            saveBusiness.setAuthInfo(authToken);
+            saveBusiness.getBusinessEntity().add(business);
+            BusinessDetail businessDetail = getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).saveBusiness(saveBusiness);
+            businessEntity = businessDetail.getBusinessEntity().get(0);
+            if (log.isDebugEnabled()) {
+                log.debug("Registering businessEntity " + businessEntity.getName().get(0).getValue() + " completed.");
+            }
+        } catch (Exception e) {
+            log.error("Unable to register business " + business.getName().get(0).getValue()
+                    + " ." + e.getMessage(), e);
+        } catch (Throwable t) {
+            log.error("Unable to register business " + business.getName().get(0).getValue()
+                    + " ." + t.getMessage(), t);
+        }
+        return businessEntity;
+    }
+
+    public void unRegisterBusiness(String businessKey) {
+        unRegisterBusiness(businessKey, this.getUDDINode().getApiNode());
+    }
+
+    /**
+     * Unregisters the service with specified serviceKey.
+     *
+     * @param service
+     */
+    public void unRegisterBusiness(String businessKey, Node node) {
+        log.info("UnRegistering the business " + businessKey);
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+            DeleteBusiness deleteBusiness = new DeleteBusiness();
+            deleteBusiness.setAuthInfo(authToken);
+            deleteBusiness.getBusinessKey().add(businessKey);
+            getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).deleteBusiness(deleteBusiness);
+        } catch (Exception e) {
+            log.error("Unable to register service " + businessKey
+                    + " ." + e.getMessage(), e);
+        }
+    }
+
+    public void unRegisterService(String serviceKey) {
+        unRegisterService(serviceKey, this.getUDDINode().getApiNode());
+    }
+
+    /**
+     * Unregisters the service with specified serviceKey.
+     *
+     * @param service
+     */
+    public void unRegisterService(String serviceKey, Node node) {
+        log.info("UnRegistering the service " + serviceKey);
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+            DeleteService deleteService = new DeleteService();
+            deleteService.setAuthInfo(authToken);
+            deleteService.getServiceKey().add(serviceKey);
+            getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).deleteService(deleteService);
+        } catch (Exception e) {
+            log.error("Unable to register service " + serviceKey
+                    + " ." + e.getMessage(), e);
+        }
+    }
+
+    public void unRegisterBinding(String bindingKey) {
+        unRegisterBinding(bindingKey, this.getUDDINode().getApiNode());
+    }
+
+    /**
+     * Unregisters the BindingTemplate with specified bindingKey.
+     *
+     * @param bindingTemplate
+     * @param node
+     */
+    public void unRegisterBinding(String bindingKey, Node node) {
+        log.info("UnRegistering binding key " + bindingKey);
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+            DeleteBinding deleteBinding = new DeleteBinding();
+            deleteBinding.setAuthInfo(authToken);
+            deleteBinding.getBindingKey().add(bindingKey);
+            getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).deleteBinding(deleteBinding);
+        } catch (Exception e) {
+            log.error("Unable to unregister bindingkey " + bindingKey
+                    + " ." + e.getMessage(), e);
+        }
+    }
+
+    public void unRegisterTModel(String tModelKey) {
+        unRegisterTModel(tModelKey, this.getUDDINode().getApiNode());
+    }
+
+    /**
+     * Unregisters the BindingTemplate with specified bindingKey.
+     *
+     * @param bindingTemplate
+     * @param node
+     */
+    public void unRegisterTModel(String tModelKey, Node node) {
+        log.info("UnRegistering tModel key " + tModelKey);
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+            DeleteTModel deleteTModel = new DeleteTModel();
+            deleteTModel.setAuthInfo(authToken);
+            deleteTModel.getTModelKey().add(tModelKey);
+            getUDDINode().getTransport().getUDDIPublishService(node.getPublishUrl()).deleteTModel(deleteTModel);
+        } catch (Exception e) {
+            log.error("Unable to unregister tModelkey " + tModelKey
+                    + " ." + e.getMessage(), e);
+        }
+    }
+
+    public void unRegisterSubscription(String subscriptionKey) {
+        unRegisterSubscription(subscriptionKey, this.getUDDINode().getApiNode());
+    }
+
+    public void unRegisterSubscription(String subscriptionKey, Node node) {
+        log.info("UnRegistering subscription with key " + subscriptionKey);
+        try {
+            String authToken = getAuthToken(node.getSecurityUrl());
+            DeleteSubscription deleteSubscription = new DeleteSubscription();
+            deleteSubscription.setAuthInfo(authToken);
+            deleteSubscription.getSubscriptionKey().add(subscriptionKey);
+            getUDDINode().getTransport().getUDDISubscriptionService(node.getSubscriptionUrl()).deleteSubscription(deleteSubscription);
+        } catch (Exception e) {
+            log.error("Unable to unregister subscription key " + subscriptionKey
+                    + " ." + e.getMessage(), e);
+        }
+    }
+
+    public TModelList findTModel(FindTModel findTModel) throws RemoteException, ConfigurationException, TransportException {
+        return findTModel(findTModel, this.getUDDINode().getApiNode());
+    }
+
+    public TModelList findTModel(FindTModel findTModel, Node node) throws RemoteException,
+            TransportException, ConfigurationException {
+
+        findTModel.setAuthInfo(getAuthToken(node.getSecurityUrl()));
+        try {
+            TModelList tModelList = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).findTModel(findTModel);
+            return tModelList;
+        } catch (DispositionReportFaultMessage dr) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
+            checkForErrorInDispositionReport(report, null, null);
+        } catch (SOAPFaultException sfe) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
+            checkForErrorInDispositionReport(report, null, null);
+        } catch (UndeclaredThrowableException ute) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
+            checkForErrorInDispositionReport(report, null, null);
+        }
+        return null;
+    }
+
+    public TModelDetail getTModelDetail(String tModelKey) throws RemoteException, ConfigurationException, TransportException {
+        GetTModelDetail getTModelDetail = new GetTModelDetail();
+        getTModelDetail.getTModelKey().add(tModelKey);
+        return getTModelDetail(getTModelDetail);
+    }
+
+    public TModelDetail getTModelDetail(GetTModelDetail getTModelDetail) throws RemoteException, ConfigurationException, TransportException {
+        return getTModelDetail(getTModelDetail, this.getUDDINode().getApiNode());
+    }
+
+    public TModelDetail getTModelDetail(GetTModelDetail getTModelDetail, Node node) throws RemoteException,
+            TransportException, ConfigurationException {
+
+        getTModelDetail.setAuthInfo(getAuthToken(node.getSecurityUrl()));
+        try {
+            TModelDetail tModelDetail = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).getTModelDetail(getTModelDetail);
+            return tModelDetail;
+        } catch (DispositionReportFaultMessage dr) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
+            checkForErrorInDispositionReport(report, null, null);
+        } catch (SOAPFaultException sfe) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
+            checkForErrorInDispositionReport(report, null, null);
+        } catch (UndeclaredThrowableException ute) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
+            checkForErrorInDispositionReport(report, null, null);
+        }
+        return null;
+    }
+
+    public BusinessService findService(String serviceKey) throws RemoteException,
+            TransportException, ConfigurationException {
+        return findService(serviceKey, this.getUDDINode().getApiNode());
+    }
+
+    public BusinessService findService(String serviceKey, Node node) throws RemoteException,
+            TransportException, ConfigurationException {
+        GetServiceDetail getServiceDetail = new GetServiceDetail();
+        getServiceDetail.getServiceKey().add(serviceKey);
+        getServiceDetail.setAuthInfo(getAuthToken(node.getSecurityUrl()));
+        try {
+            ServiceDetail sd = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).getServiceDetail(getServiceDetail);
+            List<BusinessService> businessServiceList = sd.getBusinessService();
+            if (businessServiceList.size() == 0) {
+                throw new ConfigurationException("Could not find Service with key=" + serviceKey);
+            }
+            return businessServiceList.get(0);
+        } catch (DispositionReportFaultMessage dr) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, serviceKey);
+        } catch (SOAPFaultException sfe) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, serviceKey);
+        } catch (UndeclaredThrowableException ute) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, serviceKey);
+        }
+        return null;
+    }
+
+    public BindingTemplate findServiceBinding(String bindingKey) throws DispositionReportFaultMessage, RemoteException,
+            TransportException, ConfigurationException {
+        return findServiceBinding(bindingKey, this.getUDDINode().getApiNode());
+    }
+
+    public BindingTemplate findServiceBinding(String bindingKey, Node node) throws DispositionReportFaultMessage, RemoteException,
+            TransportException, ConfigurationException {
+        GetBindingDetail getBindingDetail = new GetBindingDetail();
+        getBindingDetail.getBindingKey().add(bindingKey);
+        getBindingDetail.setAuthInfo(getAuthToken(node.getSecurityUrl()));
+        try {
+            BindingDetail bd = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).getBindingDetail(getBindingDetail);
+            List<BindingTemplate> bindingTemplateList = bd.getBindingTemplate();
+            if (bindingTemplateList.size() == 0) {
+                throw new ConfigurationException("Could not find ServiceBinding with key=" + bindingKey);
+            }
+            return bindingTemplateList.get(0);
+        } catch (DispositionReportFaultMessage dr) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, bindingKey);
+        } catch (SOAPFaultException sfe) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, bindingKey);
+        } catch (UndeclaredThrowableException ute) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, bindingKey);
+        }
+        return null;
+    }
+
+    public BusinessEntity findBusiness(String businessKey) throws RemoteException,
+            TransportException, ConfigurationException {
+        return findBusiness(businessKey, this.getUDDINode().getApiNode());
+    }
+
+    /**
+     * Looks up the BusinessEntiry in the registry, will return null if is not
+     * found.
+     *
+     * @param businessKey - the key we are looking for
+     * @param node - the node which is going to be queried
+     * @return BusinessEntity is found, or null if not found.
+     * @throws RemoteException
+     * @throws TransportException
+     * @throws ConfigurationException
+     */
+    public BusinessEntity findBusiness(String businessKey, Node node) throws RemoteException,
+            TransportException, ConfigurationException {
+        GetBusinessDetail getBusinessDetail = new GetBusinessDetail();
+        getBusinessDetail.getBusinessKey().add(businessKey);
+        getBusinessDetail.setAuthInfo(node.getSecurityUrl());
+        try {
+            BusinessDetail bd = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).getBusinessDetail(getBusinessDetail);
+            return bd.getBusinessEntity().get(0);
+        } catch (DispositionReportFaultMessage dr) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
+        } catch (SOAPFaultException sfe) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
+        } catch (UndeclaredThrowableException ute) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
+        }
+        return null;
+    }
+
+    /**
+     * Looks up the BusinessEntiry in the registry, will return null if is not
+     * found.
+     *
+     * @param businessKey - the key we are looking for
+     * @param node - the node which is going to be queried
+     * @return BusinessEntity is found, or null if not found.
+     * @throws RemoteException
+     * @throws TransportException
+     * @throws ConfigurationException
+     */
+    public RelatedBusinessesList findRelatedBusinesses(String businessKey, Node node) throws RemoteException,
+            TransportException, ConfigurationException {
+        FindRelatedBusinesses findRelatedBusinesses = new FindRelatedBusinesses();
+        findRelatedBusinesses.setBusinessKey(businessKey);
+        findRelatedBusinesses.setAuthInfo(node.getSecurityUrl());
+        try {
+            RelatedBusinessesList rbl = getUDDINode().getTransport().getUDDIInquiryService(node.getInquiryUrl()).findRelatedBusinesses(findRelatedBusinesses);
+            return rbl;
+        } catch (DispositionReportFaultMessage dr) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(dr);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
+        } catch (SOAPFaultException sfe) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(sfe);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
+        } catch (UndeclaredThrowableException ute) {
+            DispositionReport report = DispositionReportFaultMessage.getDispositionReport(ute);
+            checkForErrorInDispositionReport(report, DispositionReport.E_INVALID_KEY_PASSED, businessKey);
+        }
+        return null;
+    }
+
+    private void checkForErrorInDispositionReport(DispositionReport report, String Error, String entityKey) {
+
+        if (entityKey != null && report != null && report.countainsErrorCode(DispositionReport.E_INVALID_KEY_PASSED)) {
+            log.info("entityKey " + entityKey + " was not found in the registry");
+        } else {
+            if (report == null) {
+                log.info("Missing DispositionReport");
+            } else {
+                for (Result result : report.getResult()) {
+                    log.error(result.getErrInfo().getErrCode() + " " + result.getErrInfo().getValue());
+                }
+            }
+        }
+    }
+
+    private String getAuthToken(String endpointURL) throws TransportException, DispositionReportFaultMessage, RemoteException {
+        //if the token is older then 10 minutes discard it, and create a new one.
+        if ((authToken != null && !"".equals(authToken)) && (tokenBirthDate != null && System.currentTimeMillis() > tokenBirthDate.getTime() + 600000)) {
+            DiscardAuthToken discardAuthToken = new DiscardAuthToken();
+            discardAuthToken.setAuthInfo(authToken);
+            getUDDINode().getTransport().getUDDISecurityService(endpointURL).discardAuthToken(discardAuthToken);
+            authToken = null;
+        }
+        if (authToken == null || "".equals(authToken)) {
+            tokenBirthDate = new Date();
+            GetAuthToken getAuthToken = new GetAuthToken();
+            getAuthToken.setUserID(getPublisher());
+            getAuthToken.setCred(getPassword());
+            authToken = getUDDINode().getTransport().getUDDISecurityService(endpointURL).getAuthToken(getAuthToken).getAuthInfo();
+        }
+        return authToken;
+    }
+
+    public NodeDetail saveNode(Node node) {
+        NodeDetail nodeDetail = null;
+        try {
+            log.info("Sending Node " + node.getName() + " info to jUDDI " + getUDDINode().getName());
+            SaveNode saveNode = new SaveNode();
+            saveNode.setAuthInfo(getAuthToken(node.getSecurityUrl()));
+            saveNode.getNode().add(node);
+            nodeDetail = getUDDINode().getTransport().getJUDDIApiService(node.getJuddiApiUrl()).saveNode(saveNode);
+        } catch (Exception e) {
+            log.error("Unable to save node " + node.getName()
+                    + " ." + e.getMessage(), e);
+        } catch (Throwable t) {
+            log.error("Unable to save node " + node.getName()
+                    + " ." + t.getMessage(), t);
+        }
+        return nodeDetail;
+    }
+
+    public ClerkDetail saveClerk(UDDIClerk senderClerk) {
+        ClerkDetail clerkDetail = null;
+        try {
+            log.debug("Sending Clerk " + senderClerk.getName() + " info to jUDDI " + getUDDINode().getName());
+            SaveClerk saveClerk = new SaveClerk();
+            saveClerk.setAuthInfo(getAuthToken(senderClerk.getUDDINode().getSecurityUrl()));
+            saveClerk.getClerk().add(getApiClerk());
+            clerkDetail = getUDDINode().getTransport().getJUDDIApiService(senderClerk.getUDDINode().getJuddiApiUrl()).saveClerk(saveClerk);
+        } catch (Exception e) {
+            log.error("Unable to save clerk " + getName()
+                    + " ." + e.getMessage(), e);
+        } catch (Throwable t) {
+            log.error("Unable to save clerk " + getName()
+                    + " ." + t.getMessage(), t);
+        }
+        return clerkDetail;
+    }
+
+    public Clerk getApiClerk() {
+        Clerk apiClerk = new Clerk();
+        apiClerk.setName(name);
+        apiClerk.setNode(uddiNode.getApiNode());
+        apiClerk.setPassword(password);
+        apiClerk.setPublisher(publisher);
+        return apiClerk;
+    }
+
+    public UDDINode getUDDINode() {
+        return uddiNode;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setUDDINode(UDDINode uddiNode) {
+        this.uddiNode = uddiNode;
+    }
+
+    public String getPublisher() {
+        return publisher;
+    }
+
+    public void setPublisher(String publisher) {
+        this.publisher = publisher;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public WSDL[] getWsdls() {
+        return wsdls;
+    }
+
+    public void setWsdls(WSDL[] wsdls) {
+        this.wsdls = wsdls;
+    }
+
+    public class WSDL {
+
+        private String businessKey;
+        private String keyDomain;
+        private String fileName;
+
+        public String getBusinessKey() {
+            return businessKey;
+        }
+
+        public void setBusinessKey(String businessKey) {
+            this.businessKey = businessKey;
+        }
+
+        public String getFileName() {
+            return fileName;
+        }
+
+        public void setFileName(String fileName) {
+            this.fileName = fileName;
+        }
+
+        public String getKeyDomain() {
+            return keyDomain;
+        }
+
+        public void setKeyDomain(String keyDomain) {
+            this.keyDomain = keyDomain;
+        }
+    }
+
+    /**
+     *A helper class to create a tModel key generator.<br>
+     * Why would I want a key generator? In UDDIv3, you're support to specify what you want the keys (unique identifiers) to be, however there's
+     * a number of naming rules associated with the keys. Generally, use the FQDN of your business or organization.
+     * Optionally, when saving an UDDI entity, you can just leave the key name blank and the server
+     * should generate one for you. It's normally a UUID that's not easy to remember. In this case, there's no need to call this method.<br><br>
+     * In addition, no changes are made to the UDDI server. You'll have to do that one using code similar to this:
+     * <pre>
+     * UDDIClerk clerk = ...
+     * TModel keygen = UDDIClerk.createKeyGenator("mydomain.com", "my domain", "en");
+     * clerk.register(keygen);
+     * 
+     * @param partitionName think of this as the domain, i.e. juddi.apache.org, but it can really be anything you want. This will become part of the
+     * key associated with the tModel generator (uddi:juddi.apache.org:keygenerator)
+     * @param DescriptiveName required. max length is 255 char
+     * @param DescriptiveNameLanguage optional, max length is 26 char
+     * @return a populated tModel entity representing a tModel key generator. No changes are made to any connect UDDI service
+     * @since 3.2
+     */
+    public static TModel createKeyGenator(String partitionName, String DescriptiveName, String DescriptiveNameLanguage) {
+        if (partitionName == null || partitionName.length() == 0) {
+            throw new IllegalArgumentException();
+        }
+        
+        if (DescriptiveName == null || DescriptiveName.length() == 0) {
+            throw new IllegalArgumentException();
+        }
+        if (!partitionName.startsWith("uddi:")) {
+            throw new IllegalArgumentException("partitionName must have a 'uddi:' prefix");
+
+        }
+        if (!partitionName.endsWith(":keygenerator")) {
+            throw new IllegalArgumentException("partitionName must have a ':keyGenerator' postfix");
+        }
+        TModel tm = new TModel();
+        tm.setName(new Name());
+        tm.getName().setValue(DescriptiveName);
+        tm.getName().setLang(DescriptiveNameLanguage);
+        tm.setCategoryBag(new CategoryBag());
+        KeyedReference kr = new KeyedReference();
+        kr.setTModelKey(UDDIConstants.KEY_GENERATOR_TMODEL);
+        kr.setKeyName(UDDIConstants.KEY_GENERATOR);
+        kr.setKeyValue(UDDIConstants.KEY_GENERATOR_VALUE);
+        tm.getCategoryBag().getKeyedReference().add(kr);
+        OverviewDoc overviewDoc = new OverviewDoc();
+        OverviewURL overviewUrl = new OverviewURL();
+        overviewUrl.setUseType("text");
+        overviewUrl.setValue("http://uddi.org/pubs/uddi_v3.htm#keyGen");
+        overviewDoc.setOverviewURL(overviewUrl);
+        tm.getOverviewDoc().add(overviewDoc);
+        tm.setTModelKey(partitionName.toLowerCase());
+        return tm;
+    }
 }
diff --git a/juddi-client/src/main/java/org/apache/juddi/v3/client/crypto/DigSigUtil.java b/juddi-client/src/main/java/org/apache/juddi/v3/client/crypto/DigSigUtil.java
new file mode 100644
index 0000000..8ec05b4
--- /dev/null
+++ b/juddi-client/src/main/java/org/apache/juddi/v3/client/crypto/DigSigUtil.java
@@ -0,0 +1,807 @@
+/*
+ * Copyright 2013 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.v3.client.crypto;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.KeyStore;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.Security;
+import java.security.cert.CRLException;
+import java.security.cert.CertPath;
+import java.security.cert.CertPathValidator;
+import java.security.cert.CertPathValidatorResult;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.PKIXBuilderParameters;
+import java.security.cert.PKIXCertPathValidatorResult;
+import java.security.cert.PKIXParameters;
+import java.security.cert.TrustAnchor;
+import java.security.cert.X509CRL;
+import java.security.cert.X509CertSelector;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicReference;
+import javax.security.auth.x500.X500Principal;
+import javax.xml.bind.JAXB;
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.Transform;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.dom.DOMSignContext;
+import javax.xml.crypto.dsig.dom.DOMValidateContext;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.keyinfo.X509Data;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import sun.security.provider.certpath.OCSP;
+import sun.security.provider.certpath.OCSP.RevocationStatus;
+
+/**
+ * A utility class for signing and verifying JAXB Objects, such as UDDI
+ * entities.
+ *
+ * Notes: This class only supports elements that are signed once. Multiple
+ * signature are not currently supported.
+ *
+ * @author <a href="mailto:alexoree@apache.org">Alex O'Ree </a>
+ */
+public final class DigSigUtil {
+
+    public DigSigUtil() throws CertificateException {
+        cf = CertificateFactory.getInstance("X.509");
+    }
+    private Log logger = LogFactory.getLog(this.getClass());
+
+    public void put(String key, String value) {
+        map.put(key, value);
+    }
+
+    /**
+     * clears the configuration for reuse
+     */
+    public void clear() {
+        map.clear();
+    }
+    private Properties map = new Properties();
+    /**
+     * This is the location of the keystore
+     *
+     * If referencing a Windows certificate store, use WINDOWS-MY as a value
+     * with a null password
+     */
+    public final static String SIGNATURE_KEYSTORE_FILE = "keyStorePath";
+    /**
+     * The type of file, such as JKS for most Java applications, or WINDOWS-MY
+     * to use the Windows certificate store of the current user or KeychainStore
+     * for MacOS
+     */
+    public final static String SIGNATURE_KEYSTORE_FILETYPE = "keyStoreType";
+    public final static String SIGNATURE_KEYSTORE_FILE_PASSWORD = "filePassword";
+    public final static String SIGNATURE_KEYSTORE_KEY_PASSWORD = "keyPassword";
+    public final static String SIGNATURE_KEYSTORE_KEY_ALIAS = "keyAlias";
+    public final static String TRUSTSTORE_FILE = "keyStorePath";
+    public final static String TRUSTSTORE_FILETYPE = "keyStoreType";
+    public final static String TRUSTSTORE_FILE_PASSWORD = "filePassword";
+    /**
+     * default is CanonicalizationMethod.EXCLUSIVE
+     *
+     * @see CanonicalizationMethod
+     */
+    public final static String CANONICALIZATIONMETHOD = "CanonicalizationMethod";
+    /**
+     * default is RSA_SHA1
+     *
+     * @see SignatureMethod
+     */
+    public final static String SIGNATURE_METHOD = "SignatureMethod";
+    /**
+     * Defines whether or not a certificate is included with the signature<Br>
+     * Values - Include whole X509 Public Key in the signature (recommended)
+     * (default) * Example
+     * <pre>
+     * Map map = new HashMap();
+     * map.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_BASE64, true);</pre>
+     * any value can be used.
+     */
+    public final static String SIGNATURE_OPTION_CERT_INCLUSION_BASE64 = "BASE64";
+    /*
+     * Include the signer's thumbprint of the public key.
+     * 
+     * Clients will not be able to validate the signature unless they have a copy of the signer's public key 
+     * in a trust store or the full certificate is included
+     * out of band
+     * 
+     * Example
+     * <pre>
+     * Map map = new HashMap();
+     * map.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_THUMBPRINT, true);</pre>
+     * any value can be used.
+     *@see SIGNATURE_OPTION_CERT_INCLUSION_BASE64
+     */
+    public final static String SIGNATURE_OPTION_CERT_INCLUSION_THUMBPRINT = "THUMBPRINT";
+    /*
+     * Include the signer's serial of the public key.
+     * 
+     * Clients will not be able to validate the signature unless they have a copy of the signer's public key 
+     * in a trust store or the full certificate is included
+     * out of band
+     *     
+     * Example
+     * <pre>
+     * Map map = new HashMap();
+     * map.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_SERIAL, true);</pre>
+     * any value can be used.
+     *@see SIGNATURE_OPTION_CERT_INCLUSION_BASE64
+     */
+    public final static String SIGNATURE_OPTION_CERT_INCLUSION_SERIAL = "SERIAL";
+    /*
+     * Include the signer's Subject DN of the public key.
+     * 
+     * Clients will not be able to validate the signature unless they have a copy of the signer's public key 
+     * in a trust store or the full certificate is included
+     * out of band
+     *     
+     * Example
+     * <pre>
+     * Map map = new HashMap();
+     * map.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_SUBJECTDN, true);</pre>
+     * any value can be used.
+     *@see SIGNATURE_OPTION_CERT_INCLUSION_BASE64
+     */
+    public final static String SIGNATURE_OPTION_CERT_INCLUSION_SUBJECTDN = "SUBJECTDN";
+    /*
+     * Include the signer's X500 Prinicple of the public key.
+     * 
+     * Clients will not be able to validate the signature unless they have a copy of the signer's public key 
+     * in a trust store or the full certificate is included
+     * out of band
+     *     
+     * Example
+     * <pre>
+     * Map map = new HashMap();
+     * map.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_X500_PRINICPAL, true);</pre>
+     * any value can be used.
+     *@see SIGNATURE_OPTION_CERT_INCLUSION_BASE64
+     */
+    public final static String SIGNATURE_OPTION_CERT_INCLUSION_X500_PRINICPAL = "X500";
+    public final static String XML_DIGSIG_NS = "http://www.w3.org/2000/09/xmldsig#";
+    /**
+     * Default value DigestMethod.SHA1 =
+     * "http://www.w3.org/2000/09/xmldsig#sha1"
+     *
+     * @see javax.xml.crypto.dsig.DigestMethod
+     */
+    public final static String SIGNATURE_OPTION_DIGEST_METHOD = "digestMethod";
+    /**
+     * When validating a signature, include this field will validate that the
+     * signature is still valid with regards to timestamps NotBefore and
+     * OnOrAfter
+     *
+     * Example
+     * <pre>
+     * Map map = new HashMap();
+     * map.put(DigSigUtil.CHECK_TIMESTAMPS, true);</pre> any value can be used.
+     */
+    public final static String CHECK_TIMESTAMPS = "checkTimestamps";
+    private CertificateFactory cf = null;
+    public final static String CHECK_REVOCATION_STATUS_OCSP = "checkRevocationOCSP";
+    public final static String CHECK_REVOCATION_STATUS_CRL = "checkRevocationCRL";
+    public final static String CHECK_TRUST_CHAIN = "checkTrust";
+
+    /**
+     * Digital signs a UDDI entity, such as a business, service, tmodel or
+     * binding template using the map to provide certificate key stores and
+     * credentials<br><br> The UDDI entity MUST support XML Digital Signatures
+     * (tModel, Business, Service, Binding Template)
+     *
+     * @param <T> Any UDDI entity that supports digital signatures
+     * @param jaxbObj
+     * @return an enveloped signed UDDI element, do not modify this object after
+     * signing
+     */
+    public <T> T signUddiEntity(T jaxbObj) {
+        DOMResult domResult = new DOMResult();
+        JAXB.marshal(jaxbObj, domResult);
+        Document doc = ((Document) domResult.getNode());
+        Element docElement = doc.getDocumentElement();
+
+        try {
+            KeyStore ks = KeyStore.getInstance(map.getProperty(SIGNATURE_KEYSTORE_FILETYPE));
+            URL url = Thread.currentThread().getContextClassLoader().getResource(map.getProperty(SIGNATURE_KEYSTORE_FILE));
+            if (url == null) {
+                try {
+                    url = new File(map.getProperty(SIGNATURE_KEYSTORE_FILE)).toURI().toURL();
+                } catch (Exception x) {
+                }
+            }
+            if (url == null) {
+                try {
+                    url = this.getClass().getClassLoader().getResource(map.getProperty(SIGNATURE_KEYSTORE_FILE));
+                } catch (Exception x) {
+                }
+            }
+            KeyStore.PrivateKeyEntry keyEntry = null;
+            if (!map.getProperty(SIGNATURE_KEYSTORE_FILETYPE).equalsIgnoreCase("WINDOWS-MY")) {
+                ks.load(url.openStream(), (map.getProperty(SIGNATURE_KEYSTORE_FILE_PASSWORD)).toCharArray());
+                if (map.getProperty(SIGNATURE_KEYSTORE_KEY_PASSWORD) == null) {
+                    keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(map.getProperty(SIGNATURE_KEYSTORE_KEY_ALIAS),
+                            new KeyStore.PasswordProtection(map.getProperty(SIGNATURE_KEYSTORE_FILE_PASSWORD).toCharArray()));
+                } else {
+                    keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(map.getProperty(SIGNATURE_KEYSTORE_KEY_ALIAS),
+                            new KeyStore.PasswordProtection(map.getProperty(SIGNATURE_KEYSTORE_KEY_PASSWORD).toCharArray()));
+                }
+            } else {
+                //Windows only
+                ks.load(null, null);
+                keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(map.getProperty(SIGNATURE_KEYSTORE_KEY_ALIAS),
+                        null);
+            }
+
+
+            PrivateKey privateKey = keyEntry.getPrivateKey();
+            Certificate origCert = keyEntry.getCertificate();
+            //PublicKey validatingKey = origCert.getPublicKey();
+            this.signDOM(docElement, privateKey, origCert);
+
+            DOMSource domSource = new DOMSource(doc);
+            T result = (T) JAXB.unmarshal(domSource, jaxbObj.getClass());
+            return result;
+        } catch (Exception e) {
+            throw new RuntimeException("Signature failure due to: " + e.getMessage(), e);
+        }
+    }
+
+    /**
+     * Digital signs a UDDI entity, such as a business, service, tmodel or
+     * binding template, provided you've already done the legwork to provide the
+     * signing keys <br><br> The UDDI entity MUST support XML Digital Signatures
+     * (tModel, Business, Service, Binding Template)
+     *
+     * @param <T>
+     * @param jaxbObj
+     * @param publicKey
+     * @param privateKey
+     * @return
+     */
+    public <T> T signUddiEntity(T jaxbObj, Certificate publicKey, PrivateKey privateKey) {
+        DOMResult domResult = new DOMResult();
+        JAXB.marshal(jaxbObj, domResult);
+        Document doc = ((Document) domResult.getNode());
+        Element docElement = doc.getDocumentElement();
+        try {
+
+            //PublicKey validatingKey = origCert.getPublicKey();
+            this.signDOM(docElement, privateKey, publicKey);
+            DOMSource domSource = new DOMSource(doc);
+            T result = (T) JAXB.unmarshal(domSource, jaxbObj.getClass());
+            return result;
+        } catch (Exception e) {
+            throw new RuntimeException("Signature failure due to: " + e.getMessage(), e);
+        }
+    }
+
+    /**
+     * Serializes a JAXB object and prints to stdout
+     *
+     * @param obj
+     */
+    public static void JAXB_ToStdOut(Object obj) {
+        StringWriter sw = new StringWriter();
+        JAXB.marshal(obj, sw);
+        System.out.println(sw.toString());
+    }
+
+    /**
+     * Serializes a JAXB object and prints to stdout
+     *
+     * @param obj
+     * @return
+     */
+    public static String JAXB_ToString(Object obj) {
+        StringWriter sw = new StringWriter();
+        JAXB.marshal(obj, sw);
+        return (sw.toString());
+    }
+
+    /**
+     *
+     * returns the public key of the signing certificate used for a signed JAXB
+     * object.
+     *
+     * @param obj
+     * @return null if the item is not signed or if it references a certificate
+     * that is not present in the current keystore
+     * * @throws IllegalArgumentException for null input
+     */
+    public X509Certificate getSigningCertificatePublicKey(Object obj) throws IllegalArgumentException, CertificateException {
+        DOMResult domResult = new DOMResult();
+        JAXB.marshal(obj, domResult);
+
+        Document doc = ((Document) domResult.getNode());
+        Element docElement = doc.getDocumentElement();  //this is our signed node
+        return getSigningCertificatePublicKey(obj, docElement);
+    }
+
+    /**
+     *
+     * returns the public key of the signing certificate used for a signed JAXB
+     * object.
+     *
+     * @param obj
+     * @return null if the item is not signed or if it references a certificate
+     * that is not present in the current keystore
+     * * @throws IllegalArgumentException for null input
+     */
+    private X509Certificate getSigningCertificatePublicKey(Object obj, Element docElement) throws IllegalArgumentException, CertificateException {
+        if (obj == null) {
+            throw new IllegalArgumentException();
+        }
+
+        NodeList childNodes = docElement.getChildNodes();   //children, one of these SHOULD be our signature element
+        // X509Certificate signingcert = null;
+        for (int i = 0; i < childNodes.getLength(); i++) {
+            //System.out.println(childNodes.item(i).getNamespaceURI() + " " + childNodes.item(i).getNodeName());
+            if (childNodes.item(i).getNamespaceURI().equalsIgnoreCase(XML_DIGSIG_NS) && childNodes.item(i).getLocalName().equalsIgnoreCase("Signature")) {
+                Node sig = childNodes.item(i);
+                for (int k = 0; k < sig.getChildNodes().getLength(); k++) {
+                    //      System.out.println(sig.getChildNodes().item(k).getNamespaceURI() + " " + sig.getChildNodes().item(k).getNodeName());
+                    if (sig.getChildNodes().item(k).getLocalName().equalsIgnoreCase("KeyInfo")) {
+                        //TODO figure out how to reference Subject DN, serial, thumbprint, etc
+                        for (int j = 0; j < sig.getChildNodes().item(k).getChildNodes().getLength(); j++) {
+                            if (sig.getChildNodes().item(k).getChildNodes().item(j).getLocalName().equalsIgnoreCase("X509Data")) {
+                                Node X509Data = sig.getChildNodes().item(k).getChildNodes().item(j);
+                                for (int x = 0; x < X509Data.getChildNodes().getLength(); x++) {
+                                    if (X509Data.getChildNodes().item(x).getLocalName().equalsIgnoreCase("X509Certificate")) {
+                                        //yay found it!
+
+
+                                        String c =
+                                                "-----BEGIN CERTIFICATE-----\n"
+                                                + X509Data.getChildNodes().item(x).getTextContent()
+                                                + "\n-----END CERTIFICATE-----";
+                                        //System.out.println("X509 Public key: " + c);
+                                        InputStream is = new ByteArrayInputStream(c.getBytes());
+                                        return (X509Certificate) cf.generateCertificate(is);
+
+                                    }
+
+                                    //if we have a 
+                                    //TODO other parsing items, lots of other potentials here
+                                }
+                                return FindCert(X509Data.getChildNodes());
+                            }
+
+                        }
+                        break;
+                    }
+
+                }
+
+                break;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Verifies the signature on an enveloped digital signature on a UDDI
+     * entity, such as a business, service, tmodel or binding template. <br><Br>
+     * It is expected that either the public key of the signing certificate is
+     * included within the signature keyinfo section OR that sufficient
+     * information is provided in the signature to reference a public key
+     * located within the Trust Store provided<br><Br> Optionally, this function
+     * also validate the signing certificate using the options provided to the
+     * configuration map.
+     *
+     * @param obj an enveloped signed JAXB object
+     * @param OutErrorMessage a human readable error message explaining the
+     * reason for failure
+     * @return true if the validation passes the signature validation test, and
+     * optionally any certificate validation or trust chain validation
+     * @throws IllegalArgumentException for null input
+     */
+    public boolean verifySignedUddiEntity(Object obj, AtomicReference<String> OutErrorMessage) throws IllegalArgumentException {
+        if (OutErrorMessage == null) {
+            OutErrorMessage = new AtomicReference<String>();
+        }
+        if (obj == null) {
+            throw new IllegalArgumentException("obj");
+        }
+        try {
+            DOMResult domResult = new DOMResult();
+            JAXB.marshal(obj, domResult);
+
+            Document doc = ((Document) domResult.getNode());
+            Element docElement = doc.getDocumentElement();  //this is our signed node
+
+            X509Certificate signingcert = getSigningCertificatePublicKey(obj, docElement);
+
+            if (signingcert != null && signingcert instanceof X509Certificate) {
+                logger.info("verifying signature based on embedded X509 public key " + signingcert.getSubjectDN().toString());
+                if (map.containsKey(CHECK_TIMESTAMPS)) {
+                    signingcert.checkValidity();
+                }
+                if (map.containsKey(CHECK_REVOCATION_STATUS_OCSP)) {
+                    logger.info("verifying revocation status via OSCP for X509 public key " + signingcert.getSubjectDN().toString());
+                    X500Principal issuerX500Principal = signingcert.getIssuerX500Principal();
+                    logger.info("certificate " + signingcert.getSubjectDN().toString() + " was issued by " + issuerX500Principal.getName() + ", attempting to retrieve certificate");
+                    Security.setProperty("ocsp.enable", "false");
+                    X509Certificate issuer = FindCertByDN(issuerX500Principal);
+                    if (issuer == null) {
+                        throw new CertificateException("unable to locate the issuers certificate in the trust store");
+                    }
+                    RevocationStatus check = OCSP.check(signingcert, issuer);
+                    logger.info("certificate " + signingcert.getSubjectDN().toString() + " revocation status is " + check.getCertStatus().toString() + " reason " + check.getRevocationReason().toString());
+                    if (check.getCertStatus() != RevocationStatus.CertStatus.GOOD) {
+                        throw new CertificateException("Certificate status is " + check.getCertStatus().toString() + " reason " + check.getRevocationReason().toString());
+                    }
+                }
+                if (map.containsKey(CHECK_REVOCATION_STATUS_CRL)) {
+                    logger.info("verifying revokation status via CRL for X509 public key " + signingcert.getSubjectDN().toString());
+
+                    Security.setProperty("ocsp.enable", "false");
+                    System.setProperty("com.sun.security.enableCRLDP", "true");
+
+                    X509CertSelector targetConstraints = new X509CertSelector();
+                    targetConstraints.setCertificate(signingcert);
+                    PKIXParameters params = new PKIXParameters(GetTrustStore());
+                    params.setRevocationEnabled(true);
+                    CertPath certPath = cf.generateCertPath(Arrays.asList(signingcert));
+
+                    CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
+                    CertPathValidatorResult result = certPathValidator.validate(certPath, params);
+
+                    PKIXCertPathValidatorResult pkixResult = (PKIXCertPathValidatorResult) result;
+                    logger.info("revokation status via CRL PASSED for X509 public key " + signingcert.getSubjectDN().toString());
+
+                }
+                if (map.containsKey(CHECK_TRUST_CHAIN)) {
+                    logger.info("verifying trust chain X509 public key " + signingcert.getSubjectDN().toString());
+                    PKIXParameters params = new PKIXParameters(GetTrustStore());
+                    params.setRevocationEnabled(false);
+                    CertPath certPath = cf.generateCertPath(Arrays.asList(signingcert));
+
+                    CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
+                    CertPathValidatorResult result = certPathValidator.validate(certPath, params);
+
+                    PKIXCertPathValidatorResult pkixResult = (PKIXCertPathValidatorResult) result;
+
+                    TrustAnchor ta = pkixResult.getTrustAnchor();
+                    X509Certificate cert = ta.getTrustedCert();
+                    logger.info("trust chain validated X509 public key " + signingcert.getSubjectDN().toString());
+                }
+                return verifySignature(docElement, signingcert.getPublicKey(), OutErrorMessage);
+            }
+
+            //last chance validation
+            logger.info("signature did not have an embedded X509 public key. reverting to user specified certificate");
+            //cert wasn't included in the signature, revert to some other means
+            KeyStore ks = KeyStore.getInstance(map.getProperty(SIGNATURE_KEYSTORE_FILETYPE));
+            URL url = Thread.currentThread().getContextClassLoader().getResource(map.getProperty(SIGNATURE_KEYSTORE_FILE));
+            if (url == null) {
+                try {
+                    url = new File(map.getProperty(SIGNATURE_KEYSTORE_FILE)).toURI().toURL();
+                } catch (Exception x) {
+                }
+            }
+            if (url == null) {
+                try {
+                    url = this.getClass().getClassLoader().getResource(map.getProperty(SIGNATURE_KEYSTORE_FILE));
+                } catch (Exception x) {
+                }
+            }
+
+            ks.load(url.openStream(), map.getProperty(SIGNATURE_KEYSTORE_FILE_PASSWORD).toCharArray());
+            KeyStore.PrivateKeyEntry keyEntry = null;
+            if (map.getProperty(SIGNATURE_KEYSTORE_KEY_PASSWORD) == null) {
+                keyEntry =
+                        (KeyStore.PrivateKeyEntry) ks.getEntry(map.getProperty(SIGNATURE_KEYSTORE_KEY_ALIAS),
+                        new KeyStore.PasswordProtection(map.getProperty(SIGNATURE_KEYSTORE_FILE_PASSWORD).toCharArray()));
+            } else {
+                keyEntry =
+                        (KeyStore.PrivateKeyEntry) ks.getEntry(map.getProperty(SIGNATURE_KEYSTORE_KEY_ALIAS),
+                        new KeyStore.PasswordProtection(map.getProperty(SIGNATURE_KEYSTORE_KEY_PASSWORD).toCharArray()));
+            }
+
+
+            Certificate origCert = keyEntry.getCertificate();
+            if (map.containsKey(CHECK_TIMESTAMPS)) {
+                if (origCert.getPublicKey() instanceof X509Certificate) {
+                    X509Certificate x = (X509Certificate) origCert.getPublicKey();
+                    x.checkValidity();
+                }
+            }
+            PublicKey validatingKey = origCert.getPublicKey();
+            return verifySignature(docElement, validatingKey, OutErrorMessage);
+        } catch (Exception e) {
+            //throw new RuntimeException(e);
+            logger.error("Error caught validating signature", e);
+            OutErrorMessage.set(e.getMessage());
+            return false;
+        }
+    }
+
+    private KeyStore GetTrustStore() throws Exception {
+        KeyStore ks = KeyStore.getInstance(map.getProperty(TRUSTSTORE_FILETYPE));
+        URL url = Thread.currentThread().getContextClassLoader().getResource(map.getProperty(TRUSTSTORE_FILE));
+        if (url == null) {
+            try {
+                url = new File(map.getProperty(TRUSTSTORE_FILE)).toURI().toURL();
+            } catch (Exception x) {
+            }
+        }
+        if (url == null) {
+            try {
+                url = this.getClass().getClassLoader().getResource(map.getProperty(TRUSTSTORE_FILE));
+            } catch (Exception x) {
+            }
+        }
+        if (!map.getProperty(TRUSTSTORE_FILETYPE).equalsIgnoreCase("WINDOWS-ROOT")) {
+            ks.load(url.openStream(), (map.getProperty(TRUSTSTORE_FILE_PASSWORD)).toCharArray());
+        } else {
+            //Windows only
+            ks.load(null, null);
+        }
+
+        return ks;
+    }
+
+    private XMLSignatureFactory initXMLSigFactory() {
+        XMLSignatureFactory fac = XMLSignatureFactory.getInstance();
+        return fac;
+    }
+
+    private Reference initReference(XMLSignatureFactory fac) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
+        List transformers = new ArrayList();
+        transformers.add(fac.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null));
+
+        String dm = map.getProperty(SIGNATURE_OPTION_DIGEST_METHOD);
+        if (dm == null) {
+            dm = DigestMethod.SHA1;
+        }
+        Reference ref = fac.newReference("", fac.newDigestMethod(dm, null), transformers, null, null);
+        return ref;
+    }
+
+    private SignedInfo initSignedInfo(XMLSignatureFactory fac) throws Exception {
+        Reference ref = initReference(fac);
+        String cm = null;
+        cm = map.getProperty(CANONICALIZATIONMETHOD);
+        String sigmethod = null;
+        sigmethod = map.getProperty(SIGNATURE_METHOD);
+        if (sigmethod == null) {
+            sigmethod = SignatureMethod.RSA_SHA1;
+        }
+        if (cm == null) {
+            cm = CanonicalizationMethod.EXCLUSIVE;
+        }
+        SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(
+                cm,
+                (C14NMethodParameterSpec) null),
+                fac.newSignatureMethod(sigmethod,
+                null), Collections.singletonList(ref));
+        return si;
+    }
+
+    private boolean verifySignature(Element element, PublicKey validatingKey, AtomicReference<String> OutReadableErrorMessage) {
+        if (OutReadableErrorMessage == null) {
+            OutReadableErrorMessage = new AtomicReference<String>();
+        }
+        XMLSignatureFactory fac = initXMLSigFactory();
+        NodeList nl = element.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
+        if (nl.getLength() == 0) {
+            throw new RuntimeException("Cannot find Signature element");
+        }
+        DOMValidateContext valContext = new DOMValidateContext(validatingKey, nl.item(0));
+        try {
+            valContext.setProperty("javax.xml.crypto.dsig.cacheReference", Boolean.TRUE);
+            XMLSignature signature = fac.unmarshalXMLSignature(valContext);
+            boolean coreValidity = signature.validate(valContext);
+            // Check core validation status.
+            if (coreValidity == false) {
+                logger.warn("Signature failed core validation");
+                boolean sv = signature.getSignatureValue().validate(valContext);
+                logger.debug("signature validation status: " + sv);
+                OutReadableErrorMessage.set("signature validation failed: " + sv);
+                // Check the validation status of each Reference.
+                @SuppressWarnings("unchecked")
+                Iterator<Reference> i = signature.getSignedInfo().getReferences().iterator();
+                //System.out.println("---------------------------------------------");
+                for (int j = 0; i.hasNext(); j++) {
+                    Reference ref = (Reference) i.next();
+                    boolean refValid = ref.validate(valContext);
+                    logger.debug(j);
+                    logger.debug("ref[" + j + "] validity status: " + refValid);
+                    if (!refValid) {
+                        OutReadableErrorMessage.set("signature reference " + j + " invalid");
+                    }
+                    logger.debug("Ref type: " + ref.getType() + ", URI: " + ref.getURI());
+                    for (Object xform : ref.getTransforms()) {
+                        logger.debug("Transform: " + xform);
+                    }
+                    String calcDigValStr = digestToString(ref.getCalculatedDigestValue());
+                    String expectedDigValStr = digestToString(ref.getDigestValue());
+                    logger.warn("    Calc Digest: " + calcDigValStr);
+                    logger.warn("Expected Digest: " + expectedDigValStr);
+                    if (!calcDigValStr.equalsIgnoreCase(expectedDigValStr)) {
+                        OutReadableErrorMessage.set("digest mismatch for signature ref " + j);
+                    }
+                    /*InputStream is = ref.getDigestInputStream();
+                     InputStreamReader isr = new InputStreamReader(is);
+                     BufferedReader br = new BufferedReader(isr);
+                     String line;
+                     while ((line = br.readLine()) != null) {
+                     System.out.println(line);
+                     }
+                     is.close();
+                     System.out.println("---------------------------------------------");*/
+                }
+            } else {
+                logger.info("Signature passed core validation");
+            }
+            return coreValidity;
+        } catch (Exception e) {
+            OutReadableErrorMessage.set("signature validation failed: " + e.getMessage());
+            logger.fatal(e);
+            return false;
+        }
+    }
+
+    private String digestToString(byte[] digest) {
+        StringBuilder sb = new StringBuilder();
+        for (byte b : digest) {
+            String hex = Integer.toHexString(0xFF & b);
+            if (hex.length() == 1) {
+                sb.append('0');
+            }
+            sb.append(hex);
+        }
+        return sb.toString();
+    }
+
+    private void signDOM(Node node, PrivateKey privateKey, Certificate origCert) {
+        XMLSignatureFactory fac = initXMLSigFactory();
+        X509Certificate cert = (X509Certificate) origCert;
+        // Create the KeyInfo containing the X509Data.
+
+        KeyInfoFactory kif = fac.getKeyInfoFactory();
+
+
+        List<Object> x509Content = null;//new ArrayList<Object>();
+        List<X509Data> data = new ArrayList<X509Data>();
+        /*if (map.containsKey(SIGNATURE_OPTION_CERT_INCLUSION_SUBJECTDN)) {
+         * x509Content = new ArrayList<Object>();
+         * //    x509Content.add(cert.getSubjectDN().getName());
+         * //  x509Content.add(cert);
+         * x509Content.add(cert.getSubjectDN().getName());
+         * X509Data xd = kif.newX509Data(x509Content);
+         * data.add(xd);
+         * }
+         * if (map.containsKey(SIGNATURE_OPTION_CERT_INCLUSION_SERIAL)) {
+         * x509Content = new ArrayList<Object>();
+         * x509Content.add(cert.getSerialNumber());
+         * X509Data xd = kif.newX509Data(x509Content);
+         * data.add(xd);
+         * }
+         * if (map.containsKey(SIGNATURE_OPTION_CERT_INCLUSION_X500_PRINICPAL)) {
+         * x509Content = new ArrayList<Object>();
+         * x509Content.add(cert.getSubjectX500Principal().getName());
+         * X509Data xd = kif.newX509Data(x509Content);
+         * data.add(xd);
+         * }*/
+        if (map.containsKey(SIGNATURE_OPTION_CERT_INCLUSION_BASE64))//just include it
+        {
+            x509Content = new ArrayList<Object>();
+            x509Content.add(cert);
+            //x509Content.add(cert.getSubjectX500Principal().getName());
+            X509Data xd = kif.newX509Data(x509Content);
+            data.add(xd);
+        }
+        //x509Content.add(cert);
+
+
+        KeyInfo ki = kif.newKeyInfo(data);
+
+        // Create a DOMSignContext and specify the RSA PrivateKey and
+        // location of the resulting XMLSignature's parent element.
+        DOMSignContext dsc = new DOMSignContext(privateKey, node);
+        dsc.putNamespacePrefix(XML_DIGSIG_NS, "ns2");
+
+        // Create the XMLSignature, but don't sign it yet.
+        try {
+            SignedInfo si = initSignedInfo(fac);
+            XMLSignature signature = fac.newXMLSignature(si, ki);
+
+            // Marshal, generate, and sign the enveloped signature.
+            signature.sign(dsc);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * searches local keystores for a referenced signing certificate
+     *
+     * @param childNodes
+     * @return null or the public key of a signing certificate
+     */
+    private X509Certificate FindCert(NodeList childNodes) {
+
+        //TODO implement
+        return null;
+    }
+
+    private X509Certificate FindCertByDN(X500Principal name) throws Exception {
+        KeyStore ks = GetTrustStore();
+        Enumeration<String> aliases = ks.aliases();
+        while (aliases.hasMoreElements()) {
+            String nextElement = aliases.nextElement();
+            Certificate certificate = ks.getCertificate(nextElement);
+            X509Certificate x = (X509Certificate) certificate;
+            if (x.getSubjectX500Principal().equals(name)) {
+                return x;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Downloads a CRL from given HTTP/HTTPS/FTP URL, e.g.
+     * http://crl.infonotary.com/crl/identity-ca.crl
+     */
+    private X509CRL downloadCRLFromWeb(String crlURL)
+            throws MalformedURLException, IOException, CertificateException,
+            CRLException {
+        URL url = new URL(crlURL);
+        InputStream crlStream = url.openStream();
+        try {
+            //	CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            X509CRL crl = (X509CRL) cf.generateCRL(crlStream);
+            return crl;
+        } finally {
+            crlStream.close();
+        }
+    }
+}
diff --git a/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/ReadWSDL.java b/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/ReadWSDL.java
index 13aebc3..2573451 100644
--- a/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/ReadWSDL.java
+++ b/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/ReadWSDL.java
@@ -37,9 +37,10 @@
  */

 public class ReadWSDL {

 	

+        private boolean IgnoreSSLErrors = false;

 	private final Log log = LogFactory.getLog(this.getClass());

 	

-	public Definition readWSDL(String fileName) throws WSDLException {

+	public Definition readWSDL(String fileName) throws Exception {

             

 		Definition wsdlDefinition = null;

 		WSDLFactory factory = WSDLFactoryImpl.newInstance();

@@ -65,20 +66,34 @@
          * @return a Definition object representing the WSDL

          * @throws WSDLException 

          */

-        public Definition readWSDL(URL wsdlUrl, String username, String password) throws WSDLException {

+        public Definition readWSDL(URL wsdlUrl, String username, String password) throws WSDLException, Exception {

 	

 		Definition wsdlDefinition = null;

 		WSDLFactory factory = WSDLFactoryImpl.newInstance();

 		WSDLReader reader = factory.newWSDLReader();

+                URI uri=null;

 		try {

-			URI uri = wsdlUrl.toURI();

-			WSDLLocator locator = new WSDLLocatorImpl(uri);

-			wsdlDefinition = reader.readWSDL(locator);

-		} catch (URISyntaxException e) {

+                        uri = wsdlUrl.toURI();

+                } catch (Exception e) {

 			log.error(e.getMessage(),e);

+                        throw new WSDLException("Unable to parse the URL", null, e);

+		}

+		WSDLLocatorImpl locator = new WSDLLocatorImpl(uri, username, password, IgnoreSSLErrors );

+                try{

+			wsdlDefinition = reader.readWSDL(locator);

+		} catch (Exception e) {

+                        log.error(e.getMessage(),e);

+                        if (locator.getLastException()!=null)

+                        {

+                            log.error(e.getMessage(),locator.getLastException());

+                            throw locator.getLastException();

+                        }

+                        throw e;

+                        //throw new WSDLException("Error loading from " + wsdlUrl.toString(), null, e);

 		}

 		return wsdlDefinition;

 	}

+        

         /**

          * Reads a WSDL file, assumes that credentials are not required. This is a convenience wrapper for

          * readWSDL(URL wsdlUrl, null, null, null)

@@ -86,9 +101,17 @@
          * @return a Definition object representing the WSDL

          * @throws WSDLException 

          */

-	public Definition readWSDL(URL wsdlUrl) throws WSDLException {

+	public Definition readWSDL(URL wsdlUrl) throws Exception {

 		return readWSDL(wsdlUrl, null, null);

 	}

+

+    public boolean isIgnoreSSLErrors() {

+        return IgnoreSSLErrors;

+    }

+

+    public void setIgnoreSSLErrors(boolean IgnoreSSLErrors) {

+        this.IgnoreSSLErrors = IgnoreSSLErrors;

+    }

 	

 	

 	

diff --git a/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/WSDL2UDDI.java b/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/WSDL2UDDI.java
index 2ff1c61..af4d9ca 100644
--- a/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/WSDL2UDDI.java
+++ b/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/WSDL2UDDI.java
@@ -32,11 +32,9 @@
 import javax.wsdl.PortType;
 import javax.wsdl.Service;
 import javax.wsdl.WSDLException;
-import javax.wsdl.extensions.http.HTTPAddress;
 import javax.wsdl.extensions.http.HTTPBinding;
 import javax.wsdl.extensions.soap.SOAPAddress;
 import javax.wsdl.extensions.soap.SOAPBinding;
-import javax.wsdl.extensions.soap12.SOAP12Address;
 import javax.xml.namespace.QName;
 
 import org.apache.commons.configuration.ConfigurationException;
@@ -191,14 +189,12 @@
         //Add the BindingTemplate to this Service
         BindingTemplate binding = createWSDLBinding(serviceQName, portName, serviceUrl, wsdlDefinition);
         // Register BindingTemplate
-        if (binding.getAccessPoint()!=null) {
-	        clerk.register(binding);
-	        if (businessService.getBindingTemplates() == null) {
-	            businessService.setBindingTemplates(new BindingTemplates());
-	        }
-	        businessService.getBindingTemplates().getBindingTemplate().add(binding);
-	        response.setBindingKey(binding.getBindingKey());
+        clerk.register(binding);
+        if (businessService.getBindingTemplates() == null) {
+            businessService.setBindingTemplates(new BindingTemplates());
         }
+        businessService.getBindingTemplates().getBindingTemplate().add(binding);
+        response.setBindingKey(binding.getBindingKey());
         response.setBusinessService(businessService);
         return response;
     }
@@ -809,29 +805,20 @@
             if (port != null) {
                 if (serviceUrl == null) {
                     for (Object element : port.getExtensibilityElements()) {
-                    	String location = null;
                         if (element instanceof SOAPAddress) {
                             SOAPAddress address = (SOAPAddress) element;
-                            location = address.getLocationURI();
-                        } 
-                        else if (element instanceof HTTPAddress) {
-                        	HTTPAddress address = (HTTPAddress) element;
-                            location = address.getLocationURI();
-                        }
-                        else if (element instanceof SOAP12Address) {
-                        	SOAP12Address address = (SOAP12Address) element;
-                            location = address.getLocationURI();
-                        }
-                        if (location != null ) {
+                            URL locationURI;
                             try {
-                            	URL locationURI = new URL(location);
-                                AccessPoint accessPoint = new AccessPoint();
-                                accessPoint.setUseType(AccessPointType.END_POINT.toString());
-                                accessPoint.setValue(urlLocalizer.rewrite(locationURI));
-                                bindingTemplate.setAccessPoint(accessPoint);
-                                // Set Binding Key
-                                String bindingKey = UDDIKeyConvention.getBindingKey(properties, serviceQName, portName, locationURI);
-                                bindingTemplate.setBindingKey(bindingKey);
+                                locationURI = new URL(address.getLocationURI());
+                                if (locationURI != null) {
+                                    AccessPoint accessPoint = new AccessPoint();
+                                    accessPoint.setUseType(AccessPointType.END_POINT.toString());
+                                    accessPoint.setValue(urlLocalizer.rewrite(locationURI));
+                                    bindingTemplate.setAccessPoint(accessPoint);
+                                    // Set Binding Key
+                                    String bindingKey = UDDIKeyConvention.getBindingKey(properties, serviceQName, portName, locationURI);
+                                    bindingTemplate.setBindingKey(bindingKey);
+                                }
                                 break;
                             } catch (MalformedURLException e) {
                                 log.error(e.getMessage());
diff --git a/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/WSDLLocatorImpl.java b/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/WSDLLocatorImpl.java
index 5abe3b3..14c4b02 100644
--- a/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/WSDLLocatorImpl.java
+++ b/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/WSDLLocatorImpl.java
@@ -22,32 +22,34 @@
 import java.io.StringReader;
 import java.net.URI;
 import java.net.URL;
-
 import javax.wsdl.xml.WSDLLocator;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.ResponseHandler;
 import org.apache.http.client.methods.HttpGet;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
 import org.apache.http.impl.client.BasicResponseHandler;
 import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.conn.BasicClientConnectionManager;
 import org.xml.sax.InputSource;
 
 /**
  * Implementation of the interface {@link WSDLLocatorImpl}.
  *
- * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a> Modified for
- * supporting http based credentials by Alex O'Ree
+ * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a> 
+ * @author Alex O'Ree - Modified for supporting http based credentials 
  */
 public class WSDLLocatorImpl implements WSDLLocator {
-
+    private Exception lastException=null;
     private final Log log = LogFactory.getLog(this.getClass());
     private InputStream inputStream = null;
     private URI baseURI;
+    private boolean ignoreSSLErrors = false;
     private String latestImportURI;
     private String username = null, password = null;
 
@@ -59,6 +61,7 @@
      */
     public WSDLLocatorImpl(URI baseURI) {
         this.baseURI = baseURI;
+        this.ignoreSSLErrors = ignoreSSLErrors;
     }
 
     /**
@@ -71,10 +74,11 @@
      * @param password
      * @param domain
      */
-    public WSDLLocatorImpl(URI baseURI, String username, String password) {
+    public WSDLLocatorImpl(URI baseURI, String username, String password, boolean ignoreSSLErrors) {
         this.baseURI = baseURI;
         this.username = username;
         this.password = password;
+        this.ignoreSSLErrors = ignoreSSLErrors;
     }
 
     /**
@@ -116,23 +120,35 @@
 
     private InputSource getImportFromUrl(String url) {
         InputSource inputSource = null;
-        DefaultHttpClient httpclient = new DefaultHttpClient();
+        DefaultHttpClient httpclient = null;
         try {
             URL url2 = new URL(url);
             if (!url.toLowerCase().startsWith("http")) {
                 return getImportFromFile(url);
             }
+            boolean usessl = false;
+            int port = 80;
+            if (url.toLowerCase().startsWith("https://")) {
+                port = 443;
+                usessl = true;
+            }
+
+            if (url2.getPort() > 0) {
+                port = url2.getPort();
+            }
+
+            if (ignoreSSLErrors && usessl) {
+                SchemeRegistry schemeRegistry = new SchemeRegistry();
+                schemeRegistry.register(new Scheme("https", port, new MockSSLSocketFactory()));
+                ClientConnectionManager cm = new BasicClientConnectionManager(schemeRegistry);
+                httpclient = new DefaultHttpClient(cm);
+            } else {
+                httpclient = new DefaultHttpClient();
+            }
 
             if (username != null && username.length() > 0
                     && password != null && password.length() > 0) {
-                int port = 80;
-                if (url.toLowerCase().startsWith("https://")) {
-                    port = 443;
-                }
 
-                if (url2.getPort() > 0) {
-                    port = url2.getPort();
-                }
 
                 httpclient.getCredentialsProvider().setCredentials(
                         new AuthScope(url2.getHost(), port),
@@ -162,8 +178,11 @@
             latestImportURI = url;
         } catch (Exception e) {
             log.error(e.getMessage(), e);
+            lastException = e;
         } finally {
-            httpclient.getConnectionManager().shutdown();
+            if (httpclient != null) {
+                httpclient.getConnectionManager().shutdown();
+            }
         }
         return inputSource;
     }
@@ -178,6 +197,7 @@
             return getImportFromUrl(importUrl.toExternalForm());
         } catch (Exception e) {
             log.error(e.getMessage(), e);
+            lastException=e;
         }
         return inputSource;
     }
@@ -191,6 +211,7 @@
             baseURIStr = baseURI.toURL().toExternalForm();
         } catch (IOException e) {
             log.error(e.getMessage(), e);
+            lastException=e;
         }
         return baseURIStr;
     }
@@ -211,6 +232,7 @@
                 inputStream.close();
             } catch (IOException e) {
                 log.error(e.getMessage(), e);
+                lastException=e;
             }
         }
     }
@@ -224,7 +246,17 @@
             latestImportURI = importUrl.toExternalForm();
         } catch (Exception e) {
             log.error(e.getMessage(), e);
+            lastException=e;
         }
         return inputSource;
     }
+    
+    /**
+     * Returns the last exception or null if there wasn't any. This was done because the authors of WSDLLocator apparently thought it would always work
+     * @return 
+     */
+    public Exception getLastException()
+    {
+        return lastException;
+    }
 }
diff --git a/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/ReadWSDLTest.java b/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/ReadWSDLTest.java
index 49a383d..93f9762 100644
--- a/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/ReadWSDLTest.java
+++ b/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/ReadWSDLTest.java
@@ -30,7 +30,7 @@
 public class ReadWSDLTest {

 

     @Test

-    public void readFromFile() throws WSDLException, URISyntaxException {

+    public void readFromFile() throws WSDLException, URISyntaxException, Exception {

 

         ReadWSDL readWSDL = new ReadWSDL();

         Definition definition = readWSDL.readWSDL("wsdl/HelloWorld.wsdl");

@@ -38,7 +38,7 @@
     }

 

     @Test

-    public void readFromURL() throws WSDLException, URISyntaxException, MalformedURLException {

+    public void readFromURL() throws WSDLException, URISyntaxException, MalformedURLException, Exception {

 

         ReadWSDL readWSDL = new ReadWSDL();

         Definition definition = readWSDL.readWSDL(new URL("http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl"));

@@ -46,7 +46,7 @@
     }

 

     @Test

-    public void readFromJar() throws WSDLException, URISyntaxException {

+    public void readFromJar() throws WSDLException, URISyntaxException, Exception {

 

         ReadWSDL readWSDL = new ReadWSDL();

         Definition definition = readWSDL.readWSDL("uddi_v3_service.wsdl");

diff --git a/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/WSDL2UDDITest.java b/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/WSDL2UDDITest.java
index 520d865..47dc6ad 100644
--- a/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/WSDL2UDDITest.java
+++ b/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/WSDL2UDDITest.java
@@ -41,7 +41,7 @@
 	ReadWSDL rw = new ReadWSDL();

 	

 	@Test

-	public void testUDDIBindingModel() throws WSDLException, JAXBException, ConfigurationException {

+	public void testUDDIBindingModel() throws WSDLException, JAXBException, ConfigurationException , Exception{

 

 		// Reading the WSDL

 		Definition wsdlDefinition = rw.readWSDL("wsdl/HelloWorld.wsdl");

@@ -64,7 +64,7 @@
 	}

 	

 	@Test

-	public void testWSDLBindingModel() throws WSDLException, JAXBException, ConfigurationException {

+	public void testWSDLBindingModel() throws WSDLException, JAXBException, ConfigurationException, Exception {

 

 		// Reading the WSDL

 		Definition wsdlDefinition = rw.readWSDL("wsdl/HelloWorld.wsdl");

diff --git a/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/WSDLinaUDDIRegistryTest.java b/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/WSDLinaUDDIRegistryTest.java
index c9d0169..fbaf0f6 100644
--- a/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/WSDLinaUDDIRegistryTest.java
+++ b/juddi-client/src/test/java/org/apache/juddi/v3/client/mapping/WSDLinaUDDIRegistryTest.java
@@ -53,7 +53,7 @@
 	

 	

 	@BeforeClass

-	public static void before() {

+	public static void before() throws Exception{

 		try {

 			wsdlDefinition = rw.readWSDL("wsdl/sample.wsdl");

 			properties.put("keyDomain", "uddi.joepublisher.com");

diff --git a/juddi-core-openjpa/src/test/resources/juddiv3.properties b/juddi-core-openjpa/src/test/resources/juddiv3.properties
index c2e5fba..e8675da 100644
--- a/juddi-core-openjpa/src/test/resources/juddiv3.properties
+++ b/juddi-core-openjpa/src/test/resources/juddiv3.properties
@@ -121,4 +121,9 @@
 
 #juddi.mail.smtp.password
 ##Password used to authenticate to the SMTP server
-##used only if juddi.mail.smtp.auth is true
\ No newline at end of file
+##used only if juddi.mail.smtp.auth is true
+
+
+
+#Since 3.1.5 the maxium ammount of returned subscription entities allowed
+juddi.subscription.maxentities = 1000
\ No newline at end of file
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java
index fca6967..eb99196 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/PublicationHelper.java
@@ -43,6 +43,8 @@
 		businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);

 		

 		List<org.apache.juddi.model.PublisherAssertion> pubAssertionList = FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, completionStatus);

+                if (pubAssertionList==null)

+                    return result;

 		for(org.apache.juddi.model.PublisherAssertion modelPubAssertion : pubAssertionList) {

 			org.uddi.api_v3.AssertionStatusItem apiAssertionStatusItem = new org.uddi.api_v3.AssertionStatusItem();

 

diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java
index 6a2fa83..dde9409 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDICustodyTransferImpl.java
@@ -76,7 +76,7 @@
 	@SuppressWarnings("unchecked")

 	public void discardTransferToken(DiscardTransferToken body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -122,7 +122,7 @@
 			}

 	

 			tx.commit();

-	                long procTime = System.nanoTime() - startTime;

+	                long procTime = System.currentTimeMillis() - startTime;

 	                serviceCounter.update(CustodyTransferQuery.DISCARD_TRANSFERTOKEN, 

 	                        QueryStatus.SUCCESS, procTime);

 

@@ -137,7 +137,7 @@
 	public void getTransferToken(String authInfo, KeyBag keyBag,

 			Holder<String> nodeID, Holder<XMLGregorianCalendar> expirationTime,

 			Holder<byte[]> opaqueToken) throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -186,7 +186,7 @@
 			

 			tx.commit();

 			

-	                long procTime = System.nanoTime() - startTime;

+	                long procTime = System.currentTimeMillis() - startTime;

 	                serviceCounter.update(CustodyTransferQuery.GET_TRANSFERTOKEN, 

 	                        QueryStatus.SUCCESS, procTime);

 

@@ -200,7 +200,7 @@
 

 	public void transferEntities(TransferEntities body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -239,7 +239,7 @@
 			em.remove(modelTransferToken);

 			

 			tx.commit();

-			long procTime = System.nanoTime() - startTime;

+			long procTime = System.currentTimeMillis() - startTime;

 	                serviceCounter.update(CustodyTransferQuery.TRANSFER_ENTITIES, 

 	                        QueryStatus.SUCCESS, procTime);

 

diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
index bb7c517..fcd4e41 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
@@ -81,11 +81,11 @@
 	

     public BindingDetail findBinding(FindBinding body)

 			throws DispositionReportFaultMessage {

-                long startTime = System.nanoTime();

+                long startTime = System.currentTimeMillis();

                 try {

                     new ValidateInquiry(null).validateFindBinding(body);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 }

@@ -119,7 +119,7 @@
 			}

 			BindingDetail result = InquiryHelper.getBindingDetailFromKeys(body, findQualifiers, em, keysFound);

 			tx.rollback();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

@@ -134,11 +134,11 @@
 	

     public BusinessList findBusiness(FindBusiness body)

 			throws DispositionReportFaultMessage {

-                long startTime = System.nanoTime();

+                long startTime = System.currentTimeMillis();

                 try {

                     new ValidateInquiry(null).validateFindBusiness(body);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(InquiryQuery.FIND_BUSINESS, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 }

@@ -159,7 +159,7 @@
 			BusinessList result = InquiryHelper.getBusinessListFromKeys(body, findQualifiers, em, keysFound);

 

 			tx.rollback();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.FIND_BUSINESS, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

@@ -174,11 +174,11 @@
 	

     public RelatedBusinessesList findRelatedBusinesses(FindRelatedBusinesses body)

 			throws DispositionReportFaultMessage {

-                long startTime = System.nanoTime();

+                long startTime = System.currentTimeMillis();

                 try {

                     new ValidateInquiry(null).validateFindRelatedBusinesses(body, false);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(InquiryQuery.FIND_RELATEDBUSINESSES, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 }

@@ -199,7 +199,7 @@
 			RelatedBusinessesList result = InquiryHelper.getRelatedBusinessesList(body, em);

 

 			tx.rollback();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.FIND_RELATEDBUSINESSES, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

@@ -214,11 +214,11 @@
 	

     public ServiceList findService(FindService body)

 			throws DispositionReportFaultMessage {

-                long startTime = System.nanoTime();

+                long startTime = System.currentTimeMillis();

                 try {

                     new ValidateInquiry(null).validateFindService(body);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(InquiryQuery.FIND_SERVICE, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 }

@@ -254,7 +254,7 @@
 			ServiceList result = InquiryHelper.getServiceListFromKeys(body, findQualifiers, em, keysFound);

 

 			tx.rollback();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.FIND_SERVICE, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

@@ -269,11 +269,11 @@
 	

     public TModelList findTModel(FindTModel body)

 			throws DispositionReportFaultMessage {

-                long startTime = System.nanoTime();

+                long startTime = System.currentTimeMillis();

                 try {

                     new ValidateInquiry(null).validateFindTModel(body, false);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 }

@@ -294,7 +294,7 @@
 			TModelList result = InquiryHelper.getTModelListFromKeys(body, findQualifiers, em, keysFound);

 

 			tx.rollback();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

@@ -309,11 +309,11 @@
 	

     public BindingDetail getBindingDetail(GetBindingDetail body)

 			throws DispositionReportFaultMessage {

-                long startTime = System.nanoTime();

+                long startTime = System.currentTimeMillis();

                 try {

                     new ValidateInquiry(null).validateGetBindingDetail(body);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 }

@@ -345,7 +345,7 @@
 			}

 

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.GET_BINDINGDETAIL, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

@@ -360,11 +360,11 @@
 	

     public BusinessDetail getBusinessDetail(GetBusinessDetail body)

 			throws DispositionReportFaultMessage {

-                long startTime = System.nanoTime();

+                long startTime = System.currentTimeMillis();

                 try {

                     new ValidateInquiry(null).validateGetBusinessDetail(body);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(InquiryQuery.GET_BUSINESSDETAIL, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 }

@@ -396,7 +396,7 @@
 			}

 

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.GET_BUSINESSDETAIL, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

@@ -411,11 +411,11 @@
 	

     public OperationalInfos getOperationalInfo(GetOperationalInfo body)

 			throws DispositionReportFaultMessage {

-                long startTime = System.nanoTime();

+                long startTime = System.currentTimeMillis();

                 try {

                     new ValidateInquiry(null).validateGetOperationalInfo(body);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(InquiryQuery.GET_OPERATIONALINFO, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 }

@@ -447,7 +447,7 @@
 			}

 

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.GET_OPERATIONALINFO, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

@@ -462,11 +462,11 @@
 	

     public ServiceDetail getServiceDetail(GetServiceDetail body)

 			throws DispositionReportFaultMessage {

-        long startTime = System.nanoTime();

+        long startTime = System.currentTimeMillis();

         try {

             new ValidateInquiry(null).validateGetServiceDetail(body);

         } catch (DispositionReportFaultMessage drfm) {

-            long procTime = System.nanoTime() - startTime;

+            long procTime = System.currentTimeMillis() - startTime;

             serviceCounter.update(InquiryQuery.GET_SERVICEDETAIL, QueryStatus.FAILED, procTime);                      

             throw drfm;

         }

@@ -498,7 +498,7 @@
 			}

 

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.GET_SERVICEDETAIL, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

@@ -514,11 +514,11 @@
 	

     public TModelDetail getTModelDetail(GetTModelDetail body)

 			throws DispositionReportFaultMessage {

-                long startTime = System.nanoTime();

+                long startTime = System.currentTimeMillis();

                 try {

                     new ValidateInquiry(null).validateGetTModelDetail(body);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(InquiryQuery.GET_TMODELDETAIL, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 }

@@ -550,7 +550,7 @@
 			}

 

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(InquiryQuery.GET_TMODELDETAIL, QueryStatus.SUCCESS, procTime);                      

 

 			return result;

diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
index d375cac..4336d40 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
@@ -92,7 +92,7 @@
 	

 	public void addPublisherAssertions(AddPublisherAssertions body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -152,11 +152,11 @@
 			}

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS, 

                                 QueryStatus.SUCCESS, procTime);			

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS, QueryStatus.FAILED, procTime);                      

                     throw drfm;

                 } finally {

@@ -169,7 +169,7 @@
 

 	public void deleteBinding(DeleteBinding body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -192,11 +192,11 @@
 			}

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.DELETE_BINDING, 

                                 QueryStatus.SUCCESS, procTime);                      

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.DELETE_BINDING, QueryStatus.FAILED, procTime);                      

                     throw drfm;

 		} finally {

@@ -209,7 +209,7 @@
 

 	public void deleteBusiness(DeleteBusiness body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -227,10 +227,10 @@
 			}

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.SUCCESS, procTime);               

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.FAILED, procTime);                      

                     throw drfm;

 		} finally {

@@ -243,7 +243,7 @@
 

 	public void deletePublisherAssertions(DeletePublisherAssertions body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -262,11 +262,11 @@
 			}

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS, 

                                 QueryStatus.SUCCESS, procTime);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS, QueryStatus.FAILED, procTime);                      

                     throw drfm;                        

 		} finally {

@@ -279,7 +279,7 @@
 

 	public void deleteService(DeleteService body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -300,11 +300,11 @@
 			}

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.DELETE_SERVICE, 

                                 QueryStatus.SUCCESS, procTime);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.DELETE_SERVICE, QueryStatus.FAILED, procTime);                      

                     throw drfm;                                               

 		} finally {

@@ -318,7 +318,7 @@
 

 	public void deleteTModel(DeleteTModel body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -338,10 +338,10 @@
 			}

 			

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.DELETE_TMODEL, QueryStatus.SUCCESS, procTime);                      

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.DELETE_TMODEL, QueryStatus.FAILED, procTime);                      

                     throw drfm;                                               

 		} finally {

@@ -356,7 +356,7 @@
 	public List<AssertionStatusItem> getAssertionStatusReport(String authInfo,

 			CompletionStatus completionStatus)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -368,13 +368,13 @@
 			List<org.uddi.api_v3.AssertionStatusItem> result = PublicationHelper.getAssertionStatusItemList(publisher, completionStatus, em);

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT, 

                                 QueryStatus.SUCCESS, procTime);                      

 

 			return result;

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT, QueryStatus.FAILED, procTime);                      

                     throw drfm;                                               

 		} finally {

@@ -387,7 +387,7 @@
 

 	public List<PublisherAssertion> getPublisherAssertions(String authInfo)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -411,12 +411,12 @@
 			}

 			

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS, 

                                 QueryStatus.SUCCESS, procTime);                      

 			return result;

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS, 

                             QueryStatus.FAILED, procTime);                      

                     throw drfm;                                               			

@@ -431,7 +431,7 @@
 

 	public RegisteredInfo getRegisteredInfo(GetRegisteredInfo body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -488,13 +488,13 @@
 			}

 			

 			tx.commit();	

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO, 

                                 QueryStatus.SUCCESS, procTime);                      

 

 			return result;

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO, 

                             QueryStatus.FAILED, procTime);                      

                     throw drfm;                                                                 

@@ -509,7 +509,7 @@
 

 	public BindingDetail saveBinding(SaveBinding body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -542,13 +542,13 @@
 			}

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.SAVE_BINDING, 

                                 QueryStatus.SUCCESS, procTime);                      

 

 			return result;

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.SAVE_BINDING, 

                             QueryStatus.FAILED, procTime);                      

                     throw drfm;                                                                 

@@ -563,7 +563,7 @@
 

 	public BusinessDetail saveBusiness(SaveBusiness body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -595,13 +595,13 @@
 			validator.validateSaveBusinessMax(em);

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.SAVE_BUSINESS, 

                                 QueryStatus.SUCCESS, procTime);                      

 

 			return result;

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.SAVE_BUSINESS, 

                             QueryStatus.FAILED, procTime);                      

                     throw drfm;                                                                 	

@@ -616,7 +616,7 @@
 

 	public ServiceDetail saveService(SaveService body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -650,13 +650,13 @@
 			

 			

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.SAVE_SERVICE, 

                                 QueryStatus.SUCCESS, procTime);                      

 

 			return result;

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.SAVE_SERVICE, 

                             QueryStatus.FAILED, procTime);                      

                     throw drfm;                                                                         			

@@ -671,7 +671,7 @@
 

 	public TModelDetail saveTModel(SaveTModel body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -700,13 +700,13 @@
 			}

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.SAVE_TMODEL, 

                                 QueryStatus.SUCCESS, procTime);                      

 

 			return result;

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.SAVE_TMODEL, 

                             QueryStatus.FAILED, procTime);                      

                     throw drfm;                                                                                                 

@@ -722,7 +722,7 @@
 	public void setPublisherAssertions(String authInfo,

 			Holder<List<PublisherAssertion>> publisherAssertion)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -765,11 +765,11 @@
 			}

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS, 

                                 QueryStatus.SUCCESS, procTime);                      

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS, 

                             QueryStatus.FAILED, procTime);                      

                     throw drfm;                                                                                                 

diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
index bf7dd28..736bd7d 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
@@ -50,8 +50,8 @@
 

 

 	public String doPing(DoPing body) throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

-                long procTime = System.nanoTime() - startTime;

+	        long startTime = System.currentTimeMillis();

+                long procTime = System.currentTimeMillis() - startTime;

                 serviceCounter.update(ReplicationQuery.DO_PING, QueryStatus.SUCCESS, procTime);

 

 		ValidateReplication.unsupportedAPICall();

@@ -64,8 +64,8 @@
 			BigInteger responseLimitCount,

 			HighWaterMarkVectorType responseLimitVector)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

-                long procTime = System.nanoTime() - startTime;

+	        long startTime = System.currentTimeMillis();

+                long procTime = System.currentTimeMillis() - startTime;

                 serviceCounter.update(ReplicationQuery.GET_CHANGERECORDS, 

                         QueryStatus.SUCCESS, procTime);

 

@@ -76,8 +76,8 @@
 

 	public List<ChangeRecordIDType> getHighWaterMarks()

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

-                long procTime = System.nanoTime() - startTime;

+	        long startTime = System.currentTimeMillis();

+                long procTime = System.currentTimeMillis() - startTime;

                 serviceCounter.update(ReplicationQuery.GET_HIGHWATERMARKS, QueryStatus.SUCCESS, procTime);

 

 		ValidateReplication.unsupportedAPICall();

@@ -87,8 +87,8 @@
 

 	public void notifyChangeRecordsAvailable(NotifyChangeRecordsAvailable body)

 			throws DispositionReportFaultMessage {

-            long startTime = System.nanoTime();

-            long procTime = System.nanoTime() - startTime;

+            long startTime = System.currentTimeMillis();

+            long procTime = System.currentTimeMillis() - startTime;

             serviceCounter.update(ReplicationQuery.NOTIFY_CHANGERECORDSAVAILABLE, 

                     QueryStatus.SUCCESS, procTime);

 

@@ -98,8 +98,8 @@
 

 	public void transferCustody(TransferCustody body)

 			throws DispositionReportFaultMessage {

-	    long startTime = System.nanoTime();

-            long procTime = System.nanoTime() - startTime;

+	    long startTime = System.currentTimeMillis();

+            long procTime = System.currentTimeMillis() - startTime;

             serviceCounter.update(ReplicationQuery.TRANSFER_CUSTODY, 

                     QueryStatus.SUCCESS, procTime);

 

diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISecurityImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISecurityImpl.java
index e3fbe27..8815a99 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISecurityImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISecurityImpl.java
@@ -60,7 +60,7 @@
 	

 	public void discardAuthToken(DiscardAuthToken body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 	    

 		EntityManager em = PersistenceManager.getEntityManager();

 		EntityTransaction tx = em.getTransaction();

@@ -77,11 +77,11 @@
 			}

 	

 			tx.commit();

-                        long procTime = System.nanoTime() - startTime;

+                        long procTime = System.currentTimeMillis() - startTime;

                         serviceCounter.update(SecurityQuery.DISCARD_AUTHTOKEN, 

                                 QueryStatus.SUCCESS, procTime);

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(SecurityQuery.DISCARD_AUTHTOKEN, 

                             QueryStatus.FAILED, procTime);                      

                     throw drfm;                                                                                                 

@@ -105,7 +105,7 @@
 	

 	public AuthToken getAuthToken(String publisherId)

 	throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

+	        long startTime = System.currentTimeMillis();

 

 		if (publisherId == null || publisherId.length() == 0)

 			throw new UnknownUserException(new ErrorMessage("errors.auth.InvalidCredentials", publisherId));

@@ -138,13 +138,13 @@
 			MappingModelToApi.mapAuthToken(modelAuthToken, apiAuthToken);

 

 			tx.commit();

-	                long procTime = System.nanoTime() - startTime;

+	                long procTime = System.currentTimeMillis() - startTime;

 	                serviceCounter.update(SecurityQuery.GET_AUTHTOKEN, 

 	                        QueryStatus.SUCCESS, procTime);

 

 			return apiAuthToken;

                 } catch (DispositionReportFaultMessage drfm) {

-                    long procTime = System.nanoTime() - startTime;

+                    long procTime = System.currentTimeMillis() - startTime;

                     serviceCounter.update(SecurityQuery.GET_AUTHTOKEN, 

                             QueryStatus.FAILED, procTime);                      

                     throw drfm;                                                                                                 

diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounter.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounter.java
index c8f33c4..b8c387b 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounter.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIServiceCounter.java
@@ -28,6 +28,11 @@
 import org.apache.juddi.api.util.QueryStatus;
 import org.apache.juddi.api.util.UDDIQuery;
 
+/**
+ * This class provides MBean functionality that offers metrics on UDDI service method invocations
+ * and various management functions (documented by Alex O'Ree)
+ * @author Tom Cunningham
+ */
 public class UDDIServiceCounter implements DynamicMBean, Serializable {
 
     private static Log log = LogFactory.getLog(UDDIServiceCounter.class);
@@ -146,6 +151,14 @@
 
     }
 
+    /**
+     * This updates the performance metrics for a given service.
+     * 
+     * Note, as of jUDDI 3.2, procTime MUST be in milliseconds. Prior to 3.2 used nanoseconds
+     * @param queryObject the item that was executed
+     * @param queryStatus success or fail status
+     * @param procTime Expects time in milliseconds
+     */
     public synchronized void update(UDDIQuery queryObject, QueryStatus queryStatus, 
             long procTime) {        
         //log.info("Updating " + queryObject.getQuery() + " time " + procTime);
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetCachingImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetCachingImpl.java
index dded8f3..481b177 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetCachingImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetCachingImpl.java
@@ -49,8 +49,8 @@
     public void getAllValidValues(String authInfo, String modelKey,

 			Holder<String> chunkToken, Holder<List<ValidValue>> validValue)

 			throws DispositionReportFaultMessage {

-            long startTime = System.nanoTime();

-            long procTime = System.nanoTime() - startTime;

+            long startTime = System.currentTimeMillis();

+            long procTime = System.currentTimeMillis() - startTime;

             serviceCounter.update(ValueSetCachingQuery.GET_ALLVALIDVALUES, 

                     QueryStatus.SUCCESS, procTime);

 

diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetValidationImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetValidationImpl.java
index f632dc0..6ad5ddf 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetValidationImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetValidationImpl.java
@@ -46,8 +46,8 @@
     

 	public DispositionReport validateValues(ValidateValues body)

 			throws DispositionReportFaultMessage {

-	        long startTime = System.nanoTime();

-                long procTime = System.nanoTime() - startTime;

+	        long startTime = System.currentTimeMillis();

+                long procTime = System.currentTimeMillis() - startTime;

                 serviceCounter.update(ValueSetValidationQuery.VALIDATE_VALUES, 

                         QueryStatus.SUCCESS, procTime);

 

diff --git a/juddi-core/src/main/java/org/apache/juddi/config/Property.java b/juddi-core/src/main/java/org/apache/juddi/config/Property.java
index 3d8084f..68620a3 100644
--- a/juddi-core/src/main/java/org/apache/juddi/config/Property.java
+++ b/juddi-core/src/main/java/org/apache/juddi/config/Property.java
@@ -1,7 +1,7 @@
 package org.apache.juddi.config;
 
 public interface Property {
-
+    public final static String JDDU_SUBSCRIPTION_MAXENTITIES="juddi.subscription.maxentities";
     public final static String JUDDI_ROOT_PUBLISHER = "juddi.root.publisher";
     public final static String JUDDI_LOAD_INSTALL_DATA = "juddi.load.install.data";
     public final static String JUDDI_PERSISTENCEUNIT_NAME = "juddi.persistenceunit.name";
diff --git a/juddi-core/src/main/java/org/apache/juddi/validation/ValidateSubscription.java b/juddi-core/src/main/java/org/apache/juddi/validation/ValidateSubscription.java
index 69fa642..136bac1 100644
--- a/juddi-core/src/main/java/org/apache/juddi/validation/ValidateSubscription.java
+++ b/juddi-core/src/main/java/org/apache/juddi/validation/ValidateSubscription.java
@@ -14,15 +14,21 @@
  * limitations under the License.
  *
  */
-
- package org.apache.juddi.validation;
+package org.apache.juddi.validation;
 
 import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.HashSet;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javax.persistence.EntityManager;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.config.Property;
 
 import org.apache.juddi.keygen.KeyGenerator;
 import org.apache.juddi.keygen.KeyGeneratorFactory;
@@ -45,192 +51,271 @@
  */
 public class ValidateSubscription extends ValidateUDDIApi {
 
-	public ValidateSubscription(UddiEntityPublisher publisher) {
-		super(publisher);
-	}
+    public ValidateSubscription(UddiEntityPublisher publisher) {
+        super(publisher);
+    }
+    private DatatypeFactory df = null;
 
-	public void validateSubscriptions(EntityManager em, List<org.uddi.sub_v3.Subscription> entityList) throws DispositionReportFaultMessage {
+    public void validateSubscriptions(EntityManager em, List<org.uddi.sub_v3.Subscription> entityList) throws DispositionReportFaultMessage {
 
-		// No null or empty list
-		if (entityList == null || entityList.size() == 0)
-			throw new ValueNotAllowedException(new ErrorMessage("errors.savesubscription.NoInput"));
-		
-		for (org.uddi.sub_v3.Subscription entity : entityList) {
-			validateSubscription(em, entity);
-		}
-	}
-	
-	public void validateSubscription(EntityManager em, org.uddi.sub_v3.Subscription subscription) throws DispositionReportFaultMessage {
+        // No null or empty list
+        if (entityList == null || entityList.size() == 0) {
+            throw new ValueNotAllowedException(new ErrorMessage("errors.savesubscription.NoInput"));
+        }
 
-		// A supplied subscription can't be null
-		if (subscription == null)
-			throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.NullInput"));
-		
-		boolean entityExists = false;
-		String entityKey = subscription.getSubscriptionKey();
-		if (entityKey == null || entityKey.length() == 0) {
-			KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator();
-			entityKey = keyGen.generate();
-			subscription.setSubscriptionKey(entityKey);
-		}
-		else {
-			// Per section 4.4: keys must be case-folded
-			entityKey = entityKey.toLowerCase();
-			subscription.setSubscriptionKey(entityKey);
+        for (org.uddi.sub_v3.Subscription entity : entityList) {
+            validateSubscription(em, entity);
+        }
+    }
 
-			Object obj = em.find(org.apache.juddi.model.Subscription.class, entityKey);
-			if (obj != null) {
-				entityExists = true;
+    private void validateSubscription(EntityManager em, org.uddi.sub_v3.Subscription subscription) throws DispositionReportFaultMessage {
 
-				// Make sure publisher owns this entity.
-				if (!publisher.getAuthorizedName().equals(((org.apache.juddi.model.Subscription)obj).getAuthorizedName()))
-					throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey));
-			}
-			else {
-				// Inside this block, we have a key proposed by the publisher on a new entity
+        // A supplied subscription can't be null
+        if (subscription == null) {
+            throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.NullInput"));
+        }
+        if (df == null) {
+            try {
+                df = DatatypeFactory.newInstance();
+            } catch (DatatypeConfigurationException ex) {
+                throw new FatalErrorException(new ErrorMessage("errors.DatatypeFactor"));
+            }
+        }
+        boolean entityExists = false;
+        String entityKey = subscription.getSubscriptionKey();
+        //no key specified, make a new one
+        if (entityKey == null || entityKey.length() == 0) {
+            KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator();
+            entityKey = keyGen.generate();
+            subscription.setSubscriptionKey(entityKey);
+        } else {
+            //key specified, validate it
+            // Per section 4.4: keys must be case-folded
+            entityKey = entityKey.toLowerCase();
+            subscription.setSubscriptionKey(entityKey);
 
-				// Validate key and then check to see that the proposed key is valid for this publisher
-				ValidateUDDIKey.validateUDDIv3Key(entityKey);
-				if (!publisher.isValidPublisherKey(em, entityKey))
-					throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey));
+            Object obj = em.find(org.apache.juddi.model.Subscription.class, entityKey);
+            if (obj != null) {
+                entityExists = true;
+                //revising a new item
+                // Make sure publisher owns this entity.
+                if (!publisher.getAuthorizedName().equals(((org.apache.juddi.model.Subscription) obj).getAuthorizedName())) {
+                    throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey));
+                }
+            } else {
+                //new item
+                // Inside this block, we have a key proposed by the publisher on a new entity
 
-			}
-			
-		}
+                // Validate key and then check to see that the proposed key is valid for this publisher
+                ValidateUDDIKey.validateUDDIv3Key(entityKey);
+                if (!publisher.isValidPublisherKey(em, entityKey)) {
+                    throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey));
+                }
 
-		if (!entityExists) {
-			// Check to make sure key isn't used by another entity.
-			if (!isUniqueKey(em, entityKey))
-				throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey));
-		}
-		
-		
-		validateSubscriptionFilter(subscription.getSubscriptionFilter(), entityExists);
-	}
+            }
 
-	public void validateSubscriptionFilter(SubscriptionFilter subscriptionFilter, boolean entityExists) throws DispositionReportFaultMessage {
-		if (!entityExists && subscriptionFilter == null)
-			throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.NoFilterOnNewSubscription"));
-			
-		if (subscriptionFilter != null) {
-			int filterCount = 0;
-			ValidateInquiry validateInquiry = new ValidateInquiry(publisher);
-			if (subscriptionFilter.getFindBinding() != null) {
-				filterCount++;
-				validateInquiry.validateFindBinding(subscriptionFilter.getFindBinding());
-			}
-			if (subscriptionFilter.getFindBusiness() != null) {
-				filterCount++;
-				validateInquiry.validateFindBusiness(subscriptionFilter.getFindBusiness());
-			}
-			if (subscriptionFilter.getFindService() != null) {
-				filterCount++;
-				validateInquiry.validateFindService(subscriptionFilter.getFindService());
-			}
-			if (subscriptionFilter.getFindTModel() != null) {
-				filterCount++;
-				validateInquiry.validateFindTModel(subscriptionFilter.getFindTModel(), false);
-			}
-			if (subscriptionFilter.getFindRelatedBusinesses() != null) {
-				filterCount++;
-				validateInquiry.validateFindRelatedBusinesses(subscriptionFilter.getFindRelatedBusinesses(), false);
-			}
-			if (subscriptionFilter.getGetBindingDetail() != null) {
-				filterCount++;
-				validateInquiry.validateGetBindingDetail(subscriptionFilter.getGetBindingDetail());
-			}
-			if (subscriptionFilter.getGetBusinessDetail() != null) {
-				filterCount++;
-				validateInquiry.validateGetBusinessDetail(subscriptionFilter.getGetBusinessDetail());
-			}
-			if (subscriptionFilter.getGetServiceDetail() != null) {
-				filterCount++;
-				validateInquiry.validateGetServiceDetail(subscriptionFilter.getGetServiceDetail());
-			}
-			if (subscriptionFilter.getGetTModelDetail() != null) {
-				filterCount++;
-				validateInquiry.validateGetTModelDetail(subscriptionFilter.getGetTModelDetail());
-			}
-			if (subscriptionFilter.getGetAssertionStatusReport() != null) {
-				filterCount++;
-			}
+        }
 
-			if (filterCount == 0)
-				throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.BlankFilter"));
-			
-			if (filterCount > 1)
-				throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.TooManyFilters", String.valueOf(filterCount)));
+        if (!entityExists) {
+            // Check to make sure key isn't used by another entity.
+            if (!isUniqueKey(em, entityKey)) {
+                throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey));
+            }
+        }
+        //AO, if it's already expired, why even allow it?
+        if (subscription.getExpiresAfter() != null) {
+            long expiresat = subscription.getExpiresAfter().toGregorianCalendar().getTimeInMillis();
+            if (System.currentTimeMillis() > expiresat) {
+                throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.expired"));
+            }
+        }
+        if (subscription.getMaxEntities() != null) {
+            if (subscription.getMaxEntities().intValue() <= 0) {
+                throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.maxrecordstoosmall"));
+            }
+        }
+        //maxEntities:  This optional integer specifies the maximum number of entities in a notification returned to a subscription listener. 
+        //If not specified, the number of entities sent is not limited, unless by node policy.
+        try {
+            if (subscription.getMaxEntities() == null
+                    || subscription.getMaxEntities().intValue() > AppConfig.getConfiguration().getInt(Property.JDDU_SUBSCRIPTION_MAXENTITIES, 1000)) {
+                subscription.setMaxEntities(AppConfig.getConfiguration().getInt(Property.JDDU_SUBSCRIPTION_MAXENTITIES, 1000));
+            }
+        } catch (ConfigurationException x) {
+            subscription.setMaxEntities(1000);
+        }
+        /*
+         *  notificationInterval:  This optional argument is only required when asynchronous notifications are used. 
+         * It is of type xsd:duration and specifies how often change notifications are to be provided to a subscriber. 
+         * If the notificationInterval specified is not acceptable due to node policy, then the node adjusts the value to
+         * match the next longer time period that is supported.  The adjusted value is provided with the returns from this
+         * API.  Also see Section 5.5.1.1 Specifying Durations.
+         */
+        if (subscription.getNotificationInterval() == null && subscription.getBindingKey() != null) {
+            throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.notificationintervalnotdefined"));
+        }
+        
+        //validate that the binding key exists
+        validateSubscriptionBindingkeyExists(em,subscription.getBindingKey());
+        
+        validateSubscriptionFilter(subscription.getSubscriptionFilter(), entityExists);
+    }
 
-		}
-		
-	}
-	
-	public void validateDeleteSubscription(EntityManager em, DeleteSubscription body) throws DispositionReportFaultMessage {
-		// No null input
-		if (body == null)
-			throw new FatalErrorException(new ErrorMessage("errors.NullInput"));
+    /**
+     * this handles just the filter items only
+     *
+     * @param subscriptionFilter
+     * @param entityExists or more accurately, is this a new item or not?
+     * @throws DispositionReportFaultMessage
+     */
+    private void validateSubscriptionFilter(SubscriptionFilter subscriptionFilter, boolean entityExists) throws DispositionReportFaultMessage {
+        if (!entityExists && subscriptionFilter == null) {
+            throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.NoFilterOnNewSubscription"));
+        }
 
-		// No null or empty list
-		List<String> entityKeyList = body.getSubscriptionKey();
-		if (entityKeyList == null || entityKeyList.size() == 0)
-			throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys"));
-		
-		HashSet<String> dupCheck = new HashSet<String>();
-		int i = 0;
-		for (String entityKey : entityKeyList) {
+        if (subscriptionFilter != null) {
+            int filterCount = 0;
+            ValidateInquiry validateInquiry = new ValidateInquiry(publisher);
+            if (subscriptionFilter.getFindBinding() != null) {
+                filterCount++;
+                validateInquiry.validateFindBinding(subscriptionFilter.getFindBinding());
+            }
+            if (subscriptionFilter.getFindBusiness() != null) {
+                filterCount++;
+                validateInquiry.validateFindBusiness(subscriptionFilter.getFindBusiness());
+            }
+            if (subscriptionFilter.getFindService() != null) {
+                filterCount++;
+                validateInquiry.validateFindService(subscriptionFilter.getFindService());
+            }
+            if (subscriptionFilter.getFindTModel() != null) {
+                filterCount++;
+                validateInquiry.validateFindTModel(subscriptionFilter.getFindTModel(), false);
+            }
+            if (subscriptionFilter.getFindRelatedBusinesses() != null) {
+                filterCount++;
+                validateInquiry.validateFindRelatedBusinesses(subscriptionFilter.getFindRelatedBusinesses(), false);
+            }
+            if (subscriptionFilter.getGetBindingDetail() != null) {
+                filterCount++;
+                validateInquiry.validateGetBindingDetail(subscriptionFilter.getGetBindingDetail());
+            }
+            if (subscriptionFilter.getGetBusinessDetail() != null) {
+                filterCount++;
+                validateInquiry.validateGetBusinessDetail(subscriptionFilter.getGetBusinessDetail());
+            }
+            if (subscriptionFilter.getGetServiceDetail() != null) {
+                filterCount++;
+                validateInquiry.validateGetServiceDetail(subscriptionFilter.getGetServiceDetail());
+            }
+            if (subscriptionFilter.getGetTModelDetail() != null) {
+                filterCount++;
+                validateInquiry.validateGetTModelDetail(subscriptionFilter.getGetTModelDetail());
+            }
+            if (subscriptionFilter.getGetAssertionStatusReport() != null) {
+                filterCount++;
+            }
 
-			// Per section 4.4: keys must be case-folded
-			entityKey = entityKey.toLowerCase();
-			entityKeyList.set(i, entityKey);
-			
-			boolean inserted = dupCheck.add(entityKey);
-			if (!inserted)
-				throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey));
-			
-			Object obj = em.find(org.apache.juddi.model.Subscription.class, entityKey);
-			if (obj == null)
-				throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.SubscriptionNotFound", entityKey));
-			
-			// Make sure publisher owns this entity.
-			if (!publisher.getAuthorizedName().equals(((org.apache.juddi.model.Subscription)obj).getAuthorizedName()))
-				throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey));
-			
-			i++;
-		}
-	}
+            if (filterCount == 0) {
+                throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.BlankFilter"));
+            }
 
-	public void validateGetSubscriptionResults(EntityManager em, GetSubscriptionResults body) throws DispositionReportFaultMessage {
-		// No null input
-		if (body == null)
-			throw new FatalErrorException(new ErrorMessage("errors.NullInput"));
-		
-		String subscriptionKey = body.getSubscriptionKey();
-		if (subscriptionKey == null || subscriptionKey.length() == 0)
-			throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NullKey", subscriptionKey));
-		
-		// Per section 4.4: keys must be case-folded
-		subscriptionKey = subscriptionKey.toLowerCase();
-		body.setSubscriptionKey(subscriptionKey);
-		
-		Object obj = em.find(org.apache.juddi.model.Subscription.class, subscriptionKey);
-		if (obj == null)
-			throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.SubscriptionNotFound", subscriptionKey));
-		
-		Date expiresAfter = ((org.apache.juddi.model.Subscription)obj).getExpiresAfter();
-		Date now = new Date();
-		if (expiresAfter.getTime() < now.getTime())
-			throw new InvalidKeyPassedException(new ErrorMessage("errors.getsubscriptionresult.SubscriptionExpired", subscriptionKey));
-		
-		CoveragePeriod coveragePeriod = body.getCoveragePeriod();
-		if (coveragePeriod == null)
-			throw new InvalidTimeException(new ErrorMessage("errors.getsubscriptionresult.NullCoveragePeriod"));
-		
-		if (coveragePeriod.getStartPoint() == null || coveragePeriod.getEndPoint() == null)
-			throw new InvalidTimeException(new ErrorMessage("errors.getsubscriptionresult.InvalidDateInCoveragePeriod"));
-		
-		GregorianCalendar startPoint = coveragePeriod.getStartPoint().toGregorianCalendar();
-		GregorianCalendar endPoint = coveragePeriod.getEndPoint().toGregorianCalendar();
-		if (startPoint.getTimeInMillis() > endPoint.getTimeInMillis())
-			throw new InvalidTimeException(new ErrorMessage("errors.getsubscriptionresult.StartPointAfterEndPoint", startPoint.toString()));		
-	}
+            if (filterCount > 1) {
+                throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.TooManyFilters", String.valueOf(filterCount)));
+            }
+
+        }
+
+    }
+
+    public void validateDeleteSubscription(EntityManager em, DeleteSubscription body) throws DispositionReportFaultMessage {
+        // No null input
+        if (body == null) {
+            throw new FatalErrorException(new ErrorMessage("errors.NullInput"));
+        }
+
+        // No null or empty list
+        List<String> entityKeyList = body.getSubscriptionKey();
+        if (entityKeyList == null || entityKeyList.size() == 0) {
+            throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys"));
+        }
+
+        HashSet<String> dupCheck = new HashSet<String>();
+        int i = 0;
+        for (String entityKey : entityKeyList) {
+
+            // Per section 4.4: keys must be case-folded
+            entityKey = entityKey.toLowerCase();
+            entityKeyList.set(i, entityKey);
+
+            boolean inserted = dupCheck.add(entityKey);
+            if (!inserted) {
+                throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey));
+            }
+
+            Object obj = em.find(org.apache.juddi.model.Subscription.class, entityKey);
+            if (obj == null) {
+                throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.SubscriptionNotFound", entityKey));
+            }
+
+            // Make sure publisher owns this entity.
+            if (!publisher.getAuthorizedName().equals(((org.apache.juddi.model.Subscription) obj).getAuthorizedName())) {
+                throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey));
+            }
+
+            i++;
+        }
+    }
+
+    public void validateGetSubscriptionResults(EntityManager em, GetSubscriptionResults body) throws DispositionReportFaultMessage {
+        // No null input
+        if (body == null) {
+            throw new FatalErrorException(new ErrorMessage("errors.NullInput"));
+        }
+
+        String subscriptionKey = body.getSubscriptionKey();
+        if (subscriptionKey == null || subscriptionKey.length() == 0) {
+            throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NullKey", subscriptionKey));
+        }
+
+        // Per section 4.4: keys must be case-folded
+        subscriptionKey = subscriptionKey.toLowerCase();
+        body.setSubscriptionKey(subscriptionKey);
+
+        Object obj = em.find(org.apache.juddi.model.Subscription.class, subscriptionKey);
+        if (obj == null) {
+            throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.SubscriptionNotFound", subscriptionKey));
+        }
+
+        Date expiresAfter = ((org.apache.juddi.model.Subscription) obj).getExpiresAfter();
+        Date now = new Date();
+        if (expiresAfter.getTime() < now.getTime()) {
+            throw new InvalidKeyPassedException(new ErrorMessage("errors.getsubscriptionresult.SubscriptionExpired", subscriptionKey));
+        }
+
+        CoveragePeriod coveragePeriod = body.getCoveragePeriod();
+        if (coveragePeriod == null) {
+            throw new InvalidTimeException(new ErrorMessage("errors.getsubscriptionresult.NullCoveragePeriod"));
+        }
+
+        if (coveragePeriod.getStartPoint() == null || coveragePeriod.getEndPoint() == null) {
+            throw new InvalidTimeException(new ErrorMessage("errors.getsubscriptionresult.InvalidDateInCoveragePeriod"));
+        }
+
+        GregorianCalendar startPoint = coveragePeriod.getStartPoint().toGregorianCalendar();
+        GregorianCalendar endPoint = coveragePeriod.getEndPoint().toGregorianCalendar();
+        if (startPoint.getTimeInMillis() > endPoint.getTimeInMillis()) {
+            throw new InvalidTimeException(new ErrorMessage("errors.getsubscriptionresult.StartPointAfterEndPoint", startPoint.toString()));
+        }
+    }
+
+    private void validateSubscriptionBindingkeyExists(EntityManager em, String bindingKey) throws ValueNotAllowedException {
+        if (bindingKey==null || bindingKey.length()==0) {
+            return;
+        }
+        Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, bindingKey);
+        if (obj==null) {
+            throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.BindingDoesntExist"));
+        }
+    }
 }
diff --git a/juddi-core/src/main/resources/juddi_install_data/UDDI_tModels.xml b/juddi-core/src/main/resources/juddi_install_data/UDDI_tModels.xml
index 8670591..eaa5539 100644
--- a/juddi-core/src/main/resources/juddi_install_data/UDDI_tModels.xml
+++ b/juddi-core/src/main/resources/juddi_install_data/UDDI_tModels.xml
@@ -101,7 +101,7 @@
         </categoryBag>

     </tModel>

     <tModel tModelKey="uddi:uddi.org:protocol:keygenerator" xmlns="urn:uddi-org:api_v3">

-        <name>uddi-org: protocol:keyGenerator</name>

+        <name>uddi-org:protocol:keyGenerator</name>

         <description> Key Generator for UDDI Protocol tModels </description>

         <overviewDoc>

             <overviewURL useType="text">

@@ -411,6 +411,78 @@
             <keyedReference keyName="uddi-org:types:transport" keyValue="transport" tModelKey="uddi:uddi.org:categorization:types" />

         </categoryBag>

     </tModel>

+	

+	

+	    <tModel tModelKey="uddi:uddi.org:transport:amqp">

+        <name>uddi-org:amqp</name>

+        <description> A Web service that uses the AMQP transport</description>

+        <overviewDoc>

+            <overviewURL useType="text">

+               http://www.amqp.org/

+            </overviewURL>

+        </overviewDoc>

+        <categoryBag>

+            <keyedReference keyName="uddi-org:types:transport" keyValue="transport" tModelKey="uddi:uddi.org:categorization:types" />

+        </categoryBag>

+    </tModel>

+

+	

+		    <tModel tModelKey="uddi:uddi.org:transport:omgdds">

+        <name>uddi-org:omgdds</name>

+        <description> A Web service that uses the OMG DDS transport</description>

+        <overviewDoc>

+            <overviewURL useType="text">

+              http://portals.omg.org/dds/

+            </overviewURL>

+        </overviewDoc>

+        <categoryBag>

+            <keyedReference keyName="uddi-org:types:transport" keyValue="transport" tModelKey="uddi:uddi.org:categorization:types" />

+        </categoryBag>

+    </tModel>

+	

+	

+	<tModel tModelKey="uddi:uddi.org:transport:udp">

+        <name>uddi-org:udp</name>

+        <description> A Web service that uses the UDP transport</description>

+        <overviewDoc>

+            <overviewURL useType="text">

+              http://docs.oasis-open.org/ws-dd/soapoverudp/1.1/os/wsdd-soapoverudp-1.1-spec-os.html

+            </overviewURL>

+        </overviewDoc>

+        <categoryBag>

+            <keyedReference keyName="uddi-org:types:transport" keyValue="transport" tModelKey="uddi:uddi.org:categorization:types" />

+        </categoryBag>

+    </tModel>

+	

+	<tModel tModelKey="uddi:uddi.org:transport:jms">

+        <name>uddi-org:jms</name>

+        <description> A Web service that uses the JMS API</description>

+        <overviewDoc>

+            <overviewURL useType="text">

+              http://docs.oasis-open.org/ws-dd/soapoverudp/1.1/os/wsdd-soapoverudp-1.1-spec-os.html

+            </overviewURL>

+        </overviewDoc>

+        <categoryBag>

+            <keyedReference keyName="uddi-org:types:transport" keyValue="transport" tModelKey="uddi:uddi.org:categorization:types" />

+        </categoryBag>

+    </tModel>

+	

+	<tModel tModelKey="uddi:uddi.org:protocol:rest">

+        <name>uddi-org:protocol:rest</name>

+        <description xml:lang="en">A tModel that represents the Representational State Transfer architectural style</description>

+        <overviewDoc>

+            <overviewURL>

+               http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

+            </overviewURL>

+        </overviewDoc>

+        <categoryBag>

+            <keyedReference keyName="uddi-org:types:protocol" keyValue="protocol" tModelKey="uddi:uddi.org:categorization:types" />

+        </categoryBag>

+    </tModel>

+	

+	

+	

+	

     <tModel tModelKey="uddi:uddi.org:findqualifier:approximatematch">

         <name>uddi-org:approximateMatch:SQL99

         </name>

@@ -909,6 +981,22 @@
             <keyedReference keyName="uddi-org:types:protocol" keyValue="protocol" tModelKey="uddi:uddi.org:categorization:types" />

         </categoryBag>

     </tModel>

+	

+	

+	 <tModel tModelKey="uddi:uddi.org:protocol:soap12">

+        <name>uddi-org:protocol:soap12</name>

+        <description xml:lang="en">A tModel that represents the SOAP 1.2 protocol</description>

+        <overviewDoc>

+            <overviewURL>

+                http://www.oasis-open.org/committees/uddi-spec/doc/tn/uddi-spec-tc-tn-wsdl-v2.htm#soap

+            </overviewURL>

+        </overviewDoc>

+        <categoryBag>

+            <keyedReference keyName="uddi-org:types:protocol" keyValue="protocol" tModelKey="uddi:uddi.org:categorization:types" />

+        </categoryBag>

+    </tModel>

+	

+	

     <!-- 6. HTTP Protocol tModel -->

     <tModel tModelKey="uddi:uddi.org:protocol:http">

         <name>uddi-org:protocol:http</name>

diff --git a/juddi-core/src/main/resources/messages.properties b/juddi-core/src/main/resources/messages.properties
index 2c2b22e..f4a0a7c 100644
--- a/juddi-core/src/main/resources/messages.properties
+++ b/juddi-core/src/main/resources/messages.properties
@@ -60,6 +60,7 @@
 

 

 #-- General error messages

+errors.DatatypeFactor=Can't create a DatatypeFactory instance.

 errors.Unspecified=An unspecified error occurred

 errors.Unsupported=This version does not support this feature or API

 errors.Unsupported.findQualifier=Invalid findQualifier value was passed

@@ -187,9 +188,13 @@
 errors.transferentities.KeyMismatch=A supplied key does not match a key associated with the transfer request

 errors.savesubscription.NoInput=At least one Subscription must be provided

 errors.subscription.NullInput=The subscription structure cannot be blank

+errors.subscription.BindingDoesntExist=The requested subscription has a binding key defined, however that binding template does not exist

 errors.subscription.NoFilterOnNewSubscription=No subscription filter was provided on this new subscription request

 errors.subscription.BlankFilter=A filter structure was provided but no filter criteria was specified

 errors.subscription.TooManyFilters=Only one filter is allowed per subscription request

+errors.subscription.expired=The expiration timestamp has already passed.

+errors.subscription.maxrecordstoosmall=When specifying the maxium record, it must be greater than zero

+errors.subscription.notificationintervalnotdefined=A notification interval must be specified and must be greater than 0ms

 errors.getsubscriptionresult.SubscriptionExpired=The passed subscription has expired

 errors.getsubscriptionresult.NullCoveragePeriod=The coverage period cannot be blank

 errors.getsubscriptionresult.InvalidDateInCoveragePeriod=The coverage period must contain valid dates for start and end points

diff --git a/juddi-core/src/test/java/org/apache/juddi/api/impl/API_051_BindingTemplateWSDLTest.java b/juddi-core/src/test/java/org/apache/juddi/api/impl/API_051_BindingTemplateWSDLTest.java
index 98ea119..39a8271 100644
--- a/juddi-core/src/test/java/org/apache/juddi/api/impl/API_051_BindingTemplateWSDLTest.java
+++ b/juddi-core/src/test/java/org/apache/juddi/api/impl/API_051_BindingTemplateWSDLTest.java
@@ -81,7 +81,7 @@
 	}

 	

 	@Test 

-	public void testDirectCall() throws ConfigurationException, WSDLException, RemoteException, TransportException, MalformedURLException {

+	public void testDirectCall() throws ConfigurationException, WSDLException, RemoteException, TransportException, MalformedURLException, Exception {

 		try {

 			tckTModel.saveJoePublisherTmodel(authInfoJoe);

 			tckBusiness.saveJoePublisherBusiness(authInfoJoe);

diff --git a/juddi-core/src/test/java/org/apache/juddi/api/impl/API_141_JIRATest.java b/juddi-core/src/test/java/org/apache/juddi/api/impl/API_141_JIRATest.java
index 97e1d01..1c026ac 100644
--- a/juddi-core/src/test/java/org/apache/juddi/api/impl/API_141_JIRATest.java
+++ b/juddi-core/src/test/java/org/apache/juddi/api/impl/API_141_JIRATest.java
@@ -14,17 +14,30 @@
  */

 package org.apache.juddi.api.impl;

 

+import java.rmi.RemoteException;

 import java.util.ArrayList;

+import java.util.Calendar;

+import java.util.GregorianCalendar;

 import java.util.List;

+import java.util.UUID;

+import java.util.logging.Level;

+import java.util.logging.Logger;

+import javax.xml.datatype.DatatypeConfigurationException;

+import javax.xml.datatype.DatatypeFactory;

+import javax.xml.datatype.XMLGregorianCalendar;

 

 import javax.xml.soap.SOAPFault;

+import javax.xml.ws.Holder;

 

 import org.apache.commons.configuration.ConfigurationException;

 import org.apache.commons.logging.Log;

 import org.apache.commons.logging.LogFactory;

 import org.apache.juddi.Registry;

+import org.apache.juddi.api_v3.AccessPointType;

 import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClerk;

 import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.error.ValueNotAllowedException;

 import org.apache.juddi.v3.tck.TckPublisher;

 import org.apache.juddi.v3.tck.TckSecurity;

 import org.apache.juddi.v3.tck.TckTModel;

@@ -32,6 +45,8 @@
 import org.junit.Assert;

 import org.junit.BeforeClass;

 import org.junit.Test;

+import org.uddi.api_v3.AccessPoint;

+import org.uddi.api_v3.BindingTemplate;

 import org.uddi.api_v3.BindingTemplates;

 import org.uddi.api_v3.BusinessDetail;

 import org.uddi.api_v3.BusinessEntity;

@@ -56,10 +71,17 @@
 import org.uddi.api_v3.ServiceList;

 import org.uddi.api_v3.TModel;

 import org.uddi.api_v3.TModelDetail;

+import org.uddi.api_v3.TModelInstanceDetails;

+import org.uddi.api_v3.TModelInstanceInfo;

 import org.uddi.api_v3.TModelList;

+import org.uddi.sub_v3.DeleteSubscription;

+import org.uddi.sub_v3.Subscription;

+import org.uddi.sub_v3.SubscriptionFilter;

+import org.uddi.v3_service.DispositionReportFaultMessage;

 import org.uddi.v3_service.UDDIInquiryPortType;

 import org.uddi.v3_service.UDDIPublicationPortType;

 import org.uddi.v3_service.UDDISecurityPortType;

+import org.uddi.v3_service.UDDISubscriptionPortType;

 

 /**

  * This test class provides test cases of items discovered or reported through

@@ -72,12 +94,11 @@
 public class API_141_JIRATest {

 

     private static Log logger = LogFactory.getLog(API_141_JIRATest.class);

-

     static UDDISecurityPortType security = new UDDISecurityImpl();

     static UDDIInquiryPortType inquiry = new UDDIInquiryImpl();

     static UDDIPublicationPortType publication = new UDDIPublicationImpl();

-    static TckTModel tckTModel               = new TckTModel(new UDDIPublicationImpl(), new UDDIInquiryImpl());

-

+    static UDDISubscriptionPortType sub = new UDDISubscriptionImpl();

+    static TckTModel tckTModel = new TckTModel(new UDDIPublicationImpl(), new UDDIInquiryImpl());

     protected static String authInfoJoe = null;

     protected static String authInfoSam = null;

     private static UDDIClient manager;

@@ -97,15 +118,17 @@
     static final String str51 = "111111111111111111111111111111111111111111111111111";

     static final String str50 = "11111111111111111111111111111111111111111111111111";

     static final String MISSING_RESOURCE = "Can't find resource for bundle";

+    static DatatypeFactory df = null;

 

     @AfterClass

-    public static  void stopManager() throws ConfigurationException {

-    	Registry.stop();

+    public static void stopManager() throws ConfigurationException {

+        Registry.stop();

     }

 

     @BeforeClass

-    public static void startManager() throws ConfigurationException {

-    	Registry.start();

+    public static void startManager() throws ConfigurationException, DatatypeConfigurationException {

+        df = DatatypeFactory.newInstance();

+        Registry.start();

 

         logger.debug("Getting auth tokens..");

         try {

@@ -113,10 +136,10 @@
             authInfoSam = TckSecurity.getAuthToken(security, TckPublisher.getSamPublisherId(), TckPublisher.getSamPassword());

             Assert.assertNotNull(authInfoJoe);

             Assert.assertNotNull(authInfoSam);

-            String authInfoUDDI  = TckSecurity.getAuthToken(security, TckPublisher.getUDDIPublisherId(),  TckPublisher.getUDDIPassword());

-			tckTModel.saveUDDIPublisherTmodel(authInfoUDDI);

-			tckTModel.saveTModels(authInfoUDDI, TckTModel.TMODELS_XML);

-			tckTModel.saveJoePublisherTmodel(authInfoJoe);

+            String authInfoUDDI = TckSecurity.getAuthToken(security, TckPublisher.getUDDIPublisherId(), TckPublisher.getUDDIPassword());

+            tckTModel.saveUDDIPublisherTmodel(authInfoUDDI);

+            tckTModel.saveTModels(authInfoUDDI, TckTModel.TMODELS_XML);

+            tckTModel.saveJoePublisherTmodel(authInfoJoe);

         } catch (Exception e) {

             logger.error(e.getMessage(), e);

             Assert.fail("Could not obtain authInfo token.");

@@ -510,6 +533,359 @@
     //TODO binding template tmodel instance info

     //TODO tmodel tests

     //TODO create tests for enforcing ref integrity of tmodel keys, after enforcing this, the tests in this class will need to be heavily revised

+    /**

+     * test when the subscription expiration is null

+     */

+    @Test

+    public void JUDDI_606_1() {

+        System.out.println("JUDDI_606_1 Null expiration time");

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setMaxEntities(1);

+        sub1.setExpiresAfter(null);

+        sub1.setNotificationInterval(df.newDuration(5000));

+        sub1.setBrief(false);

+        sub1.setSubscriptionFilter(new SubscriptionFilter());

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        String key = null;

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            key = data.value.get(0).getSubscriptionKey();

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            HandleException(ex);

+            Assert.fail("null expires after should be allowed");

+

+        } finally {

+            DeleteSubscriptionInternal(authInfoJoe, key);

+        }

+

+

+    }

+

+    /**

+     * test when the subscription expiration is null

+     */

+    @Test(expected = ValueNotAllowedException.class)

+    public void JUDDI_606_2() throws Exception {

+

+        System.out.println("JUDDI_606_2 invalid expiration time");

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setMaxEntities(1);

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.add(Calendar.DATE, -1);

+        sub1.setExpiresAfter(df.newXMLGregorianCalendar(gcal));

+        sub1.setNotificationInterval(df.newDuration(5000));

+        sub1.setBrief(false);

+        sub1.setSubscriptionFilter(new SubscriptionFilter());

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            Assert.fail("request should have been rejected, saving a subscription that's already expired");

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            //HandleException(ex);

+            throw ex;

+        }

+    }

+

+    /**

+     * confirm a subscription key is returned

+     */

+    @Test

+    public void JUDDI_606_3() throws Exception {

+

+        System.out.println("JUDDI_606_3 confirm a subscription key is returned");

+

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setMaxEntities(1);

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.add(Calendar.DATE, 1);

+        sub1.setExpiresAfter(df.newXMLGregorianCalendar(gcal));

+        sub1.setNotificationInterval(df.newDuration(5000));

+        sub1.setBrief(false);

+        sub1.setSubscriptionFilter(new SubscriptionFilter());

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        String key = null;

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            Assert.assertNotNull(data);

+            Assert.assertNotNull(data.value);

+            key = data.value.get(0).getSubscriptionKey();

+            Assert.assertFalse(data.value.isEmpty());

+            Assert.assertEquals(data.value.size(), 1);

+            Assert.assertNotNull(data.value.get(0).getSubscriptionKey());

+            Assert.assertTrue("subscription key is empty or invalid", (data.value.get(0).getSubscriptionKey().length() > 5));

+

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            HandleException(ex);

+            Assert.fail("this should have worked");

+        } finally {

+            DeleteSubscriptionInternal(authInfoJoe, key);

+        }

+    }

+

+    /**

+     * JUDDI_606_4 null subscription filter

+     */

+    @Test

+    public void JUDDI_606_4() throws Exception {

+

+        System.out.println("JUDDI_606_4 null subscription filter");

+

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setMaxEntities(1);

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.add(Calendar.DATE, 1);

+        sub1.setExpiresAfter(df.newXMLGregorianCalendar(gcal));

+        sub1.setNotificationInterval(df.newDuration(5000));

+        sub1.setBrief(false);

+        sub1.setSubscriptionFilter(null);

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        //sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            Assert.fail("this should have been rejected");

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            //HandleException(ex);

+        }

+    }

+

+    /**

+     * JUDDI_606_5 empty subscription filter

+     */

+    @Test

+    public void JUDDI_606_5() throws Exception {

+

+        System.out.println("JUDDI_606_5 empty subscription filter");

+

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setMaxEntities(1);

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.add(Calendar.DATE, 1);

+        sub1.setExpiresAfter(df.newXMLGregorianCalendar(gcal));

+        sub1.setNotificationInterval(df.newDuration(5000));

+        sub1.setBrief(false);

+        sub1.setSubscriptionFilter(new SubscriptionFilter());

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        //sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            Assert.fail("this should have been rejected");

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            //HandleException(ex);

+        }

+    }

+

+    /**

+     * JUDDI_606_6 negative max entities

+     */

+    @Test(expected = ValueNotAllowedException.class)

+    public void JUDDI_606_6() throws Exception {

+

+        System.out.println("JUDDI_606_6 negative max entities");

+

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setMaxEntities(-1);

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.add(Calendar.DATE, 1);

+        sub1.setExpiresAfter(df.newXMLGregorianCalendar(gcal));

+        sub1.setNotificationInterval(df.newDuration(5000));

+        sub1.setBrief(false);

+        sub1.setSubscriptionFilter(new SubscriptionFilter());

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        //sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            Assert.fail("this should have been rejected");

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            // HandleException(ex);

+            throw ex;

+        }

+    }

+

+    /**

+     * JUDDI_606_7 minimal settings

+     */

+    @Test()

+    public void JUDDI_606_7() throws Exception {

+

+        System.out.println("JUDDI_606_7 minimal settings");

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setExpiresAfter(null);

+        sub1.setNotificationInterval(null);

+        sub1.setBrief(null);

+        sub1.setSubscriptionFilter(new SubscriptionFilter());

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        String key = null;

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            key = data.value.get(0).getSubscriptionKey();

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            HandleException(ex);

+            Assert.fail("this should have worked");

+        } finally {

+            DeleteSubscriptionInternal(authInfoJoe, key);

+        }

+    }

+

+    /**

+     * JUDDI_606_8 reset expiration Invoking save_subscription automatically

+     * resets the expiration period for the subscription in question to a value

+     * based upon the node’s policy.

+     */

+    @Test()

+    public void JUDDI_606_8() throws Exception {

+

+        System.out.println("JUDDI_606_8 reset expiration");

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setExpiresAfter(null);

+        sub1.setNotificationInterval(null);

+        sub1.setBrief(null);

+        sub1.setSubscriptionFilter(new SubscriptionFilter());

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        String key = null;

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            XMLGregorianCalendar initialExpiration = data.value.get(0).getExpiresAfter();

+            key = data.value.get(0).getSubscriptionKey();

+            Thread.sleep(5000);

+            data.value.get(0).setExpiresAfter(null);

+            sub.saveSubscription(authInfoJoe, data);

+            Assert.assertFalse("timestamp should have been reset", initialExpiration.equals(data.value.get(0).getExpiresAfter()));

+            Assert.assertEquals(key, data.value.get(0).getSubscriptionKey());

+

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            HandleException(ex);

+            Assert.fail("this should have worked");

+        } finally {

+            DeleteSubscriptionInternal(authInfoJoe, key);

+        }

+    }

+

+    /**

+     * JUDDI_606_9 asynch subscriptions, key doesn't exist

+     */

+    @Test(expected = ValueNotAllowedException.class)

+    public void JUDDI_606_9() throws Exception {

+

+        System.out.println("JUDDI_606_9 asynch subscriptions, key doesn't exist");

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setExpiresAfter(null);

+        sub1.setNotificationInterval(df.newDuration(60000));

+        sub1.setBrief(null);

+        sub1.setBindingKey("uddi:juddi.apache.org:" + UUID.randomUUID().toString());

+        sub1.setSubscriptionFilter(new SubscriptionFilter());

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        String key = null;

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            Assert.fail("this should have failed");

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            throw ex;

+        } finally {

+        }

+    }

+

+    

+    /**

+     * JUDDI_606_10 asynch subscriptions, key exists, null interval

+     */

+    @Test(expected = ValueNotAllowedException.class)

+    public void JUDDI_606_10() throws Exception {

+

+        System.out.println("JUDDI_606_10 asynch subscriptions, key exists, null interval");

+        org.uddi.sub_v3.Subscription sub1 = new org.uddi.sub_v3.Subscription();

+        sub1.setExpiresAfter(null);

+        sub1.setNotificationInterval(null);

+        sub1.setBrief(null);

+        sub1.setBindingKey(CreateBindingForSubscription(authInfoJoe));

+        sub1.setSubscriptionFilter(new SubscriptionFilter());

+        FindBusiness fb = new FindBusiness();

+        fb.setFindQualifiers(new FindQualifiers());

+        fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+        fb.getName().add(new Name("%", null));

+        sub1.getSubscriptionFilter().setFindBusiness(fb);

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub1);

+        String key = null;

+        try {

+            sub.saveSubscription(authInfoJoe, data);

+            Assert.fail("this should have failed");

+        } //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

+        catch (Exception ex) {

+            throw ex;

+        } finally {

+        }

+    }

+

     //<editor-fold defaultstate="collapsed" desc="Some basic util functions to print out the data structure">

     /**

      * Converts category bags of tmodels to a readable string

@@ -680,4 +1056,41 @@
             ex.printStackTrace();

         }

     }

+

+    private void DeleteSubscriptionInternal(String token, String key) {

+

+        //cleanup

+        try {

+            DeleteSubscription x = new DeleteSubscription();

+            x.setAuthInfo(token);

+            x.getSubscriptionKey().add(key);

+            sub.deleteSubscription(x);

+        } catch (Exception ex) {

+            ex.printStackTrace();

+        }

+    }

+

+    private String CreateBindingForSubscription(String authInfoJoe) throws Exception {

+        SaveBusiness sb = new SaveBusiness();

+        BusinessEntity be = new BusinessEntity();

+        be.getName().add(new Name("joe's callback", "en"));

+        be.setBusinessServices(new BusinessServices());

+        BusinessService bs = new BusinessService();

+        bs.getName().add(new Name("Joe's callback service", "en"));

+        bs.setBindingTemplates(new BindingTemplates());

+        BindingTemplate bt = new BindingTemplate();

+        bt.setAccessPoint(new AccessPoint("http://localhost/somewhere", AccessPointType.END_POINT.toString()));

+       

+        TModelInstanceInfo instanceInfo = new TModelInstanceInfo();

+        instanceInfo.setTModelKey("uddi:uddi.org:transport:http");

+        bt.setTModelInstanceDetails(new TModelInstanceDetails());

+        bt.getTModelInstanceDetails().getTModelInstanceInfo().add(instanceInfo);

+

+

+        be.getBusinessServices().getBusinessService().add(bs);

+        sb.getBusinessEntity().add(be);

+        sb.setAuthInfo(authInfoJoe);

+        BusinessDetail saveBusiness = publication.saveBusiness(sb);

+        return saveBusiness.getBusinessEntity().get(0).getBusinessServices().getBusinessService().get(0).getBindingTemplates().getBindingTemplate().get(0).getBindingKey();

+    }

 }

diff --git a/juddi-core/src/test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.java b/juddi-core/src/test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.java
index e1416d5..8d4d2a1 100644
--- a/juddi-core/src/test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.java
+++ b/juddi-core/src/test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.java
@@ -49,71 +49,95 @@
 /**
  * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>
  */
-public class SubscriptionNotifierTest 
-{
-	private static Log logger = LogFactory.getLog(SubscriptionNotifierTest.class);
-	private static API_010_PublisherTest api010 = new API_010_PublisherTest();
-	private static TckTModel tckTModel = new TckTModel(new UDDIPublicationImpl(), new UDDIInquiryImpl());
-	private static TckBusiness tckBusiness = new TckBusiness(new UDDIPublicationImpl(), new UDDIInquiryImpl());
-	private static TckBusinessService tckBusinessService = new TckBusinessService(new UDDIPublicationImpl(), new UDDIInquiryImpl());
-	private static TckBindingTemplate tckBindingTemplate = new TckBindingTemplate(new UDDIPublicationImpl(), new UDDIInquiryImpl());
-	private static TckSubscription tckSubscription = new TckSubscription(new UDDISubscriptionImpl(), new UDDISecurityImpl());
+public class SubscriptionNotifierTest {
 
-	private static String authInfoJoe = null;
-	
-	@BeforeClass
-	public static void setup() {
-		logger.debug("Getting auth token..");
-		try {
-			api010.saveJoePublisher();
-			authInfoJoe = TckSecurity.getAuthToken(new UDDISecurityImpl(), TckPublisher.getJoePublisherId(),  TckPublisher.getJoePassword());
-			tckTModel.saveJoePublisherTmodel(authInfoJoe);
-			tckBusiness.saveJoePublisherBusiness(authInfoJoe);
-			tckBusinessService.saveJoePublisherService(authInfoJoe);
-			//tckBindingTemplate.saveJoePublisherBinding(authInfoJoe);
-			tckSubscription.saveJoePublisherSubscription(authInfoJoe);
-			//tckSubscription.getJoePublisherSubscriptionResults(authInfoJoe);
-		} catch (RemoteException e) {
-			logger.error(e.getMessage(), e);
-			Assert.fail("Could not obtain authInfo token.");
-		}
-	}
-	@Test
-	public void testGetSubscriptionResults() 
-		throws ConfigurationException, MalformedURLException, DispositionReportFaultMessage, DatatypeConfigurationException
-	{
-		SubscriptionNotifier notifier = new SubscriptionNotifier();
-		notifier.cancel();
-		Collection<Subscription> subscriptions = notifier.getAllAsyncSubscriptions();
-		Assert.assertEquals(1, subscriptions.size());
-		Subscription subscription = subscriptions.iterator().next();
-		GetSubscriptionResults getSubscriptionResults = notifier.buildGetSubscriptionResults(subscription, new Date(new Date().getTime() + 60000l));
-		getSubscriptionResults.setSubscriptionKey(subscription.getSubscriptionKey());
-		UddiEntityPublisher publisher = new UddiEntityPublisher();
-		publisher.setAuthorizedName(subscription.getAuthorizedName());
-		SubscriptionResultsList resultList = notifier.getSubscriptionImpl().getSubscriptionResults(getSubscriptionResults, publisher);
-		logger.info("Expecting the resultList to be null: " + resultList.getServiceList());
-		Assert.assertNull(resultList.getServiceList());
-		tckBusinessService.updateJoePublisherService(authInfoJoe, "updated description");
-		resultList = notifier.getSubscriptionImpl().getSubscriptionResults(getSubscriptionResults, publisher);
-		//We're expecting a changed service
-		logger.info("Expecting the resultList to have 1 service: " + resultList.getServiceList());
-		Assert.assertNotNull(resultList.getServiceList());
-		//We should detect these changes.
-		boolean hasChanges = notifier.resultListContainsChanges(resultList);
-		Assert.assertTrue(hasChanges);
-		System.out.print(resultList);
-		notifier.notify(getSubscriptionResults,resultList,new Date());
-	}
-	
-	
-	@AfterClass
-	public static void teardown() {
-		tckSubscription.deleteJoePublisherSubscription(authInfoJoe);
-		//tckBindingTemplate.deleteJoePublisherBinding(authInfoJoe);
-		tckBusinessService.deleteJoePublisherService(authInfoJoe);
-		tckBusiness.deleteJoePublisherBusiness(authInfoJoe);
-		tckTModel.deleteJoePublisherTmodel(authInfoJoe);
-	}
-	
+    private static Log logger = LogFactory.getLog(SubscriptionNotifierTest.class);
+    private static API_010_PublisherTest api010 = new API_010_PublisherTest();
+    private static TckTModel tckTModel = new TckTModel(new UDDIPublicationImpl(), new UDDIInquiryImpl());
+    private static TckBusiness tckBusiness = new TckBusiness(new UDDIPublicationImpl(), new UDDIInquiryImpl());
+    private static TckBusinessService tckBusinessService = new TckBusinessService(new UDDIPublicationImpl(), new UDDIInquiryImpl());
+    private static TckBindingTemplate tckBindingTemplate = new TckBindingTemplate(new UDDIPublicationImpl(), new UDDIInquiryImpl());
+    private static TckSubscription tckSubscription = new TckSubscription(new UDDISubscriptionImpl(), new UDDISecurityImpl());
+    private static String authInfoJoe = null;
+
+    @BeforeClass
+    public static void setup() {
+        logger.debug("Getting auth token..");
+        try {
+            //calls uddi-tck-base//rc/main/resources/uddi_data/joepublisher
+            //setups up a JUDDI user account
+            api010.saveJoePublisher();
+            
+            //login as joe
+            authInfoJoe = TckSecurity.getAuthToken(new UDDISecurityImpl(), TckPublisher.getJoePublisherId(), TckPublisher.getJoePassword());
+            //makes tmodel uddi:uddi.joepublisher.com:keygenerator
+            tckTModel.saveJoePublisherTmodel(authInfoJoe);
+            
+            //saves a signed business, no services
+            //key = uddi:uddi.joepublisher.com:businessone
+            tckBusiness.saveJoePublisherBusiness(authInfoJoe);
+            
+            //service key = uddi:uddi.joepublisher.com:serviceone
+            //bt = uddi:uddi.joepublisher.com:bindingone
+            tckBusinessService.saveJoePublisherService(authInfoJoe);
+            
+            
+            //tckBindingTemplate.saveJoePublisherBinding(authInfoJoe);
+            
+            
+            //makes subscription key=uddi:uddi.joepublisher.com:subscriptionone
+            //find exact match on "Service One"
+            //callback binding key=empty string
+            tckSubscription.saveJoePublisherSubscription(authInfoJoe);
+            
+            
+            tckBusiness.saveJoePublisherBusiness(authInfoJoe);
+           
+            
+            
+            
+            
+            
+            //tckSubscription.getJoePublisherSubscriptionResults(authInfoJoe);
+        } catch (RemoteException e) {
+            logger.error(e.getMessage(), e);
+            Assert.fail("Could not obtain authInfo token.");
+        }
+    }
+
+    @Test
+    public void testGetSubscriptionResults()
+            throws ConfigurationException, MalformedURLException, DispositionReportFaultMessage, DatatypeConfigurationException {
+        SubscriptionNotifier notifier = new SubscriptionNotifier();
+        notifier.cancel();
+        Collection<Subscription> subscriptions = notifier.getAllAsyncSubscriptions();
+        Assert.assertEquals(1, subscriptions.size());
+        Subscription subscription = subscriptions.iterator().next();
+        GetSubscriptionResults getSubscriptionResults = notifier.buildGetSubscriptionResults(subscription, new Date(new Date().getTime() + 60000l));
+        getSubscriptionResults.setSubscriptionKey(subscription.getSubscriptionKey());
+        UddiEntityPublisher publisher = new UddiEntityPublisher();
+        publisher.setAuthorizedName(subscription.getAuthorizedName());
+        SubscriptionResultsList resultList = notifier.getSubscriptionImpl().getSubscriptionResults(getSubscriptionResults, publisher);
+        logger.info("Expecting the resultList to be null: " + resultList.getServiceList());
+        Assert.assertNull(resultList.getServiceList());
+        tckBusinessService.updateJoePublisherService(authInfoJoe, "updated description");
+        resultList = notifier.getSubscriptionImpl().getSubscriptionResults(getSubscriptionResults, publisher);
+        //We're expecting a changed service
+        logger.info("Expecting the resultList to have 1 service: " + resultList.getServiceList());
+        Assert.assertNotNull(resultList.getServiceList());
+        //We should detect these changes.
+        boolean hasChanges = notifier.resultListContainsChanges(resultList);
+        Assert.assertTrue(hasChanges);
+        System.out.print(resultList);
+        notifier.notify(getSubscriptionResults, resultList, new Date());
+    }
+
+    @AfterClass
+    public static void teardown() {
+        tckSubscription.deleteJoePublisherSubscription(authInfoJoe);
+        //tckBindingTemplate.deleteJoePublisherBinding(authInfoJoe);
+        tckBusinessService.deleteJoePublisherService(authInfoJoe);
+        tckBusiness.deleteJoePublisherBusiness(authInfoJoe);
+        tckTModel.deleteJoePublisherTmodel(authInfoJoe);
+    }
 }
diff --git a/juddi-core/src/test/resources/juddiv3.properties b/juddi-core/src/test/resources/juddiv3.properties
index 640e067..1ae5489 100644
--- a/juddi-core/src/test/resources/juddiv3.properties
+++ b/juddi-core/src/test/resources/juddiv3.properties
@@ -120,4 +120,9 @@
 
 #juddi.mail.smtp.password
 ##Password used to authenticate to the SMTP server
-##used only if juddi.mail.smtp.auth is true
\ No newline at end of file
+##used only if juddi.mail.smtp.auth is true4
+
+
+
+#Since 3.1.5 the maxium ammount of returned subscription entities allowed
+juddi.subscription.maxentities = 1000
\ No newline at end of file
diff --git a/juddi-examples/subscription-notification-handler/build.xml b/juddi-examples/subscription-notification-handler/build.xml
new file mode 100644
index 0000000..accf5fd
--- /dev/null
+++ b/juddi-examples/subscription-notification-handler/build.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!-- You may freely edit this file. See commented blocks below for -->

+<!-- some examples of how to customize the build. -->

+<!-- (If you delete it and reopen the project it will be recreated.) -->

+<!-- By default, only the Clean and Build commands use this build script. -->

+<!-- Commands such as Run, Debug, and Test only use this build script if -->

+<!-- the Compile on Save feature is turned off for the project. -->

+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->

+<!-- in the project's Project Properties dialog box.-->

+<project name="subscription-notification-handler" default="default" basedir=".">

+    <description>Builds, tests, and runs the project subscription-notification-handler.</description>

+    <import file="nbproject/build-impl.xml"/>

+    <!--

+

+    There exist several targets which are by default empty and which can be 

+    used for execution of your tasks. These targets are usually executed 

+    before and after some main targets. They are: 

+

+      -pre-init:                 called before initialization of project properties

+      -post-init:                called after initialization of project properties

+      -pre-compile:              called before javac compilation

+      -post-compile:             called after javac compilation

+      -pre-compile-single:       called before javac compilation of single file

+      -post-compile-single:      called after javac compilation of single file

+      -pre-compile-test:         called before javac compilation of JUnit tests

+      -post-compile-test:        called after javac compilation of JUnit tests

+      -pre-compile-test-single:  called before javac compilation of single JUnit test

+      -post-compile-test-single: called after javac compilation of single JUunit test

+      -pre-jar:                  called before JAR building

+      -post-jar:                 called after JAR building

+      -post-clean:               called after cleaning build products

+

+    (Targets beginning with '-' are not intended to be called on their own.)

+

+    Example of inserting an obfuscator after compilation could look like this:

+

+        <target name="-post-compile">

+            <obfuscate>

+                <fileset dir="${build.classes.dir}"/>

+            </obfuscate>

+        </target>

+

+    For list of available properties check the imported 

+    nbproject/build-impl.xml file. 

+

+

+    Another way to customize the build is by overriding existing main targets.

+    The targets of interest are: 

+

+      -init-macrodef-javac:     defines macro for javac compilation

+      -init-macrodef-junit:     defines macro for junit execution

+      -init-macrodef-debug:     defines macro for class debugging

+      -init-macrodef-java:      defines macro for class execution

+      -do-jar-with-manifest:    JAR building (if you are using a manifest)

+      -do-jar-without-manifest: JAR building (if you are not using a manifest)

+      run:                      execution of project 

+      -javadoc-build:           Javadoc generation

+      test-report:              JUnit report generation

+

+    An example of overriding the target for project execution could look like this:

+

+        <target name="run" depends="subscription-notification-handler-impl.jar">

+            <exec dir="bin" executable="launcher.exe">

+                <arg file="${dist.jar}"/>

+            </exec>

+        </target>

+

+    Notice that the overridden target depends on the jar target and not only on 

+    the compile target as the regular run target does. Again, for a list of available 

+    properties which you can use, check the target you are overriding in the

+    nbproject/build-impl.xml file. 

+

+    -->

+</project>

diff --git a/juddi-examples/subscription-notification-handler/nbproject/build-impl.xml b/juddi-examples/subscription-notification-handler/nbproject/build-impl.xml
new file mode 100644
index 0000000..5230489
--- /dev/null
+++ b/juddi-examples/subscription-notification-handler/nbproject/build-impl.xml
@@ -0,0 +1,1400 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+*** GENERATED FROM project.xml - DO NOT EDIT  ***

+***         EDIT ../build.xml INSTEAD         ***

+

+For the purpose of easier reading the script

+is divided into following sections:

+

+  - initialization

+  - compilation

+  - jar

+  - execution

+  - debugging

+  - javadoc

+  - test compilation

+  - test execution

+  - test debugging

+  - applet

+  - cleanup

+

+        -->

+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="subscription-notification-handler-impl">

+    <fail message="Please build using Ant 1.8.0 or higher.">

+        <condition>

+            <not>

+                <antversion atleast="1.8.0"/>

+            </not>

+        </condition>

+    </fail>

+    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>

+    <!-- 

+                ======================

+                INITIALIZATION SECTION 

+                ======================

+            -->

+    <target name="-pre-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="-pre-init" name="-init-private">

+        <property file="nbproject/private/config.properties"/>

+        <property file="nbproject/private/configs/${config}.properties"/>

+        <property file="nbproject/private/private.properties"/>

+    </target>

+    <target depends="-pre-init,-init-private" name="-init-user">

+        <property file="${user.properties.file}"/>

+        <!-- The two properties below are usually overridden -->

+        <!-- by the active platform. Just a fallback. -->

+        <property name="default.javac.source" value="1.4"/>

+        <property name="default.javac.target" value="1.4"/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">

+        <property file="nbproject/configs/${config}.properties"/>

+        <property file="nbproject/project.properties"/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">

+        <available file="${manifest.file}" property="manifest.available"/>

+        <condition property="splashscreen.available">

+            <and>

+                <not>

+                    <equals arg1="${application.splash}" arg2="" trim="true"/>

+                </not>

+                <available file="${application.splash}"/>

+            </and>

+        </condition>

+        <condition property="main.class.available">

+            <and>

+                <isset property="main.class"/>

+                <not>

+                    <equals arg1="${main.class}" arg2="" trim="true"/>

+                </not>

+            </and>

+        </condition>

+        <condition property="manifest.available+main.class">

+            <and>

+                <isset property="manifest.available"/>

+                <isset property="main.class.available"/>

+            </and>

+        </condition>

+        <condition property="do.archive">

+            <not>

+                <istrue value="${jar.archive.disabled}"/>

+            </not>

+        </condition>

+        <condition property="do.mkdist">

+            <and>

+                <isset property="do.archive"/>

+                <isset property="libs.CopyLibs.classpath"/>

+                <not>

+                    <istrue value="${mkdist.disabled}"/>

+                </not>

+            </and>

+        </condition>

+        <condition property="manifest.available+main.class+mkdist.available">

+            <and>

+                <istrue value="${manifest.available+main.class}"/>

+                <isset property="do.mkdist"/>

+            </and>

+        </condition>

+        <condition property="do.archive+manifest.available">

+            <and>

+                <isset property="manifest.available"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="do.archive+main.class.available">

+            <and>

+                <isset property="main.class.available"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="do.archive+splashscreen.available">

+            <and>

+                <isset property="splashscreen.available"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="do.archive+manifest.available+main.class">

+            <and>

+                <istrue value="${manifest.available+main.class}"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="manifest.available-mkdist.available">

+            <or>

+                <istrue value="${manifest.available}"/>

+                <isset property="do.mkdist"/>

+            </or>

+        </condition>

+        <condition property="manifest.available+main.class-mkdist.available">

+            <or>

+                <istrue value="${manifest.available+main.class}"/>

+                <isset property="do.mkdist"/>

+            </or>

+        </condition>

+        <condition property="have.tests">

+            <or>

+                <available file="${test.src.dir}"/>

+            </or>

+        </condition>

+        <condition property="have.sources">

+            <or>

+                <available file="${src.dir}"/>

+            </or>

+        </condition>

+        <condition property="netbeans.home+have.tests">

+            <and>

+                <isset property="netbeans.home"/>

+                <isset property="have.tests"/>

+            </and>

+        </condition>

+        <condition property="no.javadoc.preview">

+            <and>

+                <isset property="javadoc.preview"/>

+                <isfalse value="${javadoc.preview}"/>

+            </and>

+        </condition>

+        <property name="run.jvmargs" value=""/>

+        <property name="run.jvmargs.ide" value=""/>

+        <property name="javac.compilerargs" value=""/>

+        <property name="work.dir" value="${basedir}"/>

+        <condition property="no.deps">

+            <and>

+                <istrue value="${no.dependencies}"/>

+            </and>

+        </condition>

+        <property name="javac.debug" value="true"/>

+        <property name="javadoc.preview" value="true"/>

+        <property name="application.args" value=""/>

+        <property name="source.encoding" value="${file.encoding}"/>

+        <property name="runtime.encoding" value="${source.encoding}"/>

+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">

+            <and>

+                <isset property="javadoc.encoding"/>

+                <not>

+                    <equals arg1="${javadoc.encoding}" arg2=""/>

+                </not>

+            </and>

+        </condition>

+        <property name="javadoc.encoding.used" value="${source.encoding}"/>

+        <property name="includes" value="**"/>

+        <property name="excludes" value=""/>

+        <property name="do.depend" value="false"/>

+        <condition property="do.depend.true">

+            <istrue value="${do.depend}"/>

+        </condition>

+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>

+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">

+            <length length="0" string="${endorsed.classpath}" when="greater"/>

+        </condition>

+        <condition else="false" property="jdkBug6558476">

+            <and>

+                <matches pattern="1\.[56]" string="${java.specification.version}"/>

+                <not>

+                    <os family="unix"/>

+                </not>

+            </and>

+        </condition>

+        <property name="javac.fork" value="${jdkBug6558476}"/>

+        <property name="jar.index" value="false"/>

+        <property name="jar.index.metainf" value="${jar.index}"/>

+        <property name="copylibs.rebase" value="true"/>

+        <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>

+        <condition property="junit.available">

+            <or>

+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>

+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>

+            </or>

+        </condition>

+        <condition property="testng.available">

+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>

+        </condition>

+        <condition property="junit+testng.available">

+            <and>

+                <istrue value="${junit.available}"/>

+                <istrue value="${testng.available}"/>

+            </and>

+        </condition>

+        <condition else="testng" property="testng.mode" value="mixed">

+            <istrue value="${junit+testng.available}"/>

+        </condition>

+        <condition else="" property="testng.debug.mode" value="-mixed">

+            <istrue value="${junit+testng.available}"/>

+        </condition>

+    </target>

+    <target name="-post-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">

+        <fail unless="src.dir">Must set src.dir</fail>

+        <fail unless="test.src.dir">Must set test.src.dir</fail>

+        <fail unless="build.dir">Must set build.dir</fail>

+        <fail unless="dist.dir">Must set dist.dir</fail>

+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>

+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>

+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>

+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>

+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>

+        <fail unless="dist.jar">Must set dist.jar</fail>

+    </target>

+    <target name="-init-macrodef-property">

+        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute name="name"/>

+            <attribute name="value"/>

+            <sequential>

+                <property name="@{name}" value="${@{value}}"/>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">

+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}" name="classpath"/>

+            <attribute default="${javac.processorpath}" name="processorpath"/>

+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="${javac.debug}" name="debug"/>

+            <attribute default="${empty.dir}" name="sourcepath"/>

+            <attribute default="${empty.dir}" name="gensrcdir"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.dir}/empty" name="empty.dir"/>

+                <mkdir dir="${empty.dir}"/>

+                <mkdir dir="@{apgeneratedsrcdir}"/>

+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">

+                    <src>

+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">

+                            <include name="*"/>

+                        </dirset>

+                    </src>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <compilerarg line="${javac.compilerargs}"/>

+                    <compilerarg value="-processorpath"/>

+                    <compilerarg path="@{processorpath}:${empty.dir}"/>

+                    <compilerarg line="${ap.processors.internal}"/>

+                    <compilerarg line="${annotation.processing.processor.options}"/>

+                    <compilerarg value="-s"/>

+                    <compilerarg path="@{apgeneratedsrcdir}"/>

+                    <compilerarg line="${ap.proc.none.internal}"/>

+                    <customize/>

+                </javac>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">

+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}" name="classpath"/>

+            <attribute default="${javac.processorpath}" name="processorpath"/>

+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="${javac.debug}" name="debug"/>

+            <attribute default="${empty.dir}" name="sourcepath"/>

+            <attribute default="${empty.dir}" name="gensrcdir"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.dir}/empty" name="empty.dir"/>

+                <mkdir dir="${empty.dir}"/>

+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">

+                    <src>

+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">

+                            <include name="*"/>

+                        </dirset>

+                    </src>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <compilerarg line="${javac.compilerargs}"/>

+                    <customize/>

+                </javac>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">

+        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}" name="classpath"/>

+            <sequential>

+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                </depend>

+            </sequential>

+        </macrodef>

+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <sequential>

+                <fail unless="javac.includes">Must set javac.includes</fail>

+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">

+                    <path>

+                        <filelist dir="@{destdir}" files="${javac.includes}"/>

+                    </path>

+                    <globmapper from="*.java" to="*.class"/>

+                </pathconvert>

+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>

+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>

+                <delete>

+                    <files includesfile="${javac.includesfile.binary}"/>

+                </delete>

+                <delete>

+                    <fileset file="${javac.includesfile.binary}"/>

+                </delete>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${junit.available}" name="-init-macrodef-junit-init">

+        <condition else="false" property="nb.junit.batch" value="true">

+            <and>

+                <istrue value="${junit.available}"/>

+                <not>

+                    <isset property="test.method"/>

+                </not>

+            </and>

+        </condition>

+        <condition else="false" property="nb.junit.single" value="true">

+            <and>

+                <istrue value="${junit.available}"/>

+                <isset property="test.method"/>

+            </and>

+        </condition>

+    </target>

+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">

+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">

+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <batchtest todir="${build.test.results.dir}">

+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">

+                            <filename name="@{testincludes}"/>

+                        </fileset>

+                    </batchtest>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>

+    <target if="${testng.available}" name="-init-macrodef-testng">

+        <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">

+                    <isset property="test.method"/>

+                </condition>

+                <union id="test.set">

+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">

+                        <filename name="@{testincludes}"/>

+                    </fileset>

+                </union>

+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>

+                <testng classfilesetref="test.set" failureProperty="tests.failed" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="subscription-notification-handler" testname="TestNG tests" workingDir="${work.dir}">

+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>

+                    <propertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </propertyset>

+                    <customize/>

+                </testng>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-test-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <echo>No tests executed.</echo>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </j2seproject3:junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </j2seproject3:testng>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">

+        <macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <sequential>

+                <j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize>

+                        <classpath>

+                            <path path="${run.test.classpath}"/>

+                        </classpath>

+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                        <jvmarg line="${run.jvmargs}"/>

+                        <jvmarg line="${run.jvmargs.ide}"/>

+                    </customize>

+                </j2seproject3:test-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">

+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">

+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <batchtest todir="${build.test.results.dir}">

+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">

+                            <filename name="@{testincludes}"/>

+                        </fileset>

+                    </batchtest>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">

+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </j2seproject3:junit-debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${testng.available}" name="-init-macrodef-testng-debug">

+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <element name="customize2" optional="true"/>

+            <sequential>

+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">

+                    <isset property="test.method"/>

+                </condition>

+                <condition else="-suitename subscription-notification-handler -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">

+                    <matches pattern=".*\.xml" string="@{testClass}"/>

+                </condition>

+                <delete dir="${build.test.results.dir}" quiet="true"/>

+                <mkdir dir="${build.test.results.dir}"/>

+                <j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">

+                    <customize>

+                        <customize2/>

+                        <jvmarg value="-ea"/>

+                        <arg line="${testng.debug.mode}"/>

+                        <arg line="-d ${build.test.results.dir}"/>

+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>

+                        <arg line="${testng.cmd.args}"/>

+                    </customize>

+                </j2seproject3:debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">

+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <element implicit="true" name="customize2" optional="true"/>

+            <sequential>

+                <j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">

+                    <customize2/>

+                </j2seproject3:testng-debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">

+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <sequential>

+                <j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize>

+                        <classpath>

+                            <path path="${run.test.classpath}"/>

+                        </classpath>

+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                        <jvmarg line="${run.jvmargs}"/>

+                        <jvmarg line="${run.jvmargs.ide}"/>

+                    </customize>

+                </j2seproject3:test-debug-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">

+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <sequential>

+                <j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">

+                    <customize2>

+                        <syspropertyset>

+                            <propertyref prefix="test-sys-prop."/>

+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                        </syspropertyset>

+                    </customize2>

+                </j2seproject3:testng-debug-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>

+    <!--

+                pre NB7.2 profiling section; consider it deprecated

+            -->

+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>

+    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">

+        <macrodef name="resolve">

+            <attribute name="name"/>

+            <attribute name="value"/>

+            <sequential>

+                <property name="@{name}" value="${env.@{value}}"/>

+            </sequential>

+        </macrodef>

+        <macrodef name="profile">

+            <attribute default="${main.class}" name="classname"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property environment="env"/>

+                <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>

+                <java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg value="${profiler.info.jvmargs.agent}"/>

+                    <jvmarg line="${profiler.info.jvmargs}"/>

+                    <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>

+                    <arg line="${application.args}"/>

+                    <classpath>

+                        <path path="${run.classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">

+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>

+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>

+    </target>

+    <!--

+                end of pre NB7.2 profiling section

+            -->

+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">

+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute default="${main.class}" name="name"/>

+            <attribute default="${debug.classpath}" name="classpath"/>

+            <attribute default="" name="stopclassname"/>

+            <sequential>

+                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                </nbjpdastart>

+            </sequential>

+        </macrodef>

+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute default="${build.classes.dir}" name="dir"/>

+            <sequential>

+                <nbjpdareload>

+                    <fileset dir="@{dir}" includes="${fix.classes}">

+                        <include name="${fix.includes}*.class"/>

+                    </fileset>

+                </nbjpdareload>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-debug-args">

+        <property name="version-output" value="java version &quot;${ant.java.version}"/>

+        <condition property="have-jdk-older-than-1.4">

+            <or>

+                <contains string="${version-output}" substring="java version &quot;1.0"/>

+                <contains string="${version-output}" substring="java version &quot;1.1"/>

+                <contains string="${version-output}" substring="java version &quot;1.2"/>

+                <contains string="${version-output}" substring="java version &quot;1.3"/>

+            </or>

+        </condition>

+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">

+            <istrue value="${have-jdk-older-than-1.4}"/>

+        </condition>

+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">

+            <os family="windows"/>

+        </condition>

+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">

+            <isset property="debug.transport"/>

+        </condition>

+    </target>

+    <target depends="-init-debug-args" name="-init-macrodef-debug">

+        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${main.class}" name="classname"/>

+            <attribute default="${debug.classpath}" name="classpath"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <java classname="@{classname}" dir="${work.dir}" fork="true">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>

+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>

+                    <jvmarg line="${run.jvmargs}"/>

+                    <jvmarg line="${run.jvmargs.ide}"/>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-java">

+        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute default="${main.class}" name="classname"/>

+            <attribute default="${run.classpath}" name="classpath"/>

+            <attribute default="jvm" name="jvm"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <java classname="@{classname}" dir="${work.dir}" fork="true">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>

+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>

+                    <jvmarg line="${run.jvmargs}"/>

+                    <jvmarg line="${run.jvmargs.ide}"/>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-copylibs">

+        <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${manifest.file}" name="manifest"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>

+                <pathconvert property="run.classpath.without.build.classes.dir">

+                    <path path="${run.classpath}"/>

+                    <map from="${build.classes.dir.resolved}" to=""/>

+                </pathconvert>

+                <pathconvert pathsep=" " property="jar.classpath">

+                    <path path="${run.classpath.without.build.classes.dir}"/>

+                    <chainedmapper>

+                        <flattenmapper/>

+                        <filtermapper>

+                            <replacestring from=" " to="%20"/>

+                        </filtermapper>

+                        <globmapper from="*" to="lib/*"/>

+                    </chainedmapper>

+                </pathconvert>

+                <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>

+                <copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">

+                    <fileset dir="${build.classes.dir}"/>

+                    <manifest>

+                        <attribute name="Class-Path" value="${jar.classpath}"/>

+                        <customize/>

+                    </manifest>

+                </copylibs>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-presetdef-jar">

+        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}">

+                <j2seproject1:fileset dir="${build.classes.dir}"/>

+            </jar>

+        </presetdef>

+    </target>

+    <target name="-init-ap-cmdline-properties">

+        <property name="annotation.processing.enabled" value="true"/>

+        <property name="annotation.processing.processors.list" value=""/>

+        <property name="annotation.processing.processor.options" value=""/>

+        <property name="annotation.processing.run.all.processors" value="true"/>

+        <property name="javac.processorpath" value="${javac.classpath}"/>

+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>

+        <condition property="ap.supported.internal" value="true">

+            <not>

+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>

+            </not>

+        </condition>

+    </target>

+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">

+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">

+            <isfalse value="${annotation.processing.run.all.processors}"/>

+        </condition>

+        <condition else="" property="ap.proc.none.internal" value="-proc:none">

+            <isfalse value="${annotation.processing.enabled}"/>

+        </condition>

+    </target>

+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">

+        <property name="ap.cmd.line.internal" value=""/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>

+    <!--

+                ===================

+                COMPILATION SECTION

+                ===================

+            -->

+    <target name="-deps-jar-init" unless="built-jar.properties">

+        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>

+        <delete file="${built-jar.properties}" quiet="true"/>

+    </target>

+    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">

+        <echo level="warn" message="Cycle detected: subscription-notification-handler was already built"/>

+    </target>

+    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">

+        <mkdir dir="${build.dir}"/>

+        <touch file="${built-jar.properties}" verbose="false"/>

+        <property file="${built-jar.properties}" prefix="already.built.jar."/>

+        <antcall target="-warn-already-built-jar"/>

+        <propertyfile file="${built-jar.properties}">

+            <entry key="${basedir}" value=""/>

+        </propertyfile>

+    </target>

+    <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>

+    <target depends="init" name="-check-automatic-build">

+        <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>

+    </target>

+    <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">

+        <antcall target="clean"/>

+    </target>

+    <target depends="init,deps-jar" name="-pre-pre-compile">

+        <mkdir dir="${build.classes.dir}"/>

+    </target>

+    <target name="-pre-compile">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="do.depend.true" name="-compile-depend">

+        <pathconvert property="build.generated.subdirs">

+            <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="*"/>

+            </dirset>

+        </pathconvert>

+        <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>

+    </target>

+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">

+        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>

+        <copy todir="${build.classes.dir}">

+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target if="has.persistence.xml" name="-copy-persistence-xml">

+        <mkdir dir="${build.classes.dir}/META-INF"/>

+        <copy todir="${build.classes.dir}/META-INF">

+            <fileset dir="${meta.inf.dir}" includes="persistence.xml"/>

+        </copy>

+    </target>

+    <target name="-post-compile">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>

+    <target name="-pre-compile-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">

+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>

+        <j2seproject3:force-recompile/>

+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>

+    </target>

+    <target name="-post-compile-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>

+    <!--

+                ====================

+                JAR BUILDING SECTION

+                ====================

+            -->

+    <target depends="init" name="-pre-pre-jar">

+        <dirname file="${dist.jar}" property="dist.jar.dir"/>

+        <mkdir dir="${dist.jar.dir}"/>

+    </target>

+    <target name="-pre-jar">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">

+        <j2seproject1:jar/>

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available">

+        <j2seproject1:jar manifest="${manifest.file}"/>

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">

+        <j2seproject1:jar manifest="${manifest.file}">

+            <j2seproject1:manifest>

+                <j2seproject1:attribute name="Main-Class" value="${main.class}"/>

+            </j2seproject1:manifest>

+        </j2seproject1:jar>

+        <echo level="info">To run this application from the command line without Ant, try:</echo>

+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>

+        <property location="${dist.jar}" name="dist.jar.resolved"/>

+        <pathconvert property="run.classpath.with.dist.jar">

+            <path path="${run.classpath}"/>

+            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>

+        </pathconvert>

+        <echo level="info">java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>

+    </target>

+    <target depends="init" if="do.archive" name="-do-jar-with-libraries-create-manifest" unless="manifest.available">

+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>

+        <touch file="${tmp.manifest.file}" verbose="false"/>

+    </target>

+    <target depends="init" if="do.archive+manifest.available" name="-do-jar-with-libraries-copy-manifest">

+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>

+        <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>

+    </target>

+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+main.class.available" name="-do-jar-with-libraries-set-main">

+        <manifest file="${tmp.manifest.file}" mode="update">

+            <attribute name="Main-Class" value="${main.class}"/>

+        </manifest>

+    </target>

+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-with-libraries-set-splashscreen">

+        <basename file="${application.splash}" property="splashscreen.basename"/>

+        <mkdir dir="${build.classes.dir}/META-INF"/>

+        <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>

+        <manifest file="${tmp.manifest.file}" mode="update">

+            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>

+        </manifest>

+    </target>

+    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen" if="do.mkdist" name="-do-jar-with-libraries-pack">

+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>

+        <echo level="info">To run this application from the command line without Ant, try:</echo>

+        <property location="${dist.jar}" name="dist.jar.resolved"/>

+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>

+    </target>

+    <target depends="-do-jar-with-libraries-pack" if="do.archive" name="-do-jar-with-libraries-delete-manifest">

+        <delete>

+            <fileset file="${tmp.manifest.file}"/>

+        </delete>

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen,-do-jar-with-libraries-pack,-do-jar-with-libraries-delete-manifest" name="-do-jar-with-libraries"/>

+    <target name="-post-jar">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR." name="jar"/>

+    <!--

+                =================

+                EXECUTION SECTION

+                =================

+            -->

+    <target depends="init,compile" description="Run a main class." name="run">

+        <j2seproject1:java>

+            <customize>

+                <arg line="${application.args}"/>

+            </customize>

+        </j2seproject1:java>

+    </target>

+    <target name="-do-not-recompile">

+        <property name="javac.includes.binary" value=""/>

+    </target>

+    <target depends="init,compile-single" name="run-single">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <j2seproject1:java classname="${run.class}"/>

+    </target>

+    <target depends="init,compile-test-single" name="run-test-with-main">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>

+    </target>

+    <!--

+                =================

+                DEBUGGING SECTION

+                =================

+            -->

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">

+        <j2seproject1:nbjpdastart name="${debug.class}"/>

+    </target>

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">

+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>

+    </target>

+    <target depends="init,compile" name="-debug-start-debuggee">

+        <j2seproject3:debug>

+            <customize>

+                <arg line="${application.args}"/>

+            </customize>

+        </j2seproject3:debug>

+    </target>

+    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">

+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>

+    </target>

+    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>

+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">

+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>

+        <j2seproject3:debug classname="${debug.class}"/>

+    </target>

+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>

+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">

+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>

+        <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>

+    </target>

+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>

+    <target depends="init" name="-pre-debug-fix">

+        <fail unless="fix.includes">Must set fix.includes</fail>

+        <property name="javac.includes" value="${fix.includes}.java"/>

+    </target>

+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">

+        <j2seproject1:nbjpdareload/>

+    </target>

+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>

+    <!--

+                =================

+                PROFILING SECTION

+                =================

+            -->

+    <!--

+                pre NB7.2 profiler integration

+            -->

+    <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <profile/>

+    </target>

+    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">

+        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <profile classname="${profile.class}"/>

+    </target>

+    <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <profile classname="sun.applet.AppletViewer">

+            <customize>

+                <arg value="${applet.url}"/>

+            </customize>

+        </profile>

+    </target>

+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.test.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">

+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>

+            <jvmarg value="${profiler.info.jvmargs.agent}"/>

+            <jvmarg line="${profiler.info.jvmargs}"/>

+            <test name="${profile.class}"/>

+            <classpath>

+                <path path="${run.test.classpath}"/>

+            </classpath>

+            <syspropertyset>

+                <propertyref prefix="test-sys-prop."/>

+                <mapper from="test-sys-prop.*" to="*" type="glob"/>

+            </syspropertyset>

+            <formatter type="brief" usefile="false"/>

+            <formatter type="xml"/>

+        </junit>

+    </target>

+    <!--

+                end of pre NB72 profiling section

+            -->

+    <target if="netbeans.home" name="-profile-check">

+        <condition property="profiler.configured">

+            <or>

+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>

+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>

+            </or>

+        </condition>

+    </target>

+    <target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">

+        <startprofiler/>

+        <antcall target="run"/>

+    </target>

+    <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <startprofiler/>

+        <antcall target="run-single"/>

+    </target>

+    <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>

+    <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">

+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>

+        <startprofiler/>

+        <antcall target="test-single"/>

+    </target>

+    <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <startprofiler/>

+        <antcal target="run-test-with-main"/>

+    </target>

+    <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">

+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>

+        <startprofiler/>

+        <antcall target="run-applet"/>

+    </target>

+    <!--

+                ===============

+                JAVADOC SECTION

+                ===============

+            -->

+    <target depends="init" if="have.sources" name="-javadoc-build">

+        <mkdir dir="${dist.javadoc.dir}"/>

+        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">

+            <and>

+                <isset property="endorsed.classpath.cmd.line.arg"/>

+                <not>

+                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>

+                </not>

+            </and>

+        </condition>

+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">

+            <classpath>

+                <path path="${javac.classpath}"/>

+            </classpath>

+            <fileset dir="${src.dir}" excludes="*.java,${excludes}" includes="${includes}">

+                <filename name="**/*.java"/>

+            </fileset>

+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="**/*.java"/>

+                <exclude name="*.java"/>

+            </fileset>

+            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>

+        </javadoc>

+        <copy todir="${dist.javadoc.dir}">

+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">

+                <filename name="**/doc-files/**"/>

+            </fileset>

+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="**/doc-files/**"/>

+            </fileset>

+        </copy>

+    </target>

+    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">

+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>

+    </target>

+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>

+    <!--

+                =========================

+                TEST COMPILATION SECTION

+                =========================

+            -->

+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">

+        <mkdir dir="${build.test.classes.dir}"/>

+    </target>

+    <target name="-pre-compile-test">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="do.depend.true" name="-compile-test-depend">

+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>

+    </target>

+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">

+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>

+        <copy todir="${build.test.classes.dir}">

+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target name="-post-compile-test">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>

+    <target name="-pre-compile-test-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">

+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>

+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>

+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>

+        <copy todir="${build.test.classes.dir}">

+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target name="-post-compile-test-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>

+    <!--

+                =======================

+                TEST EXECUTION SECTION

+                =======================

+            -->

+    <target depends="init" if="have.tests" name="-pre-test-run">

+        <mkdir dir="${build.test.results.dir}"/>

+    </target>

+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">

+        <j2seproject3:test testincludes="**/*Test.java"/>

+    </target>

+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init" if="have.tests" name="test-report"/>

+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>

+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>

+    <target depends="init" if="have.tests" name="-pre-test-run-single">

+        <mkdir dir="${build.test.results.dir}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">

+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>

+        <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">

+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>

+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>

+        <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>

+    <!--

+                =======================

+                TEST DEBUGGING SECTION

+                =======================

+            -->

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">

+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>

+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">

+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>

+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>

+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>

+    </target>

+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">

+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>

+    </target>

+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>

+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>

+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">

+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>

+    </target>

+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>

+    <!--

+                =========================

+                APPLET EXECUTION SECTION

+                =========================

+            -->

+    <target depends="init,compile-single" name="run-applet">

+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>

+        <j2seproject1:java classname="sun.applet.AppletViewer">

+            <customize>

+                <arg value="${applet.url}"/>

+            </customize>

+        </j2seproject1:java>

+    </target>

+    <!--

+                =========================

+                APPLET DEBUGGING  SECTION

+                =========================

+            -->

+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">

+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>

+        <j2seproject3:debug classname="sun.applet.AppletViewer">

+            <customize>

+                <arg value="${applet.url}"/>

+            </customize>

+        </j2seproject3:debug>

+    </target>

+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>

+    <!--

+                ===============

+                CLEANUP SECTION

+                ===============

+            -->

+    <target name="-deps-clean-init" unless="built-clean.properties">

+        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>

+        <delete file="${built-clean.properties}" quiet="true"/>

+    </target>

+    <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">

+        <echo level="warn" message="Cycle detected: subscription-notification-handler was already built"/>

+    </target>

+    <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">

+        <mkdir dir="${build.dir}"/>

+        <touch file="${built-clean.properties}" verbose="false"/>

+        <property file="${built-clean.properties}" prefix="already.built.clean."/>

+        <antcall target="-warn-already-built-clean"/>

+        <propertyfile file="${built-clean.properties}">

+            <entry key="${basedir}" value=""/>

+        </propertyfile>

+    </target>

+    <target depends="init" name="-do-clean">

+        <delete dir="${build.dir}"/>

+        <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>

+    </target>

+    <target name="-post-clean">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>

+    <target name="-check-call-dep">

+        <property file="${call.built.properties}" prefix="already.built."/>

+        <condition property="should.call.dep">

+            <and>

+                <not>

+                    <isset property="already.built.${call.subproject}"/>

+                </not>

+                <available file="${call.script}"/>

+            </and>

+        </condition>

+    </target>

+    <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">

+        <ant antfile="${call.script}" inheritall="false" target="${call.target}">

+            <propertyset>

+                <propertyref prefix="transfer."/>

+                <mapper from="transfer.*" to="*" type="glob"/>

+            </propertyset>

+        </ant>

+    </target>

+</project>

diff --git a/juddi-examples/subscription-notification-handler/nbproject/genfiles.properties b/juddi-examples/subscription-notification-handler/nbproject/genfiles.properties
new file mode 100644
index 0000000..35c915e
--- /dev/null
+++ b/juddi-examples/subscription-notification-handler/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=5e820738

+build.xml.script.CRC32=95fbf52a

+build.xml.stylesheet.CRC32=28e38971@1.53.1.46

+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.

+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.

+nbproject/build-impl.xml.data.CRC32=5e820738

+nbproject/build-impl.xml.script.CRC32=3086f51a

+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46

diff --git a/juddi-examples/subscription-notification-handler/nbproject/project.properties b/juddi-examples/subscription-notification-handler/nbproject/project.properties
new file mode 100644
index 0000000..7d97c2f
--- /dev/null
+++ b/juddi-examples/subscription-notification-handler/nbproject/project.properties
@@ -0,0 +1,190 @@
+annotation.processing.enabled=true

+annotation.processing.enabled.in.editor=false

+annotation.processing.processors.list=

+annotation.processing.run.all.processors=true

+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output

+application.title=subscription-notification-handler

+application.vendor=asf

+build.classes.dir=${build.dir}/classes

+build.classes.excludes=**/*.java,**/*.form

+# This directory is removed when the project is cleaned:

+build.dir=build

+build.generated.dir=${build.dir}/generated

+build.generated.sources.dir=${build.dir}/generated-sources

+# Only compile against the classpath explicitly listed here:

+build.sysclasspath=ignore

+build.test.classes.dir=${build.dir}/test/classes

+build.test.results.dir=${build.dir}/test/results

+# Uncomment to specify the preferred debugger connection transport:

+#debug.transport=dt_socket

+debug.classpath=\

+    ${run.classpath}

+debug.test.classpath=\

+    ${run.test.classpath}

+# This directory is removed when the project is cleaned:

+dist.dir=dist

+dist.jar=${dist.dir}/subscription-notification-handler.jar

+dist.javadoc.dir=${dist.dir}/javadoc

+endorsed.classpath=

+excludes=

+file.reference.aopalliance-1.0.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\aopalliance-1.0.jar

+file.reference.asm-3.3.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\asm-3.3.jar

+file.reference.commons-beanutils-1.7.0.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-beanutils-1.7.0.jar

+file.reference.commons-beanutils-core-1.8.0.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-beanutils-core-1.8.0.jar

+file.reference.commons-codec-1.3.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-codec-1.3.jar

+file.reference.commons-collections-3.2.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-collections-3.2.1.jar

+file.reference.commons-configuration-1.6.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-configuration-1.6.jar

+file.reference.commons-digester-1.8.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-digester-1.8.jar

+file.reference.commons-lang-2.4.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-lang-2.4.jar

+file.reference.commons-logging-api-1.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-logging-api-1.1.jar

+file.reference.commons-pool-1.5.4.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-pool-1.5.4.jar

+file.reference.cxf-api-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-api-2.3.1.jar

+file.reference.cxf-common-schemas-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-common-schemas-2.3.1.jar

+file.reference.cxf-common-utilities-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-common-utilities-2.3.1.jar

+file.reference.cxf-rt-bindings-soap-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-rt-bindings-soap-2.3.1.jar

+file.reference.cxf-rt-bindings-xml-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-rt-bindings-xml-2.3.1.jar

+file.reference.cxf-rt-core-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-rt-core-2.3.1.jar

+file.reference.cxf-rt-databinding-jaxb-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-rt-databinding-jaxb-2.3.1.jar

+file.reference.cxf-rt-frontend-jaxws-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-rt-frontend-jaxws-2.3.1.jar

+file.reference.cxf-rt-frontend-simple-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-rt-frontend-simple-2.3.1.jar

+file.reference.cxf-rt-transports-http-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-rt-transports-http-2.3.1.jar

+file.reference.cxf-rt-ws-addr-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-rt-ws-addr-2.3.1.jar

+file.reference.cxf-tools-common-2.3.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\cxf-tools-common-2.3.1.jar

+file.reference.geronimo-javamail_1.4_mail-1.8.2.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\geronimo-javamail_1.4_mail-1.8.2.jar

+file.reference.geronimo-javamail_1.4_spec-1.7.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\geronimo-javamail_1.4_spec-1.7.1.jar

+file.reference.geronimo-jms_1.1_spec-1.0.jar=lib\\geronimo-jms_1.1_spec-1.0.jar

+file.reference.geronimo-jms_1.1_spec-1.1.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\geronimo-jms_1.1_spec-1.1.1.jar

+file.reference.geronimo-jpa_2.0_spec-1.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\geronimo-jpa_2.0_spec-1.1.jar

+file.reference.geronimo-jta_1.1_spec-1.1.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\geronimo-jta_1.1_spec-1.1.1.jar

+file.reference.jaxb-impl-2.1.13.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\jaxb-impl-2.1.13.jar

+file.reference.juddi-client-3.1.5-SNAPSHOT.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\juddi-client-3.1.5-SNAPSHOT.jar

+file.reference.juddi-core-openjpa-3.1.5-SNAPSHOT.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\juddi-core-openjpa-3.1.5-SNAPSHOT.jar

+file.reference.neethi-2.0.4.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\neethi-2.0.4.jar

+file.reference.openjpa-2.2.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\openjpa-2.2.1.jar

+file.reference.persistence-api-1.0.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\persistence-api-1.0.jar

+file.reference.qpid-all.jar=lib\\qpid-all.jar

+file.reference.qpid-amqp-1-0-client-0.20.jar=lib\\qpid-amqp-1-0-client-0.20.jar

+file.reference.qpid-amqp-1-0-client-jms-0.20.jar=lib\\qpid-amqp-1-0-client-jms-0.20.jar

+file.reference.qpid-amqp-1-0-common-0.20.jar=lib\\qpid-amqp-1-0-common-0.20.jar

+file.reference.serp-1.13.1.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\serp-1.13.1.jar

+file.reference.spring-aop-3.0.5.RELEASE.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\spring-aop-3.0.5.RELEASE.jar

+file.reference.spring-asm-3.0.5.RELEASE.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\spring-asm-3.0.5.RELEASE.jar

+file.reference.spring-beans-3.0.5.RELEASE.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\spring-beans-3.0.5.RELEASE.jar

+file.reference.spring-context-3.0.5.RELEASE.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\spring-context-3.0.5.RELEASE.jar

+file.reference.spring-core-3.0.5.RELEASE.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\spring-core-3.0.5.RELEASE.jar

+file.reference.spring-expression-3.0.5.RELEASE.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\spring-expression-3.0.5.RELEASE.jar

+file.reference.spring-web-3.0.5.RELEASE.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\spring-web-3.0.5.RELEASE.jar

+file.reference.stax-api-1.0-2.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\stax-api-1.0-2.jar

+file.reference.stax2-api-3.0.2.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\stax2-api-3.0.2.jar

+file.reference.uddi-ws-3.1.5-SNAPSHOT.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\uddi-ws-3.1.5-SNAPSHOT.jar

+file.reference.woodstox-core-asl-4.0.8.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\woodstox-core-asl-4.0.8.jar

+file.reference.wsdl4j-1.6.2.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\wsdl4j-1.6.2.jar

+file.reference.xml-resolver-1.2.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\xml-resolver-1.2.jar

+file.reference.XmlSchema-1.4.7.jar=..\\..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\XmlSchema-1.4.7.jar

+includes=**

+jar.archive.disabled=${jnlp.enabled}

+jar.compress=false

+jar.index=${jnlp.enabled}

+javac.classpath=\

+    ${file.reference.aopalliance-1.0.jar}:\

+    ${file.reference.asm-3.3.jar}:\

+    ${file.reference.commons-beanutils-1.7.0.jar}:\

+    ${file.reference.commons-beanutils-core-1.8.0.jar}:\

+    ${file.reference.commons-codec-1.3.jar}:\

+    ${file.reference.commons-collections-3.2.1.jar}:\

+    ${file.reference.commons-configuration-1.6.jar}:\

+    ${file.reference.commons-digester-1.8.jar}:\

+    ${file.reference.commons-lang-2.4.jar}:\

+    ${file.reference.commons-logging-api-1.1.jar}:\

+    ${file.reference.commons-pool-1.5.4.jar}:\

+    ${file.reference.cxf-api-2.3.1.jar}:\

+    ${file.reference.cxf-common-schemas-2.3.1.jar}:\

+    ${file.reference.cxf-common-utilities-2.3.1.jar}:\

+    ${file.reference.cxf-rt-bindings-soap-2.3.1.jar}:\

+    ${file.reference.cxf-rt-bindings-xml-2.3.1.jar}:\

+    ${file.reference.cxf-rt-core-2.3.1.jar}:\

+    ${file.reference.cxf-rt-databinding-jaxb-2.3.1.jar}:\

+    ${file.reference.cxf-rt-frontend-jaxws-2.3.1.jar}:\

+    ${file.reference.cxf-rt-frontend-simple-2.3.1.jar}:\

+    ${file.reference.cxf-rt-transports-http-2.3.1.jar}:\

+    ${file.reference.cxf-rt-ws-addr-2.3.1.jar}:\

+    ${file.reference.cxf-tools-common-2.3.1.jar}:\

+    ${file.reference.geronimo-javamail_1.4_mail-1.8.2.jar}:\

+    ${file.reference.geronimo-javamail_1.4_spec-1.7.1.jar}:\

+    ${file.reference.geronimo-jms_1.1_spec-1.1.1.jar}:\

+    ${file.reference.geronimo-jpa_2.0_spec-1.1.jar}:\

+    ${file.reference.geronimo-jta_1.1_spec-1.1.1.jar}:\

+    ${file.reference.jaxb-impl-2.1.13.jar}:\

+    ${file.reference.juddi-client-3.1.5-SNAPSHOT.jar}:\

+    ${file.reference.juddi-core-openjpa-3.1.5-SNAPSHOT.jar}:\

+    ${file.reference.neethi-2.0.4.jar}:\

+    ${file.reference.openjpa-2.2.1.jar}:\

+    ${file.reference.persistence-api-1.0.jar}:\

+    ${file.reference.serp-1.13.1.jar}:\

+    ${file.reference.spring-aop-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-asm-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-beans-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-context-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-core-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-expression-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-web-3.0.5.RELEASE.jar}:\

+    ${file.reference.stax-api-1.0-2.jar}:\

+    ${file.reference.stax2-api-3.0.2.jar}:\

+    ${file.reference.uddi-ws-3.1.5-SNAPSHOT.jar}:\

+    ${file.reference.woodstox-core-asl-4.0.8.jar}:\

+    ${file.reference.wsdl4j-1.6.2.jar}:\

+    ${file.reference.xml-resolver-1.2.jar}:\

+    ${file.reference.XmlSchema-1.4.7.jar}:\

+    ${file.reference.geronimo-jms_1.1_spec-1.0.jar}:\

+    ${file.reference.qpid-all.jar}:\

+    ${file.reference.qpid-amqp-1-0-client-0.20.jar}:\

+    ${file.reference.qpid-amqp-1-0-client-jms-0.20.jar}:\

+    ${file.reference.qpid-amqp-1-0-common-0.20.jar}

+# Space-separated list of extra javac options

+javac.compilerargs=

+javac.deprecation=false

+javac.processorpath=\

+    ${javac.classpath}

+javac.source=1.6

+javac.target=1.6

+javac.test.classpath=\

+    ${javac.classpath}:\

+    ${build.classes.dir}

+javac.test.processorpath=\

+    ${javac.test.classpath}

+javadoc.additionalparam=

+javadoc.author=false

+javadoc.encoding=${source.encoding}

+javadoc.noindex=false

+javadoc.nonavbar=false

+javadoc.notree=false

+javadoc.private=false

+javadoc.splitindex=true

+javadoc.use=true

+javadoc.version=false

+javadoc.windowtitle=

+jnlp.codebase.type=no.codebase

+jnlp.descriptor=application

+jnlp.enabled=false

+jnlp.mixed.code=default

+jnlp.offline-allowed=false

+jnlp.signed=false

+jnlp.signing=

+jnlp.signing.alias=

+jnlp.signing.keystore=

+meta.inf.dir=${src.dir}/META-INF

+mkdist.disabled=true

+platform.active=default_platform

+run.classpath=\

+    ${javac.classpath}:\

+    ${build.classes.dir}

+# Space-separated list of JVM arguments used when running the project.

+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.

+# To set system properties for unit tests define test-sys-prop.name=value:

+run.jvmargs=

+run.test.classpath=\

+    ${javac.test.classpath}:\

+    ${build.test.classes.dir}

+source.encoding=UTF-8

+src.dir=src

+test.src.dir=test

diff --git a/juddi-examples/subscription-notification-handler/nbproject/project.xml b/juddi-examples/subscription-notification-handler/nbproject/project.xml
new file mode 100644
index 0000000..3337cc0
--- /dev/null
+++ b/juddi-examples/subscription-notification-handler/nbproject/project.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<project xmlns="http://www.netbeans.org/ns/project/1">

+    <type>org.netbeans.modules.java.j2seproject</type>

+    <configuration>

+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">

+            <name>subscription-notification-handler</name>

+            <source-roots>

+                <root id="src.dir"/>

+            </source-roots>

+            <test-roots>

+                <root id="test.src.dir"/>

+            </test-roots>

+        </data>

+    </configuration>

+</project>

diff --git a/juddi-examples/subscription-notification-handler/readme.txt b/juddi-examples/subscription-notification-handler/readme.txt
new file mode 100644
index 0000000..cad534f
--- /dev/null
+++ b/juddi-examples/subscription-notification-handler/readme.txt
@@ -0,0 +1,3 @@
+Maybe one day, I can convince Kurt to convert this thing to Maven

+

+This project is an add on for jUDDI that lets users setup UDDI subscriptions that get funneled to an AMQP Qpid exchange (topic, queue, etc). It's meant to be a demonstration of what's possible and does not support all of the advanced Qpid configuration scenarios, authentication or encryption.
\ No newline at end of file
diff --git a/juddi-examples/subscription-notification-handler/src/org/apache/juddi/subscription/notify/AMQPNotifier.java b/juddi-examples/subscription-notification-handler/src/org/apache/juddi/subscription/notify/AMQPNotifier.java
new file mode 100644
index 0000000..15b1d24
--- /dev/null
+++ b/juddi-examples/subscription-notification-handler/src/org/apache/juddi/subscription/notify/AMQPNotifier.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2013 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.subscription.notify;
+
+import java.net.URISyntaxException;
+import java.rmi.RemoteException;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.api_v3.AccessPointType;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.jaxb.JAXBMarshaller;
+import org.apache.juddi.model.BindingTemplate;
+import org.uddi.api_v3.DispositionReport;
+import org.uddi.api_v3.Result;
+import org.uddi.subr_v3.NotifySubscriptionListener;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+
+/**
+ * AMQP Notifier
+ * amqp.java.naming.factory.initial
+ * amqp.connectionfactory.qpidConnectionfactory
+ * amqp.destination
+ * amqp.destination.type amq.topic
+ * @author Alex O'Ree
+ */
+public class AMQPNotifier implements Notifier {
+
+    Log log = LogFactory.getLog(this.getClass());
+    String destination = null;
+
+    public AMQPNotifier(BindingTemplate bindingTemplate) throws URISyntaxException, ConfigurationException {
+        super();
+        if (!AccessPointType.END_POINT.toString().equalsIgnoreCase(bindingTemplate.getAccessPointType())) {
+            log.error("AMQP enpoints only support AccessPointType " + AccessPointType.END_POINT);
+        }
+        String accessPointUrl = bindingTemplate.getAccessPointUrl().toLowerCase();
+        if (!accessPointUrl.startsWith("amqp:")) {
+            log.warn("AMQP accessPointUrl for bindingTemplate " + bindingTemplate.getEntityKey()
+                    + " should start with 'amqp:'");
+        } else {
+            destination = accessPointUrl.substring(accessPointUrl.indexOf(":") + 1);
+
+        }
+    }
+
+    @Override
+    public DispositionReport notifySubscriptionListener(NotifySubscriptionListener body) throws DispositionReportFaultMessage, RemoteException {
+        Connection connection = null;
+        Context context = null;
+        boolean success = false;
+        String err = null;
+        try {
+            if (destination != null) {
+                log.info("Sending notification AMQP to " + destination);
+                Properties properties = new Properties();
+                 
+                properties.put("java.naming.factory.initial", 
+                        AppConfig.getConfiguration().getString("amqp.java.naming.factory.initial", "org.apache.qpid.jndi.PropertiesFileInitialContextFactory"));
+                properties.put("connectionfactory.qpidConnectionfactory", destination);
+                properties.put("destination." +AppConfig.getConfiguration().getString("amqp.destination") ,
+                        AppConfig.getConfiguration().getString("amqp.destination.type"));
+                properties.load(this.getClass().getResourceAsStream("hello.properties"));
+                context = new InitialContext(properties);
+
+                ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("qpidConnectionfactory");
+                connection = connectionFactory.createConnection();
+                connection.start();
+
+                Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+                Destination destinationLocal = (Destination) context.lookup("UDDISubscriptionUpdates");
+
+                MessageProducer messageProducer = session.createProducer(destinationLocal);
+
+
+                String subscriptionResultXML = JAXBMarshaller.marshallToString(body, JAXBMarshaller.PACKAGE_SUBSCR_RES);
+                TextMessage message = session.createTextMessage(subscriptionResultXML);
+                messageProducer.send(message);
+                success = true;
+
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            err = e.getMessage();
+
+        } finally {
+            try {
+                connection.close();
+            } catch (JMSException ex) {
+                log.error(null, ex);
+            }
+            try {
+                context.close();
+            } catch (NamingException ex) {
+                log.error(null, ex);
+            }
+        }
+        if (!success) {
+            throw new DispositionReportFaultMessage(err, null);
+        }
+        DispositionReport dr = new DispositionReport();
+        Result res = new Result();
+        dr.getResult().add(res);
+
+        return dr;
+    }
+}
diff --git a/juddi-examples/uddi-annotations/src/main/webapp/WEB-INF/classes/juddiv3.properties b/juddi-examples/uddi-annotations/src/main/webapp/WEB-INF/classes/juddiv3.properties
index 00e9bc2..c5a5d41 100644
--- a/juddi-examples/uddi-annotations/src/main/webapp/WEB-INF/classes/juddiv3.properties
+++ b/juddi-examples/uddi-annotations/src/main/webapp/WEB-INF/classes/juddiv3.properties
@@ -130,4 +130,7 @@
 
 #juddi.mail.smtp.password
 ##Password used to authenticate to the SMTP server
-##used only if juddi.mail.smtp.auth is true
\ No newline at end of file
+##used only if juddi.mail.smtp.auth is true
+
+#Since 3.1.5 the maxium ammount of returned subscription entities allowed
+juddi.subscription.maxentities = 1000
\ No newline at end of file
diff --git a/juddi-examples/uddi-createbulk/build.xml b/juddi-examples/uddi-createbulk/build.xml
new file mode 100644
index 0000000..b6b780d
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/build.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!-- You may freely edit this file. See commented blocks below for -->

+<!-- some examples of how to customize the build. -->

+<!-- (If you delete it and reopen the project it will be recreated.) -->

+<!-- By default, only the Clean and Build commands use this build script. -->

+<!-- Commands such as Run, Debug, and Test only use this build script if -->

+<!-- the Compile on Save feature is turned off for the project. -->

+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->

+<!-- in the project's Project Properties dialog box.-->

+<project name="uddi-createbulk" default="default" basedir=".">

+    <description>Builds, tests, and runs the project uddi-createbulk.</description>

+    <import file="nbproject/build-impl.xml"/>

+    <!--

+

+    There exist several targets which are by default empty and which can be 

+    used for execution of your tasks. These targets are usually executed 

+    before and after some main targets. They are: 

+

+      -pre-init:                 called before initialization of project properties

+      -post-init:                called after initialization of project properties

+      -pre-compile:              called before javac compilation

+      -post-compile:             called after javac compilation

+      -pre-compile-single:       called before javac compilation of single file

+      -post-compile-single:      called after javac compilation of single file

+      -pre-compile-test:         called before javac compilation of JUnit tests

+      -post-compile-test:        called after javac compilation of JUnit tests

+      -pre-compile-test-single:  called before javac compilation of single JUnit test

+      -post-compile-test-single: called after javac compilation of single JUunit test

+      -pre-jar:                  called before JAR building

+      -post-jar:                 called after JAR building

+      -post-clean:               called after cleaning build products

+

+    (Targets beginning with '-' are not intended to be called on their own.)

+

+    Example of inserting an obfuscator after compilation could look like this:

+

+        <target name="-post-compile">

+            <obfuscate>

+                <fileset dir="${build.classes.dir}"/>

+            </obfuscate>

+        </target>

+

+    For list of available properties check the imported 

+    nbproject/build-impl.xml file. 

+

+

+    Another way to customize the build is by overriding existing main targets.

+    The targets of interest are: 

+

+      -init-macrodef-javac:     defines macro for javac compilation

+      -init-macrodef-junit:     defines macro for junit execution

+      -init-macrodef-debug:     defines macro for class debugging

+      -init-macrodef-java:      defines macro for class execution

+      -do-jar-with-manifest:    JAR building (if you are using a manifest)

+      -do-jar-without-manifest: JAR building (if you are not using a manifest)

+      run:                      execution of project 

+      -javadoc-build:           Javadoc generation

+      test-report:              JUnit report generation

+

+    An example of overriding the target for project execution could look like this:

+

+        <target name="run" depends="uddi-createbulk-impl.jar">

+            <exec dir="bin" executable="launcher.exe">

+                <arg file="${dist.jar}"/>

+            </exec>

+        </target>

+

+    Notice that the overridden target depends on the jar target and not only on 

+    the compile target as the regular run target does. Again, for a list of available 

+    properties which you can use, check the target you are overriding in the

+    nbproject/build-impl.xml file. 

+

+    -->

+</project>

diff --git a/juddi-examples/uddi-createbulk/manifest.mf b/juddi-examples/uddi-createbulk/manifest.mf
new file mode 100644
index 0000000..1574df4
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0

+X-COMMENT: Main-Class will be added automatically by build

+

diff --git a/juddi-examples/uddi-createbulk/nbproject/build-impl.xml b/juddi-examples/uddi-createbulk/nbproject/build-impl.xml
new file mode 100644
index 0000000..4fcb7b3
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/nbproject/build-impl.xml
@@ -0,0 +1,1411 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+*** GENERATED FROM project.xml - DO NOT EDIT  ***

+***         EDIT ../build.xml INSTEAD         ***

+

+For the purpose of easier reading the script

+is divided into following sections:

+

+  - initialization

+  - compilation

+  - jar

+  - execution

+  - debugging

+  - javadoc

+  - test compilation

+  - test execution

+  - test debugging

+  - applet

+  - cleanup

+

+        -->

+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="uddi-createbulk-impl">

+    <fail message="Please build using Ant 1.8.0 or higher.">

+        <condition>

+            <not>

+                <antversion atleast="1.8.0"/>

+            </not>

+        </condition>

+    </fail>

+    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>

+    <!-- 

+                ======================

+                INITIALIZATION SECTION 

+                ======================

+            -->

+    <target name="-pre-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="-pre-init" name="-init-private">

+        <property file="nbproject/private/config.properties"/>

+        <property file="nbproject/private/configs/${config}.properties"/>

+        <property file="nbproject/private/private.properties"/>

+    </target>

+    <target depends="-pre-init,-init-private" name="-init-user">

+        <property file="${user.properties.file}"/>

+        <!-- The two properties below are usually overridden -->

+        <!-- by the active platform. Just a fallback. -->

+        <property name="default.javac.source" value="1.4"/>

+        <property name="default.javac.target" value="1.4"/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">

+        <property file="nbproject/configs/${config}.properties"/>

+        <property file="nbproject/project.properties"/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">

+        <available file="${manifest.file}" property="manifest.available"/>

+        <condition property="splashscreen.available">

+            <and>

+                <not>

+                    <equals arg1="${application.splash}" arg2="" trim="true"/>

+                </not>

+                <available file="${application.splash}"/>

+            </and>

+        </condition>

+        <condition property="main.class.available">

+            <and>

+                <isset property="main.class"/>

+                <not>

+                    <equals arg1="${main.class}" arg2="" trim="true"/>

+                </not>

+            </and>

+        </condition>

+        <condition property="manifest.available+main.class">

+            <and>

+                <isset property="manifest.available"/>

+                <isset property="main.class.available"/>

+            </and>

+        </condition>

+        <condition property="do.archive">

+            <not>

+                <istrue value="${jar.archive.disabled}"/>

+            </not>

+        </condition>

+        <condition property="do.mkdist">

+            <and>

+                <isset property="do.archive"/>

+                <isset property="libs.CopyLibs.classpath"/>

+                <not>

+                    <istrue value="${mkdist.disabled}"/>

+                </not>

+            </and>

+        </condition>

+        <condition property="manifest.available+main.class+mkdist.available">

+            <and>

+                <istrue value="${manifest.available+main.class}"/>

+                <isset property="do.mkdist"/>

+            </and>

+        </condition>

+        <condition property="do.archive+manifest.available">

+            <and>

+                <isset property="manifest.available"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="do.archive+main.class.available">

+            <and>

+                <isset property="main.class.available"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="do.archive+splashscreen.available">

+            <and>

+                <isset property="splashscreen.available"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="do.archive+manifest.available+main.class">

+            <and>

+                <istrue value="${manifest.available+main.class}"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="manifest.available-mkdist.available">

+            <or>

+                <istrue value="${manifest.available}"/>

+                <isset property="do.mkdist"/>

+            </or>

+        </condition>

+        <condition property="manifest.available+main.class-mkdist.available">

+            <or>

+                <istrue value="${manifest.available+main.class}"/>

+                <isset property="do.mkdist"/>

+            </or>

+        </condition>

+        <condition property="have.tests">

+            <or>

+                <available file="${test.src.dir}"/>

+            </or>

+        </condition>

+        <condition property="have.sources">

+            <or>

+                <available file="${src.dir}"/>

+            </or>

+        </condition>

+        <condition property="netbeans.home+have.tests">

+            <and>

+                <isset property="netbeans.home"/>

+                <isset property="have.tests"/>

+            </and>

+        </condition>

+        <condition property="no.javadoc.preview">

+            <and>

+                <isset property="javadoc.preview"/>

+                <isfalse value="${javadoc.preview}"/>

+            </and>

+        </condition>

+        <property name="run.jvmargs" value=""/>

+        <property name="run.jvmargs.ide" value=""/>

+        <property name="javac.compilerargs" value=""/>

+        <property name="work.dir" value="${basedir}"/>

+        <condition property="no.deps">

+            <and>

+                <istrue value="${no.dependencies}"/>

+            </and>

+        </condition>

+        <property name="javac.debug" value="true"/>

+        <property name="javadoc.preview" value="true"/>

+        <property name="application.args" value=""/>

+        <property name="source.encoding" value="${file.encoding}"/>

+        <property name="runtime.encoding" value="${source.encoding}"/>

+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">

+            <and>

+                <isset property="javadoc.encoding"/>

+                <not>

+                    <equals arg1="${javadoc.encoding}" arg2=""/>

+                </not>

+            </and>

+        </condition>

+        <property name="javadoc.encoding.used" value="${source.encoding}"/>

+        <property name="includes" value="**"/>

+        <property name="excludes" value=""/>

+        <property name="do.depend" value="false"/>

+        <condition property="do.depend.true">

+            <istrue value="${do.depend}"/>

+        </condition>

+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>

+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">

+            <length length="0" string="${endorsed.classpath}" when="greater"/>

+        </condition>

+        <condition else="false" property="jdkBug6558476">

+            <and>

+                <matches pattern="1\.[56]" string="${java.specification.version}"/>

+                <not>

+                    <os family="unix"/>

+                </not>

+            </and>

+        </condition>

+        <property name="javac.fork" value="${jdkBug6558476}"/>

+        <property name="jar.index" value="false"/>

+        <property name="jar.index.metainf" value="${jar.index}"/>

+        <property name="copylibs.rebase" value="true"/>

+        <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>

+        <condition property="junit.available">

+            <or>

+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>

+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>

+            </or>

+        </condition>

+        <condition property="testng.available">

+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>

+        </condition>

+        <condition property="junit+testng.available">

+            <and>

+                <istrue value="${junit.available}"/>

+                <istrue value="${testng.available}"/>

+            </and>

+        </condition>

+        <condition else="testng" property="testng.mode" value="mixed">

+            <istrue value="${junit+testng.available}"/>

+        </condition>

+        <condition else="" property="testng.debug.mode" value="-mixed">

+            <istrue value="${junit+testng.available}"/>

+        </condition>

+    </target>

+    <target name="-post-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">

+        <fail unless="src.dir">Must set src.dir</fail>

+        <fail unless="test.src.dir">Must set test.src.dir</fail>

+        <fail unless="build.dir">Must set build.dir</fail>

+        <fail unless="dist.dir">Must set dist.dir</fail>

+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>

+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>

+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>

+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>

+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>

+        <fail unless="dist.jar">Must set dist.jar</fail>

+    </target>

+    <target name="-init-macrodef-property">

+        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute name="name"/>

+            <attribute name="value"/>

+            <sequential>

+                <property name="@{name}" value="${@{value}}"/>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">

+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}" name="classpath"/>

+            <attribute default="${javac.processorpath}" name="processorpath"/>

+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="${javac.debug}" name="debug"/>

+            <attribute default="${empty.dir}" name="sourcepath"/>

+            <attribute default="${empty.dir}" name="gensrcdir"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.dir}/empty" name="empty.dir"/>

+                <mkdir dir="${empty.dir}"/>

+                <mkdir dir="@{apgeneratedsrcdir}"/>

+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">

+                    <src>

+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">

+                            <include name="*"/>

+                        </dirset>

+                    </src>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <compilerarg line="${javac.compilerargs}"/>

+                    <compilerarg value="-processorpath"/>

+                    <compilerarg path="@{processorpath}:${empty.dir}"/>

+                    <compilerarg line="${ap.processors.internal}"/>

+                    <compilerarg line="${annotation.processing.processor.options}"/>

+                    <compilerarg value="-s"/>

+                    <compilerarg path="@{apgeneratedsrcdir}"/>

+                    <compilerarg line="${ap.proc.none.internal}"/>

+                    <customize/>

+                </javac>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">

+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}" name="classpath"/>

+            <attribute default="${javac.processorpath}" name="processorpath"/>

+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="${javac.debug}" name="debug"/>

+            <attribute default="${empty.dir}" name="sourcepath"/>

+            <attribute default="${empty.dir}" name="gensrcdir"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.dir}/empty" name="empty.dir"/>

+                <mkdir dir="${empty.dir}"/>

+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">

+                    <src>

+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">

+                            <include name="*"/>

+                        </dirset>

+                    </src>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <compilerarg line="${javac.compilerargs}"/>

+                    <customize/>

+                </javac>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">

+        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}" name="classpath"/>

+            <sequential>

+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                </depend>

+            </sequential>

+        </macrodef>

+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <sequential>

+                <fail unless="javac.includes">Must set javac.includes</fail>

+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">

+                    <path>

+                        <filelist dir="@{destdir}" files="${javac.includes}"/>

+                    </path>

+                    <globmapper from="*.java" to="*.class"/>

+                </pathconvert>

+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>

+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>

+                <delete>

+                    <files includesfile="${javac.includesfile.binary}"/>

+                </delete>

+                <delete>

+                    <fileset file="${javac.includesfile.binary}"/>

+                </delete>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${junit.available}" name="-init-macrodef-junit-init">

+        <condition else="false" property="nb.junit.batch" value="true">

+            <and>

+                <istrue value="${junit.available}"/>

+                <not>

+                    <isset property="test.method"/>

+                </not>

+            </and>

+        </condition>

+        <condition else="false" property="nb.junit.single" value="true">

+            <and>

+                <istrue value="${junit.available}"/>

+                <isset property="test.method"/>

+            </and>

+        </condition>

+    </target>

+    <target name="-init-test-properties">

+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>

+        <property name="test.binarytestincludes" value=""/>

+        <property name="test.binaryexcludes" value=""/>

+    </target>

+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">

+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">

+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <batchtest todir="${build.test.results.dir}">

+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">

+                            <filename name="@{testincludes}"/>

+                        </fileset>

+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">

+                            <filename name="${test.binarytestincludes}"/>

+                        </fileset>

+                    </batchtest>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>

+    <target if="${testng.available}" name="-init-macrodef-testng">

+        <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">

+                    <isset property="test.method"/>

+                </condition>

+                <union id="test.set">

+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">

+                        <filename name="@{testincludes}"/>

+                    </fileset>

+                </union>

+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>

+                <testng classfilesetref="test.set" failureProperty="tests.failed" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="uddi-createbulk" testname="TestNG tests" workingDir="${work.dir}">

+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>

+                    <propertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </propertyset>

+                    <customize/>

+                </testng>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-test-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <echo>No tests executed.</echo>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </j2seproject3:junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </j2seproject3:testng>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">

+        <macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <sequential>

+                <j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize>

+                        <classpath>

+                            <path path="${run.test.classpath}"/>

+                        </classpath>

+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                        <jvmarg line="${run.jvmargs}"/>

+                        <jvmarg line="${run.jvmargs.ide}"/>

+                    </customize>

+                </j2seproject3:test-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">

+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">

+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <batchtest todir="${build.test.results.dir}">

+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">

+                            <filename name="@{testincludes}"/>

+                        </fileset>

+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">

+                            <filename name="${test.binarytestincludes}"/>

+                        </fileset>

+                    </batchtest>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">

+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </j2seproject3:junit-debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${testng.available}" name="-init-macrodef-testng-debug">

+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <element name="customize2" optional="true"/>

+            <sequential>

+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">

+                    <isset property="test.method"/>

+                </condition>

+                <condition else="-suitename uddi-createbulk -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">

+                    <matches pattern=".*\.xml" string="@{testClass}"/>

+                </condition>

+                <delete dir="${build.test.results.dir}" quiet="true"/>

+                <mkdir dir="${build.test.results.dir}"/>

+                <j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">

+                    <customize>

+                        <customize2/>

+                        <jvmarg value="-ea"/>

+                        <arg line="${testng.debug.mode}"/>

+                        <arg line="-d ${build.test.results.dir}"/>

+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>

+                        <arg line="${testng.cmd.args}"/>

+                    </customize>

+                </j2seproject3:debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">

+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <element implicit="true" name="customize2" optional="true"/>

+            <sequential>

+                <j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">

+                    <customize2/>

+                </j2seproject3:testng-debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">

+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <sequential>

+                <j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize>

+                        <classpath>

+                            <path path="${run.test.classpath}"/>

+                        </classpath>

+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                        <jvmarg line="${run.jvmargs}"/>

+                        <jvmarg line="${run.jvmargs.ide}"/>

+                    </customize>

+                </j2seproject3:test-debug-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">

+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <sequential>

+                <j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">

+                    <customize2>

+                        <syspropertyset>

+                            <propertyref prefix="test-sys-prop."/>

+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                        </syspropertyset>

+                    </customize2>

+                </j2seproject3:testng-debug-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>

+    <!--

+                pre NB7.2 profiling section; consider it deprecated

+            -->

+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>

+    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">

+        <macrodef name="resolve">

+            <attribute name="name"/>

+            <attribute name="value"/>

+            <sequential>

+                <property name="@{name}" value="${env.@{value}}"/>

+            </sequential>

+        </macrodef>

+        <macrodef name="profile">

+            <attribute default="${main.class}" name="classname"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property environment="env"/>

+                <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>

+                <java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg value="${profiler.info.jvmargs.agent}"/>

+                    <jvmarg line="${profiler.info.jvmargs}"/>

+                    <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>

+                    <arg line="${application.args}"/>

+                    <classpath>

+                        <path path="${run.classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">

+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>

+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>

+    </target>

+    <!--

+                end of pre NB7.2 profiling section

+            -->

+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">

+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute default="${main.class}" name="name"/>

+            <attribute default="${debug.classpath}" name="classpath"/>

+            <attribute default="" name="stopclassname"/>

+            <sequential>

+                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                </nbjpdastart>

+            </sequential>

+        </macrodef>

+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute default="${build.classes.dir}" name="dir"/>

+            <sequential>

+                <nbjpdareload>

+                    <fileset dir="@{dir}" includes="${fix.classes}">

+                        <include name="${fix.includes}*.class"/>

+                    </fileset>

+                </nbjpdareload>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-debug-args">

+        <property name="version-output" value="java version &quot;${ant.java.version}"/>

+        <condition property="have-jdk-older-than-1.4">

+            <or>

+                <contains string="${version-output}" substring="java version &quot;1.0"/>

+                <contains string="${version-output}" substring="java version &quot;1.1"/>

+                <contains string="${version-output}" substring="java version &quot;1.2"/>

+                <contains string="${version-output}" substring="java version &quot;1.3"/>

+            </or>

+        </condition>

+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">

+            <istrue value="${have-jdk-older-than-1.4}"/>

+        </condition>

+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">

+            <os family="windows"/>

+        </condition>

+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">

+            <isset property="debug.transport"/>

+        </condition>

+    </target>

+    <target depends="-init-debug-args" name="-init-macrodef-debug">

+        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${main.class}" name="classname"/>

+            <attribute default="${debug.classpath}" name="classpath"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <java classname="@{classname}" dir="${work.dir}" fork="true">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>

+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>

+                    <jvmarg line="${run.jvmargs}"/>

+                    <jvmarg line="${run.jvmargs.ide}"/>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-java">

+        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute default="${main.class}" name="classname"/>

+            <attribute default="${run.classpath}" name="classpath"/>

+            <attribute default="jvm" name="jvm"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <java classname="@{classname}" dir="${work.dir}" fork="true">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>

+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>

+                    <jvmarg line="${run.jvmargs}"/>

+                    <jvmarg line="${run.jvmargs.ide}"/>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-copylibs">

+        <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${manifest.file}" name="manifest"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>

+                <pathconvert property="run.classpath.without.build.classes.dir">

+                    <path path="${run.classpath}"/>

+                    <map from="${build.classes.dir.resolved}" to=""/>

+                </pathconvert>

+                <pathconvert pathsep=" " property="jar.classpath">

+                    <path path="${run.classpath.without.build.classes.dir}"/>

+                    <chainedmapper>

+                        <flattenmapper/>

+                        <filtermapper>

+                            <replacestring from=" " to="%20"/>

+                        </filtermapper>

+                        <globmapper from="*" to="lib/*"/>

+                    </chainedmapper>

+                </pathconvert>

+                <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>

+                <copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">

+                    <fileset dir="${build.classes.dir}"/>

+                    <manifest>

+                        <attribute name="Class-Path" value="${jar.classpath}"/>

+                        <customize/>

+                    </manifest>

+                </copylibs>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-presetdef-jar">

+        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}">

+                <j2seproject1:fileset dir="${build.classes.dir}"/>

+            </jar>

+        </presetdef>

+    </target>

+    <target name="-init-ap-cmdline-properties">

+        <property name="annotation.processing.enabled" value="true"/>

+        <property name="annotation.processing.processors.list" value=""/>

+        <property name="annotation.processing.processor.options" value=""/>

+        <property name="annotation.processing.run.all.processors" value="true"/>

+        <property name="javac.processorpath" value="${javac.classpath}"/>

+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>

+        <condition property="ap.supported.internal" value="true">

+            <not>

+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>

+            </not>

+        </condition>

+    </target>

+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">

+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">

+            <isfalse value="${annotation.processing.run.all.processors}"/>

+        </condition>

+        <condition else="" property="ap.proc.none.internal" value="-proc:none">

+            <isfalse value="${annotation.processing.enabled}"/>

+        </condition>

+    </target>

+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">

+        <property name="ap.cmd.line.internal" value=""/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>

+    <!--

+                ===================

+                COMPILATION SECTION

+                ===================

+            -->

+    <target name="-deps-jar-init" unless="built-jar.properties">

+        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>

+        <delete file="${built-jar.properties}" quiet="true"/>

+    </target>

+    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">

+        <echo level="warn" message="Cycle detected: uddi-createbulk was already built"/>

+    </target>

+    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">

+        <mkdir dir="${build.dir}"/>

+        <touch file="${built-jar.properties}" verbose="false"/>

+        <property file="${built-jar.properties}" prefix="already.built.jar."/>

+        <antcall target="-warn-already-built-jar"/>

+        <propertyfile file="${built-jar.properties}">

+            <entry key="${basedir}" value=""/>

+        </propertyfile>

+    </target>

+    <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>

+    <target depends="init" name="-check-automatic-build">

+        <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>

+    </target>

+    <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">

+        <antcall target="clean"/>

+    </target>

+    <target depends="init,deps-jar" name="-pre-pre-compile">

+        <mkdir dir="${build.classes.dir}"/>

+    </target>

+    <target name="-pre-compile">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="do.depend.true" name="-compile-depend">

+        <pathconvert property="build.generated.subdirs">

+            <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="*"/>

+            </dirset>

+        </pathconvert>

+        <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>

+    </target>

+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">

+        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>

+        <copy todir="${build.classes.dir}">

+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target if="has.persistence.xml" name="-copy-persistence-xml">

+        <mkdir dir="${build.classes.dir}/META-INF"/>

+        <copy todir="${build.classes.dir}/META-INF">

+            <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>

+        </copy>

+    </target>

+    <target name="-post-compile">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>

+    <target name="-pre-compile-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">

+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>

+        <j2seproject3:force-recompile/>

+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>

+    </target>

+    <target name="-post-compile-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>

+    <!--

+                ====================

+                JAR BUILDING SECTION

+                ====================

+            -->

+    <target depends="init" name="-pre-pre-jar">

+        <dirname file="${dist.jar}" property="dist.jar.dir"/>

+        <mkdir dir="${dist.jar.dir}"/>

+    </target>

+    <target name="-pre-jar">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">

+        <j2seproject1:jar/>

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available">

+        <j2seproject1:jar manifest="${manifest.file}"/>

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">

+        <j2seproject1:jar manifest="${manifest.file}">

+            <j2seproject1:manifest>

+                <j2seproject1:attribute name="Main-Class" value="${main.class}"/>

+            </j2seproject1:manifest>

+        </j2seproject1:jar>

+        <echo level="info">To run this application from the command line without Ant, try:</echo>

+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>

+        <property location="${dist.jar}" name="dist.jar.resolved"/>

+        <pathconvert property="run.classpath.with.dist.jar">

+            <path path="${run.classpath}"/>

+            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>

+        </pathconvert>

+        <echo level="info">java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>

+    </target>

+    <target depends="init" if="do.archive" name="-do-jar-with-libraries-create-manifest" unless="manifest.available">

+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>

+        <touch file="${tmp.manifest.file}" verbose="false"/>

+    </target>

+    <target depends="init" if="do.archive+manifest.available" name="-do-jar-with-libraries-copy-manifest">

+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>

+        <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>

+    </target>

+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+main.class.available" name="-do-jar-with-libraries-set-main">

+        <manifest file="${tmp.manifest.file}" mode="update">

+            <attribute name="Main-Class" value="${main.class}"/>

+        </manifest>

+    </target>

+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-with-libraries-set-splashscreen">

+        <basename file="${application.splash}" property="splashscreen.basename"/>

+        <mkdir dir="${build.classes.dir}/META-INF"/>

+        <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>

+        <manifest file="${tmp.manifest.file}" mode="update">

+            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>

+        </manifest>

+    </target>

+    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen" if="do.mkdist" name="-do-jar-with-libraries-pack">

+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>

+        <echo level="info">To run this application from the command line without Ant, try:</echo>

+        <property location="${dist.jar}" name="dist.jar.resolved"/>

+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>

+    </target>

+    <target depends="-do-jar-with-libraries-pack" if="do.archive" name="-do-jar-with-libraries-delete-manifest">

+        <delete>

+            <fileset file="${tmp.manifest.file}"/>

+        </delete>

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen,-do-jar-with-libraries-pack,-do-jar-with-libraries-delete-manifest" name="-do-jar-with-libraries"/>

+    <target name="-post-jar">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR." name="jar"/>

+    <!--

+                =================

+                EXECUTION SECTION

+                =================

+            -->

+    <target depends="init,compile" description="Run a main class." name="run">

+        <j2seproject1:java>

+            <customize>

+                <arg line="${application.args}"/>

+            </customize>

+        </j2seproject1:java>

+    </target>

+    <target name="-do-not-recompile">

+        <property name="javac.includes.binary" value=""/>

+    </target>

+    <target depends="init,compile-single" name="run-single">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <j2seproject1:java classname="${run.class}"/>

+    </target>

+    <target depends="init,compile-test-single" name="run-test-with-main">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>

+    </target>

+    <!--

+                =================

+                DEBUGGING SECTION

+                =================

+            -->

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">

+        <j2seproject1:nbjpdastart name="${debug.class}"/>

+    </target>

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">

+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>

+    </target>

+    <target depends="init,compile" name="-debug-start-debuggee">

+        <j2seproject3:debug>

+            <customize>

+                <arg line="${application.args}"/>

+            </customize>

+        </j2seproject3:debug>

+    </target>

+    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">

+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>

+    </target>

+    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>

+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">

+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>

+        <j2seproject3:debug classname="${debug.class}"/>

+    </target>

+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>

+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">

+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>

+        <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>

+    </target>

+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>

+    <target depends="init" name="-pre-debug-fix">

+        <fail unless="fix.includes">Must set fix.includes</fail>

+        <property name="javac.includes" value="${fix.includes}.java"/>

+    </target>

+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">

+        <j2seproject1:nbjpdareload/>

+    </target>

+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>

+    <!--

+                =================

+                PROFILING SECTION

+                =================

+            -->

+    <!--

+                pre NB7.2 profiler integration

+            -->

+    <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <profile/>

+    </target>

+    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">

+        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <profile classname="${profile.class}"/>

+    </target>

+    <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <profile classname="sun.applet.AppletViewer">

+            <customize>

+                <arg value="${applet.url}"/>

+            </customize>

+        </profile>

+    </target>

+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.test.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">

+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>

+            <jvmarg value="${profiler.info.jvmargs.agent}"/>

+            <jvmarg line="${profiler.info.jvmargs}"/>

+            <test name="${profile.class}"/>

+            <classpath>

+                <path path="${run.test.classpath}"/>

+            </classpath>

+            <syspropertyset>

+                <propertyref prefix="test-sys-prop."/>

+                <mapper from="test-sys-prop.*" to="*" type="glob"/>

+            </syspropertyset>

+            <formatter type="brief" usefile="false"/>

+            <formatter type="xml"/>

+        </junit>

+    </target>

+    <!--

+                end of pre NB72 profiling section

+            -->

+    <target if="netbeans.home" name="-profile-check">

+        <condition property="profiler.configured">

+            <or>

+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>

+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>

+            </or>

+        </condition>

+    </target>

+    <target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">

+        <startprofiler/>

+        <antcall target="run"/>

+    </target>

+    <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <startprofiler/>

+        <antcall target="run-single"/>

+    </target>

+    <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>

+    <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">

+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>

+        <startprofiler/>

+        <antcall target="test-single"/>

+    </target>

+    <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <startprofiler/>

+        <antcal target="run-test-with-main"/>

+    </target>

+    <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">

+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>

+        <startprofiler/>

+        <antcall target="run-applet"/>

+    </target>

+    <!--

+                ===============

+                JAVADOC SECTION

+                ===============

+            -->

+    <target depends="init" if="have.sources" name="-javadoc-build">

+        <mkdir dir="${dist.javadoc.dir}"/>

+        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">

+            <and>

+                <isset property="endorsed.classpath.cmd.line.arg"/>

+                <not>

+                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>

+                </not>

+            </and>

+        </condition>

+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">

+            <classpath>

+                <path path="${javac.classpath}"/>

+            </classpath>

+            <fileset dir="${src.dir}" excludes="*.java,${excludes}" includes="${includes}">

+                <filename name="**/*.java"/>

+            </fileset>

+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="**/*.java"/>

+                <exclude name="*.java"/>

+            </fileset>

+            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>

+        </javadoc>

+        <copy todir="${dist.javadoc.dir}">

+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">

+                <filename name="**/doc-files/**"/>

+            </fileset>

+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="**/doc-files/**"/>

+            </fileset>

+        </copy>

+    </target>

+    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">

+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>

+    </target>

+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>

+    <!--

+                =========================

+                TEST COMPILATION SECTION

+                =========================

+            -->

+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">

+        <mkdir dir="${build.test.classes.dir}"/>

+    </target>

+    <target name="-pre-compile-test">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="do.depend.true" name="-compile-test-depend">

+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>

+    </target>

+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">

+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>

+        <copy todir="${build.test.classes.dir}">

+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target name="-post-compile-test">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>

+    <target name="-pre-compile-test-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">

+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>

+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>

+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>

+        <copy todir="${build.test.classes.dir}">

+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target name="-post-compile-test-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>

+    <!--

+                =======================

+                TEST EXECUTION SECTION

+                =======================

+            -->

+    <target depends="init" if="have.tests" name="-pre-test-run">

+        <mkdir dir="${build.test.results.dir}"/>

+    </target>

+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">

+        <j2seproject3:test testincludes="**/*Test.java"/>

+    </target>

+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init" if="have.tests" name="test-report"/>

+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>

+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>

+    <target depends="init" if="have.tests" name="-pre-test-run-single">

+        <mkdir dir="${build.test.results.dir}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">

+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>

+        <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">

+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>

+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>

+        <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>

+    <!--

+                =======================

+                TEST DEBUGGING SECTION

+                =======================

+            -->

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">

+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>

+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">

+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>

+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>

+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>

+    </target>

+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">

+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>

+    </target>

+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>

+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>

+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">

+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>

+    </target>

+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>

+    <!--

+                =========================

+                APPLET EXECUTION SECTION

+                =========================

+            -->

+    <target depends="init,compile-single" name="run-applet">

+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>

+        <j2seproject1:java classname="sun.applet.AppletViewer">

+            <customize>

+                <arg value="${applet.url}"/>

+            </customize>

+        </j2seproject1:java>

+    </target>

+    <!--

+                =========================

+                APPLET DEBUGGING  SECTION

+                =========================

+            -->

+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">

+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>

+        <j2seproject3:debug classname="sun.applet.AppletViewer">

+            <customize>

+                <arg value="${applet.url}"/>

+            </customize>

+        </j2seproject3:debug>

+    </target>

+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>

+    <!--

+                ===============

+                CLEANUP SECTION

+                ===============

+            -->

+    <target name="-deps-clean-init" unless="built-clean.properties">

+        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>

+        <delete file="${built-clean.properties}" quiet="true"/>

+    </target>

+    <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">

+        <echo level="warn" message="Cycle detected: uddi-createbulk was already built"/>

+    </target>

+    <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">

+        <mkdir dir="${build.dir}"/>

+        <touch file="${built-clean.properties}" verbose="false"/>

+        <property file="${built-clean.properties}" prefix="already.built.clean."/>

+        <antcall target="-warn-already-built-clean"/>

+        <propertyfile file="${built-clean.properties}">

+            <entry key="${basedir}" value=""/>

+        </propertyfile>

+    </target>

+    <target depends="init" name="-do-clean">

+        <delete dir="${build.dir}"/>

+        <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>

+    </target>

+    <target name="-post-clean">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>

+    <target name="-check-call-dep">

+        <property file="${call.built.properties}" prefix="already.built."/>

+        <condition property="should.call.dep">

+            <and>

+                <not>

+                    <isset property="already.built.${call.subproject}"/>

+                </not>

+                <available file="${call.script}"/>

+            </and>

+        </condition>

+    </target>

+    <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">

+        <ant antfile="${call.script}" inheritall="false" target="${call.target}">

+            <propertyset>

+                <propertyref prefix="transfer."/>

+                <mapper from="transfer.*" to="*" type="glob"/>

+            </propertyset>

+        </ant>

+    </target>

+</project>

diff --git a/juddi-examples/uddi-createbulk/nbproject/genfiles.properties b/juddi-examples/uddi-createbulk/nbproject/genfiles.properties
new file mode 100644
index 0000000..6f905f9
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=fdfb36ae

+build.xml.script.CRC32=936143e3

+build.xml.stylesheet.CRC32=28e38971@1.53.1.46

+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.

+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.

+nbproject/build-impl.xml.data.CRC32=fdfb36ae

+nbproject/build-impl.xml.script.CRC32=c19c1efd

+nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.56.1.46

diff --git a/juddi-examples/uddi-createbulk/nbproject/project.properties b/juddi-examples/uddi-createbulk/nbproject/project.properties
new file mode 100644
index 0000000..74130fc
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/nbproject/project.properties
@@ -0,0 +1,250 @@
+annotation.processing.enabled=true

+annotation.processing.enabled.in.editor=false

+annotation.processing.processors.list=

+annotation.processing.run.all.processors=true

+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output

+application.title=uddi-createbulk

+application.vendor=ASF

+build.classes.dir=${build.dir}/classes

+build.classes.excludes=**/*.java,**/*.form

+# This directory is removed when the project is cleaned:

+build.dir=build

+build.generated.dir=${build.dir}/generated

+build.generated.sources.dir=${build.dir}/generated-sources

+# Only compile against the classpath explicitly listed here:

+build.sysclasspath=ignore

+build.test.classes.dir=${build.dir}/test/classes

+build.test.results.dir=${build.dir}/test/results

+# Uncomment to specify the preferred debugger connection transport:

+#debug.transport=dt_socket

+debug.classpath=\

+    ${run.classpath}

+debug.test.classpath=\

+    ${run.test.classpath}

+# This directory is removed when the project is cleaned:

+dist.dir=dist

+dist.jar=${dist.dir}/uddi-createbulk.jar

+dist.javadoc.dir=${dist.dir}/javadoc

+endorsed.classpath=

+excludes=

+file.reference.antlr-2.7.7.jar=lib\\antlr-2.7.7.jar

+file.reference.aopalliance-1.0.jar=lib\\aopalliance-1.0.jar

+file.reference.asm-3.3.1.jar=lib\\asm-3.3.1.jar

+file.reference.commons-beanutils-1.7.0.jar=C:\\juddi\\branch\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-beanutils-1.7.0.jar

+file.reference.commons-beanutils-core-1.8.0.jar=C:\\juddi\\branch\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-beanutils-core-1.8.0.jar

+file.reference.commons-codec-1.3.jar=C:\\juddi\\branch\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-codec-1.3.jar

+file.reference.commons-codec-1.7.jar=lib\\commons-codec-1.7.jar

+file.reference.commons-collections-3.2.1.jar=C:\\juddi\\branch\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-collections-3.2.1.jar

+file.reference.commons-collections-3.2.1.jar-1=lib\\commons-collections-3.2.1.jar

+file.reference.commons-configuration-1.6.jar=C:\\juddi\\branch\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-configuration-1.6.jar

+file.reference.commons-digester-1.8.jar=C:\\juddi\\branch\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-digester-1.8.jar

+file.reference.commons-lang-2.4.jar=C:\\juddi\\branch\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-lang-2.4.jar

+file.reference.commons-lang-2.6.jar=lib\\commons-lang-2.6.jar

+file.reference.commons-logging-1.1.1.jar=lib\\commons-logging-1.1.1.jar

+file.reference.commons-logging-api-1.1.jar=C:\\juddi\\branch\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-logging-api-1.1.jar

+file.reference.cxf-2.7.4.jar=lib\\cxf-2.7.4.jar

+file.reference.cxf-manifest.jar=lib\\cxf-manifest.jar

+file.reference.cxf-services-sts-core-2.7.4.jar=lib\\cxf-services-sts-core-2.7.4.jar

+file.reference.cxf-services-ws-discovery-api-2.7.4.jar=lib\\cxf-services-ws-discovery-api-2.7.4.jar

+file.reference.cxf-services-ws-discovery-service-2.7.4.jar=lib\\cxf-services-ws-discovery-service-2.7.4.jar

+file.reference.cxf-services-wsn-api-2.7.4.jar=lib\\cxf-services-wsn-api-2.7.4.jar

+file.reference.cxf-services-wsn-core-2.7.4.jar=lib\\cxf-services-wsn-core-2.7.4.jar

+file.reference.cxf-xjc-boolean-2.6.1.jar=lib\\cxf-xjc-boolean-2.6.1.jar

+file.reference.cxf-xjc-bug671-2.6.1.jar=lib\\cxf-xjc-bug671-2.6.1.jar

+file.reference.cxf-xjc-dv-2.6.1.jar=lib\\cxf-xjc-dv-2.6.1.jar

+file.reference.cxf-xjc-runtime-2.6.1.jar=lib\\cxf-xjc-runtime-2.6.1.jar

+file.reference.cxf-xjc-ts-2.6.1.jar=lib\\cxf-xjc-ts-2.6.1.jar

+file.reference.ehcache-core-2.5.1.jar=lib\\ehcache-core-2.5.1.jar

+file.reference.FastInfoset-1.2.12.jar=lib\\FastInfoset-1.2.12.jar

+file.reference.geronimo-javamail_1.4_spec-1.7.1.jar=lib\\geronimo-javamail_1.4_spec-1.7.1.jar

+file.reference.geronimo-jaxws_2.2_spec-1.1.jar=lib\\geronimo-jaxws_2.2_spec-1.1.jar

+file.reference.geronimo-jms_1.1_spec-1.1.1.jar=lib\\geronimo-jms_1.1_spec-1.1.1.jar

+file.reference.geronimo-servlet_3.0_spec-1.0.jar=lib\\geronimo-servlet_3.0_spec-1.0.jar

+file.reference.httpasyncclient-4.0-beta3.jar=lib\\httpasyncclient-4.0-beta3.jar

+file.reference.httpclient-4.2.1.jar=lib\\httpclient-4.2.1.jar

+file.reference.httpcore-4.2.2.jar=lib\\httpcore-4.2.2.jar

+file.reference.httpcore-nio-4.2.2.jar=lib\\httpcore-nio-4.2.2.jar

+file.reference.isorelax-20030108.jar=lib\\isorelax-20030108.jar

+file.reference.javax.ws.rs-api-2.0-m10.jar=lib\\javax.ws.rs-api-2.0-m10.jar

+file.reference.jaxb-api-2.2.6.jar=lib\\jaxb-api-2.2.6.jar

+file.reference.jaxb-impl-2.2.6.jar=lib\\jaxb-impl-2.2.6.jar

+file.reference.jaxb-xjc-2.2.6.jar=lib\\jaxb-xjc-2.2.6.jar

+file.reference.jettison-1.3.3.jar=lib\\jettison-1.3.3.jar

+file.reference.jetty-continuation-8.1.7.v20120910.jar=lib\\jetty-continuation-8.1.7.v20120910.jar

+file.reference.jetty-http-8.1.7.v20120910.jar=lib\\jetty-http-8.1.7.v20120910.jar

+file.reference.jetty-io-8.1.7.v20120910.jar=lib\\jetty-io-8.1.7.v20120910.jar

+file.reference.jetty-security-8.1.7.v20120910.jar=lib\\jetty-security-8.1.7.v20120910.jar

+file.reference.jetty-server-8.1.7.v20120910.jar=lib\\jetty-server-8.1.7.v20120910.jar

+file.reference.jetty-util-8.1.7.v20120910.jar=lib\\jetty-util-8.1.7.v20120910.jar

+file.reference.joda-time-1.6.2.jar=lib\\joda-time-1.6.2.jar

+file.reference.js-1.7R2.jar=lib\\js-1.7R2.jar

+file.reference.juddi-client-3.1.5-SNAPSHOT.jar-1=C:\\juddi\\branch\\juddi-client\\target\\juddi-client-3.1.5-SNAPSHOT.jar

+file.reference.mina-core-2.0.5.jar=lib\\mina-core-2.0.5.jar

+file.reference.msv-core-2011.1.jar=lib\\msv-core-2011.1.jar

+file.reference.neethi-3.0.2.jar=lib\\neethi-3.0.2.jar

+file.reference.oauth-20100527.jar=lib\\oauth-20100527.jar

+file.reference.oauth-provider-20100527.jar=lib\\oauth-provider-20100527.jar

+file.reference.opensaml-2.5.1-1.jar=lib\\opensaml-2.5.1-1.jar

+file.reference.openws-1.4.2-1.jar=lib\\openws-1.4.2-1.jar

+file.reference.relaxngDatatype-20020414.jar=lib\\relaxngDatatype-20020414.jar

+file.reference.slf4j-api-1.7.5.jar=lib\\slf4j-api-1.7.5.jar

+file.reference.slf4j-jdk14-1.7.5.jar=lib\\slf4j-jdk14-1.7.5.jar

+file.reference.spring-aop-3.0.7.RELEASE.jar=lib\\spring-aop-3.0.7.RELEASE.jar

+file.reference.spring-asm-3.0.7.RELEASE.jar=lib\\spring-asm-3.0.7.RELEASE.jar

+file.reference.spring-beans-3.0.7.RELEASE.jar=lib\\spring-beans-3.0.7.RELEASE.jar

+file.reference.spring-context-3.0.7.RELEASE.jar=lib\\spring-context-3.0.7.RELEASE.jar

+file.reference.spring-core-3.0.7.RELEASE.jar=lib\\spring-core-3.0.7.RELEASE.jar

+file.reference.spring-expression-3.0.7.RELEASE.jar=lib\\spring-expression-3.0.7.RELEASE.jar

+file.reference.spring-jms-3.0.7.RELEASE.jar=lib\\spring-jms-3.0.7.RELEASE.jar

+file.reference.spring-tx-3.0.7.RELEASE.jar=lib\\spring-tx-3.0.7.RELEASE.jar

+file.reference.spring-web-3.0.7.RELEASE.jar=lib\\spring-web-3.0.7.RELEASE.jar

+file.reference.stax2-api-3.1.1.jar=lib\\stax2-api-3.1.1.jar

+file.reference.uddi-ws-3.1.5-SNAPSHOT.jar=C:\\juddi\\branch\\uddi-ws\\target\\uddi-ws-3.1.5-SNAPSHOT.jar

+file.reference.velocity-1.7.jar=lib\\velocity-1.7.jar

+file.reference.woodstox-core-asl-4.2.0.jar=lib\\woodstox-core-asl-4.2.0.jar

+file.reference.wsdl4j-1.6.3.jar=lib\\wsdl4j-1.6.3.jar

+file.reference.wss4j-1.6.10.jar=lib\\wss4j-1.6.10.jar

+file.reference.xml-resolver-1.2.jar=lib\\xml-resolver-1.2.jar

+file.reference.xmlbeans-2.6.0.jar=lib\\xmlbeans-2.6.0.jar

+file.reference.xmlschema-core-2.0.3.jar=lib\\xmlschema-core-2.0.3.jar

+file.reference.xmlsec-1.5.4.jar=lib\\xmlsec-1.5.4.jar

+file.reference.xmltooling-1.3.2-1.jar=lib\\xmltooling-1.3.2-1.jar

+file.reference.xsdlib-2010.1.jar=lib\\xsdlib-2010.1.jar

+includes=**

+jar.archive.disabled=${jnlp.enabled}

+jar.compress=false

+jar.index=${jnlp.enabled}

+javac.classpath=\

+    ${file.reference.commons-beanutils-1.7.0.jar}:\

+    ${file.reference.commons-beanutils-core-1.8.0.jar}:\

+    ${file.reference.commons-codec-1.3.jar}:\

+    ${file.reference.commons-collections-3.2.1.jar}:\

+    ${file.reference.commons-configuration-1.6.jar}:\

+    ${file.reference.commons-digester-1.8.jar}:\

+    ${file.reference.commons-lang-2.4.jar}:\

+    ${file.reference.commons-logging-api-1.1.jar}:\

+    ${file.reference.juddi-client-3.1.5-SNAPSHOT.jar-1}:\

+    ${file.reference.uddi-ws-3.1.5-SNAPSHOT.jar}:\

+    ${file.reference.antlr-2.7.7.jar}:\

+    ${file.reference.aopalliance-1.0.jar}:\

+    ${file.reference.asm-3.3.1.jar}:\

+    ${file.reference.commons-codec-1.7.jar}:\

+    ${file.reference.commons-collections-3.2.1.jar-1}:\

+    ${file.reference.commons-lang-2.6.jar}:\

+    ${file.reference.commons-logging-1.1.1.jar}:\

+    ${file.reference.cxf-2.7.4.jar}:\

+    ${file.reference.cxf-manifest.jar}:\

+    ${file.reference.cxf-services-sts-core-2.7.4.jar}:\

+    ${file.reference.cxf-services-ws-discovery-api-2.7.4.jar}:\

+    ${file.reference.cxf-services-ws-discovery-service-2.7.4.jar}:\

+    ${file.reference.cxf-services-wsn-api-2.7.4.jar}:\

+    ${file.reference.cxf-services-wsn-core-2.7.4.jar}:\

+    ${file.reference.cxf-xjc-boolean-2.6.1.jar}:\

+    ${file.reference.cxf-xjc-bug671-2.6.1.jar}:\

+    ${file.reference.cxf-xjc-dv-2.6.1.jar}:\

+    ${file.reference.cxf-xjc-runtime-2.6.1.jar}:\

+    ${file.reference.cxf-xjc-ts-2.6.1.jar}:\

+    ${file.reference.ehcache-core-2.5.1.jar}:\

+    ${file.reference.FastInfoset-1.2.12.jar}:\

+    ${file.reference.geronimo-javamail_1.4_spec-1.7.1.jar}:\

+    ${file.reference.geronimo-jaxws_2.2_spec-1.1.jar}:\

+    ${file.reference.geronimo-jms_1.1_spec-1.1.1.jar}:\

+    ${file.reference.geronimo-servlet_3.0_spec-1.0.jar}:\

+    ${file.reference.httpasyncclient-4.0-beta3.jar}:\

+    ${file.reference.httpclient-4.2.1.jar}:\

+    ${file.reference.httpcore-4.2.2.jar}:\

+    ${file.reference.httpcore-nio-4.2.2.jar}:\

+    ${file.reference.isorelax-20030108.jar}:\

+    ${file.reference.javax.ws.rs-api-2.0-m10.jar}:\

+    ${file.reference.jaxb-api-2.2.6.jar}:\

+    ${file.reference.jaxb-impl-2.2.6.jar}:\

+    ${file.reference.jaxb-xjc-2.2.6.jar}:\

+    ${file.reference.jettison-1.3.3.jar}:\

+    ${file.reference.jetty-continuation-8.1.7.v20120910.jar}:\

+    ${file.reference.jetty-http-8.1.7.v20120910.jar}:\

+    ${file.reference.jetty-io-8.1.7.v20120910.jar}:\

+    ${file.reference.jetty-security-8.1.7.v20120910.jar}:\

+    ${file.reference.jetty-server-8.1.7.v20120910.jar}:\

+    ${file.reference.jetty-util-8.1.7.v20120910.jar}:\

+    ${file.reference.joda-time-1.6.2.jar}:\

+    ${file.reference.js-1.7R2.jar}:\

+    ${file.reference.mina-core-2.0.5.jar}:\

+    ${file.reference.msv-core-2011.1.jar}:\

+    ${file.reference.neethi-3.0.2.jar}:\

+    ${file.reference.oauth-20100527.jar}:\

+    ${file.reference.oauth-provider-20100527.jar}:\

+    ${file.reference.opensaml-2.5.1-1.jar}:\

+    ${file.reference.openws-1.4.2-1.jar}:\

+    ${file.reference.relaxngDatatype-20020414.jar}:\

+    ${file.reference.slf4j-api-1.7.5.jar}:\

+    ${file.reference.slf4j-jdk14-1.7.5.jar}:\

+    ${file.reference.spring-aop-3.0.7.RELEASE.jar}:\

+    ${file.reference.spring-asm-3.0.7.RELEASE.jar}:\

+    ${file.reference.spring-beans-3.0.7.RELEASE.jar}:\

+    ${file.reference.spring-context-3.0.7.RELEASE.jar}:\

+    ${file.reference.spring-core-3.0.7.RELEASE.jar}:\

+    ${file.reference.spring-expression-3.0.7.RELEASE.jar}:\

+    ${file.reference.spring-jms-3.0.7.RELEASE.jar}:\

+    ${file.reference.spring-tx-3.0.7.RELEASE.jar}:\

+    ${file.reference.spring-web-3.0.7.RELEASE.jar}:\

+    ${file.reference.stax2-api-3.1.1.jar}:\

+    ${file.reference.velocity-1.7.jar}:\

+    ${file.reference.woodstox-core-asl-4.2.0.jar}:\

+    ${file.reference.wsdl4j-1.6.3.jar}:\

+    ${file.reference.wss4j-1.6.10.jar}:\

+    ${file.reference.xml-resolver-1.2.jar}:\

+    ${file.reference.xmlbeans-2.6.0.jar}:\

+    ${file.reference.xmlschema-core-2.0.3.jar}:\

+    ${file.reference.xmlsec-1.5.4.jar}:\

+    ${file.reference.xmltooling-1.3.2-1.jar}:\

+    ${file.reference.xsdlib-2010.1.jar}

+# Space-separated list of extra javac options

+javac.compilerargs=

+javac.deprecation=false

+javac.processorpath=\

+    ${javac.classpath}

+javac.source=1.6

+javac.target=1.6

+javac.test.classpath=\

+    ${javac.classpath}:\

+    ${build.classes.dir}

+javac.test.processorpath=\

+    ${javac.test.classpath}

+javadoc.additionalparam=

+javadoc.author=false

+javadoc.encoding=${source.encoding}

+javadoc.noindex=false

+javadoc.nonavbar=false

+javadoc.notree=false

+javadoc.private=false

+javadoc.splitindex=true

+javadoc.use=true

+javadoc.version=false

+javadoc.windowtitle=

+jnlp.codebase.type=no.codebase

+jnlp.descriptor=application

+jnlp.enabled=false

+jnlp.mixed.code=default

+jnlp.offline-allowed=false

+jnlp.signed=false

+jnlp.signing=

+jnlp.signing.alias=

+jnlp.signing.keystore=

+main.class=uddi.createbulk.UddiCreatebulk

+manifest.file=manifest.mf

+meta.inf.dir=${src.dir}/META-INF

+mkdist.disabled=false

+platform.active=default_platform

+run.classpath=\

+    ${javac.classpath}:\

+    ${build.classes.dir}

+# Space-separated list of JVM arguments used when running the project.

+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.

+# To set system properties for unit tests define test-sys-prop.name=value:

+run.jvmargs=

+run.test.classpath=\

+    ${javac.test.classpath}:\

+    ${build.test.classes.dir}

+source.encoding=UTF-8

+src.dir=src

+test.src.dir=test

diff --git a/juddi-examples/uddi-createbulk/nbproject/project.xml b/juddi-examples/uddi-createbulk/nbproject/project.xml
new file mode 100644
index 0000000..597ee5c
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/nbproject/project.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<project xmlns="http://www.netbeans.org/ns/project/1">

+    <type>org.netbeans.modules.java.j2seproject</type>

+    <configuration>

+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">

+            <name>uddi-createbulk</name>

+            <source-roots>

+                <root id="src.dir"/>

+            </source-roots>

+            <test-roots>

+                <root id="test.src.dir"/>

+            </test-roots>

+        </data>

+    </configuration>

+</project>

diff --git a/juddi-examples/uddi-createbulk/readme.txt b/juddi-examples/uddi-createbulk/readme.txt
new file mode 100644
index 0000000..e989185
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/readme.txt
@@ -0,0 +1,18 @@
+UDDI-Bulk Creator
+
+This project has a wide variety of sample projects. Here's a rough outline of what's available.
+requires the Apache CXF Runtime, uddi-ws and juddi-client
+
+ant jar
+java -cp dist/*;dist/lib/* uddi.createbulk.<class goes here>
+
+UddiCreatebulk - makes 15 businesses, 5 services each
+UddiCustodyTransfer - an example of how to transfer a business intra-node
+UddiDigitalSignatureBusiness - how to sign a business entity and all child elements and validate it
+UddiDigitalSignatureSearch - how to search for all signed items
+UddiDigitalSignatureService
+UddiDigitalSignatureTmodel
+UddiFindBidning
+UddiRelatedBusinesses - creates two businesses and sets up a relationship between the two (publisher assertion)
+UddiSubscribe - how to setup a Subscription Callback API service. Requires Apache CXF + Jetty libraries
+UddiSubscribeValidate - how to setup a subscription for manual pulls
diff --git a/juddi-examples/uddi-createbulk/src/META-INF/simple-publish-uddi.xml b/juddi-examples/uddi-createbulk/src/META-INF/simple-publish-uddi.xml
new file mode 100644
index 0000000..a53a558
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/META-INF/simple-publish-uddi.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<uddi>
+    <reloadDelay>5000</reloadDelay>
+    <manager name="example-manager">
+        <nodes>
+            <node>
+                <!-- required 'default' node -->
+                <name>default</name> 
+                <properties>
+                    <property name="serverName" value="localhost"/>
+                    <property name="serverPort" value="8080"/>
+                </properties>
+                <description>Main jUDDI node</description>
+                <!-- JAX-WS Transport -->
+                <proxyTransport>org.apache.juddi.v3.client.transport.JAXWSTransport</proxyTransport>
+                <custodyTransferUrl>http://${serverName}:${serverPort}/juddiv3/services/custody-transfer</custodyTransferUrl>
+                <inquiryUrl>http://${serverName}:${serverPort}/juddiv3/services/inquiry</inquiryUrl>
+                <publishUrl>http://${serverName}:${serverPort}/juddiv3/services/publish</publishUrl>
+                <securityUrl>http://${serverName}:${serverPort}/juddiv3/services/security</securityUrl>
+                <subscriptionUrl>http://${serverName}:${serverPort}/juddiv3/services/subscription</subscriptionUrl>
+                <subscriptionListenerUrl>http://${serverName}:${serverPort}/juddiv3/services/subscription-listener</subscriptionListenerUrl>
+                <juddiApiUrl>http://${serverName}:${serverPort}/juddiv3/services/juddi-api</juddiApiUrl>
+            </node>
+        </nodes>
+    </manager>
+</uddi>
diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/ClientSubscriptionCallback.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/ClientSubscriptionCallback.java
new file mode 100644
index 0000000..862a90e
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/ClientSubscriptionCallback.java
@@ -0,0 +1,42 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package uddi.createbulk;
+
+import java.rmi.RemoteException;
+import javax.jws.WebService;
+import javax.xml.bind.annotation.XmlSchemaTypes;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import org.uddi.api_v3.DispositionReport;
+import org.uddi.api_v3.ErrInfo;
+import org.uddi.api_v3.Result;
+import org.uddi.subr_v3.NotifySubscriptionListener;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+
+/**
+ *
+ * @author Alex O'Ree
+ */
+@WebService(serviceName="UDDISubscriptionListenerService", 
+			endpointInterface="org.uddi.v3_service.UDDISubscriptionListenerPortType",
+			targetNamespace = "urn:uddi-org:v3_service")
+@XmlSeeAlso({org.uddi.subr_v3.NotifySubscriptionListener.class,DispositionReportFaultMessage.class, DispositionReport.class})
+public class ClientSubscriptionCallback implements org.uddi.v3_service.UDDISubscriptionListenerPortType{
+    
+    UddiSubscribe ref=null;
+    public ClientSubscriptionCallback(UddiSubscribe callback){
+        ref = callback;
+    }
+    Object j;
+    @Override
+    public DispositionReport notifySubscriptionListener(NotifySubscriptionListener nl) throws DispositionReportFaultMessage, RemoteException {
+        DispositionReport r = new DispositionReport();
+        System.out.println("call back recieved.");
+        System.out.println(org.apache.juddi.jaxb.JAXBMarshaller.marshallToString(nl, org.apache.juddi.jaxb.JAXBMarshaller.PACKAGE_SUBSCR_RES));
+        ref.callbackRecieved=true;
+        return r;
+    }
+
+}
diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiCreatebulk.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiCreatebulk.java
new file mode 100644
index 0000000..3a6cb6e
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiCreatebulk.java
@@ -0,0 +1,186 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.GregorianCalendar;

+import javax.xml.datatype.DatatypeFactory;

+import javax.xml.datatype.XMLGregorianCalendar;

+import org.apache.juddi.api_v3.AccessPointType;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.apache.juddi.v3_service.JUDDIApiPortType;

+import org.uddi.api_v3.*;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+

+/**

+ *

+ * @author Alex

+ */

+public class UddiCreatebulk {

+

+    private static UDDISecurityPortType security = null;

+    private static JUDDIApiPortType juddiApi = null;

+    private static UDDIPublicationPortType publish = null;

+

+    public UddiCreatebulk() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            juddiApi = transport.getJUDDIApiService();

+            publish = transport.getUDDIPublishService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public void publish() {

+        try {

+            // Setting up the values to get an authentication token for the 'root' user ('root' user has admin privileges

+            // and can save other publishers).

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("root");

+            getAuthTokenRoot.setCred("root");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+            int servicesPerBusiness = 5;

+            int businesses = 15;

+

+            DatatypeFactory df = DatatypeFactory.newInstance();

+            GregorianCalendar gcal = new GregorianCalendar();

+            gcal.setTimeInMillis(System.currentTimeMillis());

+            XMLGregorianCalendar xcal = df.newXMLGregorianCalendar(gcal);

+            for (int i = 0; i < businesses; i++) {

+                // Creating the parent business entity that will contain our service.

+                BusinessEntity myBusEntity = new BusinessEntity();

+                Name myBusName = new Name();

+                myBusName.setLang("en");

+                myBusName.setValue("My Business " + i + " " + xcal.toString());

+                myBusEntity.getName().add(myBusName);

+

+                // Adding the business entity to the "save" structure, using our publisher's authentication info and saving away.

+                SaveBusiness sb = new SaveBusiness();

+                sb.getBusinessEntity().add(myBusEntity);

+                sb.setAuthInfo(rootAuthToken.getAuthInfo());

+                BusinessDetail bd = publish.saveBusiness(sb);

+                String myBusKey = bd.getBusinessEntity().get(0).getBusinessKey();

+                System.out.println("myBusiness key:  " + myBusKey);

+                for (int k = 0; k < servicesPerBusiness; k++) {

+                    // Creating a service to save.  Only adding the minimum data: the parent business key retrieved from saving the business 

+                    // above and a single name.

+                    BusinessService myService = new BusinessService();

+                    myService.setBusinessKey(myBusKey);

+                    Name myServName = new Name();

+                    myServName.setLang("en");

+                    myServName.setValue("My Service " + i + " " + k + " " + xcal.toString());

+                    myService.getName().add(myServName);

+                    Description d2 = new Description();

+                    d2.setValue("my service description");

+                    d2.setLang("en");

+                    myService.getDescription().add(d2);

+                    // Add binding templates, etc...

+                    BindingTemplate myBindingTemplate = new BindingTemplate();

+                    myBindingTemplate.setCategoryBag(new CategoryBag());

+                    KeyedReference kr = new KeyedReference();

+                    kr.setTModelKey(UDDIConstants.TRANSPORT_HTTP);

+                    kr.setKeyName("keyname1");

+                    kr.setKeyValue("myvalue1");

+

+                    myBindingTemplate.getCategoryBag().getKeyedReference().add(kr);

+

+                    KeyedReferenceGroup krg = new KeyedReferenceGroup();

+                    krg.setTModelKey(UDDIConstants.TRANSPORT_HTTP);

+                    kr = new KeyedReference();

+                    kr.setTModelKey(UDDIConstants.PROTOCOL_SSLv3);

+                    kr.setKeyName("keyname1grp");

+                    kr.setKeyValue("myvalue1grp");

+

+                    krg.getKeyedReference().add(kr);

+                    myBindingTemplate.getCategoryBag().getKeyedReferenceGroup().add(krg);

+

+

+                    myService.setCategoryBag(new CategoryBag());

+

+                    kr = new KeyedReference();

+                    kr.setTModelKey(UDDIConstants.TRANSPORT_HTTP);

+                    kr.setKeyName("Servicekeyname2grp");

+                    kr.setKeyValue("Servicemyvalue2grp");

+                    myService.getCategoryBag().getKeyedReference().add(kr);

+

+                    krg = new KeyedReferenceGroup();

+                    krg.setTModelKey(UDDIConstants.TRANSPORT_HTTP);

+                    kr = new KeyedReference();

+                    kr.setTModelKey(UDDIConstants.TRANSPORT_HTTP);

+                    kr.setKeyName("keyname1grp");

+                    kr.setKeyValue("myvalue1grp");

+

+                    krg.getKeyedReference().add(kr);

+                    myService.getCategoryBag().getKeyedReferenceGroup().add(krg);

+

+                    AccessPoint accessPoint = new AccessPoint();

+                    accessPoint.setUseType(AccessPointType.WSDL_DEPLOYMENT.toString());

+                    accessPoint.setValue("http://example.org/services/myservice" + i + k + "?wsdl");

+                    myBindingTemplate.setAccessPoint(accessPoint);

+                    myBindingTemplate.setTModelInstanceDetails(new TModelInstanceDetails());

+                    TModelInstanceInfo tii = new TModelInstanceInfo();

+                    Description d = new Description();

+                    d.setValue("Tmodel instance description");

+                    tii.getDescription().add(d);

+                    tii.setTModelKey(UDDIConstants.TRANSPORT_HTTP);

+                    tii.setInstanceDetails(new InstanceDetails());

+                    tii.getInstanceDetails().setInstanceParms("heres some useful stuff describing this endpoint, up to 4KB of data");

+                    tii.getInstanceDetails().getDescription().add(d);

+                    OverviewDoc od = new OverviewDoc();

+                    d = new Description();

+                    d.setValue("ovweview doc description");

+                    od.getDescription().add(d);

+                    od.setOverviewURL(new OverviewURL());

+                    od.getOverviewURL().setUseType("www");

+                    od.getOverviewURL().setValue("www.apache.org");

+                    tii.getInstanceDetails().getOverviewDoc().add(od);

+                    myBindingTemplate.getTModelInstanceDetails().getTModelInstanceInfo().add(tii);

+

+

+                    BindingTemplates myBindingTemplates = new BindingTemplates();

+                    myBindingTemplates.getBindingTemplate().add(myBindingTemplate);

+                    myService.setBindingTemplates(myBindingTemplates);

+                    try {

+                        // Adding the service to the "save" structure, using our publisher's authentication info and saving away.

+                        SaveService ss = new SaveService();

+                        ss.getBusinessService().add(myService);

+                        ss.setAuthInfo(rootAuthToken.getAuthInfo());

+                        ServiceDetail sd = publish.saveService(ss);

+                        String myServKey = sd.getBusinessService().get(0).getServiceKey();

+                        System.out.println("myService key:  " + myServKey);

+                    } catch (Exception x) {

+                        x.printStackTrace();

+                    }

+                }

+                // Now you have a publisher saved who in turn published a business and service via 

+                // the jUDDI API!

+            }

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public static void main(String args[]) {

+        UddiCreatebulk sp = new UddiCreatebulk();

+        sp.publish();

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiCustodyTransfer.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiCustodyTransfer.java
new file mode 100644
index 0000000..11a4234
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiCustodyTransfer.java
@@ -0,0 +1,289 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.ArrayList;

+import java.util.GregorianCalendar;

+import java.util.List;

+import javax.xml.datatype.DatatypeFactory;

+import javax.xml.datatype.XMLGregorianCalendar;

+import javax.xml.ws.Endpoint;

+import javax.xml.ws.Holder;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClient;

+

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.apache.juddi.v3_service.JUDDIApiPortType;

+import org.uddi.api_v3.*;

+import org.uddi.sub_v3.DeleteSubscription;

+import org.uddi.sub_v3.Subscription;

+import org.uddi.sub_v3.SubscriptionFilter;

+import org.uddi.v3_service.UDDICustodyTransferPortType;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+import org.uddi.v3_service.UDDISubscriptionPortType;

+

+/**

+ *

+ * @author Alex

+ */

+public class UddiCustodyTransfer {

+

+    private static UDDISecurityPortType security = null;

+    private static JUDDIApiPortType juddiApi = null;

+    private static UDDIPublicationPortType publish = null;

+    private static UDDIInquiryPortType uddiInquiryService = null;

+    private static UDDISubscriptionPortType uddiSubscriptionService = null;

+    private static UDDICustodyTransferPortType custodyTransferPortTypeSOURCE = null;

+    private static UDDICustodyTransferPortType custodyTransferPortTypeDEST = null;

+    boolean callbackRecieved = false;

+

+    public UddiCustodyTransfer() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            juddiApi = transport.getJUDDIApiService();

+            publish = transport.getUDDIPublishService();

+            uddiInquiryService = transport.getUDDIInquiryService();

+            uddiSubscriptionService = transport.getUDDISubscriptionService();

+            custodyTransferPortTypeSOURCE = transport.getUDDICustodyTransferService();

+            custodyTransferPortTypeDEST = transport.getUDDICustodyTransferService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public void publish() {

+        try {

+            // Setting up the values to get an authentication token for the 'root' user ('root' user has admin privileges

+            // and can save other publishers).

+

+            /*   

+             * @param authInfo IN

+             * @param keyBag IN

+             * @param nodeID OUT

+             * @param expirationTime OUT

+             * @param opaqueToken OUT

+             */

+            custodyTransferPortTypeDEST.getTransferToken(null, null, null, null, null);

+

+

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("root");

+            getAuthTokenRoot.setCred("root");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+

+            getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("uddi");

+            getAuthTokenRoot.setCred("uddi");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken uddiAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("uddi AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+

+

+

+

+

+            DatatypeFactory df = DatatypeFactory.newInstance();

+            GregorianCalendar gcal = new GregorianCalendar();

+            gcal.setTimeInMillis(System.currentTimeMillis());

+            XMLGregorianCalendar xcal = df.newXMLGregorianCalendar(gcal);

+

+            // Creating the parent business entity that will contain our service.

+            BusinessEntity myBusEntity = new BusinessEntity();

+            Name myBusName = new Name();

+            myBusName.setLang("en");

+            myBusName.setValue("My Business Dept 1" + " " + xcal.toString());

+            myBusEntity.getName().add(myBusName);

+

+            // Adding the business entity to the "save" structure, using our publisher's authentication info and saving away.

+            SaveBusiness sb = new SaveBusiness();

+            sb.getBusinessEntity().add(myBusEntity);

+            sb.setAuthInfo(rootAuthToken.getAuthInfo());

+            BusinessDetail bd = publish.saveBusiness(sb);

+            String myBusKey1 = bd.getBusinessEntity().get(0).getBusinessKey();

+            System.out.println("myBusiness key:  " + myBusKey1);

+

+            Holder<List<Subscription>> subs = new Holder<List<Subscription>>();

+            subs.value = new ArrayList<Subscription>();

+            Subscription sub = new Subscription();

+            sub.setMaxEntities(20);

+            sub.setSubscriptionFilter(new SubscriptionFilter());

+            sub.getSubscriptionFilter().setGetBusinessDetail(new GetBusinessDetail());

+            sub.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey().add(myBusKey1);

+            sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport());

+            //  sub.getSubscriptionFilter().s

+            //uddi:juddi.apache.org:72619170-d391-41cb-99a0-238cb0b76eb9

+            subs.value.add(sub);

+            uddiSubscriptionService.saveSubscription(rootAuthToken.getAuthInfo(), subs);

+

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public static void main(String args[]) throws Exception {

+        UddiCustodyTransfer sp = new UddiCustodyTransfer();

+        sp.SetupAndRegisterCallback();

+        //sp.publish();

+    }

+

+    private void SetupAndRegisterCallback() throws Exception {

+        String url = "http://localhost:7777/UDDI_SUB_CALLBACK";

+

+

+        DatatypeFactory df = DatatypeFactory.newInstance();

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.setTimeInMillis(System.currentTimeMillis());

+        XMLGregorianCalendar xcal = df.newXMLGregorianCalendar(gcal);

+

+        //?? note, you won't get subscription updates if you own the entity, at least with juddi

+

+

+        //in this case, the user "root" is subscribing to a business entity published by the user "uddi"

+        //"uddi" then updates the item and then logically "root" should be notified

+        //before this happens "root" needs to publish a business, service and binding template that is used for the 

+        //subscription callback

+

+        /*

+         * so the order of operation is

+         * 1) uddi publisher's an entity 

+         * 2) root wants updates on uddi's entity

+         * 3) root starts a subscription listener service to process updates

+         * 4) root creates a business and service with a bindingtemplate with the access point value = the the subscription listener's address

+         * 5) root creates a subscription

+         * 6) uddi updates the entity

+         * 7) root's sub listener is notified (hopefully)

+         * 

+         */

+

+

+        GetAuthToken getAuthTokenRoot = new GetAuthToken();

+        getAuthTokenRoot.setUserID("root");

+        getAuthTokenRoot.setCred("root");

+

+        // Making API call that retrieves the authentication token for the 'root' user.

+        AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+        System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+

+        getAuthTokenRoot = new GetAuthToken();

+        getAuthTokenRoot.setUserID("uddi");

+        getAuthTokenRoot.setCred("uddi");

+

+        // Making API call that retrieves the authentication token for the 'root' user.

+        AuthToken uddiAuthToken = security.getAuthToken(getAuthTokenRoot);

+        System.out.println("uddi AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+        //first publish a business user the user uddi

+        BusinessEntity myBusEntity = new BusinessEntity();

+        Name myBusName = new Name();

+        myBusName.setLang("en");

+        myBusName.setValue("User UDDI's Business" + " " + xcal.toString());

+        myBusEntity.getName().add(myBusName);

+        SaveBusiness sb = new SaveBusiness();

+        sb.getBusinessEntity().add(myBusEntity);

+        sb.setAuthInfo(uddiAuthToken.getAuthInfo());

+        BusinessDetail bd = publish.saveBusiness(sb);

+

+        String keyRootSubscribesTo = bd.getBusinessEntity().get(0).getBusinessKey();

+        System.out.println("UDDI's business saved as biz key " + keyRootSubscribesTo);

+        BusinessEntity uddisBusiness = bd.getBusinessEntity().get(0);

+

+        //reset

+        List<Subscription> subscriptions = uddiSubscriptionService.getSubscriptions(rootAuthToken.getAuthInfo());

+        DeleteSubscription ds = new DeleteSubscription();

+        ds.setAuthInfo(rootAuthToken.getAuthInfo());

+        for (int i = 0; i < subscriptions.size(); i++) {

+            ds.getSubscriptionKey().add(subscriptions.get(i).getSubscriptionKey());

+        }

+        if (!ds.getSubscriptionKey().isEmpty()) {

+            System.out.println("removing " + ds.getSubscriptionKey().size() + " old subscriptions");

+            uddiSubscriptionService.deleteSubscription(ds);

+        }

+

+        // Creating the parent business entity that will contain our service.

+        myBusEntity = new BusinessEntity();

+        myBusName = new Name();

+        myBusName.setLang("en");

+        myBusName.setValue("My Business Dept 1" + " " + xcal.toString());

+        myBusEntity.getName().add(myBusName);

+        myBusEntity.setBusinessServices(new BusinessServices());

+        BusinessService bs = new BusinessService();

+        bs.getName().add(new Name());

+        bs.getName().get(0).setValue("my callback endpoint");

+

+        bs.setBindingTemplates(new BindingTemplates());

+        BindingTemplate bt = new BindingTemplate();

+        //bt.setCategoryBag(new CategoryBag());

+        //   KeyedReference kr = new KeyedReference();

+        //         kr.setTModelKey(UDDIConstants.);

+        // bt.getCategoryBag().getKeyedReference().add(kr);

+        bt.setAccessPoint(new AccessPoint());

+        bt.getAccessPoint().setValue(url);

+        bt.getAccessPoint().setUseType("endPoint");

+        bs.getBindingTemplates().getBindingTemplate().add(bt);

+

+

+        myBusEntity.getBusinessServices().getBusinessService().add(bs);

+        // Adding the business entity to the "save" structure, using our publisher's authentication info and saving away.

+        sb = new SaveBusiness();

+        sb.getBusinessEntity().add(myBusEntity);

+        sb.setAuthInfo(rootAuthToken.getAuthInfo());

+        bd = publish.saveBusiness(sb);

+

+        String callbackBindingTemplate = bd.getBusinessEntity().get(0).getBusinessServices().getBusinessService().get(0).getBindingTemplates().getBindingTemplate().get(0).getBindingKey();

+        System.out.println("myBusiness key:  " + bd.getBusinessEntity().get(0).getBusinessKey());

+        System.out.println("callback binding template key:  " + callbackBindingTemplate);

+

+        System.out.println("i'll stay awake until someone kills me");

+

+        Holder<List<Subscription>> subscription = new Holder<List<Subscription>>();

+        subscription.value = new ArrayList<Subscription>();

+        Subscription sub = new Subscription();

+        sub.setBindingKey(callbackBindingTemplate);

+        //this is required

+        sub.setNotificationInterval(df.newDuration(0));

+        sub.setSubscriptionFilter(new SubscriptionFilter());

+        sub.getSubscriptionFilter().setGetBusinessDetail(new GetBusinessDetail());

+        sub.getSubscriptionFilter().getGetBusinessDetail().setAuthInfo(rootAuthToken.getAuthInfo());

+        sub.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey().add(keyRootSubscribesTo);

+        subscription.value.add(sub);

+        uddiSubscriptionService.saveSubscription(rootAuthToken.getAuthInfo(), subscription);

+

+

+        //ok now we're ready to mess around with the user's "uddi" business

+        //in this case, we're just setting the lang

+        uddisBusiness.getName().get(0).setLang("en");

+        sb = new SaveBusiness();

+        sb.setAuthInfo(uddiAuthToken.getAuthInfo());

+        sb.getBusinessEntity().add(uddisBusiness);

+        publish.saveBusiness(sb);

+

+        long timer = 310000;

+        while (timer > 0) {

+            Thread.sleep(5000);

+            timer = timer - 5000;

+        }

+

+        //TODO clean up all the crap we just made

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureBusiness.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureBusiness.java
new file mode 100644
index 0000000..7ed88f8
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureBusiness.java
@@ -0,0 +1,413 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.List;

+import java.util.Properties;

+import java.util.concurrent.atomic.AtomicReference;

+

+import org.apache.juddi.api_v3.AccessPointType;

+import org.apache.juddi.api_v3.Publisher;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.crypto.DigSigUtil;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.uddi.api_v3.*;

+import org.uddi.v3_service.DispositionReportFaultMessage;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+

+public class UddiDigitalSignatureBusiness {

+

+    private static UDDISecurityPortType security = null;

+    private static UDDIInquiryPortType inquiry = null;

+    private static UDDIPublicationPortType publish = null;

+

+    /**

+     * This sets up the ws proxies using uddi.xml in META-INF

+     */

+    public UddiDigitalSignatureBusiness() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            inquiry = transport.getUDDIInquiryService();

+            publish = transport.getUDDIPublishService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    private static void DisplayHelp() {

+        //TODO

+    }

+

+    /**

+     * Main entry point

+     *

+     * @param args

+     */

+    public static void main(String args[]) {

+        if (args.length == 1 && args[0].equalsIgnoreCase("help")) {

+            DisplayHelp();

+            return;

+        }

+        UddiDigitalSignatureBusiness sp = new UddiDigitalSignatureBusiness();

+        sp.Browse(args);

+    }

+

+    public void Browse(String[] args) {

+        try {

+            Properties prop = ParseArgs(args);

+            if (prop.containsKey("AuthStyle")) {

+                //TODO, determine a way to pass parameters from the command line, hardcoded for now

+                //UDDI Token

+                //HTTP Username/Password (basic or digest)

+                //HTTP Client Cert

+            }

+            org.apache.juddi.v3.client.crypto.DigSigUtil ds = new DigSigUtil();

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_FILE, "keystore.jks");

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_FILETYPE, "JKS");

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_FILE_PASSWORD, "password");

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_KEY_ALIAS, "selfsigned");

+            ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_BASE64, "t");

+            String token = GetAuthKey("root", "root", AuthStyle.UDDI_AUTH);

+            SaveBusiness sb = new SaveBusiness();

+            sb.setAuthInfo(token);

+            BusinessEntity ob = new BusinessEntity();

+            Name name = new Name();

+            name.setValue("My Signed Business");

+            ob.getName().add(name);

+            sb.getBusinessEntity().add(ob);

+            BusinessDetail saveBusiness = publish.saveBusiness(sb);

+

+            System.out.println("business created with key " + saveBusiness.getBusinessEntity().get(0).getBusinessKey());

+

+

+            BusinessEntity be = saveBusiness.getBusinessEntity().get(0);//findBusiness.getBusinessInfos().getBusinessInfo().get(0));

+            DigSigUtil.JAXB_ToStdOut(be);

+

+            be.getSignature().clear();

+            //DigSigUtil.JAXB_ToStdOut(be);

+            System.out.println("signing");

+            BusinessEntity signUDDI_JAXBObject = ds.signUddiEntity(be);

+            DigSigUtil.JAXB_ToStdOut(signUDDI_JAXBObject);

+            System.out.println("signed, saving");

+

+            sb = new SaveBusiness();

+            sb.setAuthInfo(token);

+            sb.getBusinessEntity().add(signUDDI_JAXBObject);

+            publish.saveBusiness(sb);

+            System.out.println("saved, fetching");

+

+            // findBusiness = GetBusinessList(token);

+            GetBusinessDetail gb = new GetBusinessDetail();

+            gb.setAuthInfo(token);

+            gb.getBusinessKey().add(be.getBusinessKey());

+            be = inquiry.getBusinessDetail(gb).getBusinessEntity().get(0);

+            DigSigUtil.JAXB_ToStdOut(be);

+            System.out.println("verifing");

+            AtomicReference<String> msg = new AtomicReference<String>();

+            boolean verifySigned_UDDI_JAXB_Object = ds.verifySignedUddiEntity(be, msg);

+            if (verifySigned_UDDI_JAXB_Object) {

+                System.out.println("signature validation passed (expected)");

+            } else {

+                System.out.println("signature validation failed (not expected)");

+            }

+            System.out.println(msg.get());

+

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    /**

+     * Find all of the registered businesses. This list may be filtered based on

+     * access control rules

+     *

+     * @param token

+     * @return

+     * @throws Exception

+     */

+    private BusinessList GetBusinessList(String token) throws Exception {

+        FindBusiness fb = new FindBusiness();

+        fb.setAuthInfo(token);

+        Name n = new Name();

+        n.setValue("My Business 0 2013-04-11T12:40:52.753-04:00");

+        fb.getName().add(n);

+        org.uddi.api_v3.FindQualifiers fq = new org.uddi.api_v3.FindQualifiers();

+        fq.getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+

+        fb.setFindQualifiers(fq);

+        Name searchname = new Name();

+        searchname.setValue(UDDIConstants.WILDCARD);

+        //fb.getName().add(searchname);

+        BusinessList findBusiness = inquiry.findBusiness(fb);

+        return findBusiness;

+

+    }

+

+    /**

+     * Converts category bags of tmodels to a readable string

+     *

+     * @param categoryBag

+     * @return

+     */

+    private String CatBagToString(CategoryBag categoryBag) {

+        StringBuilder sb = new StringBuilder();

+        if (categoryBag == null) {

+            return "no data";

+        }

+        for (int i = 0; i < categoryBag.getKeyedReference().size(); i++) {

+            sb.append(KeyedReferenceToString(categoryBag.getKeyedReference().get(i)));

+        }

+        for (int i = 0; i < categoryBag.getKeyedReferenceGroup().size(); i++) {

+            sb.append("Key Ref Grp: TModelKey=");

+            for (int k = 0; k < categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) {

+                sb.append(KeyedReferenceToString(categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().get(k)));

+            }

+        }

+        return sb.toString();

+    }

+

+    private String KeyedReferenceToString(KeyedReference item) {

+        StringBuilder sb = new StringBuilder();

+        sb.append("Key Ref: Name=").

+                append(item.getKeyName()).

+                append(" Value=").

+                append(item.getKeyValue()).

+                append(" tModel=").

+                append(item.getTModelKey()).

+                append(System.getProperty("line.separator"));

+        return sb.toString();

+    }

+

+    private void PrintContacts(Contacts contacts) {

+        if (contacts == null) {

+            return;

+        }

+        for (int i = 0; i < contacts.getContact().size(); i++) {

+            System.out.println("Contact " + i + " type:" + contacts.getContact().get(i).getUseType());

+            for (int k = 0; k < contacts.getContact().get(i).getPersonName().size(); k++) {

+                System.out.println("Name: " + contacts.getContact().get(i).getPersonName().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getEmail().size(); k++) {

+                System.out.println("Email: " + contacts.getContact().get(i).getEmail().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getAddress().size(); k++) {

+                System.out.println("Address sort code " + contacts.getContact().get(i).getAddress().get(k).getSortCode());

+                System.out.println("Address use type " + contacts.getContact().get(i).getAddress().get(k).getUseType());

+                System.out.println("Address tmodel key " + contacts.getContact().get(i).getAddress().get(k).getTModelKey());

+                for (int x = 0; x < contacts.getContact().get(i).getAddress().get(k).getAddressLine().size(); x++) {

+                    System.out.println("Address line value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getValue());

+                    System.out.println("Address line key name " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyName());

+                    System.out.println("Address line key value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyValue());

+                }

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getDescription().size(); k++) {

+                System.out.println("Desc: " + contacts.getContact().get(i).getDescription().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getPhone().size(); k++) {

+                System.out.println("Phone: " + contacts.getContact().get(i).getPhone().get(k).getValue());

+            }

+        }

+

+    }

+

+    private void PrintServiceDetail(BusinessService get) {

+        if (get == null) {

+            return;

+        }

+        System.out.println("Name " + ListToString(get.getName()));

+        System.out.println("Desc " + ListToDescString(get.getDescription()));

+        System.out.println("Key " + (get.getServiceKey()));

+        System.out.println("Cat bag " + CatBagToString(get.getCategoryBag()));

+        if (!get.getSignature().isEmpty()) {

+            System.out.println("Item is digitally signed");

+        } else {

+            System.out.println("Item is not digitally signed");

+        }

+        PrintBindingTemplates(get.getBindingTemplates());

+    }

+

+    /**

+     * This function is useful for translating UDDI's somewhat complex data

+     * format to something that is more useful.

+     *

+     * @param bindingTemplates

+     */

+    private void PrintBindingTemplates(BindingTemplates bindingTemplates) {

+        if (bindingTemplates == null) {

+            return;

+        }

+        for (int i = 0; i < bindingTemplates.getBindingTemplate().size(); i++) {

+            System.out.println("Binding Key: " + bindingTemplates.getBindingTemplate().get(i).getBindingKey());

+            //TODO The UDDI spec is kind of strange at this point.

+            //An access point could be a URL, a reference to another UDDI binding key, a hosting redirector (which is 

+            //esscentially a pointer to another UDDI registry) or a WSDL Deployment

+            //From an end client's perspective, all you really want is the endpoint.

+            //http://uddi.org/pubs/uddi_v3.htm#_Ref8977716

+            //So if you have a wsdlDeployment useType, fetch the wsdl and parse for the invocation URL

+            //If its hosting director, you'll have to fetch that data from uddi recursively until the leaf node is found

+            //Consult the UDDI specification for more information

+

+            if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint() != null) {

+                System.out.println("Access Point: " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getValue() + " type " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType());

+                if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType() != null) {

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.END_POINT.toString())) {

+                        System.out.println("Use this access point value as an invocation endpoint.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.BINDING_TEMPLATE.toString())) {

+                        System.out.println("Use this access point value as a reference to another binding template.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.WSDL_DEPLOYMENT.toString())) {

+                        System.out.println("Use this access point value as a URL to a WSDL document, which presumably will have a real access point defined.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.HOSTING_REDIRECTOR.toString())) {

+                        System.out.println("Use this access point value as an Inquiry URL of another UDDI registry, look up the same binding template there (usage varies).");

+                    }

+                }

+            }

+

+        }

+    }

+

+    private enum AuthStyle {

+

+        HTTP_BASIC,

+        HTTP_DIGEST,

+        HTTP_NTLM,

+        UDDI_AUTH,

+        HTTP_CLIENT_CERT

+    }

+

+    /**

+     * Gets a UDDI style auth token, otherwise, appends credentials to the ws

+     * proxies (not yet implemented)

+     *

+     * @param username

+     * @param password

+     * @param style

+     * @return

+     */

+    private String GetAuthKey(String username, String password, AuthStyle style) {

+        try {

+

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID(username);

+            getAuthTokenRoot.setCred(password);

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+            return rootAuthToken.getAuthInfo();

+        } catch (Exception ex) {

+            System.out.println("Could not authenticate with the provided credentials " + ex.getMessage());

+        }

+        return null;

+    }

+

+    /**

+     * Converts command line args into a simple property structure

+     *

+     * @param args

+     * @return

+     */

+    private Properties ParseArgs(String[] args) {

+

+        Properties p = new Properties();

+        if (args == null) {

+            return p;

+        }

+        for (int i = 0; i < args.length; i++) {

+            if (args[i] != null && args[i].length() >= 3) {

+                p.put(args[i].split("=")[0], args[i].split("=")[1]);

+            }

+        }

+        return p;

+    }

+

+    private void PrintBusinessInfo(BusinessInfos businessInfos) {

+        if (businessInfos == null) {

+            System.out.println("No data returned");

+        } else {

+            for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+                System.out.println("===============================================");

+                System.out.println("Business Key: " + businessInfos.getBusinessInfo().get(i).getBusinessKey());

+                System.out.println("Name: " + ListToString(businessInfos.getBusinessInfo().get(i).getName()));

+

+                System.out.println("Description: " + ListToDescString(businessInfos.getBusinessInfo().get(i).getDescription()));

+                System.out.println("Services:");

+                PrintServiceInfo(businessInfos.getBusinessInfo().get(i).getServiceInfos());

+            }

+        }

+    }

+

+    private String ListToString(List<Name> name) {

+        StringBuilder sb = new StringBuilder();

+        for (int i = 0; i < name.size(); i++) {

+            sb.append(name.get(i).getValue()).append(" ");

+        }

+        return sb.toString();

+    }

+

+    private String ListToDescString(List<Description> name) {

+        StringBuilder sb = new StringBuilder();

+        for (int i = 0; i < name.size(); i++) {

+            sb.append(name.get(i).getValue()).append(" ");

+        }

+        return sb.toString();

+    }

+

+    private void PrintServiceInfo(ServiceInfos serviceInfos) {

+        for (int i = 0; i < serviceInfos.getServiceInfo().size(); i++) {

+            System.out.println("-------------------------------------------");

+            System.out.println("Service Key: " + serviceInfos.getServiceInfo().get(i).getServiceKey());

+            System.out.println("Owning Business Key: " + serviceInfos.getServiceInfo().get(i).getBusinessKey());

+            System.out.println("Name: " + ListToString(serviceInfos.getServiceInfo().get(i).getName()));

+        }

+    }

+

+    private void PrintBusinessDetails(BusinessInfos businessInfos, String token) throws Exception {

+        GetBusinessDetail gbd = new GetBusinessDetail();

+        gbd.setAuthInfo(token);

+        for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+            gbd.getBusinessKey().add(businessInfos.getBusinessInfo().get(i).getBusinessKey());

+        }

+        BusinessDetail businessDetail = inquiry.getBusinessDetail(gbd);

+        for (int i = 0; i < businessDetail.getBusinessEntity().size(); i++) {

+            System.out.println("Business Detail - key: " + businessDetail.getBusinessEntity().get(i).getBusinessKey());

+            System.out.println("Name: " + ListToString(businessDetail.getBusinessEntity().get(i).getName()));

+            System.out.println("CategoryBag: " + CatBagToString(businessDetail.getBusinessEntity().get(i).getCategoryBag()));

+            PrintContacts(businessDetail.getBusinessEntity().get(i).getContacts());

+        }

+    }

+

+    private void PrintServiceDetailsByBusiness(BusinessInfos businessInfos, String token) throws Exception {

+        for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+            GetServiceDetail gsd = new GetServiceDetail();

+            for (int k = 0; k < businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().size(); k++) {

+                gsd.getServiceKey().add(businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().get(k).getServiceKey());

+            }

+            gsd.setAuthInfo(token);

+            System.out.println("Fetching data for business " + businessInfos.getBusinessInfo().get(i).getBusinessKey());

+            ServiceDetail serviceDetail = inquiry.getServiceDetail(gsd);

+            for (int k = 0; k < serviceDetail.getBusinessService().size(); k++) {

+                PrintServiceDetail(serviceDetail.getBusinessService().get(k));

+            }

+            System.out.println("................");

+

+        }

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureSearch.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureSearch.java
new file mode 100644
index 0000000..fe37226
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureSearch.java
@@ -0,0 +1,380 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.List;

+import java.util.Properties;

+import java.util.concurrent.atomic.AtomicReference;

+

+import org.apache.juddi.api_v3.AccessPointType;

+import org.apache.juddi.api_v3.Publisher;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.crypto.DigSigUtil;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.uddi.api_v3.*;

+import org.uddi.v3_service.DispositionReportFaultMessage;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+

+public class UddiDigitalSignatureSearch {

+

+    private static UDDISecurityPortType security = null;

+    private static UDDIInquiryPortType inquiry = null;

+    private static UDDIPublicationPortType publish = null;

+

+    /**

+     * This sets up the ws proxies using uddi.xml in META-INF

+     */

+    public UddiDigitalSignatureSearch() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            inquiry = transport.getUDDIInquiryService();

+            publish = transport.getUDDIPublishService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    private static void DisplayHelp() {

+        //TODO

+    }

+

+    /**

+     * Main entry point

+     *

+     * @param args

+     */

+    public static void main(String args[]) {

+        if (args.length == 1 && args[0].equalsIgnoreCase("help")) {

+            DisplayHelp();

+            return;

+        }

+        UddiDigitalSignatureSearch sp = new UddiDigitalSignatureSearch();

+        sp.Browse(args);

+    }

+

+    public void Browse(String[] args) {

+        try {

+            Properties prop = ParseArgs(args);

+            if (prop.containsKey("AuthStyle")) {

+                //TODO, determine a way to pass parameters from the command line, hardcoded for now

+                //UDDI Token

+                //HTTP Username/Password (basic or digest)

+                //HTTP Client Cert

+            }

+            FindService fs = new FindService();

+            fs.setFindQualifiers(new FindQualifiers());

+            fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.SORT_BY_DATE_ASC);

+            fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.SORT_BY_DATE_DESC);

+            Name n = new Name();

+            n.setValue("%");

+            fs.getName().add(n);

+            ServiceList findService = inquiry.findService(fs);

+            for (int i = 0; i < findService.getServiceInfos().getServiceInfo().size(); i++) {

+                System.out.println(ListToString(findService.getServiceInfos().getServiceInfo().get(i).getName()));

+            }

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    /**

+     * Find all of the registered businesses. This list may be filtered based on

+     * access control rules

+     *

+     * @param token

+     * @return

+     * @throws Exception

+     */

+    private BusinessList GetBusinessList(String token) throws Exception {

+        FindBusiness fb = new FindBusiness();

+        fb.setAuthInfo(token);

+        Name n = new Name();

+        n.setValue("My Business 0 2013-04-11T12:40:52.753-04:00");

+        fb.getName().add(n);

+        org.uddi.api_v3.FindQualifiers fq = new org.uddi.api_v3.FindQualifiers();

+        fq.getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+

+        fb.setFindQualifiers(fq);

+        Name searchname = new Name();

+        searchname.setValue(UDDIConstants.WILDCARD);

+        //fb.getName().add(searchname);

+        BusinessList findBusiness = inquiry.findBusiness(fb);

+        return findBusiness;

+

+    }

+

+    /**

+     * Converts category bags of tmodels to a readable string

+     *

+     * @param categoryBag

+     * @return

+     */

+    private String CatBagToString(CategoryBag categoryBag) {

+        StringBuilder sb = new StringBuilder();

+        if (categoryBag == null) {

+            return "no data";

+        }

+        for (int i = 0; i < categoryBag.getKeyedReference().size(); i++) {

+            sb.append(KeyedReferenceToString(categoryBag.getKeyedReference().get(i)));

+        }

+        for (int i = 0; i < categoryBag.getKeyedReferenceGroup().size(); i++) {

+            sb.append("Key Ref Grp: TModelKey=");

+            for (int k = 0; k < categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) {

+                sb.append(KeyedReferenceToString(categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().get(k)));

+            }

+        }

+        return sb.toString();

+    }

+

+    private String KeyedReferenceToString(KeyedReference item) {

+        StringBuilder sb = new StringBuilder();

+        sb.append("Key Ref: Name=").

+                append(item.getKeyName()).

+                append(" Value=").

+                append(item.getKeyValue()).

+                append(" tModel=").

+                append(item.getTModelKey()).

+                append(System.getProperty("line.separator"));

+        return sb.toString();

+    }

+

+    private void PrintContacts(Contacts contacts) {

+        if (contacts == null) {

+            return;

+        }

+        for (int i = 0; i < contacts.getContact().size(); i++) {

+            System.out.println("Contact " + i + " type:" + contacts.getContact().get(i).getUseType());

+            for (int k = 0; k < contacts.getContact().get(i).getPersonName().size(); k++) {

+                System.out.println("Name: " + contacts.getContact().get(i).getPersonName().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getEmail().size(); k++) {

+                System.out.println("Email: " + contacts.getContact().get(i).getEmail().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getAddress().size(); k++) {

+                System.out.println("Address sort code " + contacts.getContact().get(i).getAddress().get(k).getSortCode());

+                System.out.println("Address use type " + contacts.getContact().get(i).getAddress().get(k).getUseType());

+                System.out.println("Address tmodel key " + contacts.getContact().get(i).getAddress().get(k).getTModelKey());

+                for (int x = 0; x < contacts.getContact().get(i).getAddress().get(k).getAddressLine().size(); x++) {

+                    System.out.println("Address line value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getValue());

+                    System.out.println("Address line key name " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyName());

+                    System.out.println("Address line key value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyValue());

+                }

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getDescription().size(); k++) {

+                System.out.println("Desc: " + contacts.getContact().get(i).getDescription().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getPhone().size(); k++) {

+                System.out.println("Phone: " + contacts.getContact().get(i).getPhone().get(k).getValue());

+            }

+        }

+

+    }

+

+    private void PrintServiceDetail(BusinessService get) {

+        if (get == null) {

+            return;

+        }

+        System.out.println("Name " + ListToString(get.getName()));

+        System.out.println("Desc " + ListToDescString(get.getDescription()));

+        System.out.println("Key " + (get.getServiceKey()));

+        System.out.println("Cat bag " + CatBagToString(get.getCategoryBag()));

+        if (!get.getSignature().isEmpty()) {

+            System.out.println("Item is digitally signed");

+        } else {

+            System.out.println("Item is not digitally signed");

+        }

+        PrintBindingTemplates(get.getBindingTemplates());

+    }

+

+    /**

+     * This function is useful for translating UDDI's somewhat complex data

+     * format to something that is more useful.

+     *

+     * @param bindingTemplates

+     */

+    private void PrintBindingTemplates(BindingTemplates bindingTemplates) {

+        if (bindingTemplates == null) {

+            return;

+        }

+        for (int i = 0; i < bindingTemplates.getBindingTemplate().size(); i++) {

+            System.out.println("Binding Key: " + bindingTemplates.getBindingTemplate().get(i).getBindingKey());

+            //TODO The UDDI spec is kind of strange at this point.

+            //An access point could be a URL, a reference to another UDDI binding key, a hosting redirector (which is 

+            //esscentially a pointer to another UDDI registry) or a WSDL Deployment

+            //From an end client's perspective, all you really want is the endpoint.

+            //http://uddi.org/pubs/uddi_v3.htm#_Ref8977716

+            //So if you have a wsdlDeployment useType, fetch the wsdl and parse for the invocation URL

+            //If its hosting director, you'll have to fetch that data from uddi recursively until the leaf node is found

+            //Consult the UDDI specification for more information

+

+            if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint() != null) {

+                System.out.println("Access Point: " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getValue() + " type " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType());

+                if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType() != null) {

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.END_POINT.toString())) {

+                        System.out.println("Use this access point value as an invocation endpoint.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.BINDING_TEMPLATE.toString())) {

+                        System.out.println("Use this access point value as a reference to another binding template.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.WSDL_DEPLOYMENT.toString())) {

+                        System.out.println("Use this access point value as a URL to a WSDL document, which presumably will have a real access point defined.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.HOSTING_REDIRECTOR.toString())) {

+                        System.out.println("Use this access point value as an Inquiry URL of another UDDI registry, look up the same binding template there (usage varies).");

+                    }

+                }

+            }

+

+        }

+    }

+

+    private BusinessEntity GetBusinessDetails() throws Exception {

+        //   BusinessInfo get

+        GetBusinessDetail r = new GetBusinessDetail();

+        r.getBusinessKey().add("uddi:juddi.apache.org:6fc51bf1-8158-44eb-bc28-b9bf677fbc8f");

+        return inquiry.getBusinessDetail(r).getBusinessEntity().get(0);

+    }

+

+    private enum AuthStyle {

+

+        HTTP_BASIC,

+        HTTP_DIGEST,

+        HTTP_NTLM,

+        UDDI_AUTH,

+        HTTP_CLIENT_CERT

+    }

+

+    /**

+     * Gets a UDDI style auth token, otherwise, appends credentials to the ws

+     * proxies (not yet implemented)

+     *

+     * @param username

+     * @param password

+     * @param style

+     * @return

+     */

+    private String GetAuthKey(String username, String password, AuthStyle style) {

+        try {

+

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID(username);

+            getAuthTokenRoot.setCred(password);

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+            return rootAuthToken.getAuthInfo();

+        } catch (Exception ex) {

+            System.out.println("Could not authenticate with the provided credentials " + ex.getMessage());

+        }

+        return null;

+    }

+

+    /**

+     * Converts command line args into a simple property structure

+     *

+     * @param args

+     * @return

+     */

+    private Properties ParseArgs(String[] args) {

+

+        Properties p = new Properties();

+        if (args == null) {

+            return p;

+        }

+        for (int i = 0; i < args.length; i++) {

+            if (args[i] != null && args[i].length() >= 3) {

+                p.put(args[i].split("=")[0], args[i].split("=")[1]);

+            }

+        }

+        return p;

+    }

+

+    private void PrintBusinessInfo(BusinessInfos businessInfos) {

+        if (businessInfos == null) {

+            System.out.println("No data returned");

+        } else {

+            for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+                System.out.println("===============================================");

+                System.out.println("Business Key: " + businessInfos.getBusinessInfo().get(i).getBusinessKey());

+                System.out.println("Name: " + ListToString(businessInfos.getBusinessInfo().get(i).getName()));

+

+                System.out.println("Description: " + ListToDescString(businessInfos.getBusinessInfo().get(i).getDescription()));

+                System.out.println("Services:");

+                PrintServiceInfo(businessInfos.getBusinessInfo().get(i).getServiceInfos());

+            }

+        }

+    }

+

+    private String ListToString(List<Name> name) {

+        StringBuilder sb = new StringBuilder();

+        for (int i = 0; i < name.size(); i++) {

+            sb.append(name.get(i).getValue()).append(" ");

+        }

+        return sb.toString();

+    }

+

+    private String ListToDescString(List<Description> name) {

+        StringBuilder sb = new StringBuilder();

+        for (int i = 0; i < name.size(); i++) {

+            sb.append(name.get(i).getValue()).append(" ");

+        }

+        return sb.toString();

+    }

+

+    private void PrintServiceInfo(ServiceInfos serviceInfos) {

+        for (int i = 0; i < serviceInfos.getServiceInfo().size(); i++) {

+            System.out.println("-------------------------------------------");

+            System.out.println("Service Key: " + serviceInfos.getServiceInfo().get(i).getServiceKey());

+            System.out.println("Owning Business Key: " + serviceInfos.getServiceInfo().get(i).getBusinessKey());

+            System.out.println("Name: " + ListToString(serviceInfos.getServiceInfo().get(i).getName()));

+        }

+    }

+

+    private void PrintBusinessDetails(BusinessInfos businessInfos, String token) throws Exception {

+        GetBusinessDetail gbd = new GetBusinessDetail();

+        gbd.setAuthInfo(token);

+        for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+            gbd.getBusinessKey().add(businessInfos.getBusinessInfo().get(i).getBusinessKey());

+        }

+        BusinessDetail businessDetail = inquiry.getBusinessDetail(gbd);

+        for (int i = 0; i < businessDetail.getBusinessEntity().size(); i++) {

+            System.out.println("Business Detail - key: " + businessDetail.getBusinessEntity().get(i).getBusinessKey());

+            System.out.println("Name: " + ListToString(businessDetail.getBusinessEntity().get(i).getName()));

+            System.out.println("CategoryBag: " + CatBagToString(businessDetail.getBusinessEntity().get(i).getCategoryBag()));

+            PrintContacts(businessDetail.getBusinessEntity().get(i).getContacts());

+        }

+    }

+

+    private void PrintServiceDetailsByBusiness(BusinessInfos businessInfos, String token) throws Exception {

+        for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+            GetServiceDetail gsd = new GetServiceDetail();

+            for (int k = 0; k < businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().size(); k++) {

+                gsd.getServiceKey().add(businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().get(k).getServiceKey());

+            }

+            gsd.setAuthInfo(token);

+            System.out.println("Fetching data for business " + businessInfos.getBusinessInfo().get(i).getBusinessKey());

+            ServiceDetail serviceDetail = inquiry.getServiceDetail(gsd);

+            for (int k = 0; k < serviceDetail.getBusinessService().size(); k++) {

+                PrintServiceDetail(serviceDetail.getBusinessService().get(k));

+            }

+            System.out.println("................");

+

+        }

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureService.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureService.java
new file mode 100644
index 0000000..c7e2bf2
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureService.java
@@ -0,0 +1,466 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.List;

+import java.util.Properties;

+import java.util.concurrent.atomic.AtomicReference;

+import org.apache.juddi.api_v3.AccessPointType;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.crypto.DigSigUtil;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.uddi.api_v3.*;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+

+public class UddiDigitalSignatureService {

+

+    private static UDDISecurityPortType security = null;

+    private static UDDIInquiryPortType inquiry = null;

+    private static UDDIPublicationPortType publish = null;

+

+    /**

+     * This sets up the ws proxies using uddi.xml in META-INF

+     */

+    public UddiDigitalSignatureService() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            inquiry = transport.getUDDIInquiryService();

+            publish = transport.getUDDIPublishService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    private static void DisplayHelp() {

+        //TODO

+    }

+

+    /**

+     * Main entry point

+     *

+     * @param args

+     */

+    public static void main(String args[]) {

+        if (args.length == 1 && args[0].equalsIgnoreCase("help")) {

+            DisplayHelp();

+            return;

+        }

+        UddiDigitalSignatureService sp = new UddiDigitalSignatureService();

+        sp.Browse(args);

+    }

+

+    public void Browse(String[] args) {

+        try {

+            Properties prop = ParseArgs(args);

+            if (prop.containsKey("AuthStyle")) {

+                //TODO, determine a way to pass parameters from the command line, hardcoded for now

+                //UDDI Token

+                //HTTP Username/Password (basic or digest)

+                //HTTP Client Cert

+            }

+            org.apache.juddi.v3.client.crypto.DigSigUtil ds = new DigSigUtil();

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_FILE, "keystore.jks");

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_FILETYPE, "JKS");

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_FILE_PASSWORD, "password");

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_KEY_ALIAS, "selfsigned");

+            ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_BASE64, "t");

+            String token = GetAuthKey("root", "root", AuthStyle.UDDI_AUTH);

+            /*BusinessList findBusiness = GetBusinessList(token);

+             BusinessEntity be = GetBusinessDetails(findBusiness.getBusinessInfos().getBusinessInfo().get(0));

+            

+             //todo provider name

+             /*ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_SERIAL, "t");

+             ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_SUBJECTDN, "t");

+             ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_THUMBPRINT, "t");

+             ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_X500_PRINICPAL, "t");

+

+             * /

+             ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_BASE64, "t");

+

+             // org.apache.xml.security.utils.

+             System.out.println("signing");

+             BusinessEntity signUDDI_JAXBObject = ds.signUddiEntity(be);

+             System.out.println("signed");

+             DigSigUtil.JAXB_ToStdOut(signUDDI_JAXBObject);

+             AtomicReference<String> msg = new AtomicReference<String>();

+             boolean verifySigned_UDDI_JAXB_Object = ds.verifySignedUddiEntity(signUDDI_JAXBObject, msg);

+             if (verifySigned_UDDI_JAXB_Object) {

+             System.out.println("signature validation passed (as expected)");

+             } else {

+             System.out.println("signature validation failed");

+             }

+             System.out.println(msg.get());

+             msg = new AtomicReference<String>();

+             System.out.println("signing it again for the hell of it");

+             signUDDI_JAXBObject = ds.signUddiEntity(signUDDI_JAXBObject);

+             DigSigUtil.JAXB_ToStdOut(signUDDI_JAXBObject);

+

+             verifySigned_UDDI_JAXB_Object = ds.verifySignedUddiEntity(signUDDI_JAXBObject, msg);

+             if (verifySigned_UDDI_JAXB_Object) {

+             System.out.println("signature validation passed (as expected)");

+             } else {

+             System.out.println("signature validation failed");

+             }

+             System.out.println(msg.get());

+             msg = new AtomicReference<String>();

+             System.out.println("signing");

+             //start from scratcha again

+             signUDDI_JAXBObject = ds.signUddiEntity(be);

+             System.out.println("signed");

+             //tweak it, then revalidate

+             System.out.println("tweak it, then verify again");

+             Description d = new Description();

+             d.setValue("Hello world");

+             signUDDI_JAXBObject.getDescription().add(d);

+             DigSigUtil.JAXB_ToStdOut(signUDDI_JAXBObject);

+

+             verifySigned_UDDI_JAXB_Object = ds.verifySignedUddiEntity(signUDDI_JAXBObject, msg);

+             if (verifySigned_UDDI_JAXB_Object) {

+             System.out.println("signature validation passed (not expected)");

+             } else {

+             System.out.println("signature validation failed (expected)");

+             }

+             System.out.println(msg.get());

+             //PrintBusinessInfo(findBusiness.getBusinessInfos());

+             //PrintBusinessDetails(findBusiness.getBusinessInfos(), token);

+             //Pr                    intServiceDetailsByBusiness(findBusiness.getBusinessInfos(), token);

+             */

+            System.out.println("this is the real test =====================");

+

+            // BusinessList findBusiness = GetBusinessList(token);

+

+            BusinessService be = null;

+            be = GetBusinessDetails();//findBusiness.getBusinessInfos().getBusinessInfo().get(0));

+            be.getSignature().clear();

+            //DigSigUtil.JAXB_ToStdOut(be);

+            System.out.println("signing");

+            BusinessService signUDDI_JAXBObject = ds.signUddiEntity(be);

+            DigSigUtil.JAXB_ToStdOut(signUDDI_JAXBObject);

+            System.out.println("signed, saving");

+

+            SaveService sb = new SaveService();

+            sb.setAuthInfo(token);

+            sb.getBusinessService().add(signUDDI_JAXBObject);

+            publish.saveService(sb);

+            System.out.println("saved, fetching");

+

+            // findBusiness = GetBusinessList(token);

+            be = GetBusinessDetails();//findBusiness.getBusinessInfos().getBusinessInfo().get(0));

+            DigSigUtil.JAXB_ToStdOut(be);

+            System.out.println("verifing");

+            AtomicReference<String> msg = new AtomicReference<String>();

+            boolean verifySigned_UDDI_JAXB_Object = ds.verifySignedUddiEntity(be, msg);

+            if (verifySigned_UDDI_JAXB_Object) {

+                System.out.println("signature validation passed (expected)");

+            } else {

+                System.out.println("signature validation failed (not expected)");

+            }

+            System.out.println(msg.get());

+

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    /**

+     * Find all of the registered businesses. This list may be filtered based on

+     * access control rules

+     *

+     * @param token

+     * @return

+     * @throws Exception

+     */

+    private BusinessList GetBusinessList(String token) throws Exception {

+        FindBusiness fb = new FindBusiness();

+        fb.setAuthInfo(token);

+        Name n = new Name();

+        n.setValue("My Business 0 2013-04-11T12:40:52.753-04:00");

+        fb.getName().add(n);

+        org.uddi.api_v3.FindQualifiers fq = new org.uddi.api_v3.FindQualifiers();

+        fq.getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+

+        fb.setFindQualifiers(fq);

+        Name searchname = new Name();

+        searchname.setValue(UDDIConstants.WILDCARD);

+        //fb.getName().add(searchname);

+        BusinessList findBusiness = inquiry.findBusiness(fb);

+        return findBusiness;

+

+    }

+

+    /**

+     * Converts category bags of tmodels to a readable string

+     *

+     * @param categoryBag

+     * @return

+     */

+    private String CatBagToString(CategoryBag categoryBag) {

+        StringBuilder sb = new StringBuilder();

+        if (categoryBag == null) {

+            return "no data";

+        }

+        for (int i = 0; i < categoryBag.getKeyedReference().size(); i++) {

+            sb.append(KeyedReferenceToString(categoryBag.getKeyedReference().get(i)));

+        }

+        for (int i = 0; i < categoryBag.getKeyedReferenceGroup().size(); i++) {

+            sb.append("Key Ref Grp: TModelKey=");

+            for (int k = 0; k < categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) {

+                sb.append(KeyedReferenceToString(categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().get(k)));

+            }

+        }

+        return sb.toString();

+    }

+

+    private String KeyedReferenceToString(KeyedReference item) {

+        StringBuilder sb = new StringBuilder();

+        sb.append("Key Ref: Name=").

+                append(item.getKeyName()).

+                append(" Value=").

+                append(item.getKeyValue()).

+                append(" tModel=").

+                append(item.getTModelKey()).

+                append(System.getProperty("line.separator"));

+        return sb.toString();

+    }

+

+    private void PrintContacts(Contacts contacts) {

+        if (contacts == null) {

+            return;

+        }

+        for (int i = 0; i < contacts.getContact().size(); i++) {

+            System.out.println("Contact " + i + " type:" + contacts.getContact().get(i).getUseType());

+            for (int k = 0; k < contacts.getContact().get(i).getPersonName().size(); k++) {

+                System.out.println("Name: " + contacts.getContact().get(i).getPersonName().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getEmail().size(); k++) {

+                System.out.println("Email: " + contacts.getContact().get(i).getEmail().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getAddress().size(); k++) {

+                System.out.println("Address sort code " + contacts.getContact().get(i).getAddress().get(k).getSortCode());

+                System.out.println("Address use type " + contacts.getContact().get(i).getAddress().get(k).getUseType());

+                System.out.println("Address tmodel key " + contacts.getContact().get(i).getAddress().get(k).getTModelKey());

+                for (int x = 0; x < contacts.getContact().get(i).getAddress().get(k).getAddressLine().size(); x++) {

+                    System.out.println("Address line value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getValue());

+                    System.out.println("Address line key name " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyName());

+                    System.out.println("Address line key value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyValue());

+                }

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getDescription().size(); k++) {

+                System.out.println("Desc: " + contacts.getContact().get(i).getDescription().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getPhone().size(); k++) {

+                System.out.println("Phone: " + contacts.getContact().get(i).getPhone().get(k).getValue());

+            }

+        }

+

+    }

+

+    private void PrintServiceDetail(BusinessService get) {

+        if (get == null) {

+            return;

+        }

+        System.out.println("Name " + ListToString(get.getName()));

+        System.out.println("Desc " + ListToDescString(get.getDescription()));

+        System.out.println("Key " + (get.getServiceKey()));

+        System.out.println("Cat bag " + CatBagToString(get.getCategoryBag()));

+        if (!get.getSignature().isEmpty()) {

+            System.out.println("Item is digitally signed");

+        } else {

+            System.out.println("Item is not digitally signed");

+        }

+        PrintBindingTemplates(get.getBindingTemplates());

+    }

+

+    /**

+     * This function is useful for translating UDDI's somewhat complex data

+     * format to something that is more useful.

+     *

+     * @param bindingTemplates

+     */

+    private void PrintBindingTemplates(BindingTemplates bindingTemplates) {

+        if (bindingTemplates == null) {

+            return;

+        }

+        for (int i = 0; i < bindingTemplates.getBindingTemplate().size(); i++) {

+            System.out.println("Binding Key: " + bindingTemplates.getBindingTemplate().get(i).getBindingKey());

+            //TODO The UDDI spec is kind of strange at this point.

+            //An access point could be a URL, a reference to another UDDI binding key, a hosting redirector (which is 

+            //esscentially a pointer to another UDDI registry) or a WSDL Deployment

+            //From an end client's perspective, all you really want is the endpoint.

+            //http://uddi.org/pubs/uddi_v3.htm#_Ref8977716

+            //So if you have a wsdlDeployment useType, fetch the wsdl and parse for the invocation URL

+            //If its hosting director, you'll have to fetch that data from uddi recursively until the leaf node is found

+            //Consult the UDDI specification for more information

+

+            if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint() != null) {

+                System.out.println("Access Point: " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getValue() + " type " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType());

+                if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType() != null) {

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.END_POINT.toString())) {

+                        System.out.println("Use this access point value as an invocation endpoint.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.BINDING_TEMPLATE.toString())) {

+                        System.out.println("Use this access point value as a reference to another binding template.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.WSDL_DEPLOYMENT.toString())) {

+                        System.out.println("Use this access point value as a URL to a WSDL document, which presumably will have a real access point defined.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.HOSTING_REDIRECTOR.toString())) {

+                        System.out.println("Use this access point value as an Inquiry URL of another UDDI registry, look up the same binding template there (usage varies).");

+                    }

+                }

+            }

+

+        }

+    }

+

+    private BusinessService GetBusinessDetails() throws Exception {

+        //   BusinessInfo get

+        GetServiceDetail r = new GetServiceDetail();

+        //GetBusinessDetail r = new GetBusinessDetail();

+        r.getServiceKey().add("uddi:juddi.apache.org:da314f49-b84f-4ede-a434-0b0178632f10");

+        return inquiry.getServiceDetail(r).getBusinessService().get(0);

+    }

+

+    private enum AuthStyle {

+

+        HTTP_BASIC,

+        HTTP_DIGEST,

+        HTTP_NTLM,

+        UDDI_AUTH,

+        HTTP_CLIENT_CERT

+    }

+

+    /**

+     * Gets a UDDI style auth token, otherwise, appends credentials to the ws

+     * proxies (not yet implemented)

+     *

+     * @param username

+     * @param password

+     * @param style

+     * @return

+     */

+    private String GetAuthKey(String username, String password, AuthStyle style) {

+        try {

+

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID(username);

+            getAuthTokenRoot.setCred(password);

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+            return rootAuthToken.getAuthInfo();

+        } catch (Exception ex) {

+            System.out.println("Could not authenticate with the provided credentials " + ex.getMessage());

+        }

+        return null;

+    }

+

+    /**

+     * Converts command line args into a simple property structure

+     *

+     * @param args

+     * @return

+     */

+    private Properties ParseArgs(String[] args) {

+

+        Properties p = new Properties();

+        if (args == null) {

+            return p;

+        }

+        for (int i = 0; i < args.length; i++) {

+            if (args[i] != null && args[i].length() >= 3) {

+                p.put(args[i].split("=")[0], args[i].split("=")[1]);

+            }

+        }

+        return p;

+    }

+

+    private void PrintBusinessInfo(BusinessInfos businessInfos) {

+        if (businessInfos == null) {

+            System.out.println("No data returned");

+        } else {

+            for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+                System.out.println("===============================================");

+                System.out.println("Business Key: " + businessInfos.getBusinessInfo().get(i).getBusinessKey());

+                System.out.println("Name: " + ListToString(businessInfos.getBusinessInfo().get(i).getName()));

+

+                System.out.println("Description: " + ListToDescString(businessInfos.getBusinessInfo().get(i).getDescription()));

+                System.out.println("Services:");

+                PrintServiceInfo(businessInfos.getBusinessInfo().get(i).getServiceInfos());

+            }

+        }

+    }

+

+    private String ListToString(List<Name> name) {

+        StringBuilder sb = new StringBuilder();

+        for (int i = 0; i < name.size(); i++) {

+            sb.append(name.get(i).getValue()).append(" ");

+        }

+        return sb.toString();

+    }

+

+    private String ListToDescString(List<Description> name) {

+        StringBuilder sb = new StringBuilder();

+        for (int i = 0; i < name.size(); i++) {

+            sb.append(name.get(i).getValue()).append(" ");

+        }

+        return sb.toString();

+    }

+

+    private void PrintServiceInfo(ServiceInfos serviceInfos) {

+        for (int i = 0; i < serviceInfos.getServiceInfo().size(); i++) {

+            System.out.println("-------------------------------------------");

+            System.out.println("Service Key: " + serviceInfos.getServiceInfo().get(i).getServiceKey());

+            System.out.println("Owning Business Key: " + serviceInfos.getServiceInfo().get(i).getBusinessKey());

+            System.out.println("Name: " + ListToString(serviceInfos.getServiceInfo().get(i).getName()));

+        }

+    }

+

+    private void PrintBusinessDetails(BusinessInfos businessInfos, String token) throws Exception {

+        GetBusinessDetail gbd = new GetBusinessDetail();

+        gbd.setAuthInfo(token);

+        for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+            gbd.getBusinessKey().add(businessInfos.getBusinessInfo().get(i).getBusinessKey());

+        }

+        BusinessDetail businessDetail = inquiry.getBusinessDetail(gbd);

+        for (int i = 0; i < businessDetail.getBusinessEntity().size(); i++) {

+            System.out.println("Business Detail - key: " + businessDetail.getBusinessEntity().get(i).getBusinessKey());

+            System.out.println("Name: " + ListToString(businessDetail.getBusinessEntity().get(i).getName()));

+            System.out.println("CategoryBag: " + CatBagToString(businessDetail.getBusinessEntity().get(i).getCategoryBag()));

+            PrintContacts(businessDetail.getBusinessEntity().get(i).getContacts());

+        }

+    }

+

+    private void PrintServiceDetailsByBusiness(BusinessInfos businessInfos, String token) throws Exception {

+        for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+            GetServiceDetail gsd = new GetServiceDetail();

+            for (int k = 0; k < businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().size(); k++) {

+                gsd.getServiceKey().add(businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().get(k).getServiceKey());

+            }

+            gsd.setAuthInfo(token);

+            System.out.println("Fetching data for business " + businessInfos.getBusinessInfo().get(i).getBusinessKey());

+            ServiceDetail serviceDetail = inquiry.getServiceDetail(gsd);

+            for (int k = 0; k < serviceDetail.getBusinessService().size(); k++) {

+                PrintServiceDetail(serviceDetail.getBusinessService().get(k));

+            }

+            System.out.println("................");

+

+        }

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureTmodel.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureTmodel.java
new file mode 100644
index 0000000..afdfe41
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiDigitalSignatureTmodel.java
@@ -0,0 +1,467 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.List;

+import java.util.Properties;

+import java.util.concurrent.atomic.AtomicReference;

+

+import org.apache.juddi.api_v3.AccessPointType;

+import org.apache.juddi.api_v3.Publisher;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.crypto.DigSigUtil;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.uddi.api_v3.*;

+import org.uddi.v3_service.DispositionReportFaultMessage;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+

+public class UddiDigitalSignatureTmodel {

+

+    private static UDDISecurityPortType security = null;

+    private static UDDIInquiryPortType inquiry = null;

+    private static UDDIPublicationPortType publish = null;

+

+    /**

+     * This sets up the ws proxies using uddi.xml in META-INF

+     */

+    public UddiDigitalSignatureTmodel() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            inquiry = transport.getUDDIInquiryService();

+            publish = transport.getUDDIPublishService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    private static void DisplayHelp() {

+        //TODO

+    }

+

+    /**

+     * Main entry point

+     *

+     * @param args

+     */

+    public static void main(String args[]) {

+        if (args.length == 1 && args[0].equalsIgnoreCase("help")) {

+            DisplayHelp();

+            return;

+        }

+        UddiDigitalSignatureTmodel sp = new UddiDigitalSignatureTmodel();

+        sp.Browse(args);

+    }

+

+    public void Browse(String[] args) {

+        try {

+            Properties prop = ParseArgs(args);

+            if (prop.containsKey("AuthStyle")) {

+                //TODO, determine a way to pass parameters from the command line, hardcoded for now

+                //UDDI Token

+                //HTTP Username/Password (basic or digest)

+                //HTTP Client Cert

+            }

+            org.apache.juddi.v3.client.crypto.DigSigUtil ds = new DigSigUtil();

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_FILE, "keystore.jks");

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_FILETYPE, "JKS");

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_FILE_PASSWORD, "password");

+            ds.put(DigSigUtil.SIGNATURE_KEYSTORE_KEY_ALIAS, "selfsigned");

+            ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_BASE64, "t");

+            String token = GetAuthKey("root", "root", AuthStyle.UDDI_AUTH);

+            /*BusinessList findBusiness = GetBusinessList(token);

+             BusinessEntity be = GetBusinessDetails(findBusiness.getBusinessInfos().getBusinessInfo().get(0));

+            

+             //todo provider name

+             /*ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_SERIAL, "t");

+             ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_SUBJECTDN, "t");

+             ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_THUMBPRINT, "t");

+             ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_X500_PRINICPAL, "t");

+

+             * /

+             ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_BASE64, "t");

+

+             // org.apache.xml.security.utils.

+             System.out.println("signing");

+             BusinessEntity signUDDI_JAXBObject = ds.signUddiEntity(be);

+             System.out.println("signed");

+             DigSigUtil.JAXB_ToStdOut(signUDDI_JAXBObject);

+             AtomicReference<String> msg = new AtomicReference<String>();

+             boolean verifySigned_UDDI_JAXB_Object = ds.verifySignedUddiEntity(signUDDI_JAXBObject, msg);

+             if (verifySigned_UDDI_JAXB_Object) {

+             System.out.println("signature validation passed (as expected)");

+             } else {

+             System.out.println("signature validation failed");

+             }

+             System.out.println(msg.get());

+             msg = new AtomicReference<String>();

+             System.out.println("signing it again for the hell of it");

+             signUDDI_JAXBObject = ds.signUddiEntity(signUDDI_JAXBObject);

+             DigSigUtil.JAXB_ToStdOut(signUDDI_JAXBObject);

+

+             verifySigned_UDDI_JAXB_Object = ds.verifySignedUddiEntity(signUDDI_JAXBObject, msg);

+             if (verifySigned_UDDI_JAXB_Object) {

+             System.out.println("signature validation passed (as expected)");

+             } else {

+             System.out.println("signature validation failed");

+             }

+             System.out.println(msg.get());

+             msg = new AtomicReference<String>();

+             System.out.println("signing");

+             //start from scratcha again

+             signUDDI_JAXBObject = ds.signUddiEntity(be);

+             System.out.println("signed");

+             //tweak it, then revalidate

+             System.out.println("tweak it, then verify again");

+             Description d = new Description();

+             d.setValue("Hello world");

+             signUDDI_JAXBObject.getDescription().add(d);

+             DigSigUtil.JAXB_ToStdOut(signUDDI_JAXBObject);

+

+             verifySigned_UDDI_JAXB_Object = ds.verifySignedUddiEntity(signUDDI_JAXBObject, msg);

+             if (verifySigned_UDDI_JAXB_Object) {

+             System.out.println("signature validation passed (not expected)");

+             } else {

+             System.out.println("signature validation failed (expected)");

+             }

+             System.out.println(msg.get());

+             //PrintBusinessInfo(findBusiness.getBusinessInfos());

+             //PrintBusinessDetails(findBusiness.getBusinessInfos(), token);

+             //Pr                    intServiceDetailsByBusiness(findBusiness.getBusinessInfos(), token);

+             */

+            System.out.println("this is the real test =====================");

+

+            // BusinessList findBusiness = GetBusinessList(token);

+

+            TModel be = GetBusinessDetails();//findBusiness.getBusinessInfos().getBusinessInfo().get(0));

+            be.getSignature().clear();

+            //DigSigUtil.JAXB_ToStdOut(be);

+            System.out.println("signing");

+            TModel signUDDI_JAXBObject = ds.signUddiEntity(be);

+            DigSigUtil.JAXB_ToStdOut(signUDDI_JAXBObject);

+            System.out.println("signed, saving");

+

+            SaveTModel sb = new SaveTModel();

+            sb.setAuthInfo(token);

+            sb.getTModel().add(signUDDI_JAXBObject);

+            publish.saveTModel(sb);

+            System.out.println("saved, fetching");

+

+            // findBusiness = GetBusinessList(token);

+            be = GetBusinessDetails();//findBusiness.getBusinessInfos().getBusinessInfo().get(0));

+            DigSigUtil.JAXB_ToStdOut(be);

+            System.out.println("verifing");

+            AtomicReference<String> msg = new AtomicReference<String>();

+            boolean verifySigned_UDDI_JAXB_Object = ds.verifySignedUddiEntity(be, msg);

+            if (verifySigned_UDDI_JAXB_Object) {

+                System.out.println("signature validation passed (expected)");

+            } else {

+                System.out.println("signature validation failed (not expected)");

+            }

+            System.out.println(msg.get());

+

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    /**

+     * Find all of the registered businesses. This list may be filtered based on

+     * access control rules

+     *

+     * @param token

+     * @return

+     * @throws Exception

+     */

+    private BusinessList GetBusinessList(String token) throws Exception {

+        FindBusiness fb = new FindBusiness();

+        fb.setAuthInfo(token);

+        Name n = new Name();

+        n.setValue("My Business 0 2013-04-11T12:40:52.753-04:00");

+        fb.getName().add(n);

+        org.uddi.api_v3.FindQualifiers fq = new org.uddi.api_v3.FindQualifiers();

+        fq.getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+

+        fb.setFindQualifiers(fq);

+        Name searchname = new Name();

+        searchname.setValue(UDDIConstants.WILDCARD);

+        //fb.getName().add(searchname);

+        BusinessList findBusiness = inquiry.findBusiness(fb);

+        return findBusiness;

+

+    }

+

+    /**

+     * Converts category bags of tmodels to a readable string

+     *

+     * @param categoryBag

+     * @return

+     */

+    private String CatBagToString(CategoryBag categoryBag) {

+        StringBuilder sb = new StringBuilder();

+        if (categoryBag == null) {

+            return "no data";

+        }

+        for (int i = 0; i < categoryBag.getKeyedReference().size(); i++) {

+            sb.append(KeyedReferenceToString(categoryBag.getKeyedReference().get(i)));

+        }

+        for (int i = 0; i < categoryBag.getKeyedReferenceGroup().size(); i++) {

+            sb.append("Key Ref Grp: TModelKey=");

+            for (int k = 0; k < categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) {

+                sb.append(KeyedReferenceToString(categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().get(k)));

+            }

+        }

+        return sb.toString();

+    }

+

+    private String KeyedReferenceToString(KeyedReference item) {

+        StringBuilder sb = new StringBuilder();

+        sb.append("Key Ref: Name=").

+                append(item.getKeyName()).

+                append(" Value=").

+                append(item.getKeyValue()).

+                append(" tModel=").

+                append(item.getTModelKey()).

+                append(System.getProperty("line.separator"));

+        return sb.toString();

+    }

+

+    private void PrintContacts(Contacts contacts) {

+        if (contacts == null) {

+            return;

+        }

+        for (int i = 0; i < contacts.getContact().size(); i++) {

+            System.out.println("Contact " + i + " type:" + contacts.getContact().get(i).getUseType());

+            for (int k = 0; k < contacts.getContact().get(i).getPersonName().size(); k++) {

+                System.out.println("Name: " + contacts.getContact().get(i).getPersonName().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getEmail().size(); k++) {

+                System.out.println("Email: " + contacts.getContact().get(i).getEmail().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getAddress().size(); k++) {

+                System.out.println("Address sort code " + contacts.getContact().get(i).getAddress().get(k).getSortCode());

+                System.out.println("Address use type " + contacts.getContact().get(i).getAddress().get(k).getUseType());

+                System.out.println("Address tmodel key " + contacts.getContact().get(i).getAddress().get(k).getTModelKey());

+                for (int x = 0; x < contacts.getContact().get(i).getAddress().get(k).getAddressLine().size(); x++) {

+                    System.out.println("Address line value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getValue());

+                    System.out.println("Address line key name " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyName());

+                    System.out.println("Address line key value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyValue());

+                }

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getDescription().size(); k++) {

+                System.out.println("Desc: " + contacts.getContact().get(i).getDescription().get(k).getValue());

+            }

+            for (int k = 0; k < contacts.getContact().get(i).getPhone().size(); k++) {

+                System.out.println("Phone: " + contacts.getContact().get(i).getPhone().get(k).getValue());

+            }

+        }

+

+    }

+

+    private void PrintServiceDetail(BusinessService get) {

+        if (get == null) {

+            return;

+        }

+        System.out.println("Name " + ListToString(get.getName()));

+        System.out.println("Desc " + ListToDescString(get.getDescription()));

+        System.out.println("Key " + (get.getServiceKey()));

+        System.out.println("Cat bag " + CatBagToString(get.getCategoryBag()));

+        if (!get.getSignature().isEmpty()) {

+            System.out.println("Item is digitally signed");

+        } else {

+            System.out.println("Item is not digitally signed");

+        }

+        PrintBindingTemplates(get.getBindingTemplates());

+    }

+

+    /**

+     * This function is useful for translating UDDI's somewhat complex data

+     * format to something that is more useful.

+     *

+     * @param bindingTemplates

+     */

+    private void PrintBindingTemplates(BindingTemplates bindingTemplates) {

+        if (bindingTemplates == null) {

+            return;

+        }

+        for (int i = 0; i < bindingTemplates.getBindingTemplate().size(); i++) {

+            System.out.println("Binding Key: " + bindingTemplates.getBindingTemplate().get(i).getBindingKey());

+            //TODO The UDDI spec is kind of strange at this point.

+            //An access point could be a URL, a reference to another UDDI binding key, a hosting redirector (which is 

+            //esscentially a pointer to another UDDI registry) or a WSDL Deployment

+            //From an end client's perspective, all you really want is the endpoint.

+            //http://uddi.org/pubs/uddi_v3.htm#_Ref8977716

+            //So if you have a wsdlDeployment useType, fetch the wsdl and parse for the invocation URL

+            //If its hosting director, you'll have to fetch that data from uddi recursively until the leaf node is found

+            //Consult the UDDI specification for more information

+

+            if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint() != null) {

+                System.out.println("Access Point: " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getValue() + " type " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType());

+                if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType() != null) {

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.END_POINT.toString())) {

+                        System.out.println("Use this access point value as an invocation endpoint.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.BINDING_TEMPLATE.toString())) {

+                        System.out.println("Use this access point value as a reference to another binding template.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.WSDL_DEPLOYMENT.toString())) {

+                        System.out.println("Use this access point value as a URL to a WSDL document, which presumably will have a real access point defined.");

+                    }

+                    if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.HOSTING_REDIRECTOR.toString())) {

+                        System.out.println("Use this access point value as an Inquiry URL of another UDDI registry, look up the same binding template there (usage varies).");

+                    }

+                }

+            }

+

+        }

+    }

+

+    private TModel GetBusinessDetails() throws Exception {

+        //   BusinessInfo get

+        GetTModelDetail r = new GetTModelDetail();

+        r.getTModelKey().add("uddi:juddi.apache.org:23748881-bb2f-4896-8283-4a15be1d0bc1");

+        return inquiry.getTModelDetail(r).getTModel().get(0);

+    }

+

+    private enum AuthStyle {

+

+        HTTP_BASIC,

+        HTTP_DIGEST,

+        HTTP_NTLM,

+        UDDI_AUTH,

+        HTTP_CLIENT_CERT

+    }

+

+    /**

+     * Gets a UDDI style auth token, otherwise, appends credentials to the ws

+     * proxies (not yet implemented)

+     *

+     * @param username

+     * @param password

+     * @param style

+     * @return

+     */

+    private String GetAuthKey(String username, String password, AuthStyle style) {

+        try {

+

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID(username);

+            getAuthTokenRoot.setCred(password);

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+            return rootAuthToken.getAuthInfo();

+        } catch (Exception ex) {

+            System.out.println("Could not authenticate with the provided credentials " + ex.getMessage());

+        }

+        return null;

+    }

+

+    /**

+     * Converts command line args into a simple property structure

+     *

+     * @param args

+     * @return

+     */

+    private Properties ParseArgs(String[] args) {

+

+        Properties p = new Properties();

+        if (args == null) {

+            return p;

+        }

+        for (int i = 0; i < args.length; i++) {

+            if (args[i] != null && args[i].length() >= 3) {

+                p.put(args[i].split("=")[0], args[i].split("=")[1]);

+            }

+        }

+        return p;

+    }

+

+    private void PrintBusinessInfo(BusinessInfos businessInfos) {

+        if (businessInfos == null) {

+            System.out.println("No data returned");

+        } else {

+            for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+                System.out.println("===============================================");

+                System.out.println("Business Key: " + businessInfos.getBusinessInfo().get(i).getBusinessKey());

+                System.out.println("Name: " + ListToString(businessInfos.getBusinessInfo().get(i).getName()));

+

+                System.out.println("Description: " + ListToDescString(businessInfos.getBusinessInfo().get(i).getDescription()));

+                System.out.println("Services:");

+                PrintServiceInfo(businessInfos.getBusinessInfo().get(i).getServiceInfos());

+            }

+        }

+    }

+

+    private String ListToString(List<Name> name) {

+        StringBuilder sb = new StringBuilder();

+        for (int i = 0; i < name.size(); i++) {

+            sb.append(name.get(i).getValue()).append(" ");

+        }

+        return sb.toString();

+    }

+

+    private String ListToDescString(List<Description> name) {

+        StringBuilder sb = new StringBuilder();

+        for (int i = 0; i < name.size(); i++) {

+            sb.append(name.get(i).getValue()).append(" ");

+        }

+        return sb.toString();

+    }

+

+    private void PrintServiceInfo(ServiceInfos serviceInfos) {

+        for (int i = 0; i < serviceInfos.getServiceInfo().size(); i++) {

+            System.out.println("-------------------------------------------");

+            System.out.println("Service Key: " + serviceInfos.getServiceInfo().get(i).getServiceKey());

+            System.out.println("Owning Business Key: " + serviceInfos.getServiceInfo().get(i).getBusinessKey());

+            System.out.println("Name: " + ListToString(serviceInfos.getServiceInfo().get(i).getName()));

+        }

+    }

+

+    private void PrintBusinessDetails(BusinessInfos businessInfos, String token) throws Exception {

+        GetBusinessDetail gbd = new GetBusinessDetail();

+        gbd.setAuthInfo(token);

+        for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+            gbd.getBusinessKey().add(businessInfos.getBusinessInfo().get(i).getBusinessKey());

+        }

+        BusinessDetail businessDetail = inquiry.getBusinessDetail(gbd);

+        for (int i = 0; i < businessDetail.getBusinessEntity().size(); i++) {

+            System.out.println("Business Detail - key: " + businessDetail.getBusinessEntity().get(i).getBusinessKey());

+            System.out.println("Name: " + ListToString(businessDetail.getBusinessEntity().get(i).getName()));

+            System.out.println("CategoryBag: " + CatBagToString(businessDetail.getBusinessEntity().get(i).getCategoryBag()));

+            PrintContacts(businessDetail.getBusinessEntity().get(i).getContacts());

+        }

+    }

+

+    private void PrintServiceDetailsByBusiness(BusinessInfos businessInfos, String token) throws Exception {

+        for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) {

+            GetServiceDetail gsd = new GetServiceDetail();

+            for (int k = 0; k < businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().size(); k++) {

+                gsd.getServiceKey().add(businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().get(k).getServiceKey());

+            }

+            gsd.setAuthInfo(token);

+            System.out.println("Fetching data for business " + businessInfos.getBusinessInfo().get(i).getBusinessKey());

+            ServiceDetail serviceDetail = inquiry.getServiceDetail(gsd);

+            for (int k = 0; k < serviceDetail.getBusinessService().size(); k++) {

+                PrintServiceDetail(serviceDetail.getBusinessService().get(k));

+            }

+            System.out.println("................");

+

+        }

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiFindBinding.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiFindBinding.java
new file mode 100644
index 0000000..4177d57
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiFindBinding.java
@@ -0,0 +1,93 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.GregorianCalendar;

+import javax.xml.datatype.DatatypeFactory;

+import javax.xml.datatype.XMLGregorianCalendar;

+import org.apache.juddi.api_v3.AccessPointType;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.apache.juddi.v3_service.JUDDIApiPortType;

+import org.uddi.api_v3.*;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+

+/**

+ *

+ * @author Alex

+ */

+public class UddiFindBinding {

+

+    private static UDDISecurityPortType security = null;

+    private static JUDDIApiPortType juddiApi = null;

+    private static UDDIPublicationPortType publish = null;

+    private static UDDIInquiryPortType inquiry = null;

+

+    public UddiFindBinding() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            juddiApi = transport.getJUDDIApiService();

+            publish = transport.getUDDIPublishService();

+            inquiry = transport.getUDDIInquiryService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public void publish() {

+        try {

+            // Setting up the values to get an authentication token for the 'root' user ('root' user has admin privileges

+            // and can save other publishers).

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("root");

+            getAuthTokenRoot.setCred("root");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+            FindService fs = new FindService();

+            fs.getName().add(new Name());

+            fs.getName().get(0).setValue("%");

+            fs.setFindQualifiers(new FindQualifiers());

+            fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+

+            ServiceList findService = inquiry.findService(fs);

+            System.out.println(findService.getServiceInfos().getServiceInfo().size());

+            GetServiceDetail gs = new GetServiceDetail();

+            for (int i = 0; i < findService.getServiceInfos().getServiceInfo().size(); i++) {

+                gs.getServiceKey().add(findService.getServiceInfos().getServiceInfo().get(i).getServiceKey());

+            }

+

+            ServiceDetail serviceDetail = inquiry.getServiceDetail(gs);

+            for (int i = 0; i < serviceDetail.getBusinessService().size(); i++) {

+                System.out.println(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size());

+                for (int k = 0; k < serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size(); k++) {

+                    System.out.println(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getAccessPoint().getValue());

+                }

+            }

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public static void main(String args[]) {

+        UddiFindBinding sp = new UddiFindBinding();

+        sp.publish();

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiFindService.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiFindService.java
new file mode 100644
index 0000000..fd9a950
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiFindService.java
@@ -0,0 +1,79 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import javax.xml.bind.JAXB;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.apache.juddi.v3_service.JUDDIApiPortType;

+import org.uddi.api_v3.*;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+

+/**

+ *

+ * @author Alex

+ */

+public class UddiFindService {

+

+    private static UDDISecurityPortType security = null;

+    private static JUDDIApiPortType juddiApi = null;

+    private static UDDIPublicationPortType publish = null;

+    private static UDDIInquiryPortType inquiry = null;

+

+    public UddiFindService() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);

+            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            juddiApi = transport.getJUDDIApiService();

+            publish = transport.getUDDIPublishService();

+            inquiry = transport.getUDDIInquiryService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public void find() {

+        try {

+            // Setting up the values to get an authentication token for the 'root' user ('root' user has admin privileges

+            // and can save other publishers).

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("root");

+            getAuthTokenRoot.setCred("root");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+            GetServiceDetail fs = new GetServiceDetail();

+            fs.setAuthInfo(rootAuthToken.getAuthInfo());

+            fs.getServiceKey().add("mykey");

+            ServiceDetail serviceDetail = inquiry.getServiceDetail(fs);

+            if (serviceDetail == null || serviceDetail.getBusinessService().isEmpty()) {

+                System.out.println("mykey is not registered");

+            } else {

+                JAXB.marshal(serviceDetail, System.out);

+            }

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public static void main(String args[]) {

+        UddiFindService sp = new UddiFindService();

+        sp.find();

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiRelatedBusinesses.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiRelatedBusinesses.java
new file mode 100644
index 0000000..771afef
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiRelatedBusinesses.java
@@ -0,0 +1,138 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.ArrayList;

+import java.util.GregorianCalendar;

+import java.util.List;

+import javax.xml.datatype.DatatypeFactory;

+import javax.xml.datatype.XMLGregorianCalendar;

+import javax.xml.ws.Holder;

+import org.apache.juddi.api_v3.AccessPointType;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.apache.juddi.v3_service.JUDDIApiPortType;

+import org.uddi.api_v3.*;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+

+/**

+ *

+ * @author Alex

+ */

+public class UddiRelatedBusinesses {

+

+    private static UDDISecurityPortType security = null;

+    private static JUDDIApiPortType juddiApi = null;

+    private static UDDIPublicationPortType publish = null;

+

+    public UddiRelatedBusinesses() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            juddiApi = transport.getJUDDIApiService();

+            publish = transport.getUDDIPublishService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public void publish() {

+        try {

+            // Setting up the values to get an authentication token for the 'root' user ('root' user has admin privileges

+            // and can save other publishers).

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("root");

+            getAuthTokenRoot.setCred("root");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+

+

+            DatatypeFactory df = DatatypeFactory.newInstance();

+            GregorianCalendar gcal = new GregorianCalendar();

+            gcal.setTimeInMillis(System.currentTimeMillis());

+            XMLGregorianCalendar xcal = df.newXMLGregorianCalendar(gcal);

+            for (int i = 0; i < 1; i++) {

+                // Creating the parent business entity that will contain our service.

+                BusinessEntity myBusEntity = new BusinessEntity();

+                Name myBusName = new Name();

+                myBusName.setLang("en");

+                myBusName.setValue("My Business Dept 1" + " " + xcal.toString());

+                myBusEntity.getName().add(myBusName);

+

+                // Adding the business entity to the "save" structure, using our publisher's authentication info and saving away.

+                SaveBusiness sb = new SaveBusiness();

+                sb.getBusinessEntity().add(myBusEntity);

+                sb.setAuthInfo(rootAuthToken.getAuthInfo());

+                BusinessDetail bd = publish.saveBusiness(sb);

+                String myBusKey1 = bd.getBusinessEntity().get(0).getBusinessKey();

+                System.out.println("myBusiness key:  " + myBusKey1);

+

+

+                myBusEntity = new BusinessEntity();

+                myBusName = new Name();

+                myBusName.setLang("en");

+                myBusName.setValue("My Business Dept 2" + " " + xcal.toString());

+                myBusEntity.getName().add(myBusName);

+

+                // Adding the business entity to the "save" structure, using our publisher's authentication info and saving away.

+                sb = new SaveBusiness();

+                sb.getBusinessEntity().add(myBusEntity);

+                sb.setAuthInfo(rootAuthToken.getAuthInfo());

+                bd = publish.saveBusiness(sb);

+                String myBusKey2 = bd.getBusinessEntity().get(0).getBusinessKey();

+                System.out.println("myBusiness key:  " + myBusKey2);

+

+                Holder<List<PublisherAssertion>> x = new Holder<List<PublisherAssertion>>();

+                PublisherAssertion pa = new PublisherAssertion();

+                pa.setFromKey(myBusKey2);

+                pa.setToKey(myBusKey1);

+                pa.setKeyedReference(new KeyedReference());

+                pa.getKeyedReference().setKeyName("Subsidiary");

+                pa.getKeyedReference().setKeyValue("parent-child");

+

+                pa.getKeyedReference().setTModelKey("uddi:uddi.org:relationships");

+                x.value = new ArrayList<PublisherAssertion>();

+                x.value.add(pa);

+                publish.setPublisherAssertions(rootAuthToken.getAuthInfo(), x);

+

+

+                x = new Holder<List<PublisherAssertion>>();

+                pa = new PublisherAssertion();

+                pa.setFromKey(myBusKey1);

+                pa.setToKey(myBusKey2);

+                pa.setKeyedReference(new KeyedReference());

+                pa.getKeyedReference().setKeyName("Subsidiary");

+                pa.getKeyedReference().setKeyValue("parent-child");

+

+                pa.getKeyedReference().setTModelKey("uddi:uddi.org:relationships");

+                x.value = new ArrayList<PublisherAssertion>();

+                x.value.add(pa);

+                publish.setPublisherAssertions(rootAuthToken.getAuthInfo(), x);

+

+

+            }

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public static void main(String args[]) {

+        UddiRelatedBusinesses sp = new UddiRelatedBusinesses();

+        sp.publish();

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiSubscribe.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiSubscribe.java
new file mode 100644
index 0000000..3e1add5
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiSubscribe.java
@@ -0,0 +1,291 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.ArrayList;

+import java.util.GregorianCalendar;

+import java.util.List;

+import javax.xml.datatype.DatatypeFactory;

+import javax.xml.datatype.XMLGregorianCalendar;

+import javax.xml.ws.Endpoint;

+import javax.xml.ws.Holder;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.apache.juddi.v3_service.JUDDIApiPortType;

+import org.uddi.api_v3.*;

+import org.uddi.sub_v3.DeleteSubscription;

+import org.uddi.sub_v3.Subscription;

+import org.uddi.sub_v3.SubscriptionFilter;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+import org.uddi.v3_service.UDDISubscriptionPortType;

+

+/**

+ *

+ * @author Alex

+ */

+public class UddiSubscribe {

+

+    private static UDDISecurityPortType security = null;

+    private static JUDDIApiPortType juddiApi = null;

+    private static UDDIPublicationPortType publish = null;

+    private static UDDIInquiryPortType uddiInquiryService = null;

+    private static UDDISubscriptionPortType uddiSubscriptionService = null;

+    boolean callbackRecieved = false;

+

+    public UddiSubscribe() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            juddiApi = transport.getJUDDIApiService();

+            publish = transport.getUDDIPublishService();

+            uddiInquiryService = transport.getUDDIInquiryService();

+            uddiSubscriptionService = transport.getUDDISubscriptionService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public void publish() {

+        try {

+            // Setting up the values to get an authentication token for the 'root' user ('root' user has admin privileges

+            // and can save other publishers).

+

+

+

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("root");

+            getAuthTokenRoot.setCred("root");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+

+            getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("uddi");

+            getAuthTokenRoot.setCred("uddi");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken uddiAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("uddi AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+

+

+

+

+

+            DatatypeFactory df = DatatypeFactory.newInstance();

+            GregorianCalendar gcal = new GregorianCalendar();

+            gcal.setTimeInMillis(System.currentTimeMillis());

+            XMLGregorianCalendar xcal = df.newXMLGregorianCalendar(gcal);

+

+            // Creating the parent business entity that will contain our service.

+            BusinessEntity myBusEntity = new BusinessEntity();

+            Name myBusName = new Name();

+            myBusName.setLang("en");

+            myBusName.setValue("My Business Dept 1" + " " + xcal.toString());

+            myBusEntity.getName().add(myBusName);

+

+            // Adding the business entity to the "save" structure, using our publisher's authentication info and saving away.

+            SaveBusiness sb = new SaveBusiness();

+            sb.getBusinessEntity().add(myBusEntity);

+            sb.setAuthInfo(rootAuthToken.getAuthInfo());

+            BusinessDetail bd = publish.saveBusiness(sb);

+            String myBusKey1 = bd.getBusinessEntity().get(0).getBusinessKey();

+            System.out.println("myBusiness key:  " + myBusKey1);

+

+            Holder<List<Subscription>> subs = new Holder<List<Subscription>>();

+            subs.value = new ArrayList<Subscription>();

+            Subscription sub = new Subscription();

+            sub.setMaxEntities(20);

+            sub.setSubscriptionFilter(new SubscriptionFilter());

+            sub.getSubscriptionFilter().setGetBusinessDetail(new GetBusinessDetail());

+            sub.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey().add(myBusKey1);

+            sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport());

+            //  sub.getSubscriptionFilter().s

+            //uddi:juddi.apache.org:72619170-d391-41cb-99a0-238cb0b76eb9

+            subs.value.add(sub);

+            uddiSubscriptionService.saveSubscription(rootAuthToken.getAuthInfo(), subs);

+

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public static void main(String args[]) throws Exception {

+        UddiSubscribe sp = new UddiSubscribe();

+        sp.SetupAndRegisterCallback();

+        //sp.publish();

+    }

+

+    private void SetupAndRegisterCallback() throws Exception {

+        String url = "http://localhost:7777/uddi_subscription_back";

+        Endpoint ep = Endpoint.publish(url, new ClientSubscriptionCallback(this));

+

+

+        DatatypeFactory df = DatatypeFactory.newInstance();

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.setTimeInMillis(System.currentTimeMillis());

+        XMLGregorianCalendar xcal = df.newXMLGregorianCalendar(gcal);

+

+        //?? note, you won't get subscription updates if you own the entity, at least with juddi

+

+

+        //in this case, the user "root" is subscribing to a business entity published by the user "uddi"

+        //"uddi" then updates the item and then logically "root" should be notified

+        //before this happens "root" needs to publish a business, service and binding template that is used for the 

+        //subscription callback

+

+        /*

+         * so the order of operation is

+         * 1) uddi publisher's an entity 

+         * 2) root wants updates on uddi's entity

+         * 3) root starts a subscription listener service to process updates

+         * 4) root creates a business and service with a bindingtemplate with the access point value = the the subscription listener's address

+         * 5) root creates a subscription

+         * 6) uddi updates the entity

+         * 7) root's sub listener is notified (hopefully)

+         * 

+         */

+

+

+        GetAuthToken getAuthTokenRoot = new GetAuthToken();

+        getAuthTokenRoot.setUserID("root");

+        getAuthTokenRoot.setCred("root");

+

+        // Making API call that retrieves the authentication token for the 'root' user.

+        AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+        System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+

+        getAuthTokenRoot = new GetAuthToken();

+        getAuthTokenRoot.setUserID("uddi");

+        getAuthTokenRoot.setCred("uddi");

+

+        // Making API call that retrieves the authentication token for the 'root' user.

+        AuthToken uddiAuthToken = security.getAuthToken(getAuthTokenRoot);

+        System.out.println("uddi AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+        //first publish a business user the user uddi

+        BusinessEntity myBusEntity = new BusinessEntity();

+        Name myBusName = new Name();

+        myBusName.setLang("en");

+        myBusName.setValue("User UDDI's Business" + " " + xcal.toString());

+        myBusEntity.getName().add(myBusName);

+        SaveBusiness sb = new SaveBusiness();

+        sb.getBusinessEntity().add(myBusEntity);

+        sb.setAuthInfo(uddiAuthToken.getAuthInfo());

+        BusinessDetail bd = publish.saveBusiness(sb);

+

+        String keyRootSubscribesTo = bd.getBusinessEntity().get(0).getBusinessKey();

+        System.out.println("UDDI's business saved as biz key " + keyRootSubscribesTo);

+        BusinessEntity uddisBusiness = bd.getBusinessEntity().get(0);

+

+        //reset

+        List<Subscription> subscriptions = uddiSubscriptionService.getSubscriptions(rootAuthToken.getAuthInfo());

+        DeleteSubscription ds = new DeleteSubscription();

+        ds.setAuthInfo(rootAuthToken.getAuthInfo());

+        for (int i = 0; i < subscriptions.size(); i++) {

+            ds.getSubscriptionKey().add(subscriptions.get(i).getSubscriptionKey());

+        }

+        if (!ds.getSubscriptionKey().isEmpty()) {

+            System.out.println("removing " + ds.getSubscriptionKey().size() + " old subscriptions");

+            uddiSubscriptionService.deleteSubscription(ds);

+        }

+

+        // Creating the parent business entity that will contain our service.

+        myBusEntity = new BusinessEntity();

+        myBusName = new Name();

+        myBusName.setLang("en");

+        myBusName.setValue("My Business Dept 1" + " " + xcal.toString());

+        myBusEntity.getName().add(myBusName);

+        myBusEntity.setBusinessServices(new BusinessServices());

+        BusinessService bs = new BusinessService();

+        bs.getName().add(new Name());

+        bs.getName().get(0).setValue("my callback endpoint");

+

+        bs.setBindingTemplates(new BindingTemplates());

+        BindingTemplate bt = new BindingTemplate();

+        //bt.setCategoryBag(new CategoryBag());

+        //   KeyedReference kr = new KeyedReference();

+        //         kr.setTModelKey(UDDIConstants.);

+        // bt.getCategoryBag().getKeyedReference().add(kr);

+        bt.setAccessPoint(new AccessPoint());

+        bt.getAccessPoint().setValue(url);

+        bt.getAccessPoint().setUseType("endPoint");

+        //Added per Kurt

+        TModelInstanceInfo instanceInfo = new TModelInstanceInfo();

+        instanceInfo.setTModelKey("uddi:uddi.org:transport:http");

+        bt.setTModelInstanceDetails(new TModelInstanceDetails());

+        bt.getTModelInstanceDetails().getTModelInstanceInfo().add(instanceInfo);

+

+        bs.getBindingTemplates().getBindingTemplate().add(bt);

+

+

+        myBusEntity.getBusinessServices().getBusinessService().add(bs);

+        // Adding the business entity to the "save" structure, using our publisher's authentication info and saving away.

+        sb = new SaveBusiness();

+        sb.getBusinessEntity().add(myBusEntity);

+        sb.setAuthInfo(rootAuthToken.getAuthInfo());

+        bd = publish.saveBusiness(sb);

+

+        String callbackBindingTemplate = bd.getBusinessEntity().get(0).getBusinessServices().getBusinessService().get(0).getBindingTemplates().getBindingTemplate().get(0).getBindingKey();

+        System.out.println("myBusiness key:  " + bd.getBusinessEntity().get(0).getBusinessKey());

+        System.out.println("callback binding template key:  " + callbackBindingTemplate);

+

+        System.out.println("i'll stay awake until someone kills me");

+

+        Holder<List<Subscription>> subscription = new Holder<List<Subscription>>();

+        subscription.value = new ArrayList<Subscription>();

+        Subscription sub = new Subscription();

+        sub.setBindingKey(callbackBindingTemplate);

+        //this is required

+        sub.setBrief(true);

+        sub.setNotificationInterval(df.newDuration(0));

+        sub.setSubscriptionFilter(new SubscriptionFilter());

+        sub.getSubscriptionFilter().setGetBusinessDetail(new GetBusinessDetail());

+        sub.getSubscriptionFilter().getGetBusinessDetail().setAuthInfo(rootAuthToken.getAuthInfo());

+        sub.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey().add(keyRootSubscribesTo);

+        subscription.value.add(sub);

+        uddiSubscriptionService.saveSubscription(rootAuthToken.getAuthInfo(), subscription);

+

+

+        //ok now we're ready to mess around with the user's "uddi" business

+        //in this case, we're just setting the lang

+        uddisBusiness.getName().get(0).setLang("en");

+        sb = new SaveBusiness();

+        sb.setAuthInfo(uddiAuthToken.getAuthInfo());

+        sb.getBusinessEntity().add(uddisBusiness);

+        publish.saveBusiness(sb);

+

+        long timer = 310000;

+        while (timer > 0 && !callbackRecieved) {

+            Thread.sleep(5000);

+            timer = timer - 5000;

+        }

+        ep.stop();

+        if (callbackRecieved) {

+            System.out.println("Callback recieved successfully");

+            System.exit(0);

+        } else {

+            System.out.println("Callback NOT recieved!");

+            System.exit(1);

+        }

+

+        //TODO clean up all the crap we just made

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiSubscribeGet.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiSubscribeGet.java
new file mode 100644
index 0000000..7c63b0f
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiSubscribeGet.java
@@ -0,0 +1,92 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.ArrayList;

+import java.util.GregorianCalendar;

+import java.util.List;

+import javax.xml.bind.JAXB;

+import javax.xml.datatype.DatatypeFactory;

+import javax.xml.datatype.XMLGregorianCalendar;

+import javax.xml.ws.Endpoint;

+import javax.xml.ws.Holder;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.apache.juddi.v3_service.JUDDIApiPortType;

+import org.uddi.api_v3.*;

+import org.uddi.sub_v3.DeleteSubscription;

+import org.uddi.sub_v3.Subscription;

+import org.uddi.sub_v3.SubscriptionFilter;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+import org.uddi.v3_service.UDDISubscriptionPortType;

+

+/**

+ *

+ * @author Alex

+ */

+public class UddiSubscribeGet {

+

+    private static UDDISecurityPortType security = null;

+    private static JUDDIApiPortType juddiApi = null;

+    private static UDDIPublicationPortType publish = null;

+    private static UDDIInquiryPortType uddiInquiryService = null;

+    private static UDDISubscriptionPortType uddiSubscriptionService = null;

+    boolean callbackRecieved = false;

+

+    public UddiSubscribeGet() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            juddiApi = transport.getJUDDIApiService();

+            publish = transport.getUDDIPublishService();

+            uddiInquiryService = transport.getUDDIInquiryService();

+            uddiSubscriptionService = transport.getUDDISubscriptionService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    void go() {

+        try {

+            // Setting up the values to get an authentication token for the 'root' user ('root' user has admin privileges

+            // and can save other publishers).

+

+

+

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("root");

+            getAuthTokenRoot.setCred("root");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+            List<Subscription> subscriptions = uddiSubscriptionService.getSubscriptions((rootAuthToken.getAuthInfo()));

+            for (int i = 0; i < subscriptions.size(); i++) {

+                System.out.println("===============================");

+                JAXB.marshal(subscriptions.get(i), System.out);

+            }

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public static void main(String args[]) throws Exception {

+        UddiSubscribeGet sp = new UddiSubscribeGet();

+

+        sp.go();

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiSubscribeValidate.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiSubscribeValidate.java
new file mode 100644
index 0000000..30b9edb
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/UddiSubscribeValidate.java
@@ -0,0 +1,107 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package uddi.createbulk;

+

+import java.util.ArrayList;

+import java.util.Calendar;

+import java.util.GregorianCalendar;

+import java.util.List;

+import javax.xml.datatype.DatatypeFactory;

+import javax.xml.datatype.XMLGregorianCalendar;

+import javax.xml.ws.Holder;

+import org.apache.juddi.v3.client.config.UDDIClient;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.apache.juddi.v3_service.JUDDIApiPortType;

+import org.uddi.api_v3.*;

+import org.uddi.sub_v3.CoveragePeriod;

+import org.uddi.sub_v3.GetSubscriptionResults;

+import org.uddi.sub_v3.Subscription;

+import org.uddi.sub_v3.SubscriptionFilter;

+import org.uddi.sub_v3.SubscriptionResultsList;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+import org.uddi.v3_service.UDDISubscriptionListenerPortType;

+import org.uddi.v3_service.UDDISubscriptionPortType;

+

+/**

+ *

+ * @author Alex

+ */

+public class UddiSubscribeValidate {

+

+    private static UDDISecurityPortType security = null;

+    private static JUDDIApiPortType juddiApi = null;

+    private static UDDIPublicationPortType publish = null;

+    private static UDDIInquiryPortType uddiInquiryService = null;

+    private static UDDISubscriptionPortType uddiSubscriptionService = null;

+    private static UDDISubscriptionListenerPortType uddiSubscriptionListenerService = null;

+

+    public UddiSubscribeValidate() {

+        try {

+            // create a manager and read the config in the archive; 

+            // you can use your config file name

+            UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");

+            // register the clerkManager with the client side container

+            UDDIClientContainer.addClient(clerkManager);            // a ClerkManager can be a client to multiple UDDI nodes, so 

+            // supply the nodeName (defined in your uddi.xml.

+            // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml

+            Transport transport = clerkManager.getTransport("default");

+            // Now you create a reference to the UDDI API

+            security = transport.getUDDISecurityService();

+            juddiApi = transport.getJUDDIApiService();

+            publish = transport.getUDDIPublishService();

+            uddiInquiryService = transport.getUDDIInquiryService();

+            uddiSubscriptionService = transport.getUDDISubscriptionService();

+            uddiSubscriptionListenerService = transport.getUDDISubscriptionListenerService();

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public void publish() {

+        try {

+            // Setting up the values to get an authentication token for the 'root' user ('root' user has admin privileges

+            // and can save other publishers).

+            GetAuthToken getAuthTokenRoot = new GetAuthToken();

+            getAuthTokenRoot.setUserID("root");

+            getAuthTokenRoot.setCred("root");

+

+            // Making API call that retrieves the authentication token for the 'root' user.

+            AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);

+            System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo());

+

+//uddiSubscriptionListenerService.notifySubscriptionListener()

+

+            DatatypeFactory df = DatatypeFactory.newInstance();

+            GregorianCalendar gcal = new GregorianCalendar();

+            gcal.setTimeInMillis(System.currentTimeMillis());

+            XMLGregorianCalendar xcal = df.newXMLGregorianCalendar(gcal);

+            for (int i = 0; i < 1; i++) {

+                //

+                GetSubscriptionResults req = new GetSubscriptionResults();

+                req.setAuthInfo(rootAuthToken.getAuthInfo());

+                req.setSubscriptionKey("uddi:juddi.apache.org:72619170-d391-41cb-99a0-238cb0b76eb9");

+                req.setCoveragePeriod(new CoveragePeriod());

+                req.getCoveragePeriod().setEndPoint(xcal);

+

+

+                gcal = new GregorianCalendar();

+                gcal.add(Calendar.MONTH, -1);

+                req.getCoveragePeriod().setStartPoint(df.newXMLGregorianCalendar(gcal));

+                SubscriptionResultsList subscriptionResults = uddiSubscriptionService.getSubscriptionResults(req);

+                System.out.println("items modified: " + subscriptionResults.getBusinessDetail().getBusinessEntity().size());

+            }

+        } catch (Exception e) {

+            e.printStackTrace();

+        }

+    }

+

+    public static void main(String args[]) {

+        UddiSubscribeValidate sp = new UddiSubscribeValidate();

+        sp.publish();

+    }

+}

diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/WsdlImport.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/WsdlImport.java
new file mode 100644
index 0000000..eecd2a2
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/WsdlImport.java
@@ -0,0 +1,197 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package uddi.createbulk;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import javax.wsdl.Definition;
+import javax.wsdl.PortType;
+import javax.xml.namespace.QName;
+import org.apache.juddi.jaxb.PrintUDDI;
+import org.apache.juddi.v3.client.config.UDDIClerk;
+import org.apache.juddi.v3.client.config.UDDIClerkManager;
+import org.apache.juddi.v3.client.config.UDDIClientContainer;
+import org.apache.juddi.v3.client.mapping.ReadWSDL;
+import org.apache.juddi.v3.client.mapping.URLLocalizerDefaultImpl;
+import org.apache.juddi.v3.client.mapping.WSDL2UDDI;
+import org.apache.juddi.v3.client.transport.Transport;
+import org.apache.juddi.v3_service.JUDDIApiPortType;
+import org.uddi.api_v3.AuthToken;
+import org.uddi.api_v3.BusinessEntity;
+import org.uddi.api_v3.BusinessService;
+import org.uddi.api_v3.BusinessServices;
+import org.uddi.api_v3.GetAuthToken;
+import org.uddi.api_v3.Name;
+import org.uddi.api_v3.SaveBusiness;
+import org.uddi.api_v3.SaveTModel;
+import org.uddi.api_v3.TModel;
+import org.uddi.v3_service.UDDIPublicationPortType;
+import org.uddi.v3_service.UDDISecurityPortType;
+
+/**
+ *
+ * @author Alex O'Ree
+ */
+public class WsdlImport {
+
+    static PrintUDDI<TModel> pTModel = new PrintUDDI<TModel>();
+    static Properties properties = new Properties();
+    static String wsdlURL = null;
+    private static UDDISecurityPortType security = null;
+    private static JUDDIApiPortType juddiApi = null;
+    private static UDDIPublicationPortType publish = null;
+
+    public static void main(String[] args) throws Exception {
+
+        // create a manager and read the config in the archive; 
+        // you can use your config file name
+        UDDIClerkManager clerkManager = new UDDIClerkManager("META-INF/simple-publish-uddi.xml");
+        // register the clerkManager with the client side container
+        UDDIClientContainer.addClerkManager(clerkManager);
+        // a ClerkManager can be a client to multiple UDDI nodes, so 
+        // supply the nodeName (defined in your uddi.xml.
+        // The transport can be WS, inVM, RMI etc which is defined in the uddi.xml
+        Transport transport = clerkManager.getTransport("default");
+        // Now you create a reference to the UDDI API
+        security = transport.getUDDISecurityService();
+        publish = transport.getUDDIPublishService();
+
+        //step one, get a token
+        GetAuthToken getAuthTokenRoot = new GetAuthToken();
+        getAuthTokenRoot.setUserID("uddi");
+        getAuthTokenRoot.setCred("uddi");
+
+        // Making API call that retrieves the authentication token for the 'root' user.
+        AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot);
+
+
+
+        //step two, identify the key used for all your stuff
+        //you must have a key generator created already
+        //here, we are assuming that you don't have one
+        URL url = new URL("http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL");
+        //http://www.bccs.uni.no/~pve002/wsdls/ebi-mafft.wsdl");
+        //http://www.webservicex.net/GenericNAICS.asmx?WSDL");
+//http://www.webservicex.net/stockquote.asmx?WSDL");
+        //http://www.webservicex.com/globalweather.asmx?WSDL");
+        //http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl");
+        String domain = url.getHost();
+        PrintUDDI<TModel> tmodelPrinter = new PrintUDDI<TModel>();
+        TModel keygen = UDDIClerk.createKeyGenator("uddi:" + domain + ":keygenerator", domain, "en");
+        //save the keygen
+        SaveTModel stm = new SaveTModel();
+        stm.setAuthInfo(rootAuthToken.getAuthInfo());
+        stm.getTModel().add(keygen);
+        System.out.println(tmodelPrinter.print(keygen));
+        //publish.saveTModel(stm);
+
+
+        //step three, we have two options
+        //1) import the wsdl's services into a brand new business
+        //2) import the wsdl's services into an existing business
+
+
+
+        //in either case, we're going to have to parse the WSDL
+
+        ReadWSDL rw = new ReadWSDL();
+        Definition wsdlDefinition = rw.readWSDL(url);
+
+        properties.put("keyDomain", domain);
+        properties.put("businessName", domain);
+        properties.put("serverName", url.getHost());
+        properties.put("serverPort", url.getPort());
+        wsdlURL = wsdlDefinition.getDocumentBaseURI();
+        WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(null, new URLLocalizerDefaultImpl(), properties);
+        BusinessServices businessServices = wsdl2UDDI.createBusinessServices(wsdlDefinition);
+        @SuppressWarnings("unchecked")
+        Map<QName, PortType> portTypes = (Map<QName, PortType>) wsdlDefinition.getAllPortTypes();
+        Set<TModel> portTypeTModels = wsdl2UDDI.createWSDLPortTypeTModels(wsdlURL, portTypes);
+        Map allBindings = wsdlDefinition.getAllBindings();
+        Set<TModel> createWSDLBindingTModels = wsdl2UDDI.createWSDLBindingTModels(wsdlURL, allBindings);
+        //When parsing a WSDL, there's really two things going on
+        //1) convert a bunch of stuff (the portTypes) to tModels
+        //2) convert the service definition to a BusinessService
+
+        //Since the service depends on the tModel, we have to save the tModels first
+        SaveTModel tms = new SaveTModel();
+        tms.setAuthInfo(rootAuthToken.getAuthInfo());
+
+        TModel[] tmodels = portTypeTModels.toArray(new TModel[0]);
+        for (int i = 0; i < tmodels.length; i++) {
+            System.out.println(tmodelPrinter.print(tmodels[i]));
+            tms.getTModel().add(tmodels[i]);
+        }
+
+        tmodels = createWSDLBindingTModels.toArray(new TModel[0]);
+        for (int i = 0; i < tmodels.length; i++) {
+            System.out.println(tmodelPrinter.print(tmodels[i]));
+            tms.getTModel().add(tmodels[i]);
+        }
+
+        //publish.saveTModel(stm);
+
+
+
+        //finaly, we're ready to save all of the services defined in the WSDL
+        //again, we're creating a new business, if you have one already, look it up using the Inquiry getBusinessDetails
+
+        PrintUDDI<BusinessService> servicePrinter = new PrintUDDI<BusinessService>();
+        for (int i = 0; i < businessServices.getBusinessService().size(); i++) {
+            System.out.println(servicePrinter.print(businessServices.getBusinessService().get(i)));
+        }
+
+
+
+        SaveBusiness sb = new SaveBusiness();
+        sb.setAuthInfo(rootAuthToken.getAuthInfo());
+        BusinessEntity be = new BusinessEntity();
+        be.setBusinessKey(businessServices.getBusinessService().get(0).getBusinessKey());
+        be.getName().add(new Name());
+        be.getName().get(0).setValue(domain);
+        be.getName().get(0).setLang("en");
+        be.setBusinessServices(businessServices);
+        sb.getBusinessEntity().add(be);
+        PrintUDDI<SaveBusiness> sbp = new PrintUDDI<SaveBusiness>();
+        System.out.println("Request " + sbp.print(sb));
+       // publish.saveBusiness(sb);
+
+        //and we're done
+
+        //Be sure to report any problems to the jUDDI JIRA bug tracker at 
+        //https://issues.apache.org/jira/browse/JUDDI
+    }
+
+    private static void StripKeys(BusinessServices businessServices) {
+
+        for (int i = 0; i < businessServices.getBusinessService().size(); i++) {
+            businessServices.getBusinessService().get(i).setBusinessKey(null);
+            for (int k = 0; k < businessServices.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size(); k++) {
+                businessServices.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).setBindingKey(null);
+            }
+        }
+    }
+
+    private void someting() throws Exception{
+        URL url = new URL("http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl");
+        String domain = url.getHost();
+        ReadWSDL rw = new ReadWSDL();
+        Definition wsdlDefinition = rw.readWSDL(url);
+        properties.put("keyDomain", domain);
+        properties.put("businessName", domain);
+        properties.put("serverName", url.getHost());
+        properties.put("serverPort", url.getPort());
+        wsdlURL = wsdlDefinition.getDocumentBaseURI();
+        WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(null, new URLLocalizerDefaultImpl(), properties);
+        BusinessServices businessServices = wsdl2UDDI.createBusinessServices(wsdlDefinition);
+        Map<QName, PortType> portTypes = (Map<QName, PortType>) wsdlDefinition.getAllPortTypes();
+        Set<TModel> portTypeTModels = wsdl2UDDI.createWSDLPortTypeTModels(wsdlURL, portTypes);
+        Map allBindings = wsdlDefinition.getAllBindings();
+        Set<TModel> createWSDLBindingTModels = wsdl2UDDI.createWSDLBindingTModels(wsdlURL, allBindings);
+    }
+}
diff --git a/juddi-examples/uddi-createbulk/src/uddi/createbulk/testStrings.java b/juddi-examples/uddi-createbulk/src/uddi/createbulk/testStrings.java
new file mode 100644
index 0000000..202f3d9
--- /dev/null
+++ b/juddi-examples/uddi-createbulk/src/uddi/createbulk/testStrings.java
@@ -0,0 +1,58 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package uddi.createbulk;
+
+import java.util.concurrent.atomic.AtomicReference;
+import javax.xml.ws.Holder;
+
+/**
+ * A simple program to illistrate how to pass by "reference" vs by "value" in Java. Or more accurately, how to persist changes on 
+ * method parameters to the caller. Written mostly because I forget it frequently and use this as reference material.
+ * @author Alex O'Ree
+ */
+public class testStrings {
+        
+    public static void main(String[] args) {
+        String str = "hi";                                                      
+        System.out.println(str);                                                //hi
+        System.out.println(Test1(str));                                         //hir
+        System.out.println(Test2(str));                                         //hix
+        Test3(str);
+        System.out.println(str);                                                //hi no change
+        Holder<String> holder = new Holder<String>();   
+        holder.value = str;
+        Test4(holder);
+        System.out.println(str);                                                //hi no change
+        System.out.println(holder.value);                                       //hiw changed persists
+
+        AtomicReference<String> astr = new AtomicReference<String>();
+        astr.set(str);
+        Test5(astr);        
+        System.out.println(str);                                                //hi no change
+        System.out.println(astr.get());                                         //hit change persists
+
+    }
+
+    static String Test1(String s) {
+        return s + "r";
+    }
+
+    static String Test2(String s) {
+        s += "x";
+        return s;
+    }
+
+    static void Test3(String s) {
+        s += "z";
+    }
+
+    static void Test4(Holder<String> s) {
+        s.value += "w";
+    }
+
+    static void Test5(AtomicReference<String> s) {
+        s.set(s.get() + "t");
+    }
+}
diff --git a/juddi-gui-dsig/applet.policy b/juddi-gui-dsig/applet.policy
new file mode 100644
index 0000000..2fd15c8
--- /dev/null
+++ b/juddi-gui-dsig/applet.policy
@@ -0,0 +1,3 @@
+grant {

+permission java.security.AllPermission;

+};

diff --git a/juddi-gui-dsig/build.xml b/juddi-gui-dsig/build.xml
new file mode 100644
index 0000000..80148a6
--- /dev/null
+++ b/juddi-gui-dsig/build.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!-- You may freely edit this file. See commented blocks below for -->

+<!-- some examples of how to customize the build. -->

+<!-- (If you delete it and reopen the project it will be recreated.) -->

+<!-- By default, only the Clean and Build commands use this build script. -->

+<!-- Commands such as Run, Debug, and Test only use this build script if -->

+<!-- the Compile on Save feature is turned off for the project. -->

+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->

+<!-- in the project's Project Properties dialog box.-->

+<project name="juddi-gui-dsig" default="default" basedir=".">

+    <description>Builds, tests, and runs the project juddi-gui-dsig.</description>

+    <import file="nbproject/build-impl.xml"/>

+    <!--

+

+    There exist several targets which are by default empty and which can be 

+    used for execution of your tasks. These targets are usually executed 

+    before and after some main targets. They are: 

+

+      -pre-init:                 called before initialization of project properties

+      -post-init:                called after initialization of project properties

+      -pre-compile:              called before javac compilation

+      -post-compile:             called after javac compilation

+      -pre-compile-single:       called before javac compilation of single file

+      -post-compile-single:      called after javac compilation of single file

+      -pre-compile-test:         called before javac compilation of JUnit tests

+      -post-compile-test:        called after javac compilation of JUnit tests

+      -pre-compile-test-single:  called before javac compilation of single JUnit test

+      -post-compile-test-single: called after javac compilation of single JUunit test

+      -pre-jar:                  called before JAR building

+      -post-jar:                 called after JAR building

+      -post-clean:               called after cleaning build products

+

+    (Targets beginning with '-' are not intended to be called on their own.)

+

+    Example of inserting an obfuscator after compilation could look like this:

+

+        <target name="-post-compile">

+            <obfuscate>

+                <fileset dir="${build.classes.dir}"/>

+            </obfuscate>

+        </target>

+

+    For list of available properties check the imported 

+    nbproject/build-impl.xml file. 

+

+

+    Another way to customize the build is by overriding existing main targets.

+    The targets of interest are: 

+

+      -init-macrodef-javac:     defines macro for javac compilation

+      -init-macrodef-junit:     defines macro for junit execution

+      -init-macrodef-debug:     defines macro for class debugging

+      -init-macrodef-java:      defines macro for class execution

+      -do-jar-with-manifest:    JAR building (if you are using a manifest)

+      -do-jar-without-manifest: JAR building (if you are not using a manifest)

+      run:                      execution of project 

+      -javadoc-build:           Javadoc generation

+      test-report:              JUnit report generation

+

+    An example of overriding the target for project execution could look like this:

+

+        <target name="run" depends="juddi-gui-dsig-impl.jar">

+            <exec dir="bin" executable="launcher.exe">

+                <arg file="${dist.jar}"/>

+            </exec>

+        </target>

+

+    Notice that the overridden target depends on the jar target and not only on 

+    the compile target as the regular run target does. Again, for a list of available 

+    properties which you can use, check the target you are overriding in the

+    nbproject/build-impl.xml file. 

+

+    -->

+</project>

diff --git a/juddi-gui-dsig/manifest.mf b/juddi-gui-dsig/manifest.mf
new file mode 100644
index 0000000..1574df4
--- /dev/null
+++ b/juddi-gui-dsig/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0

+X-COMMENT: Main-Class will be added automatically by build

+

diff --git a/juddi-gui-dsig/master-applet.jnlp b/juddi-gui-dsig/master-applet.jnlp
new file mode 100644
index 0000000..5a7cd5f
--- /dev/null
+++ b/juddi-gui-dsig/master-applet.jnlp
@@ -0,0 +1,23 @@
+<jnlp spec="1.0+" codebase="${jnlp.codebase}" href="launch.jnlp">

+    <information>

+        <title>${APPLICATION.TITLE}</title>

+        <vendor>${APPLICATION.VENDOR}</vendor>

+        <homepage href="${APPLICATION.HOMEPAGE}"/>

+        <description>${APPLICATION.DESC}</description>

+        <description kind="short">${APPLICATION.DESC.SHORT}</description>

+        <!--${JNLP.ICONS}-->

+        <!--${JNLP.OFFLINE.ALLOWED}-->

+    </information>

+    <!--${JNLP.UPDATE}-->

+    <!--${JNLP.SECURITY}-->

+    <resources>

+        <!--${JNLP.RESOURCES.RUNTIME}-->

+        <!--${JNLP.RESOURCES.MAIN.JAR}-->

+        <!--${JNLP.RESOURCES.JARS}-->

+        <!--${JNLP.RESOURCES.EXTENSIONS}-->

+    </resources>

+    <applet-desc main-class="${jnlp.main.class}" name="${APPLICATION.TITLE}"
+        width="${jnlp.applet.width}" height="${jnlp.applet.height}">

+        <!--${JNLP.APPLET.PARAMS}-->

+    </applet-desc>

+</jnlp>

diff --git a/juddi-gui-dsig/master-application.jnlp b/juddi-gui-dsig/master-application.jnlp
new file mode 100644
index 0000000..2204195
--- /dev/null
+++ b/juddi-gui-dsig/master-application.jnlp
@@ -0,0 +1,22 @@
+<jnlp spec="1.0+" codebase="${jnlp.codebase}" href="launch.jnlp">

+    <information>

+        <title>${APPLICATION.TITLE}</title>

+        <vendor>${APPLICATION.VENDOR}</vendor>

+        <homepage href="${APPLICATION.HOMEPAGE}"/>

+        <description>${APPLICATION.DESC}</description>

+        <description kind="short">${APPLICATION.DESC.SHORT}</description>

+        <!--${JNLP.ICONS}-->

+        <!--${JNLP.OFFLINE.ALLOWED}-->

+    </information>

+    <!--${JNLP.UPDATE}-->

+    <!--${JNLP.SECURITY}-->

+    <resources>

+        <!--${JNLP.RESOURCES.RUNTIME}-->

+        <!--${JNLP.RESOURCES.MAIN.JAR}-->

+        <!--${JNLP.RESOURCES.JARS}-->

+        <!--${JNLP.RESOURCES.EXTENSIONS}-->

+    </resources>

+    <application-desc main-class="${jnlp.main.class}">

+        <!--${JNLP.APPLICATION.ARGS}-->

+    </application-desc>

+</jnlp>

diff --git a/juddi-gui-dsig/nbproject/build-impl.xml b/juddi-gui-dsig/nbproject/build-impl.xml
new file mode 100644
index 0000000..3a51450
--- /dev/null
+++ b/juddi-gui-dsig/nbproject/build-impl.xml
@@ -0,0 +1,1412 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+*** GENERATED FROM project.xml - DO NOT EDIT  ***

+***         EDIT ../build.xml INSTEAD         ***

+

+For the purpose of easier reading the script

+is divided into following sections:

+

+  - initialization

+  - compilation

+  - jar

+  - execution

+  - debugging

+  - javadoc

+  - test compilation

+  - test execution

+  - test debugging

+  - applet

+  - cleanup

+

+        -->

+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="juddi-gui-dsig-impl">

+    <import file="jnlp-impl.xml"/>

+    <fail message="Please build using Ant 1.8.0 or higher.">

+        <condition>

+            <not>

+                <antversion atleast="1.8.0"/>

+            </not>

+        </condition>

+    </fail>

+    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>

+    <!-- 

+                ======================

+                INITIALIZATION SECTION 

+                ======================

+            -->

+    <target name="-pre-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="-pre-init" name="-init-private">

+        <property file="nbproject/private/config.properties"/>

+        <property file="nbproject/private/configs/${config}.properties"/>

+        <property file="nbproject/private/private.properties"/>

+    </target>

+    <target depends="-pre-init,-init-private" name="-init-user">

+        <property file="${user.properties.file}"/>

+        <!-- The two properties below are usually overridden -->

+        <!-- by the active platform. Just a fallback. -->

+        <property name="default.javac.source" value="1.4"/>

+        <property name="default.javac.target" value="1.4"/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">

+        <property file="nbproject/configs/${config}.properties"/>

+        <property file="nbproject/project.properties"/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">

+        <available file="${manifest.file}" property="manifest.available"/>

+        <condition property="splashscreen.available">

+            <and>

+                <not>

+                    <equals arg1="${application.splash}" arg2="" trim="true"/>

+                </not>

+                <available file="${application.splash}"/>

+            </and>

+        </condition>

+        <condition property="main.class.available">

+            <and>

+                <isset property="main.class"/>

+                <not>

+                    <equals arg1="${main.class}" arg2="" trim="true"/>

+                </not>

+            </and>

+        </condition>

+        <condition property="manifest.available+main.class">

+            <and>

+                <isset property="manifest.available"/>

+                <isset property="main.class.available"/>

+            </and>

+        </condition>

+        <condition property="do.archive">

+            <not>

+                <istrue value="${jar.archive.disabled}"/>

+            </not>

+        </condition>

+        <condition property="do.mkdist">

+            <and>

+                <isset property="do.archive"/>

+                <isset property="libs.CopyLibs.classpath"/>

+                <not>

+                    <istrue value="${mkdist.disabled}"/>

+                </not>

+            </and>

+        </condition>

+        <condition property="manifest.available+main.class+mkdist.available">

+            <and>

+                <istrue value="${manifest.available+main.class}"/>

+                <isset property="do.mkdist"/>

+            </and>

+        </condition>

+        <condition property="do.archive+manifest.available">

+            <and>

+                <isset property="manifest.available"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="do.archive+main.class.available">

+            <and>

+                <isset property="main.class.available"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="do.archive+splashscreen.available">

+            <and>

+                <isset property="splashscreen.available"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="do.archive+manifest.available+main.class">

+            <and>

+                <istrue value="${manifest.available+main.class}"/>

+                <istrue value="${do.archive}"/>

+            </and>

+        </condition>

+        <condition property="manifest.available-mkdist.available">

+            <or>

+                <istrue value="${manifest.available}"/>

+                <isset property="do.mkdist"/>

+            </or>

+        </condition>

+        <condition property="manifest.available+main.class-mkdist.available">

+            <or>

+                <istrue value="${manifest.available+main.class}"/>

+                <isset property="do.mkdist"/>

+            </or>

+        </condition>

+        <condition property="have.tests">

+            <or>

+                <available file="${test.src.dir}"/>

+            </or>

+        </condition>

+        <condition property="have.sources">

+            <or>

+                <available file="${src.dir}"/>

+            </or>

+        </condition>

+        <condition property="netbeans.home+have.tests">

+            <and>

+                <isset property="netbeans.home"/>

+                <isset property="have.tests"/>

+            </and>

+        </condition>

+        <condition property="no.javadoc.preview">

+            <and>

+                <isset property="javadoc.preview"/>

+                <isfalse value="${javadoc.preview}"/>

+            </and>

+        </condition>

+        <property name="run.jvmargs" value=""/>

+        <property name="run.jvmargs.ide" value=""/>

+        <property name="javac.compilerargs" value=""/>

+        <property name="work.dir" value="${basedir}"/>

+        <condition property="no.deps">

+            <and>

+                <istrue value="${no.dependencies}"/>

+            </and>

+        </condition>

+        <property name="javac.debug" value="true"/>

+        <property name="javadoc.preview" value="true"/>

+        <property name="application.args" value=""/>

+        <property name="source.encoding" value="${file.encoding}"/>

+        <property name="runtime.encoding" value="${source.encoding}"/>

+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">

+            <and>

+                <isset property="javadoc.encoding"/>

+                <not>

+                    <equals arg1="${javadoc.encoding}" arg2=""/>

+                </not>

+            </and>

+        </condition>

+        <property name="javadoc.encoding.used" value="${source.encoding}"/>

+        <property name="includes" value="**"/>

+        <property name="excludes" value=""/>

+        <property name="do.depend" value="false"/>

+        <condition property="do.depend.true">

+            <istrue value="${do.depend}"/>

+        </condition>

+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>

+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">

+            <length length="0" string="${endorsed.classpath}" when="greater"/>

+        </condition>

+        <condition else="false" property="jdkBug6558476">

+            <and>

+                <matches pattern="1\.[56]" string="${java.specification.version}"/>

+                <not>

+                    <os family="unix"/>

+                </not>

+            </and>

+        </condition>

+        <property name="javac.fork" value="${jdkBug6558476}"/>

+        <property name="jar.index" value="false"/>

+        <property name="jar.index.metainf" value="${jar.index}"/>

+        <property name="copylibs.rebase" value="true"/>

+        <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>

+        <condition property="junit.available">

+            <or>

+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>

+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>

+            </or>

+        </condition>

+        <condition property="testng.available">

+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>

+        </condition>

+        <condition property="junit+testng.available">

+            <and>

+                <istrue value="${junit.available}"/>

+                <istrue value="${testng.available}"/>

+            </and>

+        </condition>

+        <condition else="testng" property="testng.mode" value="mixed">

+            <istrue value="${junit+testng.available}"/>

+        </condition>

+        <condition else="" property="testng.debug.mode" value="-mixed">

+            <istrue value="${junit+testng.available}"/>

+        </condition>

+    </target>

+    <target name="-post-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">

+        <fail unless="src.dir">Must set src.dir</fail>

+        <fail unless="test.src.dir">Must set test.src.dir</fail>

+        <fail unless="build.dir">Must set build.dir</fail>

+        <fail unless="dist.dir">Must set dist.dir</fail>

+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>

+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>

+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>

+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>

+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>

+        <fail unless="dist.jar">Must set dist.jar</fail>

+    </target>

+    <target name="-init-macrodef-property">

+        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute name="name"/>

+            <attribute name="value"/>

+            <sequential>

+                <property name="@{name}" value="${@{value}}"/>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">

+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}" name="classpath"/>

+            <attribute default="${javac.processorpath}" name="processorpath"/>

+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="${javac.debug}" name="debug"/>

+            <attribute default="${empty.dir}" name="sourcepath"/>

+            <attribute default="${empty.dir}" name="gensrcdir"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.dir}/empty" name="empty.dir"/>

+                <mkdir dir="${empty.dir}"/>

+                <mkdir dir="@{apgeneratedsrcdir}"/>

+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">

+                    <src>

+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">

+                            <include name="*"/>

+                        </dirset>

+                    </src>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <compilerarg line="${javac.compilerargs}"/>

+                    <compilerarg value="-processorpath"/>

+                    <compilerarg path="@{processorpath}:${empty.dir}"/>

+                    <compilerarg line="${ap.processors.internal}"/>

+                    <compilerarg line="${annotation.processing.processor.options}"/>

+                    <compilerarg value="-s"/>

+                    <compilerarg path="@{apgeneratedsrcdir}"/>

+                    <compilerarg line="${ap.proc.none.internal}"/>

+                    <customize/>

+                </javac>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">

+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}" name="classpath"/>

+            <attribute default="${javac.processorpath}" name="processorpath"/>

+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="${javac.debug}" name="debug"/>

+            <attribute default="${empty.dir}" name="sourcepath"/>

+            <attribute default="${empty.dir}" name="gensrcdir"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.dir}/empty" name="empty.dir"/>

+                <mkdir dir="${empty.dir}"/>

+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">

+                    <src>

+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">

+                            <include name="*"/>

+                        </dirset>

+                    </src>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <compilerarg line="${javac.compilerargs}"/>

+                    <customize/>

+                </javac>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">

+        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}" name="classpath"/>

+            <sequential>

+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                </depend>

+            </sequential>

+        </macrodef>

+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <sequential>

+                <fail unless="javac.includes">Must set javac.includes</fail>

+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">

+                    <path>

+                        <filelist dir="@{destdir}" files="${javac.includes}"/>

+                    </path>

+                    <globmapper from="*.java" to="*.class"/>

+                </pathconvert>

+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>

+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>

+                <delete>

+                    <files includesfile="${javac.includesfile.binary}"/>

+                </delete>

+                <delete>

+                    <fileset file="${javac.includesfile.binary}"/>

+                </delete>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${junit.available}" name="-init-macrodef-junit-init">

+        <condition else="false" property="nb.junit.batch" value="true">

+            <and>

+                <istrue value="${junit.available}"/>

+                <not>

+                    <isset property="test.method"/>

+                </not>

+            </and>

+        </condition>

+        <condition else="false" property="nb.junit.single" value="true">

+            <and>

+                <istrue value="${junit.available}"/>

+                <isset property="test.method"/>

+            </and>

+        </condition>

+    </target>

+    <target name="-init-test-properties">

+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>

+        <property name="test.binarytestincludes" value=""/>

+        <property name="test.binaryexcludes" value=""/>

+    </target>

+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">

+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">

+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <batchtest todir="${build.test.results.dir}">

+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">

+                            <filename name="@{testincludes}"/>

+                        </fileset>

+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">

+                            <filename name="${test.binarytestincludes}"/>

+                        </fileset>

+                    </batchtest>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>

+    <target if="${testng.available}" name="-init-macrodef-testng">

+        <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">

+                    <isset property="test.method"/>

+                </condition>

+                <union id="test.set">

+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">

+                        <filename name="@{testincludes}"/>

+                    </fileset>

+                </union>

+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>

+                <testng classfilesetref="test.set" failureProperty="tests.failed" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="juddi-gui-dsig" testname="TestNG tests" workingDir="${work.dir}">

+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>

+                    <propertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </propertyset>

+                    <customize/>

+                </testng>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-test-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <echo>No tests executed.</echo>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </j2seproject3:junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </j2seproject3:testng>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">

+        <macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <sequential>

+                <j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize>

+                        <classpath>

+                            <path path="${run.test.classpath}"/>

+                        </classpath>

+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                        <jvmarg line="${run.jvmargs}"/>

+                        <jvmarg line="${run.jvmargs.ide}"/>

+                    </customize>

+                </j2seproject3:test-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">

+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">

+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="junit.forkmode" value="perTest"/>

+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">

+                    <batchtest todir="${build.test.results.dir}">

+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">

+                            <filename name="@{testincludes}"/>

+                        </fileset>

+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">

+                            <filename name="${test.binarytestincludes}"/>

+                        </fileset>

+                    </batchtest>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">

+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </j2seproject3:junit-debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${testng.available}" name="-init-macrodef-testng-debug">

+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <element name="customize2" optional="true"/>

+            <sequential>

+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">

+                    <isset property="test.method"/>

+                </condition>

+                <condition else="-suitename juddi-gui-dsig -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">

+                    <matches pattern=".*\.xml" string="@{testClass}"/>

+                </condition>

+                <delete dir="${build.test.results.dir}" quiet="true"/>

+                <mkdir dir="${build.test.results.dir}"/>

+                <j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">

+                    <customize>

+                        <customize2/>

+                        <jvmarg value="-ea"/>

+                        <arg line="${testng.debug.mode}"/>

+                        <arg line="-d ${build.test.results.dir}"/>

+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>

+                        <arg line="${testng.cmd.args}"/>

+                    </customize>

+                </j2seproject3:debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">

+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <element implicit="true" name="customize2" optional="true"/>

+            <sequential>

+                <j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">

+                    <customize2/>

+                </j2seproject3:testng-debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">

+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <sequential>

+                <j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize>

+                        <classpath>

+                            <path path="${run.test.classpath}"/>

+                        </classpath>

+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                        <jvmarg line="${run.jvmargs}"/>

+                        <jvmarg line="${run.jvmargs.ide}"/>

+                    </customize>

+                </j2seproject3:test-debug-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">

+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <sequential>

+                <j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">

+                    <customize2>

+                        <syspropertyset>

+                            <propertyref prefix="test-sys-prop."/>

+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                        </syspropertyset>

+                    </customize2>

+                </j2seproject3:testng-debug-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>

+    <!--

+                pre NB7.2 profiling section; consider it deprecated

+            -->

+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>

+    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">

+        <macrodef name="resolve">

+            <attribute name="name"/>

+            <attribute name="value"/>

+            <sequential>

+                <property name="@{name}" value="${env.@{value}}"/>

+            </sequential>

+        </macrodef>

+        <macrodef name="profile">

+            <attribute default="${main.class}" name="classname"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property environment="env"/>

+                <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>

+                <java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg value="${profiler.info.jvmargs.agent}"/>

+                    <jvmarg line="${profiler.info.jvmargs}"/>

+                    <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>

+                    <arg line="${application.args}"/>

+                    <classpath>

+                        <path path="${run.classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">

+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>

+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>

+    </target>

+    <!--

+                end of pre NB7.2 profiling section

+            -->

+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">

+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute default="${main.class}" name="name"/>

+            <attribute default="${debug.classpath}" name="classpath"/>

+            <attribute default="" name="stopclassname"/>

+            <sequential>

+                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                </nbjpdastart>

+            </sequential>

+        </macrodef>

+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute default="${build.classes.dir}" name="dir"/>

+            <sequential>

+                <nbjpdareload>

+                    <fileset dir="@{dir}" includes="${fix.classes}">

+                        <include name="${fix.includes}*.class"/>

+                    </fileset>

+                </nbjpdareload>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-debug-args">

+        <property name="version-output" value="java version &quot;${ant.java.version}"/>

+        <condition property="have-jdk-older-than-1.4">

+            <or>

+                <contains string="${version-output}" substring="java version &quot;1.0"/>

+                <contains string="${version-output}" substring="java version &quot;1.1"/>

+                <contains string="${version-output}" substring="java version &quot;1.2"/>

+                <contains string="${version-output}" substring="java version &quot;1.3"/>

+            </or>

+        </condition>

+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">

+            <istrue value="${have-jdk-older-than-1.4}"/>

+        </condition>

+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">

+            <os family="windows"/>

+        </condition>

+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">

+            <isset property="debug.transport"/>

+        </condition>

+    </target>

+    <target depends="-init-debug-args" name="-init-macrodef-debug">

+        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${main.class}" name="classname"/>

+            <attribute default="${debug.classpath}" name="classpath"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <java classname="@{classname}" dir="${work.dir}" fork="true">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>

+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>

+                    <jvmarg line="${run.jvmargs}"/>

+                    <jvmarg line="${run.jvmargs.ide}"/>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-java">

+        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <attribute default="${main.class}" name="classname"/>

+            <attribute default="${run.classpath}" name="classpath"/>

+            <attribute default="jvm" name="jvm"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <java classname="@{classname}" dir="${work.dir}" fork="true">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>

+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>

+                    <jvmarg line="${run.jvmargs}"/>

+                    <jvmarg line="${run.jvmargs.ide}"/>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-copylibs">

+        <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">

+            <attribute default="${manifest.file}" name="manifest"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>

+                <pathconvert property="run.classpath.without.build.classes.dir">

+                    <path path="${run.classpath}"/>

+                    <map from="${build.classes.dir.resolved}" to=""/>

+                </pathconvert>

+                <pathconvert pathsep=" " property="jar.classpath">

+                    <path path="${run.classpath.without.build.classes.dir}"/>

+                    <chainedmapper>

+                        <flattenmapper/>

+                        <filtermapper>

+                            <replacestring from=" " to="%20"/>

+                        </filtermapper>

+                        <globmapper from="*" to="lib/*"/>

+                    </chainedmapper>

+                </pathconvert>

+                <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>

+                <copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">

+                    <fileset dir="${build.classes.dir}"/>

+                    <manifest>

+                        <attribute name="Class-Path" value="${jar.classpath}"/>

+                        <customize/>

+                    </manifest>

+                </copylibs>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-presetdef-jar">

+        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">

+            <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}">

+                <j2seproject1:fileset dir="${build.classes.dir}"/>

+            </jar>

+        </presetdef>

+    </target>

+    <target name="-init-ap-cmdline-properties">

+        <property name="annotation.processing.enabled" value="true"/>

+        <property name="annotation.processing.processors.list" value=""/>

+        <property name="annotation.processing.processor.options" value=""/>

+        <property name="annotation.processing.run.all.processors" value="true"/>

+        <property name="javac.processorpath" value="${javac.classpath}"/>

+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>

+        <condition property="ap.supported.internal" value="true">

+            <not>

+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>

+            </not>

+        </condition>

+    </target>

+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">

+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">

+            <isfalse value="${annotation.processing.run.all.processors}"/>

+        </condition>

+        <condition else="" property="ap.proc.none.internal" value="-proc:none">

+            <isfalse value="${annotation.processing.enabled}"/>

+        </condition>

+    </target>

+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">

+        <property name="ap.cmd.line.internal" value=""/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>

+    <!--

+                ===================

+                COMPILATION SECTION

+                ===================

+            -->

+    <target name="-deps-jar-init" unless="built-jar.properties">

+        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>

+        <delete file="${built-jar.properties}" quiet="true"/>

+    </target>

+    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">

+        <echo level="warn" message="Cycle detected: juddi-gui-dsig was already built"/>

+    </target>

+    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">

+        <mkdir dir="${build.dir}"/>

+        <touch file="${built-jar.properties}" verbose="false"/>

+        <property file="${built-jar.properties}" prefix="already.built.jar."/>

+        <antcall target="-warn-already-built-jar"/>

+        <propertyfile file="${built-jar.properties}">

+            <entry key="${basedir}" value=""/>

+        </propertyfile>

+    </target>

+    <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>

+    <target depends="init" name="-check-automatic-build">

+        <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>

+    </target>

+    <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">

+        <antcall target="clean"/>

+    </target>

+    <target depends="init,deps-jar" name="-pre-pre-compile">

+        <mkdir dir="${build.classes.dir}"/>

+    </target>

+    <target name="-pre-compile">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="do.depend.true" name="-compile-depend">

+        <pathconvert property="build.generated.subdirs">

+            <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="*"/>

+            </dirset>

+        </pathconvert>

+        <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>

+    </target>

+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">

+        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>

+        <copy todir="${build.classes.dir}">

+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target if="has.persistence.xml" name="-copy-persistence-xml">

+        <mkdir dir="${build.classes.dir}/META-INF"/>

+        <copy todir="${build.classes.dir}/META-INF">

+            <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>

+        </copy>

+    </target>

+    <target name="-post-compile">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>

+    <target name="-pre-compile-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">

+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>

+        <j2seproject3:force-recompile/>

+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>

+    </target>

+    <target name="-post-compile-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>

+    <!--

+                ====================

+                JAR BUILDING SECTION

+                ====================

+            -->

+    <target depends="init" name="-pre-pre-jar">

+        <dirname file="${dist.jar}" property="dist.jar.dir"/>

+        <mkdir dir="${dist.jar.dir}"/>

+    </target>

+    <target name="-pre-jar">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">

+        <j2seproject1:jar/>

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available">

+        <j2seproject1:jar manifest="${manifest.file}"/>

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">

+        <j2seproject1:jar manifest="${manifest.file}">

+            <j2seproject1:manifest>

+                <j2seproject1:attribute name="Main-Class" value="${main.class}"/>

+            </j2seproject1:manifest>

+        </j2seproject1:jar>

+        <echo level="info">To run this application from the command line without Ant, try:</echo>

+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>

+        <property location="${dist.jar}" name="dist.jar.resolved"/>

+        <pathconvert property="run.classpath.with.dist.jar">

+            <path path="${run.classpath}"/>

+            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>

+        </pathconvert>

+        <echo level="info">java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>

+    </target>

+    <target depends="init" if="do.archive" name="-do-jar-with-libraries-create-manifest" unless="manifest.available">

+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>

+        <touch file="${tmp.manifest.file}" verbose="false"/>

+    </target>

+    <target depends="init" if="do.archive+manifest.available" name="-do-jar-with-libraries-copy-manifest">

+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>

+        <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>

+    </target>

+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+main.class.available" name="-do-jar-with-libraries-set-main">

+        <manifest file="${tmp.manifest.file}" mode="update">

+            <attribute name="Main-Class" value="${main.class}"/>

+        </manifest>

+    </target>

+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-with-libraries-set-splashscreen">

+        <basename file="${application.splash}" property="splashscreen.basename"/>

+        <mkdir dir="${build.classes.dir}/META-INF"/>

+        <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>

+        <manifest file="${tmp.manifest.file}" mode="update">

+            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>

+        </manifest>

+    </target>

+    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen" if="do.mkdist" name="-do-jar-with-libraries-pack">

+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>

+        <echo level="info">To run this application from the command line without Ant, try:</echo>

+        <property location="${dist.jar}" name="dist.jar.resolved"/>

+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>

+    </target>

+    <target depends="-do-jar-with-libraries-pack" if="do.archive" name="-do-jar-with-libraries-delete-manifest">

+        <delete>

+            <fileset file="${tmp.manifest.file}"/>

+        </delete>

+    </target>

+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen,-do-jar-with-libraries-pack,-do-jar-with-libraries-delete-manifest" name="-do-jar-with-libraries"/>

+    <target depends="jnlp" name="-post-jar">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar,jnlp" description="Build JAR." name="jar"/>

+    <!--

+                =================

+                EXECUTION SECTION

+                =================

+            -->

+    <target depends="init,compile" description="Run a main class." name="run">

+        <j2seproject1:java>

+            <customize>

+                <arg line="${application.args}"/>

+            </customize>

+        </j2seproject1:java>

+    </target>

+    <target name="-do-not-recompile">

+        <property name="javac.includes.binary" value=""/>

+    </target>

+    <target depends="init,compile-single" name="run-single">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <j2seproject1:java classname="${run.class}"/>

+    </target>

+    <target depends="init,compile-test-single" name="run-test-with-main">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>

+    </target>

+    <!--

+                =================

+                DEBUGGING SECTION

+                =================

+            -->

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">

+        <j2seproject1:nbjpdastart name="${debug.class}"/>

+    </target>

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">

+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>

+    </target>

+    <target depends="init,compile" name="-debug-start-debuggee">

+        <j2seproject3:debug>

+            <customize>

+                <arg line="${application.args}"/>

+            </customize>

+        </j2seproject3:debug>

+    </target>

+    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">

+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>

+    </target>

+    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>

+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">

+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>

+        <j2seproject3:debug classname="${debug.class}"/>

+    </target>

+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>

+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">

+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>

+        <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>

+    </target>

+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>

+    <target depends="init" name="-pre-debug-fix">

+        <fail unless="fix.includes">Must set fix.includes</fail>

+        <property name="javac.includes" value="${fix.includes}.java"/>

+    </target>

+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">

+        <j2seproject1:nbjpdareload/>

+    </target>

+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>

+    <!--

+                =================

+                PROFILING SECTION

+                =================

+            -->

+    <!--

+                pre NB7.2 profiler integration

+            -->

+    <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <profile/>

+    </target>

+    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">

+        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <profile classname="${profile.class}"/>

+    </target>

+    <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <profile classname="sun.applet.AppletViewer">

+            <customize>

+                <arg value="${applet.url}"/>

+            </customize>

+        </profile>

+    </target>

+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.test.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">

+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>

+            <jvmarg value="${profiler.info.jvmargs.agent}"/>

+            <jvmarg line="${profiler.info.jvmargs}"/>

+            <test name="${profile.class}"/>

+            <classpath>

+                <path path="${run.test.classpath}"/>

+            </classpath>

+            <syspropertyset>

+                <propertyref prefix="test-sys-prop."/>

+                <mapper from="test-sys-prop.*" to="*" type="glob"/>

+            </syspropertyset>

+            <formatter type="brief" usefile="false"/>

+            <formatter type="xml"/>

+        </junit>

+    </target>

+    <!--

+                end of pre NB72 profiling section

+            -->

+    <target if="netbeans.home" name="-profile-check">

+        <condition property="profiler.configured">

+            <or>

+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>

+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>

+            </or>

+        </condition>

+    </target>

+    <target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">

+        <startprofiler/>

+        <antcall target="run"/>

+    </target>

+    <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <startprofiler/>

+        <antcall target="run-single"/>

+    </target>

+    <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>

+    <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">

+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>

+        <startprofiler/>

+        <antcall target="test-single"/>

+    </target>

+    <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <startprofiler/>

+        <antcal target="run-test-with-main"/>

+    </target>

+    <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">

+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>

+        <startprofiler/>

+        <antcall target="run-applet"/>

+    </target>

+    <!--

+                ===============

+                JAVADOC SECTION

+                ===============

+            -->

+    <target depends="init" if="have.sources" name="-javadoc-build">

+        <mkdir dir="${dist.javadoc.dir}"/>

+        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">

+            <and>

+                <isset property="endorsed.classpath.cmd.line.arg"/>

+                <not>

+                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>

+                </not>

+            </and>

+        </condition>

+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">

+            <classpath>

+                <path path="${javac.classpath}"/>

+            </classpath>

+            <fileset dir="${src.dir}" excludes="*.java,${excludes}" includes="${includes}">

+                <filename name="**/*.java"/>

+            </fileset>

+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="**/*.java"/>

+                <exclude name="*.java"/>

+            </fileset>

+            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>

+        </javadoc>

+        <copy todir="${dist.javadoc.dir}">

+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">

+                <filename name="**/doc-files/**"/>

+            </fileset>

+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="**/doc-files/**"/>

+            </fileset>

+        </copy>

+    </target>

+    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">

+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>

+    </target>

+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>

+    <!--

+                =========================

+                TEST COMPILATION SECTION

+                =========================

+            -->

+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">

+        <mkdir dir="${build.test.classes.dir}"/>

+    </target>

+    <target name="-pre-compile-test">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target if="do.depend.true" name="-compile-test-depend">

+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>

+    </target>

+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">

+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>

+        <copy todir="${build.test.classes.dir}">

+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target name="-post-compile-test">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>

+    <target name="-pre-compile-test-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">

+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>

+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>

+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>

+        <copy todir="${build.test.classes.dir}">

+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target name="-post-compile-test-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>

+    <!--

+                =======================

+                TEST EXECUTION SECTION

+                =======================

+            -->

+    <target depends="init" if="have.tests" name="-pre-test-run">

+        <mkdir dir="${build.test.results.dir}"/>

+    </target>

+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">

+        <j2seproject3:test testincludes="**/*Test.java"/>

+    </target>

+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init" if="have.tests" name="test-report"/>

+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>

+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>

+    <target depends="init" if="have.tests" name="-pre-test-run-single">

+        <mkdir dir="${build.test.results.dir}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">

+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>

+        <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">

+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>

+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>

+        <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>

+    <!--

+                =======================

+                TEST DEBUGGING SECTION

+                =======================

+            -->

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">

+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>

+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">

+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>

+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>

+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>

+    </target>

+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">

+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>

+    </target>

+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>

+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>

+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">

+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>

+    </target>

+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>

+    <!--

+                =========================

+                APPLET EXECUTION SECTION

+                =========================

+            -->

+    <target depends="init,compile-single" name="run-applet">

+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>

+        <j2seproject1:java classname="sun.applet.AppletViewer">

+            <customize>

+                <arg value="${applet.url}"/>

+            </customize>

+        </j2seproject1:java>

+    </target>

+    <!--

+                =========================

+                APPLET DEBUGGING  SECTION

+                =========================

+            -->

+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">

+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>

+        <j2seproject3:debug classname="sun.applet.AppletViewer">

+            <customize>

+                <arg value="${applet.url}"/>

+            </customize>

+        </j2seproject3:debug>

+    </target>

+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>

+    <!--

+                ===============

+                CLEANUP SECTION

+                ===============

+            -->

+    <target name="-deps-clean-init" unless="built-clean.properties">

+        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>

+        <delete file="${built-clean.properties}" quiet="true"/>

+    </target>

+    <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">

+        <echo level="warn" message="Cycle detected: juddi-gui-dsig was already built"/>

+    </target>

+    <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">

+        <mkdir dir="${build.dir}"/>

+        <touch file="${built-clean.properties}" verbose="false"/>

+        <property file="${built-clean.properties}" prefix="already.built.clean."/>

+        <antcall target="-warn-already-built-clean"/>

+        <propertyfile file="${built-clean.properties}">

+            <entry key="${basedir}" value=""/>

+        </propertyfile>

+    </target>

+    <target depends="init" name="-do-clean">

+        <delete dir="${build.dir}"/>

+        <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>

+    </target>

+    <target name="-post-clean">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>

+    <target name="-check-call-dep">

+        <property file="${call.built.properties}" prefix="already.built."/>

+        <condition property="should.call.dep">

+            <and>

+                <not>

+                    <isset property="already.built.${call.subproject}"/>

+                </not>

+                <available file="${call.script}"/>

+            </and>

+        </condition>

+    </target>

+    <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">

+        <ant antfile="${call.script}" inheritall="false" target="${call.target}">

+            <propertyset>

+                <propertyref prefix="transfer."/>

+                <mapper from="transfer.*" to="*" type="glob"/>

+            </propertyset>

+        </ant>

+    </target>

+</project>

diff --git a/juddi-gui-dsig/nbproject/configs/JWS_generated.properties b/juddi-gui-dsig/nbproject/configs/JWS_generated.properties
new file mode 100644
index 0000000..4485f82
--- /dev/null
+++ b/juddi-gui-dsig/nbproject/configs/JWS_generated.properties
@@ -0,0 +1,4 @@
+$label=Web Start

+$target.debug=jws-debug

+$target.run=jws-run

+compile.on.save.unsupported.javawebstart=true

diff --git a/juddi-gui-dsig/nbproject/genfiles.properties b/juddi-gui-dsig/nbproject/genfiles.properties
new file mode 100644
index 0000000..46df36b
--- /dev/null
+++ b/juddi-gui-dsig/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=64b6f61b

+build.xml.script.CRC32=9a057c32

+build.xml.stylesheet.CRC32=28e38971@1.53.1.46

+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.

+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.

+nbproject/build-impl.xml.data.CRC32=64b6f61b

+nbproject/build-impl.xml.script.CRC32=74dd8af2

+nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.56.1.46

diff --git a/juddi-gui-dsig/nbproject/jnlp-impl.xml b/juddi-gui-dsig/nbproject/jnlp-impl.xml
new file mode 100644
index 0000000..fdf70cf
--- /dev/null
+++ b/juddi-gui-dsig/nbproject/jnlp-impl.xml
@@ -0,0 +1,443 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
+
+Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+Other names may be trademarks of their respective owners.
+
+
+The contents of this file are subject to the terms of either the GNU
+General Public License Version 2 only ("GPL") or the Common
+Development and Distribution License("CDDL") (collectively, the
+"License"). You may not use this file except in compliance with the
+License. You can obtain a copy of the License at
+http://www.netbeans.org/cddl-gplv2.html
+or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+specific language governing permissions and limitations under the
+License.  When distributing the software, include this License Header
+Notice in each file and include the License file at
+nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
+particular file as subject to the "Classpath" exception as provided
+by Oracle in the GPL Version 2 section of the License file that
+accompanied this code. If applicable, add the following below the
+License Header, with the fields enclosed by brackets [] replaced by
+your own identifying information:
+"Portions Copyrighted [year] [name of copyright owner]"
+
+Contributor(s):
+
+The Original Software is NetBeans. The Initial Developer of the Original
+Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+Microsystems, Inc. All Rights Reserved.
+
+If you wish your version of this file to be governed by only the CDDL
+or only the GPL Version 2, indicate your decision by adding
+"[Contributor] elects to include this software in this distribution
+under the [CDDL or GPL Version 2] license." If you do not indicate a
+single choice of license, a recipient has the option to distribute
+your version of this file under either the CDDL, the GPL Version 2 or
+to extend the choice of license to its licensees as provided above.
+However, if you add GPL Version 2 code and therefore, elected the GPL
+Version 2 license, then the option applies only if the new code is
+made subject to such option by the copyright holder.
+-->
+
+<project name="jnlp-impl" default="default" basedir=".." xmlns:jnlp="http://www.netbeans.org/ns/j2se-project/jnlp" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3">
+
+    <property name="jnlp.file.name.default" value="launch.jnlp"/>
+    <property name="jnlp.dest.dir" location="dist"/>
+    
+    <!-- helper file to create list of arguments, etc. -->
+    <property name="helper.file" location="helper.txt"/>
+    
+    <target name="default">
+        <echo message="Default target is not set, you must specify which target you want to run."/>
+    </target>
+
+    <target name="-substitute-platform-home" unless="platform.home">
+        <property name="platform.home" value="${java.home}"/>
+    </target>
+
+    <target name="-init-platform" depends="-substitute-platform-home">
+        <condition property="java.exe.found">
+            <or>
+                <available file="${platform.home}${file.separator}bin${file.separator}java"/>
+                <available file="${platform.home}${file.separator}bin${file.separator}java.exe"/>
+            </or>
+        </condition>
+        <fail message="Error: java executable not found in current platform." unless="java.exe.found"/>
+        <local name="version-output"/>
+        <exec executable="${platform.home}${file.separator}bin${file.separator}java" outputproperty="version-output">
+            <arg value="-version"/>
+        </exec>
+        <echo message="java executable version-output:${line.separator}${version-output}" level="verbose"/>
+        <condition property="have-jdk-7u4-mac">
+            <and>
+                <contains string="${version-output}" substring="java version &quot;1.7.0_04"/>
+                <os family="mac"/>
+            </and>
+        </condition>
+        <fail message="Error:${line.separator}JDK 7u4 Mac does not support WebStart technology.${line.separator}Please upgrade to JDK 7u6 or later." if="have-jdk-7u4-mac"/>
+    </target>
+
+    <!-- Main target -->
+
+    <target name="jnlp" depends="-init-filename,-test-jnlp-enabled,-do-jar-jnlp" if="is.jnlp.enabled">
+        <makeurl property="jnlp.local.codebase.url" file="${basedir}/dist" validate="false"/>
+        <antcall target="generate-jnlp"/>
+        <antcall target="generate-html-preview"/>
+    </target>
+
+    <!-- JNLP archiving -->
+
+    <target name="-init-macrodef-extend-manifest">
+        <macrodef name="extend-manifest" uri="http://www.netbeans.org/ns/j2se-project/jnlp">
+            <element name="customize"/>
+            <sequential>
+                <manifest file="${tmp.manifest.file}" mode="update">
+                    <customize/>
+                </manifest>
+            </sequential>
+        </macrodef>
+    </target>
+
+    <target name="-test-jnlp-type" depends="-test-jnlp-enabled" if="is.jnlp.enabled">
+        <condition property="is.applet">
+            <equals arg1="${jnlp.descriptor}" arg2="applet" trim="true"/>
+        </condition>
+        <condition property="is.application">
+            <equals arg1="${jnlp.descriptor}" arg2="application" trim="true"/>
+        </condition>
+        <condition property="is.component">
+            <equals arg1="${jnlp.descriptor}" arg2="component" trim="true"/>
+        </condition>
+        <condition property="is.applet+mkdist.available">
+            <and>
+                <isset property="libs.CopyLibs.classpath"/>
+                <istrue value="${is.applet}"/>
+            </and>
+        </condition>
+        <condition property="is.application+mkdist.available">
+            <and>
+                <isset property="libs.CopyLibs.classpath"/>
+                <istrue value="${is.application}"/>
+            </and>
+        </condition>
+        <condition property="is.component+mkdist.available">
+            <and>
+                <isset property="libs.CopyLibs.classpath"/>
+                <istrue value="${is.component}"/>
+            </and>
+        </condition>
+    </target>
+
+    <target name="-create-tmp-manifest" unless="manifest.file">
+        <property name="tmp.manifest.file" value="${build.dir}/manifest.mf"/>
+        <delete file="${tmp.manifest.file}" failonerror="false"/>
+        <touch file="${tmp.manifest.file}"/>
+    </target>
+
+    <target name="-copy-tmp-manifest" if="manifest.file">
+        <property name="tmp.manifest.file" value="${build.dir}/manifest.mf"/>
+        <copy file="${manifest.file}" tofile="${build.dir}/manifest.mf"/>
+    </target>
+
+    <target name="-set-mixed-code-properties" depends="-check-signing-possible" if="jnlp.signed.true+signjars.task.available">
+        <property name="jnlp.mixed.code" value=""/>
+        <condition property="mixed.code.trusted.only">
+            <equals arg1="trusted_only" arg2="${jnlp.mixed.code}"/>
+        </condition>
+        <condition property="mixed.code.trusted.library">
+            <equals arg1="trusted_library" arg2="${jnlp.mixed.code}"/>
+        </condition>
+    </target>
+
+    <target name="-add-trusted-only-attribute" depends="-set-mixed-code-properties,-init-macrodef-extend-manifest" if="mixed.code.trusted.only">
+        <jnlp:extend-manifest>
+            <customize>
+                <attribute name="Trusted-Only" value="true"/>
+            </customize>
+        </jnlp:extend-manifest>
+    </target>
+
+    <target name="-add-trusted-library-attribute" depends="-set-mixed-code-properties,-init-macrodef-extend-manifest" if="mixed.code.trusted.library">
+        <jnlp:extend-manifest>
+            <customize>
+                <attribute name="Trusted-Library" value="true"/>
+            </customize>
+        </jnlp:extend-manifest>
+    </target>
+    <target name="-do-jar-applet" depends="-test-jnlp-type,-init-macrodef-copylibs" if="is.applet+mkdist.available">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+    </target>
+    <target name="-do-jar-jnlp-application" depends="-init-filename,-test-jnlp-type,-init-macrodef-copylibs" if="is.application+mkdist.available">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}">
+            <customize>
+                <attribute name="Main-Class" value="${main.class}"/>
+            </customize>
+        </j2seproject3:copylibs>
+        <echo>To run this application from the command line without Ant, try:</echo>
+        <property location="${jnlp.dest.dir}/${jnlp.file}" name="jnlp.file.resolved"/>
+        <echo>javaws "${jnlp.file.resolved}"</echo>
+    </target>
+    <target name="-do-jar-jnlp-component" depends="-test-jnlp-type,-init-macrodef-copylibs" if="is.component+mkdist.available">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+    </target>
+    <target name="-do-jar-jnlp" depends="-create-tmp-manifest,-copy-tmp-manifest,-add-trusted-only-attribute,-add-trusted-library-attribute,-do-jar-applet,-do-jar-jnlp-application,-do-jar-jnlp-component"/>
+
+    <!-- Init jnlp filename -->
+    
+    <target name="-init-filename" depends="-check-filename-prop,-set-jnlp-filename-custom,-set-jnlp-filename-default"/>
+    
+    <target name="-set-jnlp-filename-custom" if="jnlp.file.name.set">
+        <property name="jnlp.file" value="${jnlp.file.name}"/>
+    </target>
+    
+    <target name="-set-jnlp-filename-default" unless="jnlp.file.name.set">
+        <property name="jnlp.file" value="${jnlp.file.name.default}"/>
+    </target>
+    
+    <target name="-check-filename-prop">
+        <condition property="jnlp.file.name.set">
+            <and>
+                <isset property="jnlp.file.name"/>
+                <not>
+                    <equals arg1="jnlp.file.name" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+    </target>
+    
+    <!-- Test JNLP enabled-->
+    
+    <target name="-test-jnlp-enabled">
+        <condition property="is.jnlp.enabled">
+            <istrue value="${jnlp.enabled}"/>
+        </condition>
+    </target>
+    
+    <!-- Generating JNLP file -->
+    
+    <target name="generate-jnlp" depends="sign-jars,-test-generate-task-available,-unavailable-generate-task" if="generate.task.available">
+        <taskdef name="generate-jnlp" classname="org.netbeans.modules.javawebstart.anttasks.GenerateJnlpFileTask" 
+            classpath="${libs.JWSAntTasks.classpath}"/>
+        <property name="jnlp.lazy.jars" value=""/>
+        <generate-jnlp destfile="${jnlp.dest.dir}/${jnlp.file}_" template="master-${jnlp.descriptor}.jnlp" destdir="dist" lazyJars="${jnlp.lazy.jars}"/>
+        <antcall target="-strip-empty-lines"/>
+    </target>
+    
+    <target name="-strip-empty-lines">
+        <copy file="${jnlp.dest.dir}/${jnlp.file}_" tofile="${jnlp.dest.dir}/${jnlp.file}" overwrite="true" encoding="UTF-8">
+            <filterchain>
+                <tokenfilter>
+                    <ignoreblank/>
+                </tokenfilter>
+            </filterchain>
+        </copy>
+        <delete file="${jnlp.dest.dir}/${jnlp.file}_" failonerror="false"/>
+    </target>
+    
+    <target name="-test-generate-task-available">
+        <available property="generate.task.available" classname="org.netbeans.modules.javawebstart.anttasks.GenerateJnlpFileTask" 
+        classpath="${libs.JWSAntTasks.classpath}"/>
+    </target>
+    
+    <target name="-unavailable-generate-task" unless="generate.task.available">
+        <echo message="Task required to generate JNLP file is missing, probably the library 'JWS Ant Tasks' is missing either from shared folder or from IDE installation."/>
+        <fail/>
+    </target>
+    
+    <!-- Codebase processing -->
+    
+    <target name="-codebase-props-check">
+        <condition property="local.codebase">
+            <or>
+                <not>
+                    <isset property="jnlp.codebase.type"/>
+                </not>
+                <equals arg1="${jnlp.codebase.type}" arg2="local" trim="true"/>
+            </or>
+        </condition>
+        <condition property="non.user.codebase">
+            <or>
+                <not>
+                    <isset property="jnlp.codebase.type"/>
+                </not>
+                <equals arg1="${jnlp.codebase.type}" arg2="local" trim="true"/>
+                <equals arg1="${jnlp.codebase.type}" arg2="web" trim="true"/>
+            </or>
+        </condition>
+        <condition property="user.codebase">
+            <equals arg1="${jnlp.codebase.type}" arg2="user" trim="true"/>
+        </condition>
+        <condition property="no.codebase">
+            <equals arg1="${jnlp.codebase.type}" arg2="no.codebase" trim="true"/>
+        </condition>
+        <condition property="local.codebase+no.codebase">
+            <or>
+                <istrue value="${local.codebase}"/>
+                <istrue value="${no.codebase}"/>
+            </or>
+        </condition>
+    </target>
+    
+    <target name="-init-non-user-codebase" if="non.user.codebase">
+        <property name="jnlp.codebase.value" value="${jnlp.codebase.url}"/>
+    </target>
+    
+    <target name="-init-user-codebase" if="user.codebase">
+        <property name="jnlp.codebase.value" value="${jnlp.codebase.user}"/>
+    </target>
+
+    <!-- Security -->
+    
+    <target name="-security-props-check">
+        <condition property="jnlp.signed.true">
+            <istrue value="${jnlp.signed}"/>
+        </condition>
+    </target>
+    
+    <target name="-jnlp-init-keystore" depends="-jnlp-init-signing,-jnlp-init-keystore1,-jnlp-init-keystore2,-check-keystore-exists" unless="jnlp.signjar.keystore.exists">
+        <echo message="${application.vendor}" file="${helper.file}"/>
+        <loadfile property="application.vendor.filtered" srcfile="${helper.file}">
+            <filterchain>
+                <deletecharacters chars=","/>
+            </filterchain>
+        </loadfile>
+        <delete file="${helper.file}"/>
+        <property name="jnlp.signjar.vendor" value="CN=${application.vendor.filtered}"/>
+        <echo message="Going to create default keystore in ${jnlp.signjar.keystore}"/>
+        <genkey dname="${jnlp.signjar.vendor}" alias="${jnlp.signjar.alias}" keystore="${jnlp.signjar.keystore}"
+            storepass="${jnlp.signjar.storepass}" keypass="${jnlp.signjar.keypass}"/>
+    </target>
+    
+    <target name="-check-keystore-exists">
+        <available property="jnlp.signjar.keystore.exists" file="${jnlp.signjar.keystore}"/>
+    </target>
+
+    <target name="-jnlp-init-signing">
+        <condition property="generated.key.signing">
+            <equals arg1="${jnlp.signing}" arg2="generated" trim="true"/>
+        </condition>
+    </target>
+
+    <target name="-jnlp-init-keystore1" if="generated.key.signing">
+        <local name="generated.signing.alias"/>
+        <condition property="generated.signing.alias" value="${jnlp.signing.alias}" else="nb-jws">
+            <isset property="jnlp.signing.alias"/>
+        </condition>
+        <property name="jnlp.signjar.keystore" value="${basedir}/build/${generated.signing.alias}.ks" />
+        <property name="jnlp.signjar.storepass" value="storepass"/>
+        <property name="jnlp.signjar.keypass" value="keypass"/>
+        <property name="jnlp.signjar.alias" value="${generated.signing.alias}"/>
+    </target>
+
+    <target name="-jnlp-init-keystore2" unless="generated.key.signing">
+        <property name="jnlp.signjar.keystore" value="${jnlp.signing.keystore}" />
+        <property name="jnlp.signjar.storepass" value="${jnlp.signing.storepass}"/>
+        <property name="jnlp.signjar.keypass" value="${jnlp.signing.keypass}"/>
+        <property name="jnlp.signjar.alias" value="${jnlp.signing.alias}"/>
+    </target>
+
+    <!-- Signing -->
+
+    <target name="-test-signjars-task-available">
+        <available property="signjars.task.available" 
+            classname="org.netbeans.modules.javawebstart.anttasks.SignJarsTask" 
+            classpath="${libs.JWSAntTasks.classpath}"/>
+    </target>
+    
+    <target name="-check-signing-possible" depends="-security-props-check,-test-signjars-task-available,-unavailable-signjars-task">
+        <condition property="jnlp.signed.true+signjars.task.available">
+            <and>
+                <isset property="jnlp.signed.true"/>
+                <isset property="signjars.task.available"/>
+            </and>
+        </condition>
+    </target>
+    
+    <target name="-unavailable-signjars-task" depends="-test-signjars-task-available" unless="signjars.task.available">
+        <echo message="Task required to sign JAR file is missing, probably the library 'JWS Ant Tasks' is missing either from shared folder or from IDE installation. JAR files will not be signed."/>
+    </target>
+
+    <target name="sign-jars" depends="-jnlp-init-keystore,-check-signing-possible" if="jnlp.signed.true+signjars.task.available">
+        <taskdef name="sign-jars" classname="org.netbeans.modules.javawebstart.anttasks.SignJarsTask" 
+            classpath="${libs.JWSAntTasks.classpath}"/>
+        <sign-jars keystore="${jnlp.signjar.keystore}" storepass="${jnlp.signjar.storepass}" 
+                keypass="${jnlp.signjar.keypass}" alias="${jnlp.signjar.alias}" mainjar="${dist.jar}" destdir="dist"
+                codebase="${jnlp.codebase.value}" signedjarsprop="jnlp.signed.jars"
+                componentsprop="jnlp.components">
+            <fileset dir="dist/lib">
+                <include name="*.jar"/>
+            </fileset>
+        </sign-jars>
+    </target>
+    
+    <!-- Running/Debugging -->
+    
+    <target name="jws-run" depends="jar,-verify-jnlp-enabled,-verify-codebase,-init-platform" description="Start javaws execution">
+        <exec executable="${platform.home}/bin/javaws">
+            <arg file="${jnlp.dest.dir}/${jnlp.file}"/>
+        </exec>
+    </target>
+    
+    <target name="jws-debug" if="netbeans.home" depends="jar,-verify-jnlp-enabled,-verify-codebase,-debug-start-debugger,-debug-javaws-debuggee" 
+        description="Debug javaws project in IDE"/>
+        
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+
+    <target name="-debug-javaws-debuggee" depends="-init-debug-args,-init-platform">
+        <exec executable="${platform.home}/bin/javaws">
+            <env key="JAVAWS_VM_ARGS" value="${debug-args-line} -Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+            <arg value="-wait"/>
+            <arg file="${jnlp.dest.dir}/${jnlp.file}"/>
+        </exec>
+    </target>
+    
+    <target name="-verify-codebase" depends="-codebase-props-check" unless="local.codebase+no.codebase">
+        <fail message="Project cannot be run with non-local codebase. Open project properties dialog and set Web Start Codebase to Local Execution or No Codebase Execution."/>
+    </target>
+    
+    <target name="-verify-jnlp-enabled" depends="-test-jnlp-enabled" unless="is.jnlp.enabled">
+        <fail message="Project cannot be run with selected Run Configuration when Java Web Start is disabled."/>
+    </target>
+    
+    <!-- Generate simple HTML preview page -->
+
+    <target name="-check-html-preview">
+         <condition property="generate.html.preview">
+             <or>
+                 <equals arg1="${jnlp.descriptor}" arg2="application"/>
+                 <equals arg1="${jnlp.descriptor}" arg2="applet"/>
+             </or>
+         </condition>
+     </target>
+
+    <target name="generate-html-preview" depends="-check-html-preview" if="generate.html.preview">
+        <taskdef name="copy-template-page" classname="org.netbeans.modules.javawebstart.anttasks.CopyTemplatePageTask"
+            classpath="${libs.JWSAntTasks.classpath}"/>
+        <copy-template-page destfile="${jnlp.dest.dir}/launch.html" template="preview-${jnlp.descriptor}.html" destdir="${jnlp.dest.dir}"/>
+    </target>
+    
+</project>
diff --git a/juddi-gui-dsig/nbproject/project.properties b/juddi-gui-dsig/nbproject/project.properties
new file mode 100644
index 0000000..9f2b9d1
--- /dev/null
+++ b/juddi-gui-dsig/nbproject/project.properties
@@ -0,0 +1,95 @@
+annotation.processing.enabled=true

+annotation.processing.enabled.in.editor=false

+annotation.processing.processors.list=

+annotation.processing.run.all.processors=true

+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output

+ant.customtasks.libs=JWSAntTasks

+application.title=juddi-gui-dsig

+application.vendor=Daddy

+build.classes.dir=${build.dir}/classes

+build.classes.excludes=**/*.java,**/*.form

+# This directory is removed when the project is cleaned:

+build.dir=build

+build.generated.dir=${build.dir}/generated

+build.generated.sources.dir=${build.dir}/generated-sources

+# Only compile against the classpath explicitly listed here:

+build.sysclasspath=ignore

+build.test.classes.dir=${build.dir}/test/classes

+build.test.results.dir=${build.dir}/test/results

+# Uncomment to specify the preferred debugger connection transport:

+#debug.transport=dt_socket

+debug.classpath=\

+    ${run.classpath}

+debug.test.classpath=\

+    ${run.test.classpath}

+# This directory is removed when the project is cleaned:

+dist.dir=dist

+dist.jar=${dist.dir}/juddi-gui-dsig.jar

+dist.javadoc.dir=${dist.dir}/javadoc

+endorsed.classpath=\

+    ${jdk.home}/jre/lib/javaws.jar:\

+    ${jdk.home}/jre/lib/plugin.jar

+excludes=

+file.reference.commons-logging-api-1.1.jar=..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\commons-logging-api-1.1.jar

+file.reference.juddi-client-3.1.5-SNAPSHOT.jar=..\\juddi-client\\target\\juddi-client-3.1.5-SNAPSHOT.jar

+file.reference.uddi-ws-3.1.5-SNAPSHOT.jar=..\\uddi-ws\\target\\uddi-ws-3.1.5-SNAPSHOT.jar

+includes=**

+jar.archive.disabled=${jnlp.enabled}

+jar.compress=false

+jar.index=${jnlp.enabled}

+javac.classpath=\

+    ${file.reference.uddi-ws-3.1.5-SNAPSHOT.jar}:\

+    ${file.reference.juddi-client-3.1.5-SNAPSHOT.jar}:\

+    ${file.reference.commons-logging-api-1.1.jar}

+# Space-separated list of extra javac options

+javac.compilerargs=

+javac.deprecation=false

+javac.processorpath=\

+    ${javac.classpath}

+javac.source=1.6

+javac.target=1.6

+javac.test.classpath=\

+    ${javac.classpath}:\

+    ${build.classes.dir}

+javac.test.processorpath=\

+    ${javac.test.classpath}

+javadoc.additionalparam=

+javadoc.author=false

+javadoc.encoding=${source.encoding}

+javadoc.noindex=false

+javadoc.nonavbar=false

+javadoc.notree=false

+javadoc.private=false

+javadoc.splitindex=true

+javadoc.use=true

+javadoc.version=false

+javadoc.windowtitle=

+jnlp.applet.class=org.apache.juddi.gui.dsig.CertificateChooser

+jnlp.applet.height=300

+jnlp.applet.width=300

+jnlp.codebase.type=local

+jnlp.descriptor=applet

+jnlp.enabled=true

+jnlp.mixed.code=default

+jnlp.offline-allowed=false

+jnlp.signed=true

+jnlp.signing=generated

+jnlp.signing.alias=jud-idig

+jnlp.signing.keystore=

+manifest.file=manifest.mf

+meta.inf.dir=${src.dir}/META-INF

+mkdist.disabled=false

+platform.active=default_platform

+run.classpath=\

+    ${javac.classpath}:\

+    ${build.classes.dir}

+# Space-separated list of JVM arguments used when running the project.

+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.

+# To set system properties for unit tests define test-sys-prop.name=value:

+run.jvmargs=-Djava.security.policy=applet.policy

+run.test.classpath=\

+    ${javac.test.classpath}:\

+    ${build.test.classes.dir}

+source.encoding=UTF-8

+src.dir=src

+test.src.dir=test

diff --git a/juddi-gui-dsig/nbproject/project.xml b/juddi-gui-dsig/nbproject/project.xml
new file mode 100644
index 0000000..f71e950
--- /dev/null
+++ b/juddi-gui-dsig/nbproject/project.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<project xmlns="http://www.netbeans.org/ns/project/1">

+    <type>org.netbeans.modules.java.j2seproject</type>

+    <configuration>

+        <buildExtensions xmlns="http://www.netbeans.org/ns/ant-build-extender/1">

+            <extension file="jnlp-impl.xml" id="jws">

+                <dependency dependsOn="jnlp" target="-post-jar"/>

+                <dependency dependsOn="jnlp" target="jar"/>

+            </extension>

+        </buildExtensions>

+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">

+            <name>juddi-gui-dsig</name>

+            <source-roots>

+                <root id="src.dir"/>

+            </source-roots>

+            <test-roots>

+                <root id="test.src.dir"/>

+            </test-roots>

+        </data>

+    </configuration>

+</project>

diff --git a/juddi-gui-dsig/preview-applet.html b/juddi-gui-dsig/preview-applet.html
new file mode 100644
index 0000000..9b6552f
--- /dev/null
+++ b/juddi-gui-dsig/preview-applet.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>

+<html>

+    <head>

+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

+        <title>JSP Page</title>

+    </head>

+    <body>

+        <h1>Hello World!</h1>

+        <applet code="org.apache.juddi.gui.dsig.NewApplet" archive="dist/juddi-gui-dsig.jar"></applet> 

+		        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>

+				 <script type="text/javascript">

+				 function getXml()

+				{

+					return $("#data").val();

+				}

+				 

+				 

+				function writeXml(data)

+				{

+					$("#data").val(data);

+				}

+				

+				function getBrowserName()

+				{

+					return navigator.appName;

+				}

+				function getOsName()

+				{

+					var OSName="unknown OS";

+					if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";

+					if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";

+					if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";

+					if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";

+					return OSName;

+				}

+				</script>

+			<textarea rows="15" cols="80" id="data">hello world</textarea>

+    </body>

+</html>

diff --git a/juddi-gui-dsig/src/org/apache/juddi/gui/dsig/XmlSignatureApplet.form b/juddi-gui-dsig/src/org/apache/juddi/gui/dsig/XmlSignatureApplet.form
new file mode 100644
index 0000000..ed4b407
--- /dev/null
+++ b/juddi-gui-dsig/src/org/apache/juddi/gui/dsig/XmlSignatureApplet.form
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.2" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.AppletFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="jButton1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Sign"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
+      </Events>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="North"/>
+        </Constraint>
+      </Constraints>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="Center"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JList" name="jList1">
+          <Properties>
+            <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+              <StringArray count="0"/>
+            </Property>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
diff --git a/juddi-gui-dsig/src/org/apache/juddi/gui/dsig/XmlSignatureApplet.java b/juddi-gui-dsig/src/org/apache/juddi/gui/dsig/XmlSignatureApplet.java
new file mode 100644
index 0000000..44c708b
--- /dev/null
+++ b/juddi-gui-dsig/src/org/apache/juddi/gui/dsig/XmlSignatureApplet.java
@@ -0,0 +1,374 @@
+/*
+ * Copyright 2013 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.gui.dsig;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.Key;
+import java.security.KeyStore;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.Security;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JOptionPane;
+import javax.xml.bind.JAXB;
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.Transform;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.dom.DOMSignContext;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.keyinfo.X509Data;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import netscape.javascript.JSObject;
+import org.apache.juddi.v3.client.crypto.DigSigUtil;
+import org.uddi.api_v3.BindingTemplate;
+import org.uddi.api_v3.BusinessEntity;
+import org.uddi.api_v3.BusinessService;
+import org.uddi.api_v3.TModel;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSSerializer;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * Provides a Java web applet that digitally signs UDDI xml
+ * @author Alex O'Ree
+ */
+public class XmlSignatureApplet extends java.applet.Applet {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Initializes the applet XmlSignatureApplet
+     */
+    public void init() {
+        try {
+            java.awt.EventQueue.invokeAndWait(new Runnable() {
+                public void run() {
+                    initComponents();
+                }
+            });
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        setupCertificates();
+    }
+
+    private XMLSignatureFactory initXMLSigFactory() {
+        XMLSignatureFactory fac = XMLSignatureFactory.getInstance();
+        return fac;
+    }
+
+    private Reference initReference(XMLSignatureFactory fac) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
+        List transformers = new ArrayList();
+        transformers.add(fac.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null));
+
+        //  String dm = map.getProperty(SIGNATURE_OPTION_DIGEST_METHOD);
+        //if (dm == null) {
+        String dm = DigestMethod.SHA1;
+        //}
+        Reference ref = fac.newReference("", fac.newDigestMethod(dm, null), transformers, null, null);
+        return ref;
+    }
+
+    private SignedInfo initSignedInfo(XMLSignatureFactory fac) throws Exception {
+        Reference ref = initReference(fac);
+        SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE,
+                (C14NMethodParameterSpec) null),
+                fac.newSignatureMethod(SignatureMethod.RSA_SHA1,
+                null),
+                Collections.singletonList(ref));
+        return si;
+    }
+
+    private static Document stringToDom(String xmlSource)
+            throws SAXException, ParserConfigurationException, IOException {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder builder = factory.newDocumentBuilder();
+        return builder.parse(new InputSource(new StringReader(xmlSource)));
+    }
+
+    private String sign(String xml) throws Exception {
+
+        //DOMResult domResult = new DOMResult();
+
+        //JAXB.marshal(jaxbObj, domResult);
+        Document doc = stringToDom(xml);
+        Element docElement = doc.getDocumentElement();
+        //  KeyStore.PrivateKeyEntry keyEntry = null;
+        // keyEntry= keyStore.getKey((String)jList1.getSelectedValue(), null);
+        //   keyEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry((String) jList1.getSelectedValue(), null);
+        PrivateKey key = (PrivateKey) keyStore.getKey((String) jList1.getSelectedValue(), null);
+
+        // PrivateKey privateKey = keyStore.getKey((String)jList1.getSelectedValue(),null);
+        Certificate origCert = keyStore.getCertificate((String) jList1.getSelectedValue());
+        //PublicKey validatingKey = origCert.getPublicKey();
+        this.signDOM(docElement, key, origCert);
+
+        //  DOMSource domSource = new DOMSource(doc);
+
+        return getStringFromDoc(doc);
+
+    }
+
+    public String getStringFromDoc(org.w3c.dom.Document doc) {
+        DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation();
+        LSSerializer lsSerializer = domImplementation.createLSSerializer();
+        lsSerializer.getDomConfig().setParameter("xml-declaration", false);
+        //lsSerializer.getDomConfig().setParameter("xml-declaration", false);
+
+        return lsSerializer.writeToString(doc);
+    }
+    KeyStore keyStore = null;
+    KeyStore firefox = null;
+
+    private void setupCertificates() {
+
+        this.jList1.clearSelection();
+        this.jList1.removeAll();
+        Vector<String> certs = new Vector<String>();
+
+        //Provider p1 = new sun.security.pkcs11.SunPKCS11(strCfg);
+        //Security.addProvider(p1);
+        //KeyStore keyStore = KeyStore.getInstance("PKCS11");
+        //printMessageToConsole("Key Store instance created");
+        //keyStore.load(null, "password".toCharArray());
+
+
+
+        //covers all modern browsers in windows
+        try {
+            keyStore = KeyStore.getInstance("Windows-MY");
+            keyStore.load(null, null);
+        } catch (Exception ex) {
+            //JOptionPane.showMessageDialog(this, ex.getMessage());
+        }
+        //firefox keystore
+        if (keyStore != null) {
+
+            try {
+
+                String strCfg = System.getProperty("user.home") + File.separator
+                        + "jdk6-nss-mozilla.cfg";
+                Provider p1 = new sun.security.pkcs11.SunPKCS11(strCfg);
+                Security.addProvider(p1);
+                keyStore = KeyStore.getInstance("PKCS11");
+                keyStore.load(null, "password".toCharArray());
+            } catch (Exception ex) {
+                //JOptionPane.showMessageDialog(this, ex.getMessage());
+            }
+        }
+        //MacOS with Safari possibly others
+        if (keyStore != null) {
+            try {
+                keyStore = KeyStore.getInstance("KeychainStore");
+                keyStore.load(null, null);
+
+            } catch (Exception ex) {
+                //JOptionPane.showMessageDialog(this, ex.getMessage());
+            }
+        }
+        try {
+            //printMessageToConsole("Key Store loaded");
+            Enumeration<String> aliases = keyStore.aliases();
+
+            while (aliases.hasMoreElements()) {
+                String a = aliases.nextElement();
+                X509Certificate certificate = (X509Certificate) keyStore.getCertificate(a);
+                //PublicKey publicKey = certificate.getPublicKey();
+                //  X509Certificate cert = (X509Certificate) publicKey;
+                try {
+                    Key key = keyStore.getKey(a, null);
+                    certs.add(a);
+
+                } catch (Exception x) {
+                    System.out.println("error loading certificate " + a + " " + x.getMessage());
+                }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            JOptionPane.showMessageDialog(this, e.getMessage());
+        }
+        jList1.setListData(certs);
+        if (!certs.isEmpty()) {
+            jList1.setSelectedIndex(0);
+        }
+    }
+    public final static String XML_DIGSIG_NS = "http://www.w3.org/2000/09/xmldsig#";
+
+    private void signDOM(Node node, PrivateKey privateKey, Certificate origCert) {
+        XMLSignatureFactory fac = initXMLSigFactory();
+        X509Certificate cert = (X509Certificate) origCert;
+        // Create the KeyInfo containing the X509Data.
+        KeyInfoFactory kif = fac.getKeyInfoFactory();
+        List<Object> x509Content = new ArrayList<Object>();
+        //x509Content.add(cert.getSubjectX500Principal().getName());
+        x509Content.add(cert);
+        X509Data xd = kif.newX509Data(x509Content);
+        KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));
+
+        // Create a DOMSignContext and specify the RSA PrivateKey and
+        // location of the resulting XMLSignature's parent element.
+        DOMSignContext dsc = new DOMSignContext(privateKey, node);
+        dsc.putNamespacePrefix(XML_DIGSIG_NS, "ns2");
+
+        // Create the XMLSignature, but don't sign it yet.
+        try {
+            SignedInfo si = initSignedInfo(fac);
+            XMLSignature signature = fac.newXMLSignature(si, ki);
+
+            // Marshal, generate, and sign the enveloped signature.
+            signature.sign(dsc);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * This method is called from within the init() method to initialize the
+     * form. WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jButton1 = new javax.swing.JButton();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jList1 = new javax.swing.JList();
+
+        setLayout(new java.awt.BorderLayout());
+
+        jButton1.setText("Sign");
+        jButton1.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jButton1ActionPerformed(evt);
+            }
+        });
+        add(jButton1, java.awt.BorderLayout.NORTH);
+
+        jScrollPane1.setViewportView(jList1);
+
+        add(jScrollPane1, java.awt.BorderLayout.CENTER);
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
+        // TODO add your handling code here:
+
+        JSObject window = JSObject.getWindow(this);
+        Object object2 = window.call("getBrowserName", null);
+        Object object1 = window.call("getOsName", null);
+        Object object3 = window.call("getObjectType", null);
+        String browserName = (String) object2;
+        String osName = (String) object2;
+        String objecttype = (String) object3;
+
+        //get the xml
+        String xml = (String) window.call("getXml", new Object[]{});
+        Object j = null;
+        StringReader sr = new StringReader(xml);
+        if (objecttype.equalsIgnoreCase("business")) {
+            try {
+                j = (BusinessEntity) JAXB.unmarshal(sr, BusinessEntity.class);
+            } catch (Exception ex) {
+            }
+        }
+        if (objecttype.equalsIgnoreCase("service")) {
+            try {
+                j = (BusinessService) JAXB.unmarshal(sr, BusinessService.class);
+            } catch (Exception ex) {
+            }
+        }
+        if (objecttype.equalsIgnoreCase("binding")) {
+            try {
+                j = (BindingTemplate) JAXB.unmarshal(sr, BindingTemplate.class);
+            } catch (Exception ex) {
+            }
+        }
+        if (objecttype.equalsIgnoreCase("tmodel")) {
+            try {
+                j = (TModel) JAXB.unmarshal(sr, TModel.class);
+            } catch (Exception ex) {
+            }
+        }
+
+        String signedXml = "error!";
+        if (j != null) {
+            try {
+                //sign it
+                org.apache.juddi.v3.client.crypto.DigSigUtil ds = new DigSigUtil();
+                ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_BASE64, "t");
+                PrivateKey key = (PrivateKey) keyStore.getKey((String) jList1.getSelectedValue(), null);
+
+                Certificate publickey = keyStore.getCertificate((String) jList1.getSelectedValue());
+
+
+                j = ds.signUddiEntity(j, publickey, key);
+                ds.clear();
+                StringWriter sw = new StringWriter();
+                JAXB.marshal(j, sw);
+                signedXml = sw.toString();
+            } catch (Exception ex) {
+                Logger.getLogger(XmlSignatureApplet.class.getName()).log(Level.SEVERE, null, ex);
+                signedXml = ex.getMessage();
+            }
+        } else {
+            signedXml = "Unable to determine which type of object that we're signing";
+        }
+
+
+        /*
+         try {
+         signedXml = this.sign(xml);
+         } catch (Exception ex) {
+         signedXml = ex.getMessage();
+         Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex);
+         }*/
+
+        //write it back to the web page
+        window.call("writeXml", new Object[]{signedXml});
+    }//GEN-LAST:event_jButton1ActionPerformed
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton jButton1;
+    private javax.swing.JList jList1;
+    private javax.swing.JScrollPane jScrollPane1;
+    // End of variables declaration//GEN-END:variables
+}
diff --git a/juddi-gui/build.xml b/juddi-gui/build.xml
new file mode 100644
index 0000000..6bbc8a8
--- /dev/null
+++ b/juddi-gui/build.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!-- You may freely edit this file. See commented blocks below for -->

+<!-- some examples of how to customize the build. -->

+<!-- (If you delete it and reopen the project it will be recreated.) -->

+<!-- By default, only the Clean and Build commands use this build script. -->

+<!-- Commands such as Run, Debug, and Test only use this build script if -->

+<!-- the Compile on Save feature is turned off for the project. -->

+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->

+<!-- in the project's Project Properties dialog box.-->

+<project name="juddi-gui" default="default" basedir=".">

+    <description>Builds, tests, and runs the project juddi-gui.</description>

+    <import file="nbproject/build-impl.xml"/>

+    <!--

+

+    There exist several targets which are by default empty and which can be 

+    used for execution of your tasks. These targets are usually executed 

+    before and after some main targets. They are: 

+

+      -pre-init:                 called before initialization of project properties 

+      -post-init:                called after initialization of project properties 

+      -pre-compile:              called before javac compilation 

+      -post-compile:             called after javac compilation 

+      -pre-compile-single:       called before javac compilation of single file

+      -post-compile-single:      called after javac compilation of single file

+      -pre-compile-test:         called before javac compilation of JUnit tests

+      -post-compile-test:        called after javac compilation of JUnit tests

+      -pre-compile-test-single:  called before javac compilation of single JUnit test

+      -post-compile-test-single: called after javac compilation of single JUunit test

+      -pre-dist:                 called before archive building 

+      -post-dist:                called after archive building 

+      -post-clean:               called after cleaning build products 

+      -pre-run-deploy:           called before deploying

+      -post-run-deploy:          called after deploying

+

+    Example of pluging an obfuscator after the compilation could look like 

+

+        <target name="-post-compile">

+            <obfuscate>

+                <fileset dir="${build.classes.dir}"/>

+            </obfuscate>

+        </target>

+

+    For list of available properties check the imported 

+    nbproject/build-impl.xml file. 

+

+

+    Other way how to customize the build is by overriding existing main targets.

+    The target of interest are: 

+

+      init-macrodef-javac:    defines macro for javac compilation

+      init-macrodef-junit:   defines macro for junit execution

+      init-macrodef-debug:    defines macro for class debugging

+      do-dist:                archive building

+      run:                    execution of project 

+      javadoc-build:          javadoc generation 

+

+    Example of overriding the target for project execution could look like 

+

+        <target name="run" depends="<PROJNAME>-impl.jar">

+            <exec dir="bin" executable="launcher.exe">

+                <arg file="${dist.jar}"/>

+            </exec>

+        </target>

+

+    Notice that overridden target depends on jar target and not only on 

+    compile target as regular run target does. Again, for list of available 

+    properties which you can use check the target you are overriding in 

+    nbproject/build-impl.xml file. 

+

+    -->

+</project>

diff --git a/juddi-gui/license/BlueMarble.txt b/juddi-gui/license/BlueMarble.txt
new file mode 100644
index 0000000..a90daf7
--- /dev/null
+++ b/juddi-gui/license/BlueMarble.txt
@@ -0,0 +1,4 @@
+The photo used for the language selection art was sourced from http://www.flickr.com/photos/acbo/2073367106/sizes/z/in/photostream/ 

+and is protected under the creative commons license agreement and was originated by the user 'acbo'.

+

+The details of the license agreement is located here: http://creativecommons.org/licenses/by-nc-nd/2.0/legalcode
\ No newline at end of file
diff --git a/juddi-gui/license/Bootstrap.txt b/juddi-gui/license/Bootstrap.txt
new file mode 100644
index 0000000..ce8323c
--- /dev/null
+++ b/juddi-gui/license/Bootstrap.txt
@@ -0,0 +1,3 @@
+Twitter's Boostrap is licensed under the Apache 2.0 license

+

+http://twitter.github.com/bootstrap/
\ No newline at end of file
diff --git a/juddi-gui/license/FontAwesome.txt b/juddi-gui/license/FontAwesome.txt
new file mode 100644
index 0000000..aca72be
--- /dev/null
+++ b/juddi-gui/license/FontAwesome.txt
@@ -0,0 +1,7 @@
+http://fortawesome.github.io/Font-Awesome/#license

+The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL. These fonts can only be distributed as part of a piece of software, but not individually. See the license for details.

+Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - http://opensource.org/licenses/mit-license.html.

+The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/

+Attribution is no longer required in Font Awesome 3.0, but much appreciated: Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome.

+

+Font Awesome includes a number of fonts protected by the Open Font License.
\ No newline at end of file
diff --git a/juddi-gui/license/JEditable.txt b/juddi-gui/license/JEditable.txt
new file mode 100644
index 0000000..e3f034c
--- /dev/null
+++ b/juddi-gui/license/JEditable.txt
@@ -0,0 +1,6 @@
+http://www.appelsiini.net/projects/jeditable

+by Mike Tuupola, see MIT license

+

+

+based on Editable by Dylan Verheul, see MIT license

+http://www.dyve.net/jquery/?editable

diff --git a/juddi-gui/license/Jquery-MIT-LICENSE.txt b/juddi-gui/license/Jquery-MIT-LICENSE.txt
new file mode 100644
index 0000000..3e26406
--- /dev/null
+++ b/juddi-gui/license/Jquery-MIT-LICENSE.txt
@@ -0,0 +1,878 @@
+  
+
+
+<!DOCTYPE html>
+<html>
+  <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# githubog: http://ogp.me/ns/fb/githubog#">
+    <meta charset='utf-8'>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+        <title>jquery/MIT-LICENSE.txt at master · jquery/jquery · GitHub</title>
+    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
+    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub" />
+    <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-114.png" />
+    <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114.png" />
+    <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-144.png" />
+    <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144.png" />
+    <link rel="logo" type="image/svg" href="http://github-media-downloads.s3.amazonaws.com/github-logo.svg" />
+    <meta name="msapplication-TileImage" content="/windows-tile.png">
+    <meta name="msapplication-TileColor" content="#ffffff">
+
+    
+    
+    <link rel="icon" type="image/x-icon" href="/favicon.ico" />
+
+    <meta content="authenticity_token" name="csrf-param" />
+<meta content="/aQxcJFW3wCfT92oVErB9ElHeg222E+KdZFFp0vb3fM=" name="csrf-token" />
+
+    <link href="https://a248.e.akamai.net/assets.github.com/assets/github-c1b7909016a1df6d546eebce65d605438c51f5c7.css" media="all" rel="stylesheet" type="text/css" />
+    <link href="https://a248.e.akamai.net/assets.github.com/assets/github2-a70d440e2e461f87b4e7a06e02fbe906a55b49b5.css" media="all" rel="stylesheet" type="text/css" />
+    
+
+
+      <script src="https://a248.e.akamai.net/assets.github.com/assets/frameworks-d76b58e749b52bc47a4c46620bf2c320fabe5248.js" type="text/javascript"></script>
+      <script src="https://a248.e.akamai.net/assets.github.com/assets/github-bc24a03e43b13c54969f05228849f804fda1b806.js" type="text/javascript"></script>
+      
+      <meta http-equiv="x-pjax-version" content="66b88c7db22db852b164ad07a8656f79">
+
+        <link data-pjax-transient rel='permalink' href='/jquery/jquery/blob/92b23673e60569b74ac48304579866c839008e1a/MIT-LICENSE.txt'>
+    <meta property="og:title" content="jquery"/>
+    <meta property="og:type" content="githubog:gitrepository"/>
+    <meta property="og:url" content="https://github.com/jquery/jquery"/>
+    <meta property="og:image" content="https://secure.gravatar.com/avatar/6906f317a4733f4379b06c32229ef02f?s=420&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
+    <meta property="og:site_name" content="GitHub"/>
+    <meta property="og:description" content="jQuery JavaScript Library. Contribute to jquery development by creating an account on GitHub."/>
+    <meta property="twitter:card" content="summary"/>
+    <meta property="twitter:site" content="@GitHub">
+    <meta property="twitter:title" content="jquery/jquery"/>
+
+    <meta name="description" content="jQuery JavaScript Library. Contribute to jquery development by creating an account on GitHub." />
+
+  <link href="https://github.com/jquery/jquery/commits/master.atom" rel="alternate" title="Recent Commits to jquery:master" type="application/atom+xml" />
+
+  </head>
+
+
+  <body class="logged_out page-blob windows vis-public env-production  ">
+    <div id="wrapper">
+
+      
+
+      
+
+      
+
+      
+
+
+        <div class="header header-logged-out">
+          <div class="container clearfix">
+
+            <a class="header-logo-wordmark" href="https://github.com/">
+              <img alt="GitHub" class="github-logo-4x" height="30" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x.png?1360648847" />
+              <img alt="GitHub" class="github-logo-4x-hover" height="30" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x-hover.png?1360648847" />
+            </a>
+
+              
+<ul class="top-nav">
+    <li class="explore"><a href="https://github.com/explore">Explore GitHub</a></li>
+  <li class="search"><a href="https://github.com/search">Search</a></li>
+  <li class="features"><a href="https://github.com/features">Features</a></li>
+    <li class="blog"><a href="https://github.com/blog">Blog</a></li>
+</ul>
+
+
+            <div class="header-actions">
+                <a class="button primary" href="https://github.com/signup">Sign up for free</a>
+              <a class="button" href="https://github.com/login?return_to=%2Fjquery%2Fjquery%2Fblob%2Fmaster%2FMIT-LICENSE.txt">Sign in</a>
+            </div>
+
+          </div>
+        </div>
+
+
+      
+
+      
+
+
+            <div class="site hfeed" itemscope itemtype="http://schema.org/WebPage">
+      <div class="hentry">
+        
+        <div class="pagehead repohead instapaper_ignore readability-menu ">
+          <div class="container">
+            <div class="title-actions-bar">
+              
+
+
+<ul class="pagehead-actions">
+
+
+
+    <li>
+      <a href="/login?return_to=%2Fjquery%2Fjquery"
+        class="minibutton js-toggler-target star-button entice tooltipped upwards"
+        title="You must be signed in to use this feature" rel="nofollow">
+        <span class="mini-icon mini-icon-star"></span>Star
+      </a>
+      <a class="social-count js-social-count" href="/jquery/jquery/stargazers">
+        19,610
+      </a>
+    </li>
+    <li>
+      <a href="/login?return_to=%2Fjquery%2Fjquery"
+        class="minibutton js-toggler-target fork-button entice tooltipped upwards"
+        title="You must be signed in to fork a repository" rel="nofollow">
+        <span class="mini-icon mini-icon-fork"></span>Fork
+      </a>
+      <a href="/jquery/jquery/network" class="social-count">
+        3,458
+      </a>
+    </li>
+</ul>
+
+              <h1 itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="entry-title public">
+                <span class="repo-label"><span>public</span></span>
+                <span class="mega-icon mega-icon-public-repo"></span>
+                <span class="author vcard">
+                  <a href="/jquery" class="url fn" itemprop="url" rel="author">
+                  <span itemprop="title">jquery</span>
+                  </a></span> /
+                <strong><a href="/jquery/jquery" class="js-current-repository">jquery</a></strong>
+              </h1>
+            </div>
+
+            
+  <ul class="tabs">
+    <li><a href="/jquery/jquery" class="selected" highlight="repo_source repo_downloads repo_commits repo_tags repo_branches">Code</a></li>
+    <li><a href="/jquery/jquery/network" highlight="repo_network">Network</a></li>
+    <li><a href="/jquery/jquery/pulls" highlight="repo_pulls">Pull Requests <span class='counter'>16</span></a></li>
+
+
+
+
+    <li><a href="/jquery/jquery/graphs" highlight="repo_graphs repo_contributors">Graphs</a></li>
+
+
+  </ul>
+  
+<div class="tabnav">
+
+  <span class="tabnav-right">
+    <ul class="tabnav-tabs">
+          <li><a href="/jquery/jquery/tags" class="tabnav-tab" highlight="repo_tags">Tags <span class="counter ">90</span></a></li>
+    </ul>
+    
+  </span>
+
+  <div class="tabnav-widget scope">
+
+
+    <div class="select-menu js-menu-container js-select-menu js-branch-menu">
+      <a class="minibutton select-menu-button js-menu-target" data-hotkey="w" data-ref="master">
+        <span class="mini-icon mini-icon-branch"></span>
+        <i>branch:</i>
+        <span class="js-select-button">master</span>
+      </a>
+
+      <div class="select-menu-modal-holder js-menu-content js-navigation-container">
+
+        <div class="select-menu-modal">
+          <div class="select-menu-header">
+            <span class="select-menu-title">Switch branches/tags</span>
+            <span class="mini-icon mini-icon-remove-close js-menu-close"></span>
+          </div> <!-- /.select-menu-header -->
+
+          <div class="select-menu-filters">
+            <div class="select-menu-text-filter">
+              <input type="text" id="commitish-filter-field" class="js-filterable-field js-navigation-enable" placeholder="Filter branches/tags">
+            </div>
+            <div class="select-menu-tabs">
+              <ul>
+                <li class="select-menu-tab">
+                  <a href="#" data-tab-filter="branches" class="js-select-menu-tab">Branches</a>
+                </li>
+                <li class="select-menu-tab">
+                  <a href="#" data-tab-filter="tags" class="js-select-menu-tab">Tags</a>
+                </li>
+              </ul>
+            </div><!-- /.select-menu-tabs -->
+          </div><!-- /.select-menu-filters -->
+
+          <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket css-truncate" data-tab-filter="branches">
+
+            <div data-filterable-for="commitish-filter-field" data-filterable-type="substring">
+
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.8-stable/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.8-stable" rel="nofollow" title="1.8-stable">1.8-stable</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.9-stable/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.9-stable" rel="nofollow" title="1.9-stable">1.9-stable</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/%2313388/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="#13388" rel="nofollow" title="#13388">#13388</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/13471/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="13471" rel="nofollow" title="13471">13471</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/ajax-script-2.0/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="ajax-script-2.0" rel="nofollow" title="ajax-script-2.0">ajax-script-2.0</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/ajax-unit/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="ajax-unit" rel="nofollow" title="ajax-unit">ajax-unit</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target selected">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/master/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="master" rel="nofollow" title="master">master</a>
+                </div> <!-- /.select-menu-item -->
+            </div>
+
+              <div class="select-menu-no-results">Nothing to show</div>
+          </div> <!-- /.select-menu-list -->
+
+
+          <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket css-truncate" data-tab-filter="tags">
+            <div data-filterable-for="commitish-filter-field" data-filterable-type="substring">
+
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/2.0.0b2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="2.0.0b2" rel="nofollow" title="2.0.0b2">2.0.0b2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/2.0.0b1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="2.0.0b1" rel="nofollow" title="2.0.0b1">2.0.0b1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.9.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.9.1" rel="nofollow" title="1.9.1">1.9.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.9.0rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.9.0rc1" rel="nofollow" title="1.9.0rc1">1.9.0rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.9.0b1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.9.0b1" rel="nofollow" title="1.9.0b1">1.9.0b1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.9.0/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.9.0" rel="nofollow" title="1.9.0">1.9.0</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.8rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.8rc1" rel="nofollow" title="1.8rc1">1.8rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.8b2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.8b2" rel="nofollow" title="1.8b2">1.8b2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.8b1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.8b1" rel="nofollow" title="1.8b1">1.8b1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.8.3+1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.8.3+1" rel="nofollow" title="1.8.3+1">1.8.3+1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.8.3/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.8.3" rel="nofollow" title="1.8.3">1.8.3</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.8.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.8.2" rel="nofollow" title="1.8.2">1.8.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.8.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.8.1" rel="nofollow" title="1.8.1">1.8.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.8.0/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.8.0" rel="nofollow" title="1.8.0">1.8.0</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7rc2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7rc2" rel="nofollow" title="1.7rc2">1.7rc2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7rc1" rel="nofollow" title="1.7rc1">1.7rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7b2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7b2" rel="nofollow" title="1.7b2">1.7b2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7b1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7b1" rel="nofollow" title="1.7b1">1.7b1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7.2rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7.2rc1" rel="nofollow" title="1.7.2rc1">1.7.2rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7.2b1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7.2b1" rel="nofollow" title="1.7.2b1">1.7.2b1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7.2" rel="nofollow" title="1.7.2">1.7.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7.1rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7.1rc1" rel="nofollow" title="1.7.1rc1">1.7.1rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7.1" rel="nofollow" title="1.7.1">1.7.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.7/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.7" rel="nofollow" title="1.7">1.7</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6rc1" rel="nofollow" title="1.6rc1">1.6rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6b1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6b1" rel="nofollow" title="1.6b1">1.6b1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6.4rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6.4rc1" rel="nofollow" title="1.6.4rc1">1.6.4rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6.4/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6.4" rel="nofollow" title="1.6.4">1.6.4</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6.3rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6.3rc1" rel="nofollow" title="1.6.3rc1">1.6.3rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6.3/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6.3" rel="nofollow" title="1.6.3">1.6.3</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6.2rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6.2rc1" rel="nofollow" title="1.6.2rc1">1.6.2rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6.2" rel="nofollow" title="1.6.2">1.6.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6.1rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6.1rc1" rel="nofollow" title="1.6.1rc1">1.6.1rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6.1" rel="nofollow" title="1.6.1">1.6.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.6/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.6" rel="nofollow" title="1.6">1.6</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.5rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.5rc1" rel="nofollow" title="1.5rc1">1.5rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.5b1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.5b1" rel="nofollow" title="1.5b1">1.5b1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.5.2rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.5.2rc1" rel="nofollow" title="1.5.2rc1">1.5.2rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.5.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.5.2" rel="nofollow" title="1.5.2">1.5.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.5.1rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.5.1rc1" rel="nofollow" title="1.5.1rc1">1.5.1rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.5.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.5.1" rel="nofollow" title="1.5.1">1.5.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.5/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.5" rel="nofollow" title="1.5">1.5</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4rc1" rel="nofollow" title="1.4rc1">1.4rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4a2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4a2" rel="nofollow" title="1.4a2">1.4a2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4a1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4a1" rel="nofollow" title="1.4a1">1.4a1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4.4rc3/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4.4rc3" rel="nofollow" title="1.4.4rc3">1.4.4rc3</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4.4rc2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4.4rc2" rel="nofollow" title="1.4.4rc2">1.4.4rc2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4.4rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4.4rc1" rel="nofollow" title="1.4.4rc1">1.4.4rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4.4/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4.4" rel="nofollow" title="1.4.4">1.4.4</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4.3rc2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4.3rc2" rel="nofollow" title="1.4.3rc2">1.4.3rc2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4.3rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4.3rc1" rel="nofollow" title="1.4.3rc1">1.4.3rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4.3/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4.3" rel="nofollow" title="1.4.3">1.4.3</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4.2" rel="nofollow" title="1.4.2">1.4.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4.1" rel="nofollow" title="1.4.1">1.4.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.4/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.4" rel="nofollow" title="1.4">1.4</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.3rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.3rc1" rel="nofollow" title="1.3rc1">1.3rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.3b2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.3b2" rel="nofollow" title="1.3b2">1.3b2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.3b1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.3b1" rel="nofollow" title="1.3b1">1.3b1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.3.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.3.2" rel="nofollow" title="1.3.2">1.3.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.3.1rc1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.3.1rc1" rel="nofollow" title="1.3.1rc1">1.3.1rc1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.3.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.3.1" rel="nofollow" title="1.3.1">1.3.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.3/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.3" rel="nofollow" title="1.3">1.3</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.6/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.6" rel="nofollow" title="1.2.6">1.2.6</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.5/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.5" rel="nofollow" title="1.2.5">1.2.5</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.4b/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.4b" rel="nofollow" title="1.2.4b">1.2.4b</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.4a/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.4a" rel="nofollow" title="1.2.4a">1.2.4a</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.4/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.4" rel="nofollow" title="1.2.4">1.2.4</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.3b/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.3b" rel="nofollow" title="1.2.3b">1.2.3b</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.3a/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.3a" rel="nofollow" title="1.2.3a">1.2.3a</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.3/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.3" rel="nofollow" title="1.2.3">1.2.3</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.2b2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.2b2" rel="nofollow" title="1.2.2b2">1.2.2b2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.2b/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.2b" rel="nofollow" title="1.2.2b">1.2.2b</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.2" rel="nofollow" title="1.2.2">1.2.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2.1" rel="nofollow" title="1.2.1">1.2.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.2" rel="nofollow" title="1.2">1.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.1b/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.1b" rel="nofollow" title="1.1b">1.1b</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.1a/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.1a" rel="nofollow" title="1.1a">1.1a</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.1.4/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.1.4" rel="nofollow" title="1.1.4">1.1.4</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.1.3a/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.1.3a" rel="nofollow" title="1.1.3a">1.1.3a</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.1.3.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.1.3.1" rel="nofollow" title="1.1.3.1">1.1.3.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.1.3/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.1.3" rel="nofollow" title="1.1.3">1.1.3</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.1.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.1.2" rel="nofollow" title="1.1.2">1.1.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.1.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.1.1" rel="nofollow" title="1.1.1">1.1.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.1" rel="nofollow" title="1.1">1.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.0a/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.0a" rel="nofollow" title="1.0a">1.0a</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.0.4/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.0.4" rel="nofollow" title="1.0.4">1.0.4</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.0.3/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.0.3" rel="nofollow" title="1.0.3">1.0.3</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.0.2/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.0.2" rel="nofollow" title="1.0.2">1.0.2</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.0.1/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.0.1" rel="nofollow" title="1.0.1">1.0.1</a>
+                </div> <!-- /.select-menu-item -->
+                <div class="select-menu-item js-navigation-item js-navigation-target ">
+                  <span class="select-menu-item-icon mini-icon mini-icon-confirm"></span>
+                  <a href="/jquery/jquery/blob/1.0/MIT-LICENSE.txt" class="js-navigation-open select-menu-item-text js-select-button-text css-truncate-target" data-name="1.0" rel="nofollow" title="1.0">1.0</a>
+                </div> <!-- /.select-menu-item -->
+            </div>
+
+            <div class="select-menu-no-results">Nothing to show</div>
+
+          </div> <!-- /.select-menu-list -->
+
+        </div> <!-- /.select-menu-modal -->
+      </div> <!-- /.select-menu-modal-holder -->
+    </div> <!-- /.select-menu -->
+
+  </div> <!-- /.scope -->
+
+  <ul class="tabnav-tabs">
+    <li><a href="/jquery/jquery" class="selected tabnav-tab" highlight="repo_source">Files</a></li>
+    <li><a href="/jquery/jquery/commits/master" class="tabnav-tab" highlight="repo_commits">Commits</a></li>
+    <li><a href="/jquery/jquery/branches" class="tabnav-tab" highlight="repo_branches" rel="nofollow">Branches <span class="counter ">7</span></a></li>
+  </ul>
+
+</div>
+
+  
+  
+  
+
+
+            
+          </div>
+        </div><!-- /.repohead -->
+
+        <div id="js-repo-pjax-container" class="container context-loader-container" data-pjax-container>
+          
+
+
+<!-- blob contrib key: blob_contributors:v21:892613b774a95e66d3bc7f255b1465e8 -->
+<!-- blob contrib frag key: views10/v8/blob_contributors:v21:892613b774a95e66d3bc7f255b1465e8 -->
+
+
+<div id="slider">
+    <div class="frame-meta">
+
+      <p title="This is a placeholder element" class="js-history-link-replace hidden"></p>
+
+        <div class="breadcrumb">
+          <span class='bold'><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/jquery/jquery" class="js-slide-to" data-branch="master" data-direction="back" itemscope="url"><span itemprop="title">jquery</span></a></span></span><span class="separator"> / </span><strong class="final-path">MIT-LICENSE.txt</strong> <span class="js-zeroclipboard zeroclipboard-button" data-clipboard-text="MIT-LICENSE.txt" data-copied-hint="copied!" title="copy to clipboard"><span class="mini-icon mini-icon-clipboard"></span></span>
+        </div>
+
+      <a href="/jquery/jquery/find/master" class="js-slide-to" data-hotkey="t" style="display:none">Show File Finder</a>
+
+
+        
+  <div class="commit file-history-tease">
+    <img class="main-avatar" height="24" src="https://secure.gravatar.com/avatar/161a4cc619398bea1e1714036ed122cf?s=140&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png" width="24" />
+    <span class="author"><a href="/dmethvin" rel="author">dmethvin</a></span>
+    <time class="js-relative-date" datetime="2013-01-03T14:41:18-08:00" title="2013-01-03 14:41:18">January 03, 2013</time>
+    <div class="commit-title">
+        <a href="/jquery/jquery/commit/0d540c3750bd5d702ec5cc425fd4eebd1089fa52" class="message">Happy New Year! It's 2013.</a>
+    </div>
+
+    <div class="participation">
+      <p class="quickstat"><a href="#blob_contributors_box" rel="facebox"><strong>3</strong> contributors</a></p>
+          <a class="avatar tooltipped downwards" title="jeresig" href="/jquery/jquery/commits/master/MIT-LICENSE.txt?author=jeresig"><img height="20" src="https://secure.gravatar.com/avatar/b3e04a46e85ad3e165d66f5d927eb609?s=140&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png" width="20" /></a>
+    <a class="avatar tooltipped downwards" title="dmethvin" href="/jquery/jquery/commits/master/MIT-LICENSE.txt?author=dmethvin"><img height="20" src="https://secure.gravatar.com/avatar/161a4cc619398bea1e1714036ed122cf?s=140&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png" width="20" /></a>
+    <a class="avatar tooltipped downwards" title="jbruni" href="/jquery/jquery/commits/master/MIT-LICENSE.txt?author=jbruni"><img height="20" src="https://secure.gravatar.com/avatar/27dacda91150eca332526bf8a8ee7e03?s=140&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png" width="20" /></a>
+
+
+    </div>
+    <div id="blob_contributors_box" style="display:none">
+      <h2>Users on GitHub who have contributed to this file</h2>
+      <ul class="facebox-user-list">
+        <li>
+          <img height="24" src="https://secure.gravatar.com/avatar/b3e04a46e85ad3e165d66f5d927eb609?s=140&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png" width="24" />
+          <a href="/jeresig">jeresig</a>
+        </li>
+        <li>
+          <img height="24" src="https://secure.gravatar.com/avatar/161a4cc619398bea1e1714036ed122cf?s=140&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png" width="24" />
+          <a href="/dmethvin">dmethvin</a>
+        </li>
+        <li>
+          <img height="24" src="https://secure.gravatar.com/avatar/27dacda91150eca332526bf8a8ee7e03?s=140&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png" width="24" />
+          <a href="/jbruni">jbruni</a>
+        </li>
+      </ul>
+    </div>
+  </div>
+
+
+    </div><!-- ./.frame-meta -->
+
+    <div class="frames">
+      <div class="frame" data-permalink-url="/jquery/jquery/blob/92b23673e60569b74ac48304579866c839008e1a/MIT-LICENSE.txt" data-title="jquery/MIT-LICENSE.txt at master · jquery/jquery · GitHub" data-type="blob">
+
+        <div id="files" class="bubble">
+          <div class="file">
+            <div class="meta">
+              <div class="info">
+                <span class="icon"><b class="mini-icon mini-icon-text-file"></b></span>
+                <span class="mode" title="File Mode">file</span>
+                  <span>22 lines (18 sloc)</span>
+                <span>1.099 kb</span>
+              </div>
+              <div class="actions">
+                <div class="button-group">
+                      <a class="minibutton js-entice" href=""
+                         data-entice="You must be signed in and on a branch to make or propose changes">Edit</a>
+                  <a href="/jquery/jquery/raw/master/MIT-LICENSE.txt" class="button minibutton " id="raw-url">Raw</a>
+                    <a href="/jquery/jquery/blame/master/MIT-LICENSE.txt" class="button minibutton ">Blame</a>
+                  <a href="/jquery/jquery/commits/master/MIT-LICENSE.txt" class="button minibutton " rel="nofollow">History</a>
+                </div><!-- /.button-group -->
+              </div><!-- /.actions -->
+
+            </div>
+                <div class="data type-text js-blob-data">
+      <table cellpadding="0" cellspacing="0" class="lines">
+        <tr>
+          <td>
+            <pre class="line_numbers"><span id="L1" rel="#L1">1</span>
+<span id="L2" rel="#L2">2</span>
+<span id="L3" rel="#L3">3</span>
+<span id="L4" rel="#L4">4</span>
+<span id="L5" rel="#L5">5</span>
+<span id="L6" rel="#L6">6</span>
+<span id="L7" rel="#L7">7</span>
+<span id="L8" rel="#L8">8</span>
+<span id="L9" rel="#L9">9</span>
+<span id="L10" rel="#L10">10</span>
+<span id="L11" rel="#L11">11</span>
+<span id="L12" rel="#L12">12</span>
+<span id="L13" rel="#L13">13</span>
+<span id="L14" rel="#L14">14</span>
+<span id="L15" rel="#L15">15</span>
+<span id="L16" rel="#L16">16</span>
+<span id="L17" rel="#L17">17</span>
+<span id="L18" rel="#L18">18</span>
+<span id="L19" rel="#L19">19</span>
+<span id="L20" rel="#L20">20</span>
+<span id="L21" rel="#L21">21</span>
+</pre>
+          </td>
+          <td width="100%">
+                  <div class="highlight"><pre><div class='line' id='LC1'>Copyright 2013 jQuery Foundation and other contributors</div><div class='line' id='LC2'>http://jquery.com/</div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'>Permission is hereby granted, free of charge, to any person obtaining</div><div class='line' id='LC5'>a copy of this software and associated documentation files (the</div><div class='line' id='LC6'>&quot;Software&quot;), to deal in the Software without restriction, including</div><div class='line' id='LC7'>without limitation the rights to use, copy, modify, merge, publish,</div><div class='line' id='LC8'>distribute, sublicense, and/or sell copies of the Software, and to</div><div class='line' id='LC9'>permit persons to whom the Software is furnished to do so, subject to</div><div class='line' id='LC10'>the following conditions:</div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'>The above copyright notice and this permission notice shall be</div><div class='line' id='LC13'>included in all copies or substantial portions of the Software.</div><div class='line' id='LC14'><br/></div><div class='line' id='LC15'>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</div><div class='line' id='LC16'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</div><div class='line' id='LC17'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</div><div class='line' id='LC18'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE</div><div class='line' id='LC19'>LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION</div><div class='line' id='LC20'>OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION</div><div class='line' id='LC21'>WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</div></pre></div>
+          </td>
+        </tr>
+      </table>
+  </div>
+
+          </div>
+        </div>
+
+        <a href="#jump-to-line" rel="facebox" data-hotkey="l" class="js-jump-to-line" style="display:none">Jump to Line</a>
+        <div id="jump-to-line" style="display:none">
+          <h2>Jump to Line</h2>
+          <form accept-charset="UTF-8" class="js-jump-to-line-form">
+            <input class="textfield js-jump-to-line-field" type="text">
+            <div class="full-button">
+              <button type="submit" class="button">Go</button>
+            </div>
+          </form>
+        </div>
+
+      </div>
+    </div>
+</div>
+
+<div id="js-frame-loading-template" class="frame frame-loading large-loading-area" style="display:none;">
+  <img class="js-frame-loading-spinner" src="https://a248.e.akamai.net/assets.github.com/images/spinners/octocat-spinner-128.gif?1360648847" height="64" width="64">
+</div>
+
+
+        </div>
+      </div>
+      <div class="context-overlay"></div>
+    </div>
+
+      <div id="footer-push"></div><!-- hack for sticky footer -->
+    </div><!-- end of wrapper - hack for sticky footer -->
+
+      <!-- footer -->
+      <div id="footer">
+  <div class="container clearfix">
+
+      <dl class="footer_nav">
+        <dt>GitHub</dt>
+        <dd><a href="https://github.com/about">About us</a></dd>
+        <dd><a href="https://github.com/blog">Blog</a></dd>
+        <dd><a href="https://github.com/contact">Contact &amp; support</a></dd>
+        <dd><a href="http://enterprise.github.com/">GitHub Enterprise</a></dd>
+        <dd><a href="http://status.github.com/">Site status</a></dd>
+      </dl>
+
+      <dl class="footer_nav">
+        <dt>Applications</dt>
+        <dd><a href="http://mac.github.com/">GitHub for Mac</a></dd>
+        <dd><a href="http://windows.github.com/">GitHub for Windows</a></dd>
+        <dd><a href="http://eclipse.github.com/">GitHub for Eclipse</a></dd>
+        <dd><a href="http://mobile.github.com/">GitHub mobile apps</a></dd>
+      </dl>
+
+      <dl class="footer_nav">
+        <dt>Services</dt>
+        <dd><a href="http://get.gaug.es/">Gauges: Web analytics</a></dd>
+        <dd><a href="http://speakerdeck.com">Speaker Deck: Presentations</a></dd>
+        <dd><a href="https://gist.github.com">Gist: Code snippets</a></dd>
+        <dd><a href="http://jobs.github.com/">Job board</a></dd>
+      </dl>
+
+      <dl class="footer_nav">
+        <dt>Documentation</dt>
+        <dd><a href="http://help.github.com/">GitHub Help</a></dd>
+        <dd><a href="http://developer.github.com/">Developer API</a></dd>
+        <dd><a href="http://github.github.com/github-flavored-markdown/">GitHub Flavored Markdown</a></dd>
+        <dd><a href="http://pages.github.com/">GitHub Pages</a></dd>
+      </dl>
+
+      <dl class="footer_nav">
+        <dt>More</dt>
+        <dd><a href="http://training.github.com/">Training</a></dd>
+        <dd><a href="https://github.com/edu">Students &amp; teachers</a></dd>
+        <dd><a href="http://shop.github.com">The Shop</a></dd>
+        <dd><a href="/plans">Plans &amp; pricing</a></dd>
+        <dd><a href="http://octodex.github.com/">The Octodex</a></dd>
+      </dl>
+
+      <hr class="footer-divider">
+
+
+    <p class="right">&copy; 2013 <span title="0.05841s from fe4.rs.github.com">GitHub</span>, Inc. All rights reserved.</p>
+    <a class="left" href="https://github.com/">
+      <span class="mega-icon mega-icon-invertocat"></span>
+    </a>
+    <ul id="legal">
+        <li><a href="https://github.com/site/terms">Terms of Service</a></li>
+        <li><a href="https://github.com/site/privacy">Privacy</a></li>
+        <li><a href="https://github.com/security">Security</a></li>
+    </ul>
+
+  </div><!-- /.container -->
+
+</div><!-- /.#footer -->
+
+
+    <div class="fullscreen-overlay js-fullscreen-overlay" id="fullscreen_overlay">
+  <div class="fullscreen-container js-fullscreen-container">
+    <div class="textarea-wrap">
+      <textarea name="fullscreen-contents" id="fullscreen-contents" class="js-fullscreen-contents" placeholder="" data-suggester="fullscreen_suggester"></textarea>
+          <div class="suggester-container">
+              <div class="suggester fullscreen-suggester js-navigation-container" id="fullscreen_suggester"
+                 data-url="/jquery/jquery/suggestions/commit">
+              </div>
+          </div>
+    </div>
+  </div>
+  <div class="fullscreen-sidebar">
+    <a href="#" class="exit-fullscreen js-exit-fullscreen tooltipped leftwards" title="Exit Zen Mode">
+      <span class="mega-icon mega-icon-normalscreen"></span>
+    </a>
+    <a href="#" class="theme-switcher js-theme-switcher tooltipped leftwards"
+      title="Switch themes">
+      <span class="mini-icon mini-icon-brightness"></span>
+    </a>
+  </div>
+</div>
+
+
+
+    <div id="ajax-error-message" class="flash flash-error">
+      <span class="mini-icon mini-icon-exclamation"></span>
+      Something went wrong with that request. Please try again.
+      <a href="#" class="mini-icon mini-icon-remove-close ajax-error-dismiss"></a>
+    </div>
+
+    
+    
+    <span id='server_response_time' data-time='0.05882' data-host='fe4'></span>
+    
+  </body>
+</html>
+
diff --git a/juddi-gui/license/Jquery.txt b/juddi-gui/license/Jquery.txt
new file mode 100644
index 0000000..8342c6b
--- /dev/null
+++ b/juddi-gui/license/Jquery.txt
@@ -0,0 +1,6 @@
+jQuery and jQueryUI are licensed under the MIT License

+

+Source

+

+http://jquery.com/

+http://jqueryui.com/

diff --git a/juddi-gui/license/bootstrap-datetimepicker.txt b/juddi-gui/license/bootstrap-datetimepicker.txt
new file mode 100644
index 0000000..68b3db6
--- /dev/null
+++ b/juddi-gui/license/bootstrap-datetimepicker.txt
@@ -0,0 +1,4 @@
+http://tarruda.github.io/bootstrap-datetimepicker/

+Apache 2.0 License

+

+Simple date/time picker component based on the work of Stefan Petre, with contributions taken from Andrew Rowls and jdewit.
\ No newline at end of file
diff --git a/juddi-gui/license/bootstrap-modal-master.txt b/juddi-gui/license/bootstrap-modal-master.txt
new file mode 100644
index 0000000..207f0a6
--- /dev/null
+++ b/juddi-gui/license/bootstrap-modal-master.txt
@@ -0,0 +1,181 @@
+https://github.com/jschr/bootstrap-modal/

+bootstra-modal-master, Apache 2.0 license

+

+

+

+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/juddi-gui/license/bootstrap-timepicker.txt b/juddi-gui/license/bootstrap-timepicker.txt
new file mode 100644
index 0000000..35e3476
--- /dev/null
+++ b/juddi-gui/license/bootstrap-timepicker.txt
@@ -0,0 +1,4 @@
+https://github.com/jdewit/bootstrap-timepicker

+http://jdewit.github.io/bootstrap-timepicker/

+

+MIT license
\ No newline at end of file
diff --git a/juddi-gui/nbproject/ant-deploy.xml b/juddi-gui/nbproject/ant-deploy.xml
new file mode 100644
index 0000000..19fe447
--- /dev/null
+++ b/juddi-gui/nbproject/ant-deploy.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="-deploy-ant" basedir=".">
+    <target name="-init" if="deploy.ant.enabled">
+        <property file="${deploy.ant.properties.file}"/>
+        <tempfile property="temp.module.folder" prefix="tomcat" destdir="${java.io.tmpdir}"/>
+        <unwar src="${deploy.ant.archive}" dest="${temp.module.folder}">
+            <patternset includes="META-INF/context.xml"/>
+        </unwar>
+        <xmlproperty file="${temp.module.folder}/META-INF/context.xml"/>
+        <delete dir="${temp.module.folder}"/>
+    </target>
+    <target name="-check-credentials" if="deploy.ant.enabled" depends="-init">
+        <fail message="Tomcat password has to be passed as tomcat.password property.">
+            <condition>
+                <not>
+                    <isset property="tomcat.password"/>
+                </not>
+            </condition>
+        </fail>    
+    </target>
+    <target name="-deploy-ant" if="deploy.ant.enabled" depends="-init,-check-credentials">
+        <echo message="Deploying ${deploy.ant.archive} to ${Context(path)}"/>
+        <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"
+                 classpath="${tomcat.home}/lib/catalina-ant.jar"/>
+        <deploy url="${tomcat.url}/manager" username="${tomcat.username}"
+                password="${tomcat.password}" path="${Context(path)}"
+                war="${deploy.ant.archive}"/>
+        <property name="deploy.ant.client.url" value="${tomcat.url}${Context(path)}"/>
+    </target>
+    <target name="-undeploy-ant" if="deploy.ant.enabled" depends="-init,-check-credentials">
+        <echo message="Undeploying ${Context(path)}"/>
+        <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask"
+                classpath="${tomcat.home}/lib/catalina-ant.jar"/>
+        <undeploy url="${tomcat.url}/manager" username="${tomcat.username}" 
+                  password="${tomcat.password}" path="${Context(path)}"/>
+    </target>
+</project>
diff --git a/juddi-gui/nbproject/build-impl.xml b/juddi-gui/nbproject/build-impl.xml
new file mode 100644
index 0000000..5223475
--- /dev/null
+++ b/juddi-gui/nbproject/build-impl.xml
@@ -0,0 +1,1488 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+        *** GENERATED FROM project.xml - DO NOT EDIT  ***

+        ***         EDIT ../build.xml INSTEAD         ***

+

+        For the purpose of easier reading the script

+        is divided into following sections:

+        - initialization

+        - compilation

+        - dist

+        - execution

+        - debugging

+        - javadoc

+        - test compilation

+        - test execution

+        - test debugging

+        - cleanup

+

+        -->

+<project xmlns:webproject1="http://www.netbeans.org/ns/web-project/1" xmlns:webproject2="http://www.netbeans.org/ns/web-project/2" xmlns:webproject3="http://www.netbeans.org/ns/web-project/3" basedir=".." default="default" name="juddi-gui-impl">

+    <import file="ant-deploy.xml"/>

+    <fail message="Please build using Ant 1.7.1 or higher.">

+        <condition>

+            <not>

+                <antversion atleast="1.7.1"/>

+            </not>

+        </condition>

+    </fail>

+    <target depends="dist,javadoc" description="Build whole project." name="default"/>

+    <!--

+                INITIALIZATION SECTION

+            -->

+    <target name="-pre-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="-pre-init" name="-init-private">

+        <property file="nbproject/private/private.properties"/>

+    </target>

+    <target depends="-pre-init,-init-private" name="-init-user">

+        <property file="${user.properties.file}"/>

+        <!-- The two properties below are usually overridden -->

+        <!-- by the active platform. Just a fallback. -->

+        <property name="default.javac.source" value="1.4"/>

+        <property name="default.javac.target" value="1.4"/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">

+        <property file="nbproject/project.properties"/>

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" if="dist.ear.dir" name="-do-ear-init"/>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">

+        <condition property="have.tests">

+            <or>

+                <available file="${test.src.dir}"/>

+            </or>

+        </condition>

+        <condition property="have.sources">

+            <or>

+                <available file="${src.dir}"/>

+            </or>

+        </condition>

+        <condition property="netbeans.home+have.tests">

+            <and>

+                <isset property="netbeans.home"/>

+                <isset property="have.tests"/>

+            </and>

+        </condition>

+        <condition property="no.javadoc.preview">

+            <isfalse value="${javadoc.preview}"/>

+        </condition>

+        <property name="javac.compilerargs" value=""/>

+        <condition property="no.deps">

+            <and>

+                <istrue value="${no.dependencies}"/>

+            </and>

+        </condition>

+        <condition property="no.dist.ear.dir">

+            <not>

+                <isset property="dist.ear.dir"/>

+            </not>

+        </condition>

+        <property name="build.web.excludes" value="${build.classes.excludes}"/>

+        <condition property="do.compile.jsps">

+            <istrue value="${compile.jsps}"/>

+        </condition>

+        <condition property="do.debug.server">

+            <or>

+                <not>

+                    <isset property="debug.server"/>

+                </not>

+                <istrue value="${debug.server}"/>

+                <and>

+                    <not>

+                        <istrue value="${debug.server}"/>

+                    </not>

+                    <not>

+                        <istrue value="${debug.client}"/>

+                    </not>

+                </and>

+            </or>

+        </condition>

+        <condition property="do.debug.client">

+            <istrue value="${debug.client}"/>

+        </condition>

+        <condition property="do.display.browser">

+            <istrue value="${display.browser}"/>

+        </condition>

+        <condition property="do.display.browser.debug">

+            <and>

+                <isset property="do.display.browser"/>

+                <not>

+                    <isset property="do.debug.client"/>

+                </not>

+            </and>

+        </condition>

+        <available file="${conf.dir}/MANIFEST.MF" property="has.custom.manifest"/>

+        <available file="${persistence.xml.dir}/persistence.xml" property="has.persistence.xml"/>

+        <condition property="do.war.package.with.custom.manifest">

+            <isset property="has.custom.manifest"/>

+        </condition>

+        <condition property="do.war.package.without.custom.manifest">

+            <not>

+                <isset property="has.custom.manifest"/>

+            </not>

+        </condition>

+        <condition property="do.tmp.war.package.with.custom.manifest">

+            <and>

+                <isset property="has.custom.manifest"/>

+                <or>

+                    <isfalse value="${directory.deployment.supported}"/>

+                    <isset property="dist.ear.dir"/>

+                </or>

+            </and>

+        </condition>

+        <condition property="do.tmp.war.package.without.custom.manifest">

+            <and>

+                <not>

+                    <isset property="has.custom.manifest"/>

+                </not>

+                <or>

+                    <isfalse value="${directory.deployment.supported}"/>

+                    <isset property="dist.ear.dir"/>

+                </or>

+            </and>

+        </condition>

+        <condition property="do.tmp.war.package">

+            <or>

+                <isfalse value="${directory.deployment.supported}"/>

+                <isset property="dist.ear.dir"/>

+            </or>

+        </condition>

+        <property name="build.meta.inf.dir" value="${build.web.dir}/META-INF"/>

+        <condition else="" property="application.args.param" value="${application.args}">

+            <and>

+                <isset property="application.args"/>

+                <not>

+                    <equals arg1="${application.args}" arg2="" trim="true"/>

+                </not>

+            </and>

+        </condition>

+        <property name="source.encoding" value="${file.encoding}"/>

+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">

+            <and>

+                <isset property="javadoc.encoding"/>

+                <not>

+                    <equals arg1="${javadoc.encoding}" arg2=""/>

+                </not>

+            </and>

+        </condition>

+        <property name="javadoc.encoding.used" value="${source.encoding}"/>

+        <property name="includes" value="**"/>

+        <property name="excludes" value=""/>

+        <property name="runmain.jvmargs" value=""/>

+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>

+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">

+            <and>

+                <isset property="endorsed.classpath"/>

+                <length length="0" string="${endorsed.classpath}" when="greater"/>

+            </and>

+        </condition>

+        <condition else="false" property="jdkBug6558476">

+            <and>

+                <matches pattern="1\.[56]" string="${java.specification.version}"/>

+                <not>

+                    <os family="unix"/>

+                </not>

+            </and>

+        </condition>

+        <property name="javac.fork" value="${jdkBug6558476}"/>

+        <condition property="junit.available">

+            <or>

+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>

+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>

+            </or>

+        </condition>

+        <condition property="testng.available">

+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>

+        </condition>

+        <condition property="junit+testng.available">

+            <and>

+                <istrue value="${junit.available}"/>

+                <istrue value="${testng.available}"/>

+            </and>

+        </condition>

+        <condition else="testng" property="testng.mode" value="mixed">

+            <istrue value="${junit+testng.available}"/>

+        </condition>

+        <condition else="" property="testng.debug.mode" value="-mixed">

+            <istrue value="${junit+testng.available}"/>

+        </condition>

+    </target>

+    <target depends="init" name="-init-cos" unless="deploy.on.save">

+        <condition property="deploy.on.save" value="true">

+            <or>

+                <istrue value="${j2ee.deploy.on.save}"/>

+                <istrue value="${j2ee.compile.on.save}"/>

+            </or>

+        </condition>

+    </target>

+    <target name="-post-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">

+        <fail unless="src.dir">Must set src.dir</fail>

+        <fail unless="test.src.dir">Must set test.src.dir</fail>

+        <fail unless="build.dir">Must set build.dir</fail>

+        <fail unless="build.web.dir">Must set build.web.dir</fail>

+        <fail unless="build.generated.dir">Must set build.generated.dir</fail>

+        <fail unless="dist.dir">Must set dist.dir</fail>

+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>

+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>

+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>

+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>

+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>

+        <fail unless="dist.war">Must set dist.war</fail>

+        <condition property="missing.j2ee.server.home">

+            <and>

+                <matches pattern="j2ee.server.home" string="${j2ee.platform.classpath}"/>

+                <not>

+                    <isset property="j2ee.server.home"/>

+                </not>

+            </and>

+        </condition>

+        <fail if="missing.j2ee.server.home">

+The Java EE server classpath is not correctly set up - server home directory is missing.

+Either open the project in the IDE and assign the server or setup the server classpath manually.

+For example like this:

+   ant -Dj2ee.server.home=&lt;app_server_installation_directory&gt;

+                </fail>

+        <fail unless="j2ee.platform.classpath">

+The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}.

+Either open the project in the IDE and assign the server or setup the server classpath manually.

+For example like this:

+   ant -Duser.properties.file=&lt;path_to_property_file&gt; (where you put the property "j2ee.platform.classpath" in a .properties file)

+or ant -Dj2ee.platform.classpath=&lt;server_classpath&gt; (where no properties file is used)

+                </fail>

+    </target>

+    <target name="-init-macrodef-property">

+        <macrodef name="property" uri="http://www.netbeans.org/ns/web-project/1">

+            <attribute name="name"/>

+            <attribute name="value"/>

+            <sequential>

+                <property name="@{name}" value="${@{value}}"/>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">

+        <macrodef name="javac" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>

+            <attribute default="${javac.processorpath}" name="processorpath"/>

+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="${javac.debug}" name="debug"/>

+            <attribute default="${empty.dir}" name="gensrcdir"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.dir}/empty" name="empty.dir"/>

+                <mkdir dir="${empty.dir}"/>

+                <mkdir dir="@{apgeneratedsrcdir}"/>

+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" srcdir="@{srcdir}" target="${javac.target}">

+                    <src>

+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">

+                            <include name="*"/>

+                        </dirset>

+                    </src>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <compilerarg line="${javac.compilerargs}"/>

+                    <compilerarg value="-processorpath"/>

+                    <compilerarg path="@{processorpath}:${empty.dir}"/>

+                    <compilerarg line="${ap.processors.internal}"/>

+                    <compilerarg value="-s"/>

+                    <compilerarg path="@{apgeneratedsrcdir}"/>

+                    <compilerarg line="${ap.proc.none.internal}"/>

+                    <customize/>

+                </javac>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">

+        <macrodef name="javac" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>

+            <attribute default="${javac.processorpath}" name="processorpath"/>

+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="${javac.debug}" name="debug"/>

+            <attribute default="${empty.dir}" name="gensrcdir"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property location="${build.dir}/empty" name="empty.dir"/>

+                <mkdir dir="${empty.dir}"/>

+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" srcdir="@{srcdir}" target="${javac.target}">

+                    <src>

+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">

+                            <include name="*"/>

+                        </dirset>

+                    </src>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <compilerarg line="${javac.compilerargs}"/>

+                    <customize/>

+                </javac>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">

+        <macrodef name="depend" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${src.dir}" name="srcdir"/>

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>

+            <sequential>

+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                </depend>

+            </sequential>

+        </macrodef>

+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${build.classes.dir}" name="destdir"/>

+            <sequential>

+                <fail unless="javac.includes">Must set javac.includes</fail>

+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">

+                    <path>

+                        <filelist dir="@{destdir}" files="${javac.includes}"/>

+                    </path>

+                    <globmapper from="*.java" to="*.class"/>

+                </pathconvert>

+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>

+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>

+                <delete>

+                    <files includesfile="${javac.includesfile.binary}"/>

+                </delete>

+                <delete file="${javac.includesfile.binary}"/>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${junit.available}" name="-init-macrodef-junit-init">

+        <condition else="false" property="nb.junit.batch" value="true">

+            <and>

+                <istrue value="${junit.available}"/>

+                <not>

+                    <isset property="test.method"/>

+                </not>

+            </and>

+        </condition>

+        <condition else="false" property="nb.junit.single" value="true">

+            <and>

+                <istrue value="${junit.available}"/>

+                <isset property="test.method"/>

+            </and>

+        </condition>

+    </target>

+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">

+        <macrodef name="junit" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${java.io.tmpdir}">

+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">

+        <macrodef name="junit" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="run.jvmargs.ide" value=""/>

+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}">

+                    <batchtest todir="${build.test.results.dir}">

+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">

+                            <filename name="@{testincludes}"/>

+                        </fileset>

+                    </batchtest>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <jvmarg line="${run.jvmargs.ide}"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>

+    <target if="${testng.available}" name="-init-macrodef-testng">

+        <macrodef name="testng" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">

+                    <isset property="test.method"/>

+                </condition>

+                <union id="test.set">

+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">

+                        <filename name="@{testincludes}"/>

+                    </fileset>

+                </union>

+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>

+                <testng classfilesetref="test.set" failureProperty="tests.failed" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="juddi-gui" testname="TestNG tests" workingDir="${basedir}">

+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>

+                    <propertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </propertyset>

+                    <customize/>

+                </testng>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-test-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <echo>No tests executed.</echo>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <webproject2:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </webproject2:junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">

+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <webproject2:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </webproject2:testng>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">

+        <macrodef name="test" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <sequential>

+                <webproject2:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize>

+                        <classpath>

+                            <path path="${run.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}"/>

+                        </classpath>

+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                        <jvmarg line="${runmain.jvmargs}"/>

+                    </customize>

+                </webproject2:test-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">

+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${java.io.tmpdir}">

+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">

+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <property name="run.jvmargs.ide" value=""/>

+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}">

+                    <batchtest todir="${build.test.results.dir}">

+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">

+                            <filename name="@{testincludes}"/>

+                        </fileset>

+                    </batchtest>

+                    <syspropertyset>

+                        <propertyref prefix="test-sys-prop."/>

+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <formatter type="brief" usefile="false"/>

+                    <formatter type="xml"/>

+                    <jvmarg value="-ea"/>

+                    <jvmarg line="${run.jvmargs.ide}"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <customize/>

+                </junit>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">

+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <element implicit="true" name="customize" optional="true"/>

+            <sequential>

+                <webproject2:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize/>

+                </webproject2:junit-debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target if="${testng.available}" name="-init-macrodef-testng-debug">

+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <element name="customize2" optional="true"/>

+            <sequential>

+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">

+                    <isset property="test.method"/>

+                </condition>

+                <condition else="-suitename juddi-gui -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">

+                    <matches pattern=".*\.xml" string="@{testClass}"/>

+                </condition>

+                <delete dir="${build.test.results.dir}" quiet="true"/>

+                <mkdir dir="${build.test.results.dir}"/>

+                <webproject1:debug args="${testng.cmd.args}" classname="org.testng.TestNG" classpath="${debug.test.classpath}:${j2ee.platform.embeddableejb.classpath}">

+                    <customize>

+                        <customize2/>

+                        <jvmarg value="-ea"/>

+                        <arg line="${testng.debug.mode}"/>

+                        <arg line="-d ${build.test.results.dir}"/>

+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>

+                    </customize>

+                </webproject1:debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">

+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <element implicit="true" name="customize2" optional="true"/>

+            <sequential>

+                <webproject2:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">

+                    <customize2/>

+                </webproject2:testng-debug>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">

+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <sequential>

+                <webproject2:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">

+                    <customize>

+                        <classpath>

+                            <path path="${run.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}"/>

+                        </classpath>

+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                        <jvmarg line="${runmain.jvmargs}"/>

+                    </customize>

+                </webproject2:test-debug-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">

+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/web-project/2">

+            <attribute default="${includes}" name="includes"/>

+            <attribute default="${excludes}" name="excludes"/>

+            <attribute default="**" name="testincludes"/>

+            <attribute default="" name="testmethods"/>

+            <attribute default="${main.class}" name="testClass"/>

+            <attribute default="" name="testMethod"/>

+            <sequential>

+                <webproject2:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">

+                    <customize2>

+                        <syspropertyset>

+                            <propertyref prefix="test-sys-prop."/>

+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>

+                        </syspropertyset>

+                    </customize2>

+                </webproject2:testng-debug-impl>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>

+    <target name="-init-macrodef-java">

+        <macrodef name="java" uri="http://www.netbeans.org/ns/web-project/1">

+            <attribute default="${main.class}" name="classname"/>

+            <attribute default="${debug.classpath}" name="classpath"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <java classname="@{classname}" fork="true">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg line="${runmain.jvmargs}"/>

+                    <classpath>

+                        <path path="@{classpath}:${j2ee.platform.classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-macrodef-nbjsdebug">

+        <macrodef name="nbjsdebugstart" uri="http://www.netbeans.org/ns/web-project/1">

+            <attribute default="${client.url}" name="webUrl"/>

+            <sequential>

+                <nbjsdebugstart urlPart="${client.urlPart}" webUrl="@{webUrl}"/>

+            </sequential>

+        </macrodef>

+    </target>

+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">

+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/web-project/1">

+            <attribute default="${main.class}" name="name"/>

+            <attribute default="${debug.classpath}:${j2ee.platform.classpath}" name="classpath"/>

+            <sequential>

+                <nbjpdastart addressproperty="jpda.address" name="@{name}" transport="${debug-transport}">

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                </nbjpdastart>

+            </sequential>

+        </macrodef>

+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/web-project/1">

+            <attribute default="${build.classes.dir}" name="dir"/>

+            <sequential>

+                <nbjpdareload>

+                    <fileset dir="@{dir}" includes="${fix.classes}">

+                        <include name="${fix.includes}*.class"/>

+                    </fileset>

+                </nbjpdareload>

+            </sequential>

+        </macrodef>

+        <macrodef name="nbjpdaappreloaded" uri="http://www.netbeans.org/ns/web-project/1">

+            <sequential>

+                <nbjpdaappreloaded/>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-debug-args">

+        <property name="version-output" value="java version &quot;${ant.java.version}"/>

+        <condition property="have-jdk-older-than-1.4">

+            <or>

+                <contains string="${version-output}" substring="java version &quot;1.0"/>

+                <contains string="${version-output}" substring="java version &quot;1.1"/>

+                <contains string="${version-output}" substring="java version &quot;1.2"/>

+                <contains string="${version-output}" substring="java version &quot;1.3"/>

+            </or>

+        </condition>

+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">

+            <istrue value="${have-jdk-older-than-1.4}"/>

+        </condition>

+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">

+            <os family="windows"/>

+        </condition>

+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">

+            <isset property="debug.transport"/>

+        </condition>

+    </target>

+    <target depends="-init-debug-args" name="-init-macrodef-debug">

+        <macrodef name="debug" uri="http://www.netbeans.org/ns/web-project/1">

+            <attribute default="${main.class}" name="classname"/>

+            <attribute default="${debug.classpath}:${j2ee.platform.classpath}" name="classpath"/>

+            <attribute default="${application.args.param}" name="args"/>

+            <element name="customize" optional="true"/>

+            <sequential>

+                <java classname="@{classname}" fork="true">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

+                    <jvmarg line="${debug-args-line}"/>

+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>

+                    <jvmarg line="${runmain.jvmargs}"/>

+                    <classpath>

+                        <path path="@{classpath}"/>

+                    </classpath>

+                    <syspropertyset>

+                        <propertyref prefix="run-sys-prop."/>

+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>

+                    </syspropertyset>

+                    <arg line="@{args}"/>

+                    <customize/>

+                </java>

+            </sequential>

+        </macrodef>

+    </target>

+    <target name="-init-taskdefs">

+        <fail unless="libs.CopyLibs.classpath">

+The libs.CopyLibs.classpath property is not set up.

+This property must point to 

+org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part

+of NetBeans IDE installation and is usually located at 

+&lt;netbeans_installation&gt;/java&lt;version&gt;/ant/extra folder.

+Either open the project in the IDE and make sure CopyLibs library

+exists or setup the property manually. For example like this:

+ ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar

+                </fail>

+        <taskdef classpath="${libs.CopyLibs.classpath}" resource="org/netbeans/modules/java/j2seproject/copylibstask/antlib.xml"/>

+    </target>

+    <target name="-init-ap-cmdline-properties">

+        <property name="annotation.processing.enabled" value="true"/>

+        <property name="annotation.processing.processors.list" value=""/>

+        <property name="annotation.processing.run.all.processors" value="true"/>

+        <property name="javac.processorpath" value="${javac.classpath}"/>

+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>

+        <condition property="ap.supported.internal" value="true">

+            <not>

+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>

+            </not>

+        </condition>

+    </target>

+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">

+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">

+            <isfalse value="${annotation.processing.run.all.processors}"/>

+        </condition>

+        <condition else="" property="ap.proc.none.internal" value="-proc:none">

+            <isfalse value="${annotation.processing.enabled}"/>

+        </condition>

+    </target>

+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">

+        <property name="ap.cmd.line.internal" value=""/>

+    </target>

+    <!--

+                pre NB7.2 profiling section; consider it deprecated

+            -->

+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>

+    <target name="-profile-pre-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target name="-profile-post-init">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="-profile-pre-init, init, -profile-post-init" if="profiler.info.jvmargs.agent" name="-profile-init-check">

+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>

+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>

+    </target>

+    <!--

+                end of pre NB7.2 profiling section

+            -->

+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-java,-init-macrodef-nbjpda,-init-macrodef-nbjsdebug,-init-macrodef-debug,-init-taskdefs,-init-ap-cmdline" name="init"/>

+    <!--

+                COMPILATION SECTION

+            -->

+    <target depends="init" if="no.dist.ear.dir" name="deps-module-jar" unless="no.deps"/>

+    <target depends="init" if="dist.ear.dir" name="deps-ear-jar" unless="no.deps"/>

+    <target depends="init, deps-module-jar, deps-ear-jar" name="deps-jar" unless="no.deps"/>

+    <target depends="init,deps-jar" name="-pre-pre-compile">

+        <mkdir dir="${build.classes.dir}"/>

+    </target>

+    <target name="-pre-compile">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target name="-copy-webdir">

+        <copy todir="${build.web.dir}">

+            <fileset dir="${web.docbase.dir}" excludes="${build.web.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+        <copy todir="${build.web.dir}/WEB-INF">

+            <fileset dir="${webinf.dir}" excludes="${build.web.excludes}"/>

+        </copy>

+    </target>

+    <target depends="init, deps-jar, -pre-pre-compile, -pre-compile, -copy-manifest, -copy-persistence-xml, -copy-webdir, library-inclusion-in-archive,library-inclusion-in-manifest" if="have.sources" name="-do-compile">

+        <webproject2:javac destdir="${build.classes.dir}" gensrcdir="${build.generated.sources.dir}"/>

+        <copy todir="${build.classes.dir}">

+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target if="has.custom.manifest" name="-copy-manifest">

+        <mkdir dir="${build.meta.inf.dir}"/>

+        <copy todir="${build.meta.inf.dir}">

+            <fileset dir="${conf.dir}" includes="MANIFEST.MF"/>

+        </copy>

+    </target>

+    <target if="has.persistence.xml" name="-copy-persistence-xml">

+        <mkdir dir="${build.web.dir}/WEB-INF/classes/META-INF"/>

+        <copy todir="${build.web.dir}/WEB-INF/classes/META-INF">

+            <fileset dir="${persistence.xml.dir}" includes="persistence.xml"/>

+        </copy>

+    </target>

+    <target name="-post-compile">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>

+    <target name="-pre-compile-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">

+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>

+        <webproject2:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}"/>

+        <copy todir="${build.classes.dir}">

+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target name="-post-compile-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>

+    <property name="jspc.schemas" value="/resources/schemas/"/>

+    <property name="jspc.dtds" value="/resources/dtds/"/>

+    <target depends="compile" description="Test compile JSP pages to expose compilation errors." if="do.compile.jsps" name="compile-jsps">

+        <mkdir dir="${build.generated.dir}/src"/>

+        <java classname="org.netbeans.modules.web.project.ant.JspC" failonerror="true" fork="true">

+            <arg value="-uriroot"/>

+            <arg file="${basedir}/${build.web.dir}"/>

+            <arg value="-d"/>

+            <arg file="${basedir}/${build.generated.dir}/src"/>

+            <arg value="-die1"/>

+            <arg value="-schemas ${jspc.schemas}"/>

+            <arg value="-dtds ${jspc.dtds}"/>

+            <arg value="-compilerSourceVM ${javac.source}"/>

+            <arg value="-compilerTargetVM ${javac.target}"/>

+            <arg value="-javaEncoding ${source.encoding}"/>

+            <arg value="-sysClasspath ${libs.jsp-compilation-syscp.classpath}"/>

+            <classpath path="${java.home}/../lib/tools.jar:${libs.jsp-compiler.classpath}:${libs.jsp-compilation.classpath}"/>

+        </java>

+        <mkdir dir="${build.generated.dir}/classes"/>

+        <webproject2:javac classpath="${build.classes.dir}:${libs.jsp-compilation.classpath}:${javac.classpath}:${j2ee.platform.classpath}" destdir="${build.generated.dir}/classes" srcdir="${build.generated.dir}/src"/>

+    </target>

+    <target depends="compile" if="jsp.includes" name="-do-compile-single-jsp">

+        <fail unless="javac.jsp.includes">Must select some files in the IDE or set javac.jsp.includes</fail>

+        <mkdir dir="${build.generated.dir}/src"/>

+        <java classname="org.netbeans.modules.web.project.ant.JspCSingle" failonerror="true" fork="true">

+            <arg value="-uriroot"/>

+            <arg file="${basedir}/${build.web.dir}"/>

+            <arg value="-d"/>

+            <arg file="${basedir}/${build.generated.dir}/src"/>

+            <arg value="-die1"/>

+            <arg value="-schemas ${jspc.schemas}"/>

+            <arg value="-dtds ${jspc.dtds}"/>

+            <arg value="-sysClasspath ${libs.jsp-compilation-syscp.classpath}"/>

+            <arg value="-jspc.files"/>

+            <arg path="${jsp.includes}"/>

+            <arg value="-compilerSourceVM ${javac.source}"/>

+            <arg value="-compilerTargetVM ${javac.target}"/>

+            <arg value="-javaEncoding ${source.encoding}"/>

+            <classpath path="${java.home}/../lib/tools.jar:${libs.jsp-compiler.classpath}:${libs.jsp-compilation.classpath}"/>

+        </java>

+        <mkdir dir="${build.generated.dir}/classes"/>

+        <webproject2:javac classpath="${build.classes.dir}:${libs.jsp-compilation.classpath}:${javac.classpath}:${j2ee.platform.classpath}" destdir="${build.generated.dir}/classes" srcdir="${build.generated.dir}/src">

+            <customize>

+                <patternset includes="${javac.jsp.includes}"/>

+            </customize>

+        </webproject2:javac>

+    </target>

+    <target name="compile-single-jsp">

+        <fail unless="jsp.includes">Must select a file in the IDE or set jsp.includes</fail>

+        <antcall target="-do-compile-single-jsp"/>

+    </target>

+    <!--

+                DIST BUILDING SECTION

+            -->

+    <target name="-pre-dist">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.war.package.without.custom.manifest" name="-do-dist-without-manifest">

+        <dirname file="${dist.war}" property="dist.jar.dir"/>

+        <mkdir dir="${dist.jar.dir}"/>

+        <jar compress="${jar.compress}" jarfile="${dist.war}">

+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*"/>

+        </jar>

+    </target>

+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.war.package.with.custom.manifest" name="-do-dist-with-manifest">

+        <dirname file="${dist.war}" property="dist.jar.dir"/>

+        <mkdir dir="${dist.jar.dir}"/>

+        <jar compress="${jar.compress}" jarfile="${dist.war}" manifest="${build.meta.inf.dir}/MANIFEST.MF">

+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*"/>

+        </jar>

+    </target>

+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.tmp.war.package.without.custom.manifest" name="-do-tmp-dist-without-manifest">

+        <dirname file="${dist.war}" property="dist.jar.dir"/>

+        <mkdir dir="${dist.jar.dir}"/>

+        <jar compress="${jar.compress}" jarfile="${dist.war}">

+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*"/>

+        </jar>

+    </target>

+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.tmp.war.package.with.custom.manifest" name="-do-tmp-dist-with-manifest">

+        <dirname file="${dist.war}" property="dist.jar.dir"/>

+        <mkdir dir="${dist.jar.dir}"/>

+        <jar compress="${jar.compress}" jarfile="${dist.war}" manifest="${build.meta.inf.dir}/MANIFEST.MF">

+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*"/>

+        </jar>

+    </target>

+    <target depends="init,compile,compile-jsps,-pre-dist,-do-dist-with-manifest,-do-dist-without-manifest" name="do-dist"/>

+    <target depends="init" if="dist.ear.dir" name="library-inclusion-in-manifest">

+        <copyfiles files="${file.reference.XmlSchema-1.4.7.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.aopalliance-1.0.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.asm-3.3.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.commons-beanutils-1.7.0.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.commons-beanutils-core-1.8.0.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.commons-codec-1.3.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.commons-collections-3.2.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.commons-configuration-1.6.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.commons-digester-1.8.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.commons-lang-2.4.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.commons-logging-api-1.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.commons-logging-api-1.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-api-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-common-schemas-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-common-utilities-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-bindings-soap-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-bindings-xml-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-core-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-databinding-jaxb-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-frontend-jaxws-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-frontend-simple-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-transports-http-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-ws-addr-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.cxf-tools-common-2.3.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.geronimo-javamail_1.4_spec-1.7.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.jaxb-impl-2.1.13.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.juddi-client-3.1.5-SNAPSHOT.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.neethi-2.0.4.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.persistence-api-1.0.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.serp-1.13.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.spring-aop-3.0.5.RELEASE.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.spring-asm-3.0.5.RELEASE.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.spring-beans-3.0.5.RELEASE.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.spring-context-3.0.5.RELEASE.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.spring-core-3.0.5.RELEASE.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.spring-expression-3.0.5.RELEASE.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.spring-web-3.0.5.RELEASE.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.stax2-api-3.0.2.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.uddi-ws-3.1.5-SNAPSHOT.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.woodstox-core-asl-4.0.8.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.wsdl4j-1.6.2.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.xml-resolver-1.2.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.httpclient-4.2.5.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <copyfiles files="${file.reference.httpcore-4.2.4.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>

+        <mkdir dir="${build.web.dir}/META-INF"/>

+        <manifest file="${build.web.dir}/META-INF/MANIFEST.MF" mode="update"/>

+    </target>

+    <target depends="init" name="library-inclusion-in-archive" unless="dist.ear.dir">

+        <copyfiles files="${file.reference.XmlSchema-1.4.7.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.aopalliance-1.0.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.asm-3.3.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.commons-beanutils-1.7.0.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.commons-beanutils-core-1.8.0.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.commons-codec-1.3.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.commons-collections-3.2.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.commons-configuration-1.6.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.commons-digester-1.8.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.commons-lang-2.4.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.commons-logging-api-1.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.commons-logging-api-1.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-api-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-common-schemas-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-common-utilities-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-bindings-soap-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-bindings-xml-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-core-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-databinding-jaxb-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-frontend-jaxws-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-frontend-simple-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-transports-http-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-rt-ws-addr-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.cxf-tools-common-2.3.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.geronimo-javamail_1.4_spec-1.7.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.jaxb-impl-2.1.13.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.juddi-client-3.1.5-SNAPSHOT.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.neethi-2.0.4.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.persistence-api-1.0.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.serp-1.13.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.spring-aop-3.0.5.RELEASE.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.spring-asm-3.0.5.RELEASE.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.spring-beans-3.0.5.RELEASE.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.spring-context-3.0.5.RELEASE.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.spring-core-3.0.5.RELEASE.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.spring-expression-3.0.5.RELEASE.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.spring-web-3.0.5.RELEASE.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.stax2-api-3.0.2.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.uddi-ws-3.1.5-SNAPSHOT.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.woodstox-core-asl-4.0.8.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.wsdl4j-1.6.2.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.xml-resolver-1.2.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.httpclient-4.2.5.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+        <copyfiles files="${file.reference.httpcore-4.2.4.jar}" todir="${build.web.dir}/WEB-INF/lib"/>

+    </target>

+    <target depends="init" if="dist.ear.dir" name="-clean-webinf-lib">

+        <delete dir="${build.web.dir}/WEB-INF/lib"/>

+    </target>

+    <target depends="init,-clean-webinf-lib,compile,compile-jsps,-pre-dist,library-inclusion-in-manifest" if="do.tmp.war.package" name="do-ear-dist">

+        <dirname file="${dist.ear.war}" property="dist.jar.dir"/>

+        <mkdir dir="${dist.jar.dir}"/>

+        <jar compress="${jar.compress}" jarfile="${dist.ear.war}" manifest="${build.web.dir}/META-INF/MANIFEST.MF">

+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*"/>

+        </jar>

+    </target>

+    <target name="-post-dist">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-dist,do-dist,-post-dist" description="Build distribution (WAR)." name="dist"/>

+    <target depends="init,-clean-webinf-lib,-init-cos,compile,-pre-dist,do-ear-dist,-post-dist" description="Build distribution (WAR) to be packaged into an EAR." name="dist-ear"/>

+    <!--

+                EXECUTION SECTION

+            -->

+    <target depends="run-deploy,run-display-browser" description="Deploy to server and show in browser." name="run"/>

+    <target name="-pre-run-deploy">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target name="-post-run-deploy">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target name="-pre-nbmodule-run-deploy">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- This target can be overriden by NetBeans modules. Don't override it directly, use -pre-run-deploy task instead. -->

+    </target>

+    <target name="-post-nbmodule-run-deploy">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- This target can be overriden by NetBeans modules. Don't override it directly, use -post-run-deploy task instead. -->

+    </target>

+    <target name="-run-deploy-am">

+        <!-- Task to deploy to the Access Manager runtime. -->

+    </target>

+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest,-pre-run-deploy,-pre-nbmodule-run-deploy,-run-deploy-nb,-init-deploy-ant,-deploy-ant,-run-deploy-am,-post-nbmodule-run-deploy,-post-run-deploy,-do-update-breakpoints" name="run-deploy"/>

+    <target if="netbeans.home" name="-run-deploy-nb">

+        <nbdeploy clientUrlPart="${client.urlPart}" debugmode="false" forceRedeploy="${forceRedeploy}"/>

+    </target>

+    <target name="-init-deploy-ant" unless="netbeans.home">

+        <property name="deploy.ant.archive" value="${dist.war}"/>

+        <property name="deploy.ant.docbase.dir" value="${web.docbase.dir}"/>

+        <property name="deploy.ant.resource.dir" value="${resource.dir}"/>

+        <property name="deploy.ant.enabled" value="true"/>

+    </target>

+    <target depends="dist,-run-undeploy-nb,-init-deploy-ant,-undeploy-ant" name="run-undeploy"/>

+    <target if="netbeans.home" name="-run-undeploy-nb">

+        <fail message="Undeploy is not supported from within the IDE"/>

+    </target>

+    <target depends="init,-pre-dist,dist,-post-dist" name="verify">

+        <nbverify file="${dist.war}"/>

+    </target>

+    <target depends="run-deploy,-init-display-browser,-display-browser-nb,-display-browser-cl" name="run-display-browser"/>

+    <target if="do.display.browser" name="-init-display-browser">

+        <condition property="do.display.browser.nb">

+            <isset property="netbeans.home"/>

+        </condition>

+        <condition property="do.display.browser.cl">

+            <isset property="deploy.ant.enabled"/>

+        </condition>

+    </target>

+    <target if="do.display.browser.nb" name="-display-browser-nb">

+        <nbbrowse url="${client.url}"/>

+    </target>

+    <target if="do.display.browser.cl" name="-get-browser" unless="browser">

+        <condition property="browser" value="rundll32">

+            <os family="windows"/>

+        </condition>

+        <condition else="" property="browser.args" value="url.dll,FileProtocolHandler">

+            <os family="windows"/>

+        </condition>

+        <condition property="browser" value="/usr/bin/open">

+            <os family="mac"/>

+        </condition>

+        <property environment="env"/>

+        <condition property="browser" value="${env.BROWSER}">

+            <isset property="env.BROWSER"/>

+        </condition>

+        <condition property="browser" value="/usr/bin/firefox">

+            <available file="/usr/bin/firefox"/>

+        </condition>

+        <condition property="browser" value="/usr/local/firefox/firefox">

+            <available file="/usr/local/firefox/firefox"/>

+        </condition>

+        <condition property="browser" value="/usr/bin/mozilla">

+            <available file="/usr/bin/mozilla"/>

+        </condition>

+        <condition property="browser" value="/usr/local/mozilla/mozilla">

+            <available file="/usr/local/mozilla/mozilla"/>

+        </condition>

+        <condition property="browser" value="/usr/sfw/lib/firefox/firefox">

+            <available file="/usr/sfw/lib/firefox/firefox"/>

+        </condition>

+        <condition property="browser" value="/opt/csw/bin/firefox">

+            <available file="/opt/csw/bin/firefox"/>

+        </condition>

+        <condition property="browser" value="/usr/sfw/lib/mozilla/mozilla">

+            <available file="/usr/sfw/lib/mozilla/mozilla"/>

+        </condition>

+        <condition property="browser" value="/opt/csw/bin/mozilla">

+            <available file="/opt/csw/bin/mozilla"/>

+        </condition>

+    </target>

+    <target depends="-get-browser" if="do.display.browser.cl" name="-display-browser-cl">

+        <fail unless="browser">

+                    Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable.

+                </fail>

+        <property name="browse.url" value="${deploy.ant.client.url}${client.urlPart}"/>

+        <echo>Launching ${browse.url}</echo>

+        <exec executable="${browser}" spawn="true">

+            <arg line="${browser.args} ${browse.url}"/>

+        </exec>

+    </target>

+    <target depends="init,-init-cos,compile-single" name="run-main">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <webproject1:java classname="${run.class}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single" name="run-test-with-main">

+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>

+        <webproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>

+    </target>

+    <target depends="init" if="netbeans.home" name="-do-update-breakpoints">

+        <webproject1:nbjpdaappreloaded/>

+    </target>

+    <!--

+                DEBUGGING SECTION

+            -->

+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest" description="Debug project in IDE." if="netbeans.home" name="debug">

+        <nbstartserver debugmode="true"/>

+        <antcall target="connect-debugger"/>

+        <nbdeploy clientUrlPart="${client.urlPart}" debugmode="true" forceRedeploy="true"/>

+        <antcall target="debug-display-browser"/>

+        <antcall target="connect-client-debugger"/>

+    </target>

+    <target if="do.debug.server" name="connect-debugger" unless="is.debugged">

+        <condition property="listeningcp" value="sourcepath">

+            <istrue value="${j2ee.compile.on.save}"/>

+        </condition>

+        <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" listeningcp="${listeningcp}" name="${name}" transport="${jpda.transport}">

+            <classpath>

+                <path path="${debug.classpath}:${j2ee.platform.classpath}"/>

+            </classpath>

+            <sourcepath>

+                <path path="${web.docbase.dir}"/>

+            </sourcepath>

+        </nbjpdaconnect>

+    </target>

+    <target if="do.display.browser.debug" name="debug-display-browser">

+        <nbbrowse url="${client.url}"/>

+    </target>

+    <target if="do.debug.client" name="connect-client-debugger">

+        <webproject1:nbjsdebugstart webUrl="${client.url}"/>

+    </target>

+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">

+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>

+        <webproject1:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>

+    </target>

+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>

+    <target depends="init,compile,compile-jsps,-do-compile-single-jsp,debug" if="netbeans.home" name="debug-single"/>

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">

+        <webproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>

+    </target>

+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">

+        <webproject1:nbjpdastart name="${debug.class}"/>

+    </target>

+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">

+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>

+        <webproject1:debug classname="${debug.class}"/>

+    </target>

+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single-main"/>

+    <target depends="init" name="-pre-debug-fix">

+        <fail unless="fix.includes">Must set fix.includes</fail>

+        <property name="javac.includes" value="${fix.includes}.java"/>

+    </target>

+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">

+        <webproject1:nbjpdareload/>

+    </target>

+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>

+    <!--

+            =================

+            PROFILING SECTION

+            =================

+            -->

+    <!--

+                pre NB7.2 profiling section; consider it deprecated

+            -->

+    <target description="Profile a J2EE project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">

+        <condition else="start-profiled-server" property="profiler.startserver.target" value="start-profiled-server-extraargs">

+            <isset property="profiler.info.jvmargs.extra"/>

+        </condition>

+        <antcall target="${profiler.startserver.target}"/>

+        <antcall target="run"/>

+        <antcall target="-profile-start-loadgen"/>

+    </target>

+    <target if="profiler.info.jvmargs.agent" name="start-profiled-server">

+        <nbstartprofiledserver forceRestart="${profiler.j2ee.serverForceRestart}" javaPlatform="${profiler.info.javaPlatform}" startupTimeout="${profiler.j2ee.serverStartupTimeout}">

+            <jvmarg value="${profiler.info.jvmargs.agent}"/>

+            <jvmarg value="${profiler.j2ee.agentID}"/>

+        </nbstartprofiledserver>

+    </target>

+    <target if="profiler.info.jvmargs.agent" name="start-profiled-server-extraargs">

+        <nbstartprofiledserver forceRestart="${profiler.j2ee.serverForceRestart}" javaPlatform="${profiler.info.javaPlatform}" startupTimeout="${profiler.j2ee.serverStartupTimeout}">

+            <jvmarg value="${profiler.info.jvmargs.extra}"/>

+            <jvmarg value="${profiler.info.jvmargs.agent}"/>

+            <jvmarg value="${profiler.j2ee.agentID}"/>

+        </nbstartprofiledserver>

+    </target>

+    <target if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">

+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>

+        <nbprofiledirect>

+            <classpath>

+                <path path="${run.test.classpath}"/>

+                <path path="${j2ee.platform.classpath}"/>

+            </classpath>

+        </nbprofiledirect>

+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">

+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>

+            <jvmarg value="${profiler.info.jvmargs.agent}"/>

+            <jvmarg line="${profiler.info.jvmargs}"/>

+            <test name="${profile.class}"/>

+            <classpath>

+                <path path="${run.test.classpath}"/>

+                <path path="${j2ee.platform.classpath}"/>

+            </classpath>

+            <syspropertyset>

+                <propertyref prefix="test-sys-prop."/>

+                <mapper from="test-sys-prop.*" to="*" type="glob"/>

+            </syspropertyset>

+            <formatter type="brief" usefile="false"/>

+            <formatter type="xml"/>

+        </junit>

+    </target>

+    <target if="netbeans.home" name="-profile-check">

+        <condition property="profiler.configured">

+            <or>

+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>

+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>

+            </or>

+        </condition>

+    </target>

+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest" name="-do-profile">

+        <startprofiler/>

+        <nbstartserver profilemode="true"/>

+        <nbdeploy clientUrlPart="${client.urlPart}" forceRedeploy="true" profilemode="true"/>

+        <antcall target="debug-display-browser"/>

+        <antcall target="-profile-start-loadgen"/>

+    </target>

+    <target depends="-profile-check,-profile-pre72" description="Profile a J2EE project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">

+        <antcall target="-do-profile"/>

+    </target>

+    <target depends="-profile-test-single-pre72" name="profile-test-single"/>

+    <target depends="-profile-check" if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs.agent">

+        <startprofiler/>

+        <antcall target="test-single"/>

+    </target>

+    <target if="profiler.loadgen.path" name="-profile-start-loadgen">

+        <loadgenstart path="${profiler.loadgen.path}"/>

+    </target>

+    <!--

+                JAVADOC SECTION

+            -->

+    <target depends="init" if="have.sources" name="javadoc-build">

+        <mkdir dir="${dist.javadoc.dir}"/>

+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">

+            <classpath>

+                <path path="${javac.classpath}:${j2ee.platform.classpath}"/>

+            </classpath>

+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">

+                <filename name="**/*.java"/>

+            </fileset>

+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="**/*.java"/>

+            </fileset>

+        </javadoc>

+        <copy todir="${dist.javadoc.dir}">

+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">

+                <filename name="**/doc-files/**"/>

+            </fileset>

+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">

+                <include name="**/doc-files/**"/>

+            </fileset>

+        </copy>

+    </target>

+    <target depends="init,javadoc-build" if="netbeans.home" name="javadoc-browse" unless="no.javadoc.preview">

+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>

+    </target>

+    <target depends="init,javadoc-build,javadoc-browse" description="Build Javadoc." name="javadoc"/>

+    <!--

+                

+                TEST COMPILATION SECTION

+            -->

+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">

+        <mkdir dir="${build.test.classes.dir}"/>

+        <property name="j2ee.platform.embeddableejb.classpath" value=""/>

+    </target>

+    <target name="-pre-compile-test">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test" if="have.tests" name="-do-compile-test">

+        <webproject2:javac classpath="${javac.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>

+        <copy todir="${build.test.classes.dir}">

+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target name="-post-compile-test">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>

+    <target name="-pre-compile-test-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">

+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>

+        <webproject2:javac classpath="${javac.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" srcdir="${test.src.dir}"/>

+        <copy todir="${build.test.classes.dir}">

+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

+        </copy>

+    </target>

+    <target name="-post-compile-test-single">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>

+    <!--

+                

+                TEST EXECUTION SECTION

+            -->

+    <target depends="init" if="have.tests" name="-pre-test-run">

+        <mkdir dir="${build.test.results.dir}"/>

+    </target>

+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">

+        <webproject2:test testincludes="**/*Test.java"/>

+    </target>

+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init" if="have.tests" name="test-report"/>

+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>

+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>

+    <target depends="init" if="have.tests" name="-pre-test-run-single">

+        <mkdir dir="${build.test.results.dir}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">

+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>

+        <webproject2:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">

+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>

+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>

+        <webproject2:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">

+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>

+    <!--

+                

+                TEST DEBUGGING SECTION

+            -->

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">

+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>

+        <webproject2:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>

+    </target>

+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">

+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>

+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>

+        <webproject2:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>

+    </target>

+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">

+        <webproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>

+    </target>

+    <target depends="init,compile-test,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>

+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>

+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">

+        <webproject1:nbjpdareload dir="${build.test.classes.dir}"/>

+    </target>

+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>

+    <!--

+                

+                CLEANUP SECTION

+            -->

+    <target depends="init" name="deps-clean" unless="no.deps"/>

+    <target depends="init" name="do-clean">

+        <condition property="build.dir.to.clean" value="${build.web.dir}">

+            <isset property="dist.ear.dir"/>

+        </condition>

+        <property name="build.dir.to.clean" value="${build.web.dir}"/>

+        <delete includeEmptyDirs="true" quiet="true">

+            <fileset dir="${build.dir.to.clean}/WEB-INF/lib"/>

+        </delete>

+        <delete dir="${build.dir}"/>

+        <available file="${build.dir.to.clean}/WEB-INF/lib" property="status.clean-failed" type="dir"/>

+        <delete dir="${dist.dir}"/>

+    </target>

+    <target depends="do-clean" if="status.clean-failed" name="check-clean">

+        <echo message="Warning: unable to delete some files in ${build.web.dir}/WEB-INF/lib - they are probably locked by the J2EE server. "/>

+        <echo level="info" message="To delete all files undeploy the module from Server Registry in Runtime tab and then use Clean again."/>

+    </target>

+    <target depends="init" if="netbeans.home" name="undeploy-clean">

+        <nbundeploy failOnError="false" startServer="false"/>

+    </target>

+    <target name="-post-clean">

+        <!-- Empty placeholder for easier customization. -->

+        <!-- You can override this target in the ../build.xml file. -->

+    </target>

+    <target depends="init,undeploy-clean,deps-clean,do-clean,check-clean,-post-clean" description="Clean build products." name="clean"/>

+    <target depends="clean" description="Clean build products." name="clean-ear"/>

+</project>

diff --git a/juddi-gui/nbproject/genfiles.properties b/juddi-gui/nbproject/genfiles.properties
new file mode 100644
index 0000000..14ed120
--- /dev/null
+++ b/juddi-gui/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=50026b8a

+build.xml.script.CRC32=33f4ab89

+build.xml.stylesheet.CRC32=651128d4@1.38.1.1

+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.

+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.

+nbproject/build-impl.xml.data.CRC32=50026b8a

+nbproject/build-impl.xml.script.CRC32=9390a50e

+nbproject/build-impl.xml.stylesheet.CRC32=4e9cae83@1.38.1.1

diff --git a/juddi-gui/nbproject/project.properties b/juddi-gui/nbproject/project.properties
new file mode 100644
index 0000000..e85c57b
--- /dev/null
+++ b/juddi-gui/nbproject/project.properties
@@ -0,0 +1,168 @@
+annotation.processing.enabled=true

+annotation.processing.enabled.in.editor=true

+annotation.processing.processors.list=

+annotation.processing.run.all.processors=true

+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output

+auxiliary.org-netbeans-modules-projectapi.jsf_2e_language=JSP

+build.classes.dir=${build.web.dir}/WEB-INF/classes

+build.classes.excludes=**/*.java,**/*.form

+build.dir=build

+build.generated.dir=${build.dir}/generated

+build.generated.sources.dir=${build.dir}/generated-sources

+build.test.classes.dir=${build.dir}/test/classes

+build.test.results.dir=${build.dir}/test/results

+build.web.dir=${build.dir}/web

+build.web.excludes=${build.classes.excludes}

+client.urlPart=

+compile.jsps=true

+conf.dir=${source.root}/conf

+debug.classpath=${build.classes.dir}:${javac.classpath}

+debug.test.classpath=\

+    ${run.test.classpath}

+display.browser=true

+dist.dir=dist

+dist.ear.war=${dist.dir}/${war.ear.name}

+dist.javadoc.dir=${dist.dir}/javadoc

+dist.war=${dist.dir}/${war.name}

+endorsed.classpath=

+excludes=

+file.reference.aopalliance-1.0.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/aopalliance-1.0.jar

+file.reference.asm-3.3.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/asm-3.3.jar

+file.reference.commons-beanutils-1.7.0.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/commons-beanutils-1.7.0.jar

+file.reference.commons-beanutils-core-1.8.0.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/commons-beanutils-core-1.8.0.jar

+file.reference.commons-codec-1.3.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/commons-codec-1.3.jar

+file.reference.commons-collections-3.2.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/commons-collections-3.2.1.jar

+file.reference.commons-configuration-1.6.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/commons-configuration-1.6.jar

+file.reference.commons-digester-1.8.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/commons-digester-1.8.jar

+file.reference.commons-lang-2.4.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/commons-lang-2.4.jar

+file.reference.commons-logging-api-1.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/commons-logging-api-1.1.jar

+file.reference.cxf-api-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-api-2.3.1.jar

+file.reference.cxf-common-schemas-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-common-schemas-2.3.1.jar

+file.reference.cxf-common-utilities-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-common-utilities-2.3.1.jar

+file.reference.cxf-rt-bindings-soap-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-rt-bindings-soap-2.3.1.jar

+file.reference.cxf-rt-bindings-xml-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-rt-bindings-xml-2.3.1.jar

+file.reference.cxf-rt-core-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-rt-core-2.3.1.jar

+file.reference.cxf-rt-databinding-jaxb-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-rt-databinding-jaxb-2.3.1.jar

+file.reference.cxf-rt-frontend-jaxws-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-rt-frontend-jaxws-2.3.1.jar

+file.reference.cxf-rt-frontend-simple-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-rt-frontend-simple-2.3.1.jar

+file.reference.cxf-rt-transports-http-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-rt-transports-http-2.3.1.jar

+file.reference.cxf-rt-ws-addr-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-rt-ws-addr-2.3.1.jar

+file.reference.cxf-tools-common-2.3.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/cxf-tools-common-2.3.1.jar

+file.reference.geronimo-javamail_1.4_spec-1.7.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/geronimo-javamail_1.4_spec-1.7.1.jar

+file.reference.httpclient-4.2.5.jar=..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\httpclient-4.2.5.jar

+file.reference.httpcore-4.2.4.jar=..\\juddi-tomcat\\target\\tomcat\\apache-tomcat-6.0.26\\webapps\\juddiv3\\WEB-INF\\lib\\httpcore-4.2.4.jar

+file.reference.jaxb-impl-2.1.13.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/jaxb-impl-2.1.13.jar

+file.reference.juddi-client-3.1.5-SNAPSHOT.jar=../juddi-client/target/juddi-client-3.1.5-SNAPSHOT.jar

+file.reference.neethi-2.0.4.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/neethi-2.0.4.jar

+file.reference.persistence-api-1.0.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/persistence-api-1.0.jar

+file.reference.serp-1.13.1.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/serp-1.13.1.jar

+file.reference.spring-aop-3.0.5.RELEASE.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/spring-aop-3.0.5.RELEASE.jar

+file.reference.spring-asm-3.0.5.RELEASE.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/spring-asm-3.0.5.RELEASE.jar

+file.reference.spring-beans-3.0.5.RELEASE.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/spring-beans-3.0.5.RELEASE.jar

+file.reference.spring-context-3.0.5.RELEASE.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/spring-context-3.0.5.RELEASE.jar

+file.reference.spring-core-3.0.5.RELEASE.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/spring-core-3.0.5.RELEASE.jar

+file.reference.spring-expression-3.0.5.RELEASE.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/spring-expression-3.0.5.RELEASE.jar

+file.reference.spring-web-3.0.5.RELEASE.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/spring-web-3.0.5.RELEASE.jar

+file.reference.stax2-api-3.0.2.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/stax2-api-3.0.2.jar

+file.reference.uddi-ws-3.1.5-SNAPSHOT.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/uddi-ws-3.1.5-SNAPSHOT.jar

+file.reference.woodstox-core-asl-4.0.8.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/woodstox-core-asl-4.0.8.jar

+file.reference.wsdl4j-1.6.2.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/wsdl4j-1.6.2.jar

+file.reference.xml-resolver-1.2.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/xml-resolver-1.2.jar

+file.reference.XmlSchema-1.4.7.jar=../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/XmlSchema-1.4.7.jar

+includes=**

+j2ee.compile.on.save=true

+j2ee.copy.static.files.on.save=true

+j2ee.deploy.on.save=true

+j2ee.platform=1.5

+j2ee.platform.classpath=${j2ee.server.home}/lib/annotations-api.jar:${j2ee.server.home}/lib/catalina-ant.jar:${j2ee.server.home}/lib/catalina-ha.jar:${j2ee.server.home}/lib/catalina-tribes.jar:${j2ee.server.home}/lib/catalina.jar:${j2ee.server.home}/lib/commons-discovery-0.2.jar:${j2ee.server.home}/lib/derby-10.4.2.0.jar:${j2ee.server.home}/lib/el-api.jar:${j2ee.server.home}/lib/jasper-el.jar:${j2ee.server.home}/lib/jasper.jar:${j2ee.server.home}/lib/jsp-api.jar:${j2ee.server.home}/lib/log4j-1.2.13.jar:${j2ee.server.home}/lib/mysql-connector-java-5.1.6.jar:${j2ee.server.home}/lib/postgresql-8.2-504.jdbc3.jar:${j2ee.server.home}/lib/servlet-api.jar:${j2ee.server.home}/lib/tomcat-coyote.jar:${j2ee.server.home}/lib/tomcat-dbcp.jar:${j2ee.server.home}/lib/tomcat-i18n-es.jar:${j2ee.server.home}/lib/tomcat-i18n-fr.jar:${j2ee.server.home}/lib/tomcat-i18n-ja.jar:${j2ee.server.home}/bin/tomcat-juli.jar

+j2ee.server.type=Tomcat

+jar.compress=false

+javac.classpath=\

+    ${file.reference.XmlSchema-1.4.7.jar}:\

+    ${file.reference.aopalliance-1.0.jar}:\

+    ${file.reference.asm-3.3.jar}:\

+    ${file.reference.commons-beanutils-1.7.0.jar}:\

+    ${file.reference.commons-beanutils-core-1.8.0.jar}:\

+    ${file.reference.commons-codec-1.3.jar}:\

+    ${file.reference.commons-collections-3.2.1.jar}:\

+    ${file.reference.commons-configuration-1.6.jar}:\

+    ${file.reference.commons-digester-1.8.jar}:\

+    ${file.reference.commons-lang-2.4.jar}:\

+    ${file.reference.commons-logging-api-1.1.jar}:\

+    ${file.reference.commons-logging-api-1.1.jar}:\

+    ${file.reference.cxf-api-2.3.1.jar}:\

+    ${file.reference.cxf-common-schemas-2.3.1.jar}:\

+    ${file.reference.cxf-common-utilities-2.3.1.jar}:\

+    ${file.reference.cxf-rt-bindings-soap-2.3.1.jar}:\

+    ${file.reference.cxf-rt-bindings-xml-2.3.1.jar}:\

+    ${file.reference.cxf-rt-core-2.3.1.jar}:\

+    ${file.reference.cxf-rt-databinding-jaxb-2.3.1.jar}:\

+    ${file.reference.cxf-rt-frontend-jaxws-2.3.1.jar}:\

+    ${file.reference.cxf-rt-frontend-simple-2.3.1.jar}:\

+    ${file.reference.cxf-rt-transports-http-2.3.1.jar}:\

+    ${file.reference.cxf-rt-ws-addr-2.3.1.jar}:\

+    ${file.reference.cxf-tools-common-2.3.1.jar}:\

+    ${file.reference.geronimo-javamail_1.4_spec-1.7.1.jar}:\

+    ${file.reference.jaxb-impl-2.1.13.jar}:\

+    ${file.reference.juddi-client-3.1.5-SNAPSHOT.jar}:\

+    ${file.reference.neethi-2.0.4.jar}:\

+    ${file.reference.persistence-api-1.0.jar}:\

+    ${file.reference.serp-1.13.1.jar}:\

+    ${file.reference.spring-aop-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-asm-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-beans-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-context-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-core-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-expression-3.0.5.RELEASE.jar}:\

+    ${file.reference.spring-web-3.0.5.RELEASE.jar}:\

+    ${file.reference.stax2-api-3.0.2.jar}:\

+    ${file.reference.uddi-ws-3.1.5-SNAPSHOT.jar}:\

+    ${file.reference.woodstox-core-asl-4.0.8.jar}:\

+    ${file.reference.wsdl4j-1.6.2.jar}:\

+    ${file.reference.xml-resolver-1.2.jar}:\

+    ${file.reference.httpclient-4.2.5.jar}:\

+    ${file.reference.httpcore-4.2.4.jar}

+# Space-separated list of extra javac options

+javac.compilerargs=

+javac.debug=true

+javac.deprecation=false

+javac.processorpath=\

+    ${javac.classpath}

+javac.source=1.5

+javac.target=1.5

+javac.test.classpath=\

+    ${javac.classpath}:\

+    ${build.classes.dir}

+javac.test.processorpath=\

+    ${javac.test.classpath}

+javadoc.additionalparam=

+javadoc.author=false

+javadoc.encoding=${source.encoding}

+javadoc.noindex=false

+javadoc.nonavbar=false

+javadoc.notree=false

+javadoc.preview=true

+javadoc.private=false

+javadoc.splitindex=true

+javadoc.use=true

+javadoc.version=false

+javadoc.windowtitle=

+lib.dir=${web.docbase.dir}/WEB-INF/lib

+persistence.xml.dir=${conf.dir}

+platform.active=default_platform

+resource.dir=setup

+run.test.classpath=\

+    ${javac.test.classpath}:\

+    ${build.test.classes.dir}

+# Space-separated list of JVM arguments used when running a class with a main method or a unit test

+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value):

+runmain.jvmargs=

+source.encoding=UTF-8

+source.root=src

+src.dir=${source.root}/java

+test.src.dir=test

+war.content.additional=

+war.ear.name=${war.name}

+war.name=juddi-gui.war

+web.docbase.dir=web

+webinf.dir=web/WEB-INF

diff --git a/juddi-gui/nbproject/project.xml b/juddi-gui/nbproject/project.xml
new file mode 100644
index 0000000..c1c517d
--- /dev/null
+++ b/juddi-gui/nbproject/project.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<project xmlns="http://www.netbeans.org/ns/project/1">

+    <type>org.netbeans.modules.web.project</type>

+    <configuration>

+        <data xmlns="http://www.netbeans.org/ns/web-project/3">

+            <name>juddi-gui</name>

+            <minimum-ant-version>1.6.5</minimum-ant-version>

+            <web-module-libraries>

+                <library dirs="200">

+                    <file>${file.reference.XmlSchema-1.4.7.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.aopalliance-1.0.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.asm-3.3.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.commons-beanutils-1.7.0.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.commons-beanutils-core-1.8.0.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.commons-codec-1.3.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.commons-collections-3.2.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.commons-configuration-1.6.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.commons-digester-1.8.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.commons-lang-2.4.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.commons-logging-api-1.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.commons-logging-api-1.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-api-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-common-schemas-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-common-utilities-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-rt-bindings-soap-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-rt-bindings-xml-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-rt-core-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-rt-databinding-jaxb-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-rt-frontend-jaxws-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-rt-frontend-simple-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-rt-transports-http-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-rt-ws-addr-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.cxf-tools-common-2.3.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.geronimo-javamail_1.4_spec-1.7.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.jaxb-impl-2.1.13.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.juddi-client-3.1.5-SNAPSHOT.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.neethi-2.0.4.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.persistence-api-1.0.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.serp-1.13.1.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.spring-aop-3.0.5.RELEASE.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.spring-asm-3.0.5.RELEASE.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.spring-beans-3.0.5.RELEASE.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.spring-context-3.0.5.RELEASE.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.spring-core-3.0.5.RELEASE.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.spring-expression-3.0.5.RELEASE.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.spring-web-3.0.5.RELEASE.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.stax2-api-3.0.2.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.uddi-ws-3.1.5-SNAPSHOT.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.woodstox-core-asl-4.0.8.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.wsdl4j-1.6.2.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.xml-resolver-1.2.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.httpclient-4.2.5.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+                <library dirs="200">

+                    <file>${file.reference.httpcore-4.2.4.jar}</file>

+                    <path-in-war>WEB-INF/lib</path-in-war>

+                </library>

+            </web-module-libraries>

+            <web-module-additional-libraries/>

+            <source-roots>

+                <root id="src.dir"/>

+            </source-roots>

+            <test-roots>

+                <root id="test.src.dir"/>

+            </test-roots>

+        </data>

+        <references xmlns="http://www.netbeans.org/ns/ant-project-references/1"/>

+    </configuration>

+</project>

diff --git a/juddi-gui/readme.txt b/juddi-gui/readme.txt
new file mode 100644
index 0000000..7eb96b8
--- /dev/null
+++ b/juddi-gui/readme.txt
@@ -0,0 +1,30 @@
+The juddi-gui project is an extension to jUDDI that provides a user interface for UDDI v3 compliant registries.

+

+Direction for building:

+

+Pre-requists:

+1) Ant 1.8+

+2) Maven 3.0.x

+3) Netbeans 7.x

+4) Full source for jUDDI

+5) Java JDK 1.6+

+

+Build:

+1) First, build the main jUDDI project. 

+	mvn clean install

+2) Build the juddi-gui-dsig project

+	cd juddi-gui-disg

+	ant jar

+3) Copy the applet binaries to within the juddi-gui war

+	copy dist\juddi-gui-dsig.jar ..\juddi-gui\web\applets

+	mkdir ..\juddi-gui\web\applets\lib

+	copy dist\lib\*.* ..\juddi-gui\web\applets\lib

+3) Build the war

+	cd juddi-gui

+	ant dist

+4) Deploy

+	copy the war file into any J2EE container that has a soap stack that supports JAX-WS 2.2 or higher

+5) Access

+	http://localhost:8080/juddi-gui

+6) Configure

+	Alter the contents of juddi-gui/META-INF/config.properties
\ No newline at end of file
diff --git a/juddi-gui/src/conf/MANIFEST.MF b/juddi-gui/src/conf/MANIFEST.MF
new file mode 100644
index 0000000..58630c0
--- /dev/null
+++ b/juddi-gui/src/conf/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0

+

diff --git a/juddi-gui/src/java/META-INF/uddi.xml b/juddi-gui/src/java/META-INF/uddi.xml
new file mode 100644
index 0000000..cf69bac
--- /dev/null
+++ b/juddi-gui/src/java/META-INF/uddi.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<uddi>
+    <reloadDelay>5000</reloadDelay>
+    <manager name="example-manager">
+        <nodes>
+            <node>
+                <!-- required 'default' node -->
+                <name>default</name> 
+                <properties>
+                    <property name="serverName" value="localhost"/>
+                    <property name="serverPort" value="8080"/>
+                </properties>
+                <description>Main jUDDI node</description>
+                <!-- JAX-WS Transport -->
+                <proxyTransport>org.apache.juddi.v3.client.transport.JAXWSTransport</proxyTransport>
+                <custodyTransferUrl>http://localhost:8080/juddiv3/services/custody-transfer</custodyTransferUrl>
+                <inquiryUrl>http://localhost:8080/juddiv3/services/inquiry</inquiryUrl>
+                <publishUrl>http://localhost:8080/juddiv3/services/publish</publishUrl>
+                <securityUrl>http://localhost:8080/juddiv3/services/security</securityUrl>
+                <subscriptionUrl>http://localhost:8080/juddiv3/services/subscription</subscriptionUrl>
+                <subscriptionListenerUrl>http://localhost:8080/juddiv3/services/subscription-listener</subscriptionListenerUrl>
+                <juddiApiUrl>http://localhost:8080/juddiv3/services/juddi-api</juddiApiUrl>
+            </node>
+        </nodes>
+    </manager>
+</uddi>
diff --git a/juddi-gui/src/java/log4j.properties b/juddi-gui/src/java/log4j.properties
new file mode 100644
index 0000000..b5cf2fc
--- /dev/null
+++ b/juddi-gui/src/java/log4j.properties
@@ -0,0 +1,25 @@
+
+log4j.rootLogger=INFO, logfile
+
+# in case any output is given to stdout, format it
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
+
+log4j.appender.logfile=org.apache.log4j.RollingFileAppender
+log4j.appender.logfile.File=${catalina.home}/logs/juddi.log
+log4j.appender.logfile.MaxFileSize=512MB
+# Keep three backup files.
+log4j.appender.logfile.MaxBackupIndex=3
+# Pattern to output: date priority [category] - message
+log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
+log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
+log4j.category.org.apache.juddi=INFO
+#log4j.category.org.springframework.beans.property editors.CustomDateEditor=DEBUG
+
+log4j.debug=false
+
+# showing sql
+#log4j.category.org.hibernate.hql.ast.QueryTranslatorImpl=DEBUG
+#log4j.category.org.hibernate.SQL=DEBUG
+#log4j.category.org.hibernate.loader.hql.QueryLoad er=DEBUG 
diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/AES.java b/juddi-gui/src/java/org/apache/juddi/webconsole/AES.java
new file mode 100644
index 0000000..b4cae3f
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/AES.java
@@ -0,0 +1,308 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package  org.apache.juddi.webconsole;
+
+import java.io.*;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import javax.crypto.*;
+import javax.crypto.spec.*;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+
+/**
+ * <summary> This program uses a AES key, retrieves its raw bytes, and then
+ * reinstantiates a AES key from the key bytes.</summary> The reinstantiated key
+ * is used to initialize a AES cipher for encryption and decryption. source :
+ * http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html
+ *@author Alex O'Ree
+ */
+public class AES {
+
+    public static final String logname = "org.apache.juddi.gui";
+    public static final Logger log = Logger.getLogger(logname);
+
+    /**
+     * Turns array of bytes into string
+     *
+     * @param buf	Array of bytes to convert to hex string
+     * @return	Generated hex string
+     */
+    private static String asHex(byte buf[]) {
+        //return new String(buf);
+        StringBuilder strbuf = new StringBuilder(buf.length * 2);
+        int i;
+
+        for (i = 0; i < buf.length; i++) {
+            if (((int) buf[i] & 0xff) < 0x10) {
+                strbuf.append("0");
+            }
+            strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
+        }
+
+        return strbuf.toString();
+    }
+
+    private static byte[] hexToBytes(String s) {
+        //return s.getBytes();
+        return hexToBytes(s.toCharArray());
+    }
+    private static final char[] kDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a',
+        'b', 'c', 'd', 'e', 'f'};
+
+    private static byte[] hexToBytes(char[] hex) {
+        int length = hex.length / 2;
+        byte[] raw = new byte[length];
+        for (int i = 0; i < length; i++) {
+            int high = Character.digit(hex[i * 2], 16);
+            int low = Character.digit(hex[i * 2 + 1], 16);
+            int value = (high << 4) | low;
+            if (value > 127) {
+                value -= 256;
+            }
+            raw[i] = (byte) value;
+        }
+        return raw;
+    }
+    //default key
+    private final static String something2 = "dde284c781d60ca0b56c4b23eec85217951dc99869402abd42c7dcc9080d60aa";
+
+    /**
+     * generates an AES based off of the selected key size
+     * @param keysize
+     * @return may return null if the key is not of a supported size by the current jdk
+     */
+    public static String GEN(int keysize) {
+        KeyGenerator kgen;
+        try {
+            kgen = KeyGenerator.getInstance("AES");
+            kgen.init(keysize);
+            SecretKey skey = kgen.generateKey();
+            byte[] raw = skey.getEncoded();
+            return asHex(raw);
+        } catch (Exception ex) {
+            log.log(Level.FATAL, "error generating key", ex);
+        }
+        return null;
+    }
+
+    /**
+     * Generate a new AES 256 bit encryption key. Once generated, this key can
+     * be used to replace the default key.
+     *
+     * @return
+     */
+    public static String GEN() {
+        return GEN(256);
+    }
+
+    /**
+     * uses a variety of mechanisms to load a resource, should be jdk and os independent
+     * @param FileName
+     * @return 
+     */
+    URI getUrl(String FileName) {
+        URL url = null;
+        if (url == null) {
+            try {
+                url = Thread.currentThread().getContextClassLoader().getResource(FileName);
+                log.log(Level.DEBUG, "8 file loaded  from " + url.toString());
+            } catch (Exception ex) {
+                log.log(Level.DEBUG, "not found", ex);
+            }
+        }
+        if (url == null) {
+            try {
+                url = Thread.currentThread().getContextClassLoader().getResource("/" + FileName);
+                log.log(Level.DEBUG, "7 file loaded  from " + url.toString());
+            } catch (Exception ex) {
+                log.log(Level.DEBUG, "not found", ex);
+            }
+        }
+
+        if (url == null) {
+            try {
+                url = new URL(FileName);
+                log.log(Level.DEBUG, "1 file loaded  from " + url.toString());
+            } catch (Exception ex) {
+                log.log(Level.DEBUG, "not found", ex);
+            }
+        }
+
+        if (url == null) {
+            try {
+                url = this.getClass().getClassLoader().getResource(FileName);
+                log.log(Level.DEBUG, "3 file loaded  from " + url.toString());
+            } catch (Exception ex) {
+                log.log(Level.DEBUG, "not found", ex);
+            }
+        }
+        if (url == null) {
+            try {
+                url = this.getClass().getClassLoader().getResource("/" + FileName);
+                log.log(Level.DEBUG, "3 file loaded  from " + url.toString());
+            } catch (Exception ex) {
+                log.log(Level.DEBUG, "not found", ex);
+            }
+        }
+        try {
+            return url.toURI();
+        } catch (URISyntaxException ex) {
+            log.log(Level.DEBUG, null, ex);
+        }
+        return null;
+    }
+
+    /**
+     * used to read our key file
+     * @param file
+     * @return 
+     */
+    private static String ReadAllText(File file) {
+        try {
+            FileInputStream stream = new FileInputStream(file);
+            int size = 1024;
+            byte chars[] = new byte[size];
+            int k = stream.read(chars);
+            StringBuilder str = new StringBuilder();
+            while (k > 0) {
+
+                for (int i = 0; i < k; i++) {
+                    str.append((char) chars[i]);
+                }
+                k = stream.read(chars);
+            }
+            stream.close();
+            return str.toString();
+        } catch (Exception e) {
+            return "";
+        }
+
+    }
+
+    private static String LoadKey() {
+        String key = null;
+        try {
+            File f = new File(new AES().getUrl("/META-INF/aes.key"));
+            key = ReadAllText(f);
+        } catch (Exception e) {
+        }
+        if (key != null) {
+            log.log(Level.DEBUG, "key loaded from file");
+            return key;
+        } else {
+            log.log(Level.DEBUG, "default encryption key loaded.");
+            return something2;
+        }
+    }
+
+    public static String EN(String cleartext) throws Exception {
+        return EN(cleartext, LoadKey());
+    }
+
+    static String EN(String cleartext, String key) throws Exception {
+        byte[] raw =//skey.getEncoded();
+                hexToBytes(key); //
+        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+        // Instantiate the cipher
+        Cipher cipher = Cipher.getInstance("AES");
+        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+        byte[] encrypted = cipher.doFinal(cleartext.getBytes());
+        return asHex(encrypted);
+    }
+
+    static String DE(String ciphertext) throws Exception {
+        return DE(ciphertext, LoadKey());
+    }
+
+    static String DE(String ciphertext, String key) throws Exception {
+        byte[] raw =//skey.getEncoded();
+                hexToBytes(key); //
+        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+        Cipher cipher = Cipher.getInstance("AES");
+        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+        byte[] original = cipher.doFinal(hexToBytes(ciphertext));
+        return new String(original);
+    }
+
+    /**
+     * return true is the supplied key is a valid aes key
+     *
+     * @param key
+     * @return
+     */
+    public static boolean ValidateKey(String key) {
+        try {
+            String src = "abcdefghijklmopqrstuvwxyz123567890!@#$%^&*()_+{}|:\">?<,";
+            String x = EN(src, key);
+            String y = DE(x, key);
+            //if the sample text is encryptable and decryptable, and it was actually encrypted
+            if (x.equals(src) && !x.equals(y)) {
+                return true;
+            }
+            return false;
+        } catch (Exception ex) {
+            log.log(Level.WARN, null, ex);
+            return false;
+        }
+    }
+
+    /**
+     * encrypts a password using AES  Requires the Unlimited Strength Crypto
+     * Extensions
+     *
+     * @param clear
+     * @return
+     */
+    public static String Encrypt(String clear, String key) {
+        if ((clear==null || clear.length()==0)) {
+            return "";
+        }
+        try {
+            return AES.EN(clear, key);
+        } catch (Exception ex) {
+            Logger.getLogger(logname).log(Level.FATAL, "Cannot encrypt sensitive information! Check to make sure the unlimited strength JCE is installed " + ex.getMessage());
+        }
+        return "";
+    }
+
+    /**
+     * Decrypts a password or other sensitive data If the parameter is null or
+     * empty, an empty string is returned. If the parameter is not encrypted or
+     * was encrypted using a different key or it fails to decrypt, the original
+     * text is returned.
+     *
+     * @param cipher
+     * @return
+     */
+    public static String Decrypt(String cipher, String key) {
+        if ((cipher==null || cipher.length()==0)) {
+            return "";
+        }
+        try {
+            return AES.DE(cipher, key);
+        } catch (Exception ex) {
+            Logger.getLogger(logname).log(Level.FATAL, "trouble decrypting data, check to make sure the unlimited strength JCE is installed. If this error occured during deployment, I'll automatically try a smaller key size. " + ex.getMessage());
+        }
+        return cipher;
+
+    }
+
+ 
+ 
+}
diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/CrossSiteRequestForgeryException.java b/juddi-gui/src/java/org/apache/juddi/webconsole/CrossSiteRequestForgeryException.java
new file mode 100644
index 0000000..5297c78
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/CrossSiteRequestForgeryException.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.webconsole;
+
+/**
+ * Provides a very basic, no stack trace exception, useful for throwing at a browser without revealing any details 
+ * @author Alex O'Ree
+ */
+public class CrossSiteRequestForgeryException extends Exception {
+    //Parameterless Constructor
+/**
+ * CrossSiteRequestForgeryException
+ */
+    public CrossSiteRequestForgeryException() {
+        super(msg, null);
+    }
+
+    /**
+     * Constructor that accepts a message
+     */
+    public CrossSiteRequestForgeryException(String message) {
+        super(msg, null);
+    }
+/**
+ * CrossSiteRequestForgeryException
+ * @param message
+ * @param cause 
+ */
+    public CrossSiteRequestForgeryException(String message, Throwable cause) {
+        super(msg, null);
+    }
+    private static final String msg = "Cross Site Request Forgery";
+
+    @Override
+    public String toString() {
+        return msg;
+    }
+
+    @Override
+    public String getMessage() {
+        return msg;
+    }
+
+    @Override
+    public String getLocalizedMessage() {
+        return msg;
+    }
+
+    @Override
+    public Throwable getCause() {
+        return null;
+    }
+}
diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/PostBackConstants.java b/juddi-gui/src/java/org/apache/juddi/webconsole/PostBackConstants.java
new file mode 100644
index 0000000..23cde3a
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/PostBackConstants.java
@@ -0,0 +1,50 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package org.apache.juddi.webconsole;

+

+/**

+ * A collection of constants to use for form postbacks and parsing data from the

+ * browser All fields MUST not contain any characters that could interfer with

+ * the rendering of a webpage or javascript and should thus be escaped sequences

+ * of characters

+ *

+ * @author Alex O'Ree

+ */

+public class PostBackConstants {

+

+    public static final String INSTANCE = "instance";

+    public static final String ACCESSPOINT_TYPE = "accessPointType";

+    public static final String ACCESSPOINT_VALUE = "accessPointValue";

+    @Deprecated

+    public static final String HOSTINGREDIRECTOR = "hostingRedirector";

+    public static final String OVERVIEW = "overviewDoc";

+    public static final String TMODELINSTANCE = "tmodelInstance";

+    public static final String BINDINGTEMPLATE = "bindingTemplate";

+    public static final String BINDINGKEY = "bindingKey";

+    public static final String BUSINESSKEY = "businessKey";

+    public static final String SERVICEKEY = "serviceKey";

+    //public static final String CLICK_TO_EDIT = "Click to edit";

+    public static final String DESCRIPTION = "Description";

+    public static final String DISCOVERYURL = "disco";

+    public static final String PHONE = "Phone";

+    public static final String ADDRESS = "Address";

+    public static final String ADDRESSLINE = "addressLine";

+    public static final String CONTACT_PREFIX = "contact";

+    public static final String NAME = "Name";

+    public static final String LANG = "Lang";

+    public static final String VALUE = "Value";

+    public static final String TYPE = "Type";

+    public static final String EMAIL = "Email";

+    public static final String SORTCODE = "Sortcode";

+    public static final String KEYNAME = "KeyName";

+    public static final String KEYVALUE = "KeyValue";

+    public static final String CATBAG_KEY_REF = "catbagkeyref";

+    public static final String IDENT_KEY_REF = "identbagkeyref";

+    public static final String CATBAG_KEY_REF_GRP = "catbaggrpkeyref";

+    public static final String KEY_REF = "keyref";

+    public static final String TMODEL_DELETED = "isDeleted";

+    

+

+}

diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/StartupServlet.java b/juddi-gui/src/java/org/apache/juddi/webconsole/StartupServlet.java
new file mode 100644
index 0000000..797e0c8
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/StartupServlet.java
@@ -0,0 +1,58 @@
+/*

+ * To change this template, choose Tools | Templates

+ * and open the template in the editor.

+ */

+package org.apache.juddi.webconsole;

+

+import java.io.FileOutputStream;

+import java.io.InputStream;

+import java.util.Properties;

+import javax.servlet.ServletContextEvent;

+

+/**

+ * This startup servlet's job is to generate an encryption key which will be used for encrypting

+ * cached user credentials in the http session object

+ * @author Alex O'Ree

+ */

+public class StartupServlet implements javax.servlet.ServletContextListener {

+

+    /**

+     * creates a new AES key and stores it to the properties files

+     * @param sce 

+     */

+    public void contextInitialized(ServletContextEvent sce) {

+        FileOutputStream fos = null;

+        try {

+            //URL resource = sce.getServletContext().getResource("/META-INF/config.properties");

+            Properties p = new Properties();

+            InputStream is = sce.getServletContext().getResourceAsStream("/META-INF/config.properties");

+            p.load(is);

+            p.remove("key");

+            String key = AES.GEN(256);

+            if (key == null) {

+                key = AES.GEN(128);

+            }

+            p.put("key", key);

+            fos = new FileOutputStream(sce.getServletContext().getRealPath("/META-INF/config.properties"));

+

+            p.store(fos, "No comments");

+            fos.flush();

+            fos.close();

+        } catch (Exception ex) {

+            ex.printStackTrace();

+            try {

+                if (fos != null) {

+                    fos.close();

+                }

+            } catch (Exception e) {

+            }

+        }

+    }

+

+    /**

+     * does nothing

+     * @param sce 

+     */

+    public void contextDestroyed(ServletContextEvent sce) {

+    }

+}

diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/hub/PagableContainer.java b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/PagableContainer.java
new file mode 100644
index 0000000..efb4b24
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/PagableContainer.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.webconsole.hub;
+
+/**
+ * This simple class enables use to pass rendered html data and paging
+ * information back and forth from jsp context to java
+ *
+ * @author Alex O'Ree
+ */
+public class PagableContainer {
+
+    public int offset = 0;
+    public int totalrecords = 0;
+    public int displaycount = 0;
+    public String renderedHtml = "";
+}
diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/hub/UddiHub.java b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/UddiHub.java
new file mode 100644
index 0000000..5c9f630
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/UddiHub.java
@@ -0,0 +1,2972 @@
+/*

+ * Copyright 2001-2013 The Apache Software Foundation.

+ * 

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ * 

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ * 

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ *

+ */

+package org.apache.juddi.webconsole.hub;

+

+import java.io.ByteArrayInputStream;

+import java.io.InputStream;

+import java.io.StringReader;

+import java.net.URISyntaxException;

+import java.net.URL;

+import java.rmi.RemoteException;

+import java.security.cert.CertificateFactory;

+import java.security.cert.X509Certificate;

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.GregorianCalendar;

+import java.util.List;

+import java.util.Map;

+import java.util.Properties;

+import java.util.concurrent.atomic.AtomicReference;

+import javax.servlet.ServletContext;

+import javax.servlet.http.HttpServletRequest;

+import javax.servlet.http.HttpSession;

+import javax.xml.bind.JAXB;

+import javax.xml.bind.JAXBElement;

+import javax.xml.datatype.DatatypeConfigurationException;

+import javax.xml.datatype.DatatypeFactory;

+import javax.xml.datatype.XMLGregorianCalendar;

+import javax.xml.ws.BindingProvider;

+import javax.xml.ws.Holder;

+import org.apache.commons.lang.StringEscapeUtils;

+import org.apache.juddi.v3.client.ClassUtil;

+import org.apache.juddi.v3.client.UDDIConstants;

+import org.apache.juddi.v3.client.config.UDDIClientContainer;

+import org.apache.juddi.v3.client.transport.Transport;

+import org.apache.juddi.webconsole.AES;

+import org.apache.juddi.webconsole.PostBackConstants;

+import org.apache.juddi.webconsole.hub.builders.Builders;

+import org.apache.juddi.webconsole.hub.builders.Printers;

+import org.apache.juddi.webconsole.resources.ResourceLoader;

+import org.apache.log4j.Level;

+import org.uddi.api_v3.*;

+import org.uddi.custody_v3.DiscardTransferToken;

+import org.uddi.custody_v3.TransferEntities;

+import org.uddi.custody_v3.TransferToken;

+import org.uddi.sub_v3.*;

+import org.uddi.v3_service.DispositionReportFaultMessage;

+import org.uddi.v3_service.UDDICustodyTransferPortType;

+import org.uddi.v3_service.UDDIInquiryPortType;

+import org.uddi.v3_service.UDDIPublicationPortType;

+import org.uddi.v3_service.UDDISecurityPortType;

+import org.uddi.v3_service.UDDISubscriptionPortType;

+import org.w3._2000._09.xmldsig_.SignatureType;

+import org.w3._2000._09.xmldsig_.X509DataType;

+import sun.misc.BASE64Encoder;

+

+/**

+ * UddiHub - The hub acts as a single point for managing browser to uddi

+ * services. At most 1 instance is allowed per http session. In general, all

+ * methods in the class trigger web service call outs. All callouts also support

+ * expired UDDI tokens and will attempt to reauthenticate and retry the request.

+ *

+ * @author Alex O'Ree

+ */

+public class UddiHub {

+

+    /**

+     * The logger name

+     */

+    public static final String LOGGER_NAME = "org.apache.juddi";

+    URL propertiesurl = null;

+    Properties properties = null;

+    AuthStyle style = null;

+    /**

+     * The Log4j logger. This is also referenced from the Builders class, thus

+     * it is public

+     */

+    public static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LOGGER_NAME);

+    private DatatypeFactory df;

+

+    private UddiHub() throws DatatypeConfigurationException {

+        df = DatatypeFactory.newInstance();

+    }

+

+    /**

+     * removes the Hub from the current http session

+     *

+     * @param _session

+     */

+    public static void reset(HttpSession _session) {

+        _session.removeAttribute("hub");

+        // token = null;

+    }

+

+    /**

+     * This kills any authentication tokens, logs the user out and nulls out all

+     * services

+     */

+    public void die() {

+        DiscardAuthToken da = new DiscardAuthToken();

+        da.setAuthInfo(token);

+        try {

+            security.discardAuthToken(da);

+        } catch (Exception ex) {

+            HandleException(ex);

+        }

+

+        token = null;

+        inquiry = null;

+        publish = null;

+        custody = null;

+        security = null;

+        //juddi = null;

+        subscription = null;

+    }

+

+    /**

+     * This is the singleton accessor UddiHub. There should be at most 1

+     * instance per HTTP Session (user login)

+     *

+     * @param application

+     * @param _session

+     * @return

+     * @throws Exception

+     */

+    public static UddiHub getInstance(ServletContext application, HttpSession _session) throws Exception {

+        Object j = _session.getAttribute("hub");

+        if (j == null) {

+            UddiHub hub = new UddiHub(application, _session);

+            _session.setAttribute("hub", hub);

+            return hub;

+        }

+

+        return (UddiHub) j;

+    }

+    String locale = "en";

+

+    /**

+     * Provides access to the configuration file for the Hub. useful for I/O

+     * changes to the config

+     *

+     * @return

+     * @throws URISyntaxException

+     */

+    public String GetRawConfigurationPath() throws URISyntaxException {

+        return propertiesurl.toString();

+    }

+

+    /**

+     *

+     * @return Provides access to the configuration file for the Hub. useful for

+     * I/O changes to the config

+     */

+    public Properties GetRawConfiguration() {

+        return properties;

+    }

+

+    private UddiHub(ServletContext application, HttpSession _session) throws Exception {

+        URL prop = application.getResource("/META-INF/config.properties");

+        if (prop == null) {

+            throw new Exception("Cannot locate the configuration file.");

+        }

+        session = _session;

+        propertiesurl = prop;

+        InputStream in = prop.openStream();

+        Properties p = new Properties();

+        p.load(in);

+        in.close();

+        properties = p;

+        style = (AuthStyle) AuthStyle.valueOf((String) p.get("authtype"));

+        try {

+

+            String clazz = UDDIClientContainer.getUDDIClient(null).

+                    getClientConfig().getUDDINode("default").getProxyTransport();

+            Class<?> transportClass = ClassUtil.forName(clazz, Transport.class);

+            if (transportClass != null) {

+                Transport transport = (Transport) transportClass.

+                        getConstructor(String.class).newInstance("default");

+

+                security = transport.getUDDISecurityService();

+                inquiry = transport.getUDDIInquiryService();

+                subscription = transport.getUDDISubscriptionService();

+                publish = transport.getUDDIPublishService();

+                custody = transport.getUDDICustodyTransferService();

+                //  juddi = transport.getJUDDIApiService();

+

+                BindingProvider bp = null;

+                Map<String, Object> context = null;

+                bp = (BindingProvider) inquiry;

+                context = bp.getRequestContext();

+                context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, properties.getProperty("inquiryurl"));

+                bp = (BindingProvider) publish;

+                context = bp.getRequestContext();

+                context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, properties.getProperty("publishurl"));

+                bp = (BindingProvider) custody;

+                context = bp.getRequestContext();

+                context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, properties.getProperty("custodyurl"));

+

+

+                bp = (BindingProvider) security;

+                context = bp.getRequestContext();

+                context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, properties.getProperty("securityurl"));

+

+                bp = (BindingProvider) subscription;

+                context = bp.getRequestContext();

+                context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, properties.getProperty("subscriptionurl"));

+

+

+                /*bp = (BindingProvider) juddi;

+                 context = bp.getRequestContext();

+                 context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, properties.getProperty("juddipapi"));*/

+            }

+        } catch (Exception ex) {

+            HandleException(ex);

+        }

+    }

+    private HttpSession session;

+

+    private String GetToken() {

+        if (style != AuthStyle.UDDI_AUTH) {

+            BindingProvider bp = null;

+            Map<String, Object> context = null;

+            bp = (BindingProvider) inquiry;

+            context = bp.getRequestContext();

+            context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));

+            context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));

+

+            bp = (BindingProvider) publish;

+            context = bp.getRequestContext();

+            context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));

+            context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));

+

+            bp = (BindingProvider) custody;

+            context = bp.getRequestContext();

+            context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));

+            context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));

+

+            bp = (BindingProvider) subscription;

+            context = bp.getRequestContext();

+            context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));

+            context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));

+

+            /*

+             bp = (BindingProvider) juddi;

+             context = bp.getRequestContext();

+             context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));

+             context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));*/

+            return null;

+        } else {

+            if (token != null) {

+                return token;

+            }

+            GetAuthToken req = new GetAuthToken();

+            if (session.getAttribute("username") != null

+                    && session.getAttribute("password") != null) {

+                req.setUserID((String) session.getAttribute("username"));

+                req.setCred(AES.Decrypt((String) session.getAttribute("password"), (String) properties.get("key")));

+                try {

+                    AuthToken authToken = security.getAuthToken(req);

+                    token = authToken.getAuthInfo();

+                } catch (Exception ex) {

+                    return HandleException(ex);

+                }

+            }

+        }

+        return token;

+    }

+

+    /**

+     * Returns true if the current user has a token and is signed in. Does not

+     * apply to non-UDDI security API logins

+     *

+     * @return

+     */

+    public boolean getUddiIsAuthenticated() {

+        return (token != null && !token.isEmpty());

+    }

+    private UDDISubscriptionPortType subscription = null;

+    private UDDISecurityPortType security = null;

+    private UDDIInquiryPortType inquiry = null;

+    private UDDIPublicationPortType publish = null;

+    private UDDICustodyTransferPortType custody = null;

+    //private JUDDIApiPortType juddi = null;

+    private String token = null;

+

+    /**

+     * Performs a find_business call in the inquiry API

+     *

+     * @param offset

+     * @param maxrecords

+     * @param keyword

+     * @param lang

+     * @param isChooser

+     * @return

+     */

+    public PagableContainer GetBusinessListAsHtml(int offset, int maxrecords, String keyword, String lang, boolean isChooser) {

+        PagableContainer ret = new PagableContainer();

+        ret.offset = offset;

+        ret.displaycount = 0;

+        ret.totalrecords = 0;

+

+        try {

+            FindBusiness fb = new FindBusiness();

+            fb.setMaxRows(maxrecords);

+            fb.setListHead(offset);

+            fb.setAuthInfo(GetToken());

+            org.uddi.api_v3.FindQualifiers fq = new org.uddi.api_v3.FindQualifiers();

+            fq.getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+

+            fb.setFindQualifiers(fq);

+            Name searchname = new Name();

+            searchname.setLang(lang);

+            searchname.setValue(keyword);

+            fb.getName().add(searchname);

+            //transport

+            BusinessList findBusiness = null;

+            try {

+                findBusiness = inquiry.findBusiness(fb);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        fb.setAuthInfo(GetToken());

+                        findBusiness = inquiry.findBusiness(fb);

+                    }

+                }

+            }

+            if (findBusiness == null || findBusiness.getBusinessInfos() == null) {

+                ret.renderedHtml = (ResourceLoader.GetResource(session, "errors.nodatareturned"));

+            } else {

+                ret.displaycount = findBusiness.getListDescription().getIncludeCount();

+                ret.offset = findBusiness.getListDescription().getListHead();

+                ret.totalrecords = findBusiness.getListDescription().getActualCount();

+                ret.renderedHtml = Printers.BusinessListAsTable(findBusiness, session, isChooser);

+            }

+

+        } catch (Exception ex) {

+            ret.renderedHtml = (HandleException(ex));

+        }

+

+        return ret;

+    }

+

+    /**

+     * The get_registeredInfo API call is used to get an abbreviated list of all

+     * businessEntity and tModel data that are controlled by a publisher. When

+     * the registry distinguishes between publishers, this is the individual

+     * associated with the credentials passed in the authInfo element. This

+     * returned information is intended, for example, for driving tools that

+     * display lists of registered information and then provide drill-down

+     * features. This is the recommended API to use after a network problem

+     * results in an unknown status of saved information.

+     *

+     * @return

+     */

+    public String GetMyTransferableKeys(boolean businesses, boolean tModels) {

+

+        StringBuilder sb = new StringBuilder();

+

+

+        RegisteredInfo findBusiness = null;

+        try {

+            GetRegisteredInfo r = new GetRegisteredInfo();

+            r.setAuthInfo(GetToken());

+            if (r.getAuthInfo() == null) {

+                return ToErrorAlert(ResourceLoader.GetResource(session, "errors.notsignedin"));

+            }

+            r.setInfoSelection(InfoSelection.ALL);

+

+            try {

+                findBusiness = publish.getRegisteredInfo(r);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        r.setAuthInfo(GetToken());

+                        findBusiness = publish.getRegisteredInfo(r);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+        } catch (Exception ex) {

+            return ToErrorAlert(HandleException(ex));

+        }

+

+

+        if (findBusiness == null || findBusiness.getBusinessInfos() == null) {

+            return (ResourceLoader.GetResource(session, "errors.nodatareturned"));

+

+        } else {

+            if (findBusiness.getBusinessInfos() != null && businesses) {

+                sb.append("<select id=\"businesslist\" multiple=\"multiple\" size=\"10\">");

+                for (int i = 0; i < findBusiness.getBusinessInfos().getBusinessInfo().size(); i++) {

+                    sb.append("<option class=\"transferable\" id=\"").

+                            append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).

+                            append("\" title=\"").

+                            append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).

+                            append("\">").

+                            append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getName()))).

+                            append("</option>");

+                }

+                sb.append("</select>");

+            }

+            if (findBusiness.getTModelInfos() != null && tModels) {

+                sb.append("<select id=\"tmodellist\" multiple=\"multiple\" size=\"10\">");

+                for (int i = 0; i < findBusiness.getTModelInfos().getTModelInfo().size(); i++) {

+                    sb.append("<option  class=\"transferable\" id=\"").

+                            append(StringEscapeUtils.escapeHtml(findBusiness.getTModelInfos().getTModelInfo().get(i).getTModelKey())).

+                            append("\" title=\"").

+                            append(StringEscapeUtils.escapeHtml(findBusiness.getTModelInfos().getTModelInfo().get(i).getTModelKey())).

+                            append("\">").

+                            append(StringEscapeUtils.escapeHtml((findBusiness.getTModelInfos().getTModelInfo().get(i).getName().getValue()))).

+                            append("</option>");

+                }

+                sb.append("</select>");

+            }

+

+            return sb.toString();

+        }

+

+    }

+

+    /**

+     * Performs Inquiry Find_service API

+     *

+     * @param serviceid

+     * @return

+     */

+    public String GetServiceDetailAsHtml(String serviceid) {

+        if (serviceid == null || serviceid.length() == 0) {

+            return ResourceLoader.GetResource(session, "errors.noinput");

+        }

+        StringBuilder sb = new StringBuilder();

+        try {

+            GetServiceDetail gbd = new GetServiceDetail();

+            gbd.setAuthInfo(GetToken());

+            gbd.getServiceKey().add(serviceid);

+            ServiceDetail get = null;//inquiry.getServiceDetail(gbd);

+            try {

+                get = inquiry.getServiceDetail(gbd);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        gbd.setAuthInfo(GetToken());

+                        get = inquiry.getServiceDetail(gbd);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            if (get != null) {

+                for (int i = 0; i < get.getBusinessService().size(); i++) {

+                    session.setAttribute(get.getBusinessService().get(i).getServiceKey(), get.getBusinessService().get(i));

+                    sb.append("<b>").append(ResourceLoader.GetResource(session, "items.name")).append(":</b><div class=\"editable\" id=\"ServiceName\">").append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(get.getBusinessService().get(i).getName()))).append("</div><Br>");

+                    sb.append("<b>").append(ResourceLoader.GetResource(session, "items.description")).append(":</b><div class=\"editable\" id=\"ServiceDescription\">").append(StringEscapeUtils.escapeHtml((Printers.ListToDescString(get.getBusinessService().get(i).getDescription())))).append("</div><Br>");

+                    sb.append("<b>").append(ResourceLoader.GetResource(session, "items.key")).append(":</b><div class=\"editable\" id=\"ServiceKey\">").append(StringEscapeUtils.escapeHtml((get.getBusinessService().get(i).getServiceKey()))).append("</div><Br>");

+                    sb.append("<b>").append(ResourceLoader.GetResource(session, "items.keyrefcat")).append(":</b> ").append(Printers.CatBagToString(get.getBusinessService().get(i).getCategoryBag(), (String) session.getAttribute("locale"))).append("<Br>");

+                    if (!get.getBusinessService().get(i).getSignature().isEmpty()) {

+                        sb.append(ResourceLoader.GetResource(session, "items.signed")).append("<Br>");

+                    } else {

+                        sb.append(ResourceLoader.GetResource(session, "items.signed.not")).append("<Br>");

+                    }

+

+                    sb.append(Printers.PrintBindingTemplates(get.getBusinessService().get(i).getBindingTemplates(), (String) session.getAttribute("locale"))).append("<Br>");

+                }

+            } else {

+                sb.append(ResourceLoader.GetResource(session, "errors.nodatareturned"));

+            }

+        } catch (Exception ex) {

+            sb.append(HandleException(ex));

+        }

+        return sb.toString();

+    }

+

+    /**

+     * returns an html formatted list of services for a specific business used

+     * on browse.jsp

+     *

+     * @param bizid

+     * @return retu

+     */

+    public String GetServiceList(String bizid) {

+        if (bizid == null || bizid.isEmpty()) {

+            return ResourceLoader.GetResource(session, "errors.nobusinessid");

+        }

+        StringBuilder sb = new StringBuilder();

+        try {

+            GetBusinessDetail gbd = new GetBusinessDetail();

+            gbd.setAuthInfo(GetToken());

+            gbd.getBusinessKey().add(bizid);

+            BusinessDetail businessDetail = null;

+            try {

+                businessDetail = inquiry.getBusinessDetail(gbd);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        gbd.setAuthInfo(GetToken());

+                        businessDetail = inquiry.getBusinessDetail(gbd);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            if (businessDetail != null) {

+                for (int i = 0; i < businessDetail.getBusinessEntity().size(); i++) {

+                    if (businessDetail.getBusinessEntity().get(i).getBusinessServices() == null) {

+                        sb.append(ResourceLoader.GetResource(session, "errors.noservicesdefined"));

+                    } else {

+                        for (int k = 0; k < businessDetail.getBusinessEntity().get(i).getBusinessServices().getBusinessService().size(); k++) {

+                            sb.append("<div><a href=\"serviceEditor.jsp?id=").

+                                    append(StringEscapeUtils.escapeHtml(businessDetail.getBusinessEntity().get(i).getBusinessServices().getBusinessService().get(k).getServiceKey())).append("\">").

+                                    append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(businessDetail.getBusinessEntity().get(i).getBusinessServices().getBusinessService().get(k).getName()))).append("</a></div>");

+                        }

+                    }

+                }

+            } else {

+                sb.append(ResourceLoader.GetResource(session, "errors.nodatareturned"));

+            }

+        } catch (Exception ex) {

+            sb.append(ResourceLoader.GetResource(session, "errors.generic")).append(ex.getMessage());

+        }

+        return sb.toString();

+    }

+

+    /**

+     * Performs a getServiceDetails in Inquiry API

+     *

+     * @param serviceid

+     * @return null if no id was specified or if it didn't exist

+     */

+    public BusinessService GetServiceDetail(String serviceid) {

+        if (serviceid == null || serviceid.length() == 0) {

+            return null;

+        }

+

+        try {

+            GetServiceDetail gbd = new GetServiceDetail();

+            gbd.setAuthInfo(GetToken());

+            gbd.getServiceKey().add(serviceid);

+            ServiceDetail get = null;

+            try {

+                get = inquiry.getServiceDetail(gbd);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        gbd.setAuthInfo(GetToken());

+                        get = inquiry.getServiceDetail(gbd);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+            if (get == null || get.getBusinessService().isEmpty()) {

+                return null;

+            }

+            return get.getBusinessService().get(0);

+

+        } catch (Exception ex) {

+            HandleException(ex);

+        }

+        return null;

+    }

+

+    /**

+     * Calls Publisher Save Service API

+     *

+     * @param be

+     * @return

+     */

+    public String SaveService(BusinessService be) {

+        try {

+            SaveService sb = new SaveService();

+            sb.setAuthInfo(GetToken());

+            sb.getBusinessService().add(be);

+            try {

+                publish.saveService(sb);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        sb.setAuthInfo(GetToken());

+                        publish.saveService(sb);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+            return ResourceLoader.GetResource(session, "actions.saved");

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    /**

+     * don't think this is used yet

+     *

+     * @param be

+     * @return

+     */

+    @Deprecated

+    public String SaveBindingTemplate(BindingTemplate be) {

+        try {

+            SaveBinding sb = new SaveBinding();

+            sb.setAuthInfo(GetToken());

+            sb.getBindingTemplate().add(be);

+            try {

+                publish.saveBinding(sb);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        sb.setAuthInfo(GetToken());

+                        publish.saveBinding(sb);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            return ResourceLoader.GetResource(session, "actions.save.bindingtemplate");

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    /**

+     * This method will rebuild a Service entity from the HTTP request from the

+     * Service Editor page and will then attempt to save it.

+     *

+     * @param request

+     * @return a localized Saved or an error message

+     */

+    public String SaveServiceDetails(HttpServletRequest request) {

+

+        BusinessService be = new BusinessService();

+        be.setBusinessKey(request.getParameter(PostBackConstants.BUSINESSKEY).trim());

+        be.setServiceKey(request.getParameter(PostBackConstants.SERVICEKEY).trim());

+

+        if (be.getServiceKey().equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {

+            be.setServiceKey(null);

+        }

+        if (be.getBusinessKey() == null || be.getBusinessKey().length() == 0) {

+            return ResourceLoader.GetResource(session, "errors.noinput.businesskey");

+        }

+

+        be.getName().addAll(Builders.BuildNames(Builders.MapFilter(request.getParameterMap(), PostBackConstants.NAME), PostBackConstants.NAME, ResourceLoader.GetResource(session, "items.clicktoedit")));

+        BindingTemplates bt = new BindingTemplates();

+        bt.getBindingTemplate().addAll(Builders.BuildBindingTemplates(Builders.MapFilter(request.getParameterMap(), PostBackConstants.BINDINGTEMPLATE), PostBackConstants.BINDINGTEMPLATE, ResourceLoader.GetResource(session, "items.clicktoedit")));

+        if (!bt.getBindingTemplate().isEmpty()) {

+            be.setBindingTemplates(bt);

+        }

+

+        be.getDescription().addAll(Builders.BuildDescription(Builders.MapFilter(request.getParameterMap(), PostBackConstants.DESCRIPTION), PostBackConstants.DESCRIPTION, ResourceLoader.GetResource(session, "items.clicktoedit")));

+

+        CategoryBag cb = new CategoryBag();

+        cb.getKeyedReference().addAll(Builders.BuildKeyedReference(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF), PostBackConstants.CATBAG_KEY_REF));

+        cb.getKeyedReferenceGroup().addAll(Builders.BuildKeyedReferenceGroup(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF_GRP), PostBackConstants.CATBAG_KEY_REF_GRP));

+

+        if (!cb.getKeyedReference().isEmpty() || !cb.getKeyedReferenceGroup().isEmpty()) {

+            be.setCategoryBag(cb);

+        }

+

+        return SaveServiceDetails(be);

+    }

+

+    /**

+     * Saves a Service

+     *

+     * @param be

+     * @return a readable error message or, success

+     */

+    public String SaveServiceDetails(BusinessService be) {

+        try {

+            SaveService sb = new SaveService();

+            sb.setAuthInfo(GetToken());

+            sb.getBusinessService().add(be);

+            try {

+                publish.saveService(sb);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        sb.setAuthInfo(GetToken());

+                        publish.saveService(sb);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            return ResourceLoader.GetResource(session, "actions.save.service");

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    /**

+     * Saves a business entity

+     *

+     * @param be

+     * @return a readable error message

+     */

+    public String SaveBusinessDetails(BusinessEntity be) {

+        try {

+            SaveBusiness sb = new SaveBusiness();

+            sb.setAuthInfo(GetToken());

+            sb.getBusinessEntity().add(be);

+            try {

+                publish.saveBusiness(sb);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        sb.setAuthInfo(GetToken());

+                        publish.saveBusiness(sb);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+            return ResourceLoader.GetResource(session, "actions.saved");

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    /**

+     * Save Business

+     *

+     * This method saves a business to a UDDI registry, preserving the service

+     * listing The request is build from the HTTP post back parameters. A human

+     * readable response message is returned

+     *

+     * @param request

+     * @return

+     */

+    public String SaveBusinessDetails(HttpServletRequest request) {

+

+

+

+        BusinessEntity be = new BusinessEntity();

+        be.setBusinessKey(request.getParameter(PostBackConstants.BUSINESSKEY).trim());

+        if (be.getBusinessKey().equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {

+            be.setBusinessKey(null);

+        } else {

+            BusinessEntity GetBusinessDetails = GetBusinessDetails(be.getBusinessKey());

+            if (GetBusinessDetails == null) //this is a new business

+            {

+            } else {

+                //copy over the existing child element, business

+                be.setBusinessServices(GetBusinessDetails.getBusinessServices());

+            }

+        }

+        be.getName().addAll(Builders.BuildNames(Builders.MapFilter(request.getParameterMap(), PostBackConstants.NAME), PostBackConstants.NAME, ResourceLoader.GetResource(session, "items.clicktoedit")));

+

+

+        be.setContacts(Builders.BuildContacts(request.getParameterMap(), ResourceLoader.GetResource(session, "items.clicktoedit")));

+

+        be.getDescription().addAll(Builders.BuildDescription(Builders.MapFilter(request.getParameterMap(), PostBackConstants.DESCRIPTION), PostBackConstants.DESCRIPTION, ResourceLoader.GetResource(session, "items.clicktoedit")));

+        be.setDiscoveryURLs(Builders.BuildDisco(Builders.MapFilter(request.getParameterMap(), PostBackConstants.DISCOVERYURL), PostBackConstants.DISCOVERYURL));

+        CategoryBag cb = new CategoryBag();

+        cb.getKeyedReference().addAll(Builders.BuildKeyedReference(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF), PostBackConstants.CATBAG_KEY_REF));

+        cb.getKeyedReferenceGroup().addAll(Builders.BuildKeyedReferenceGroup(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF_GRP), PostBackConstants.CATBAG_KEY_REF_GRP));

+

+        if (!cb.getKeyedReference().isEmpty() || !cb.getKeyedReferenceGroup().isEmpty()) {

+            be.setCategoryBag(cb);

+        }

+        be.setIdentifierBag(Builders.BuildIdentBag(Builders.MapFilter(request.getParameterMap(), PostBackConstants.IDENT_KEY_REF), PostBackConstants.IDENT_KEY_REF));

+        return SaveBusinessDetails(be);

+    }

+

+    /**

+     * Returns

+     *

+     * @param bizid

+     * @return

+     * @throws Exception

+     */

+    @Deprecated

+    private String GetBusinessDetailsAsHtml(String bizid) throws Exception {

+        if (bizid == null || bizid.isEmpty()) {

+            return ResourceLoader.GetResource(session, "errors.noinput.businesskey");

+        }

+        StringBuilder sb = new StringBuilder();

+        try {

+            GetBusinessDetail gbd = new GetBusinessDetail();

+            gbd.setAuthInfo(GetToken());

+

+            gbd.getBusinessKey().add(bizid);

+

+            BusinessDetail businessDetail = null;

+

+            try {

+                businessDetail = inquiry.getBusinessDetail(gbd);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        gbd.setAuthInfo(GetToken());

+                        businessDetail = inquiry.getBusinessDetail(gbd);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            if (businessDetail != null) {

+                for (int i = 0; i < businessDetail.getBusinessEntity().size(); i++) {

+                    sb.append("Business Detail - key: ").append(businessDetail.getBusinessEntity().get(i).getBusinessKey()).append("<br>");

+                    sb.append(ResourceLoader.GetResource(session, "items.name"));

+                    sb.append(": ").append(Printers.ListNamesToString(businessDetail.getBusinessEntity().get(i).getName())).append("<br>");

+                    sb.append(ResourceLoader.GetResource(session, "items.description"));

+                    sb.append(": ").append(Printers.ListToDescString(businessDetail.getBusinessEntity().get(i).getDescription())).append("<br>");

+                    sb.append(ResourceLoader.GetResource(session, "items.discoveryurl"));

+                    sb.append(": ").append(Printers.ListDiscoToString(businessDetail.getBusinessEntity().get(i).getDiscoveryURLs())).append("<br>");

+                    sb.append(ResourceLoader.GetResource(session, "items.identifiers"));

+                    sb.append(": ").append(Printers.ListIdentBagToString(businessDetail.getBusinessEntity().get(i).getIdentifierBag(), (String) session.getAttribute("locale"))).append("<br>");

+                    sb.append(ResourceLoader.GetResource(session, "items.keyrefcats"));

+                    sb.append(": ").append(Printers.CatBagToString(businessDetail.getBusinessEntity().get(i).getCategoryBag(), (String) session.getAttribute("locale"))).append("<br>");

+                    Printers.PrintContacts(businessDetail.getBusinessEntity().get(i).getContacts(), (String) session.getAttribute("locale"));

+                }

+            } else {

+                sb.append(ResourceLoader.GetResource(session, "errors.nodatareturned"));

+            }

+        } catch (Exception ex) {

+

+            sb.append(HandleException(ex));

+        }

+        return sb.toString();

+    }

+

+    /**

+     * Gets a business's details used for the businessEditor

+     *

+     * @param bizid

+     * @return null if no id is provided or if there is a remote error

+     */

+    public BusinessEntity GetBusinessDetails(String bizid) {

+        if (bizid == null || bizid.isEmpty()) {

+            return null;

+        }

+

+        try {

+            GetBusinessDetail gbd = new GetBusinessDetail();

+            gbd.setAuthInfo(GetToken());

+

+            gbd.getBusinessKey().add(bizid);

+

+            BusinessDetail businessDetail = null;

+            try {

+                businessDetail = inquiry.getBusinessDetail(gbd);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        gbd.setAuthInfo(GetToken());

+                        businessDetail = inquiry.getBusinessDetail(gbd);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            if (businessDetail != null && businessDetail.getBusinessEntity().size() == 1) {

+                return businessDetail.getBusinessEntity().get(0);

+            }

+        } catch (Exception ex) {

+            HandleException(ex);

+        }

+        return null;

+

+    }

+

+    /**

+     * returns a bootstrap html stylizies an error message with a warning icon

+     * @param HandleException, any string representing an error message

+     * @return 

+     */

+    public static String ToErrorAlert(String HandleException) {

+        return "<div class=\"alert alert-error\"><i class=\"icon-warning-sign icon-large\"></i>&nbsp;" + HandleException + "</div>";

+    }

+

+    /**

+     * AuthStyles for the Hub to use, default is UDDI_AUTH

+     */

+    public enum AuthStyle {

+

+        /**

+         * Http Basic

+         */

+        HTTP_BASIC,

+        /**

+         * Http Digest

+         */

+        HTTP_DIGEST,

+        /**

+         * HTTP NTLM

+         */

+        HTTP_NTLM,

+        /**

+         * UDDI Authentication via the Security API

+         */

+        UDDI_AUTH,

+        /**

+         * HTTP Client Certificate Authentication

+         */

+        HTTP_CLIENT_CERT

+    }

+

+    /**

+     * Search for services using find_services

+     *

+     * @param keyword

+     * @param lang

+     * @param maxrecords

+     * @param offset

+     * @param isChooser

+     * @return

+     */

+    public PagableContainer SearchForServices(String keyword, String lang, int maxrecords, int offset, boolean isChooser) {

+        PagableContainer ret = new PagableContainer();

+        ret.displaycount = 0;

+        ret.offset = offset;

+        ret.totalrecords = 0;

+        try {

+

+            FindService fs = new FindService();

+            fs.setAuthInfo(GetToken());

+            fs.setMaxRows(maxrecords);

+            fs.setListHead(offset);

+            Name n = new Name();

+            if (lang == null || lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {

+                n.setLang(null);

+            } else {

+                n.setLang(lang);

+            }

+            n.setValue(keyword);

+            fs.getName().add(n);

+            fs.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());

+            fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+            ServiceList findService = null;//inquiry.findService(fs);

+            try {

+                findService = inquiry.findService(fs);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        fs.setAuthInfo(GetToken());

+                        findService = inquiry.findService(fs);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+            if (findService == null || findService.getServiceInfos() == null) {

+                ret.renderedHtml = ResourceLoader.GetResource(session, "errors.norecordsfound");

+                return ret;

+            }

+            ret.displaycount = findService.getListDescription().getIncludeCount();

+            ret.totalrecords = findService.getListDescription().getActualCount();

+            ret.renderedHtml = Printers.ServiceListAsHtml(findService, isChooser, session);

+

+            //  ret.renderedHtml = sb.toString();

+            return ret;

+        } catch (Exception ex) {

+            ret.renderedHtml = HandleException(ex);

+        }

+        return ret;

+

+    }

+

+    /**

+     * Adds a special tModel key generator keyGenerator: Marking a tModel with

+     * this categorization designates it as one whose tModelKey identifies a key

+     * generator partition that can be used by its owner to derive and assign

+     * other entity keys. This categorization is reserved for key generator

+     * tModels. Any attempt to use this categorization for something other than

+     * a key generator tModel will fail with E_valueNotAllowed returned.

+     *

+     * @param partitionName

+     * @return

+     */

+    public String AddTmodelKenGenerator(String partitionName, String name, String lang) {

+        try {

+            if (!partitionName.startsWith("uddi:")) {

+                return ResourceLoader.GetResource(session, "errors.tmodel.prefix");

+

+            }

+            if (!partitionName.endsWith(":keyGenerator")) {

+                return ResourceLoader.GetResource(session, "errors.tmodel.postfix");

+            }

+

+

+            SaveTModel st = new SaveTModel();

+            st.setAuthInfo(GetToken());

+            TModel tm = new TModel();

+            tm.setName(new Name());

+            tm.getName().setValue(name);

+            if (lang == null || lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {

+                tm.getName().setLang(null);

+            } else {

+                tm.getName().setLang(lang);

+            }

+            tm.setCategoryBag(new CategoryBag());

+            KeyedReference kr = new KeyedReference();

+            kr.setTModelKey("uddi:uddi.org:categorization:types");

+            kr.setKeyName("uddi-org:keyGenerator");

+            kr.setKeyValue("keyGenerator");

+            tm.getCategoryBag().getKeyedReference().add(kr);

+            OverviewDoc overviewDoc = new OverviewDoc();

+            OverviewURL overviewUrl = new OverviewURL();

+            overviewUrl.setUseType("text");

+            overviewUrl.setValue("http://uddi.org/pubs/uddi_v3.htm#keyGen");

+            overviewDoc.setOverviewURL(overviewUrl);

+            tm.getOverviewDoc().add(overviewDoc);

+            tm.setTModelKey(partitionName.toLowerCase());

+            st.getTModel().add(tm);

+            publish.saveTModel(st);

+            return ResourceLoader.GetResource(session, "messages.success");

+            // "Success";

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    /**

+     * This function provides a basic error handling rutine that will pull out

+     * the true error message in a UDDI fault message, returning bootstrap

+     * stylized html error message

+     *

+     * @param ex

+     * @return

+     */

+    private String HandleException(Exception ex) {

+        if (ex instanceof DispositionReportFaultMessage) {

+            DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+            log.log(Level.ERROR, null, ex);

+            return ResourceLoader.GetResource(session, "errors.uddi") + " " + ex.getMessage() + " " + f.detail.getMessage();

+        }

+        if (ex instanceof RemoteException) {

+            RemoteException f = (RemoteException) ex;

+            log.log(Level.ERROR, null, ex);

+            return ResourceLoader.GetResource(session, "errors.generic") + " " + ex.getMessage() + " " + f.detail.getMessage();

+        }

+        log.log(Level.ERROR, null, ex);

+        return //"<div class=\"alert alert-error\" ><h3><i class=\"icon-warning-sign\"></i> "

+                ResourceLoader.GetResource(session, "errors.generic") + " " + StringEscapeUtils.escapeHtml(ex.getMessage());

+        //+ "</h3></div>";

+

+    }

+

+    /**

+     * provides based tmodel searching/browser capability that's pagable

+     *

+     * @param keyword

+     * @param lang

+     * @param offset

+     * @param maxrecords

+     * @param isChooser if true, tModel keys will not be clickable and will

+     * instead be render for a modal dialog box

+     * @return

+     */

+    public PagableContainer tModelListAsHtml(String keyword, String lang, int offset, int maxrecords, boolean isChooser) {

+        PagableContainer ret = new PagableContainer();

+        try {

+            FindTModel fm = new FindTModel();

+            fm.setAuthInfo(GetToken());

+            fm.setMaxRows(maxrecords);

+            fm.setListHead(offset);

+            fm.setName(new Name());

+            if (lang == null || lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {

+                fm.getName().setLang(null);

+            } else {

+                fm.getName().setLang(lang);

+            }

+            fm.getName().setValue(keyword);

+            fm.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());

+            fm.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+            TModelList findTModel = null;

+            try {

+                findTModel = inquiry.findTModel(fm);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        fm.setAuthInfo(GetToken());

+                        findTModel = inquiry.findTModel(fm);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+            ret.offset = offset;

+            ret.displaycount = findTModel.getListDescription().getIncludeCount();

+            ret.totalrecords = findTModel.getListDescription().getActualCount();

+            if (findTModel == null || findTModel.getTModelInfos() == null || findTModel.getTModelInfos().getTModelInfo().isEmpty()) {

+                ret.renderedHtml = ResourceLoader.GetResource(session, "errors.norecordsfound");//"No tModels are defined";

+            } else {

+                // if (!isChooser) {

+                ret.renderedHtml = Printers.PrintTModelListAsHtml(findTModel, session, isChooser);

+                // } else {

+                //     ret.renderedHtml = Printers.PrintTModelListAsHtmlModel(findTModel, session);

+                // }

+

+            }

+        } catch (Exception ex) {

+            ret.renderedHtml = HandleException(ex);

+        }

+        return ret;

+    }

+

+    /**

+     * Returns the details of a tModel by tModelKey

+     *

+     * @param id

+     * @return the details or null if it doesn't exist or a null value was

+     * passed

+     */

+    public TModel getTmodelDetails(String id) {

+        try {

+            if (id == null || id.length() == 0) {

+                return null;

+            }

+

+            GetTModelDetail req = new GetTModelDetail();

+            req.setAuthInfo(GetToken());

+            req.getTModelKey().add(id);

+            TModelDetail tModelDetail = null;

+            try {

+                tModelDetail = inquiry.getTModelDetail(req);

+

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        req.setAuthInfo(GetToken());

+                        tModelDetail = inquiry.getTModelDetail(req);

+

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+            if (tModelDetail != null && !tModelDetail.getTModel().isEmpty()) {

+                return tModelDetail.getTModel().get(0);

+            }

+

+        } catch (Exception ex) {

+            HandleException(ex);

+        }

+        return null;

+    }

+

+    /**

+     * A convenience function for GetBusinessDetails

+     *

+     * @param key

+     * @return

+     */

+    public BusinessEntity GetBusinessDetailsAsObject(String key) {

+        return GetBusinessDetails(key);

+    }

+

+    /**

+     * A convenience function for GetServiceDetail

+     *

+     * @param key

+     * @return

+     */

+    public BusinessService GetServiceDetailsAsObject(String key) {

+        return GetServiceDetail(key);

+    }

+

+    /**

+     * Returns a specific binding template as an object

+     *

+     * @param key

+     * @return null if not found

+     */

+    public BindingTemplate GetBindingDetailsAsObject(String key) {

+        try {

+            GetBindingDetail r = new GetBindingDetail();

+            r.setAuthInfo(GetToken());

+            r.getBindingKey().add(key);

+            BindingDetail bindingDetail = null;

+            try {

+                bindingDetail = inquiry.getBindingDetail(r);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        r.setAuthInfo(GetToken());

+                        bindingDetail = inquiry.getBindingDetail(r);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            return bindingDetail.getBindingTemplate().get(0);

+        } catch (Exception ex) {

+            HandleException(ex);

+        }

+        return null;

+    }

+

+    /**

+     * Returns a tmodel given the key

+     *

+     * @param key

+     * @return null if not found

+     */

+    public TModel GettModelDetailsAsObject(String key) {

+        try {

+            GetTModelDetail r = new GetTModelDetail();

+            r.setAuthInfo(GetToken());

+            r.getTModelKey().add(key);

+            TModelDetail tModelDetail = null;

+            try {

+                tModelDetail = inquiry.getTModelDetail(r);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        r.setAuthInfo(GetToken());

+                        tModelDetail = inquiry.getTModelDetail(r);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+            return tModelDetail.getTModel().get(0);

+        } catch (Exception ex) {

+            HandleException(ex);

+        }

+        return null;

+    }

+

+    /**

+     * An enum to help make UDDI searching easier to work with

+     */

+    public enum FindType {

+

+        /**

+         * search for a business

+         */

+        Business,

+        /**

+         * search for a related business

+         */

+        RelatedBusiness,

+        /**

+         * search for a business

+         */

+        Service,

+        /**

+         * search for a tmodel

+         */

+        tModel,

+        /**

+         * search for a binding template

+         */

+        BindingTemplate

+    }

+

+    /**

+     * An enum to help make UDDI searching easier to work with

+     */

+    public enum CriteriaType {

+

+        /**

+         * search by name

+         */

+        Name,

+        /**

+         * by category

+         */

+        Category,

+        /**

+         * by key

+         */

+        uid,

+        /**

+         * by tmodel

+         */

+        tmodel,

+        /**

+         * by identifier bag

+         */

+        identbag

+    }

+

+    /**

+     * Provides a simple search interface for the complex UDDI search APIs

+     *

+     * @param type

+     * @param criteria

+     * @param parameters

+     * @param lang

+     * @param findqualifier

+     * @return stylized html

+     */

+    public String Search(FindType type, CriteriaType criteria, String parameters, String lang, String[] findqualifier) {

+        switch (type) {

+            case BindingTemplate:

+                return FindBindingTemplateToHtml(criteria, parameters, lang, findqualifier);

+            case Business:

+                return FindBusiness(criteria, parameters, lang, findqualifier);

+            case RelatedBusiness:

+                return FindRelatedBusiness(criteria, parameters, lang, findqualifier);

+

+            case Service:

+                return FindService(criteria, parameters, lang, findqualifier);

+            case tModel:

+                return FindtModels(criteria, parameters, lang, findqualifier);

+        }

+        return ResourceLoader.GetResource(session, "items.unknown");

+    }

+

+    private String FindBindingTemplateToHtml(CriteriaType criteria, String parameters, String lang, String[] fq) {

+        try {

+            FindBinding fb = new FindBinding();

+            fb.setAuthInfo(GetToken());

+            if (fq != null) {

+                fb.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());

+                if (fq != null) {

+                    for (int i = 0; i < fq.length; i++) {

+                        fb.getFindQualifiers().getFindQualifier().add(fq[i]);

+                    }

+                }

+            }

+            BindingDetail findBusiness = null;

+            switch (criteria) {

+                case Category:

+                    fb.setCategoryBag(new CategoryBag());

+                    KeyedReference kr = new KeyedReference();

+                    kr.setTModelKey(parameters);

+                    fb.getCategoryBag().getKeyedReference().add(kr);

+                    break;

+                case Name:

+                    break;

+                case tmodel:

+                    fb.setTModelBag(new TModelBag());

+                    fb.getTModelBag().getTModelKey().add(parameters);

+                    break;

+                case uid:

+                    BusinessEntity t = GetBusinessDetails(parameters);

+                    findBusiness = new BindingDetail();

+                    BindingTemplate bt = GetBindingDetailsAsObject(parameters);

+                    findBusiness.getBindingTemplate().add(bt);

+

+                    break;

+

+            }

+            if (findBusiness == null) {

+                try {

+                    findBusiness = inquiry.findBinding(fb);

+                } catch (Exception ex) {

+                    if (ex instanceof DispositionReportFaultMessage) {

+                        DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                        if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                            token = null;

+                            fb.setAuthInfo(GetToken());

+                            findBusiness = inquiry.findBinding(fb);

+                        }

+                    } else {

+                        throw ex;

+                    }

+                }

+

+            }

+            if (findBusiness != null && findBusiness.getBindingTemplate() != null) {

+                StringBuilder sb = new StringBuilder();

+                sb.append("<table class=\"table\">");

+                for (int i = 0; i < findBusiness.getBindingTemplate().size(); i++) {

+                    sb.append("<tr><td>");

+                    sb.append("<a href=\"serviceEditor.jsp?id=").

+                            append(StringEscapeUtils.escapeHtml(findBusiness.getBindingTemplate().get(i).getServiceKey())).

+                            append("\">");

+                    if (findBusiness.getBindingTemplate().get(i).getDescription().isEmpty()) {

+                        sb.append(StringEscapeUtils.escapeHtml(findBusiness.getBindingTemplate().get(i).getServiceKey()));

+                    } else {

+                        sb.append(StringEscapeUtils.escapeHtml(Printers.ListToDescString(findBusiness.getBindingTemplate().get(i).getDescription())));

+                    }

+                    sb.append("</a>");

+                    sb.append("</td></tr>");

+                }

+                sb.append("</table>");

+                return sb.toString();

+            } else {

+                return ResourceLoader.GetResource(session, "errors.norecordsfound");

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    private String FindBusiness(CriteriaType criteria, String parameters, String lang, String[] fq) {

+        try {

+            FindBusiness fb = new FindBusiness();

+            fb.setAuthInfo(GetToken());

+            if (fq != null) {

+                fb.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());

+                if (fq != null) {

+                    for (int i = 0; i < fq.length; i++) {

+                        fb.getFindQualifiers().getFindQualifier().add(fq[i]);

+                    }

+                }

+            }

+            BusinessList findBusiness = null;

+            switch (criteria) {

+                case Category:

+                    fb.setCategoryBag(new CategoryBag());

+                    KeyedReference kr = new KeyedReference();

+                    kr.setTModelKey(parameters);

+                    fb.getCategoryBag().getKeyedReference().add(kr);

+                    break;

+                case Name:

+                    Name n = new Name();

+                    n.setLang(lang);

+                    n.setValue(parameters);

+                    fb.getName().add(n);

+                    break;

+                case tmodel:

+                    fb.setTModelBag(new TModelBag());

+                    fb.getTModelBag().getTModelKey().add(parameters);

+                    break;

+                case uid:

+                    BusinessEntity t = GetBusinessDetails(parameters);

+                    findBusiness = new BusinessList();

+                    findBusiness.setBusinessInfos(new BusinessInfos());

+

+                    BusinessInfo bd = new BusinessInfo();

+                    bd.setBusinessKey(t.getBusinessKey());

+                    bd.getName().addAll(t.getName());

+                    findBusiness.getBusinessInfos().getBusinessInfo().add(bd);

+                    break;

+

+            }

+            if (findBusiness == null) {

+

+                try {

+                    findBusiness = inquiry.findBusiness(fb);

+                } catch (Exception ex) {

+                    if (ex instanceof DispositionReportFaultMessage) {

+                        DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                        if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                            token = null;

+                            fb.setAuthInfo(GetToken());

+                            findBusiness = inquiry.findBusiness(fb);

+                        }

+                    } else {

+                        throw ex;

+                    }

+                }

+            }

+            if (findBusiness != null && findBusiness.getBusinessInfos() != null) {

+                StringBuilder sb = new StringBuilder();

+                sb.append("<table class=\"table\">");

+                for (int i = 0; i < findBusiness.getBusinessInfos().getBusinessInfo().size(); i++) {

+                    sb.append("<tr><td>");

+                    sb.append("<a href=\"businessEditor2.jsp?id=").

+                            append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).

+                            append("\">");

+                    if (findBusiness.getBusinessInfos().getBusinessInfo().get(i).getName().isEmpty()) {

+                        sb.append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey()));

+                    } else {

+                        sb.append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getName())));

+                    }

+                    sb.append("</a>");

+                    sb.append("</td></tr>");

+                }

+                sb.append("</table>");

+                return sb.toString();

+            } else {

+                return ResourceLoader.GetResource(session, "errors.norecordsfound");

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    private String FindRelatedBusiness(CriteriaType criteria, String parameters, String lang, String[] fq) {

+        try {

+            FindRelatedBusinesses fb = new FindRelatedBusinesses();

+            fb.setAuthInfo(GetToken());

+            fb.setBusinessKey(parameters);

+            RelatedBusinessesList findBusiness = null;

+            switch (criteria) {

+                case Category:

+                    break;

+                case Name:

+                    break;

+                case tmodel:

+                    break;

+                case uid:

+                    break;

+            }

+

+            try {

+                findBusiness = inquiry.findRelatedBusinesses(fb);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        fb.setAuthInfo(GetToken());

+                        findBusiness = inquiry.findRelatedBusinesses(fb);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+

+            if (findBusiness != null && findBusiness.getRelatedBusinessInfos() != null) {

+                StringBuilder sb = new StringBuilder();

+                sb.append("<table class=\"table\">");

+                for (int i = 0; i < findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().size(); i++) {

+                    sb.append("<tr><td>");

+                    sb.append("<a href=\"businessEditor2.jsp?id=").

+                            append(StringEscapeUtils.escapeHtml(findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().get(i).getBusinessKey())).

+                            append("\">");

+                    if (findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().get(i).getName().isEmpty()) {

+                        sb.append(StringEscapeUtils.escapeHtml(findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().get(i).getBusinessKey()));

+                    } else {

+                        sb.append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().get(i).getName())));

+                    }

+                    sb.append("</a>");

+                    sb.append("</td></tr>");

+                }

+                sb.append("</table>");

+                return sb.toString();

+            } else {

+                return ResourceLoader.GetResource(session, "errors.norecordsfound");

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    private String FindService(CriteriaType criteria, String parameters, String lang, String[] fq) {

+        try {

+            FindService fb = new FindService();

+            fb.setAuthInfo(GetToken());

+            if (fq != null) {

+                fb.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());

+                if (fq != null) {

+                    fb.getFindQualifiers().getFindQualifier().addAll(Arrays.asList(fq));

+                }

+            }

+            ServiceList findBusiness = null;

+            switch (criteria) {

+                case Category:

+                    fb.setCategoryBag(new CategoryBag());

+                    KeyedReference kr = new KeyedReference();

+                    kr.setTModelKey(parameters);

+                    fb.getCategoryBag().getKeyedReference().add(kr);

+                    break;

+                case Name:

+                    Name n = new Name();

+                    n.setLang(lang);

+                    n.setValue(parameters);

+                    fb.getName().add(n);

+                    break;

+                case tmodel:

+                    fb.setTModelBag(new TModelBag());

+                    fb.getTModelBag().getTModelKey().add(parameters);

+                    break;

+                case uid:

+                    BusinessEntity t = GetBusinessDetails(parameters);

+                    findBusiness = new ServiceList();

+                    findBusiness.setServiceInfos(new ServiceInfos());

+                    BusinessService GetServiceDetail = GetServiceDetail(parameters);

+                    ServiceInfo si = new ServiceInfo();

+                    si.setBusinessKey(GetServiceDetail.getBusinessKey());

+                    si.setServiceKey(GetServiceDetail.getServiceKey());

+                    si.getName().addAll(GetServiceDetail.getName());

+                    findBusiness.getServiceInfos().getServiceInfo().add(si);

+                    break;

+

+            }

+            if (findBusiness == null) {

+                try {

+                    findBusiness = inquiry.findService(fb);

+                } catch (Exception ex) {

+                    if (ex instanceof DispositionReportFaultMessage) {

+                        DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                        if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                            token = null;

+                            fb.setAuthInfo(GetToken());

+                            findBusiness = inquiry.findService(fb);

+                        }

+                    } else {

+                        throw ex;

+                    }

+                }

+

+            }

+            if (findBusiness.getServiceInfos() != null) {

+                StringBuilder sb = new StringBuilder();

+                sb.append("<table class=\"table\">");

+                for (int i = 0; i < findBusiness.getServiceInfos().getServiceInfo().size(); i++) {

+                    sb.append("<tr><td>");

+                    sb.append("<a href=\"serviceEditor.jsp?id=").

+                            append(StringEscapeUtils.escapeHtml(findBusiness.getServiceInfos().getServiceInfo().get(i).getServiceKey())).

+                            append("\">");

+                    if (findBusiness.getServiceInfos().getServiceInfo().get(i).getName().isEmpty()) {

+                        sb.append(StringEscapeUtils.escapeHtml(findBusiness.getServiceInfos().getServiceInfo().get(i).getServiceKey()));

+                    } else {

+                        sb.append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(findBusiness.getServiceInfos().getServiceInfo().get(i).getName())));

+                    }

+                    sb.append("</a>");

+                    sb.append("</td></tr>");

+                }

+                sb.append("</table>");

+                return sb.toString();

+            } else {

+                return ResourceLoader.GetResource(session, "errors.norecordsfound");

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    private String FindtModels(CriteriaType criteria, String parameters, String lang, String[] fq) {

+        try {

+            FindTModel fb = new FindTModel();

+            fb.setAuthInfo(GetToken());

+            if (fq != null) {

+                fb.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());

+                if (fq != null) {

+                    for (int i = 0; i < fq.length; i++) {

+                        fb.getFindQualifiers().getFindQualifier().add(fq[i]);

+                    }

+                }

+            }

+            TModelList findBusiness = null;

+            switch (criteria) {

+                case Category:

+                    fb.setCategoryBag(new CategoryBag());

+                    KeyedReference kr = new KeyedReference();

+                    kr.setTModelKey(parameters);

+                    fb.getCategoryBag().getKeyedReference().add(kr);

+                    break;

+                case Name:

+                    Name n = new Name();

+                    n.setLang(lang);

+                    n.setValue(parameters);

+                    fb.setName(n);

+                    break;

+                case tmodel:

+

+                    //TODO

+                    break;

+                case uid:

+                    BusinessEntity t = GetBusinessDetails(parameters);

+                    TModel tmodelDetails = this.getTmodelDetails(parameters);

+                    TModelInfo tmi = new TModelInfo();

+                    tmi.setName(tmodelDetails.getName());

+                    tmi.setTModelKey(tmodelDetails.getTModelKey());

+                    tmi.getDescription().addAll(tmodelDetails.getDescription());

+                    findBusiness.getTModelInfos().getTModelInfo().add(tmi);

+

+                    break;

+

+            }

+            if (findBusiness == null) {

+                try {

+                    findBusiness = inquiry.findTModel(fb);

+                } catch (Exception ex) {

+                    if (ex instanceof DispositionReportFaultMessage) {

+                        DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                        if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                            token = null;

+                            fb.setAuthInfo(GetToken());

+                            findBusiness = inquiry.findTModel(fb);

+                        }

+                    } else {

+                        throw ex;

+                    }

+                }

+

+            }

+            if (findBusiness.getTModelInfos() != null) {

+                StringBuilder sb = new StringBuilder();

+                sb.append("<table class=\"table\">");

+                for (int i = 0; i < findBusiness.getTModelInfos().getTModelInfo().size(); i++) {

+                    sb.append("<tr><td>");

+                    sb.append("<a href=\"tmodelEditor.jsp?id=").

+                            append(StringEscapeUtils.escapeHtml(findBusiness.getTModelInfos().getTModelInfo().get(i).getTModelKey())).

+                            append("\">");

+                    if (findBusiness.getTModelInfos().getTModelInfo().get(i).getName() == null) {

+                        sb.append(StringEscapeUtils.escapeHtml(findBusiness.getTModelInfos().getTModelInfo().get(i).getTModelKey()));

+                    } else {

+                        sb.append(StringEscapeUtils.escapeHtml((findBusiness.getTModelInfos().getTModelInfo().get(i).getName().getValue())));

+                    }

+                    sb.append("</a>");

+                    sb.append("</td></tr>");

+                }

+                sb.append("</table>");

+                return sb.toString();

+            } else {

+                return ResourceLoader.GetResource(session, "errors.norecordsfound");

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    /**

+     * Deletes a business

+     *

+     * @param bizid

+     * @return null if successful, otherwise an error message

+     */

+    public String deleteBusiness(String bizid) {

+        if (bizid == null || bizid.length() == 0) {

+            return ResourceLoader.GetResource(session, "errors.noinput");

+        }

+        List<String> x = new ArrayList<String>();

+        x.add(bizid.trim());

+        return deleteBusiness(x);

+    }

+

+    /**

+     * delete a service

+     *

+     * @param serviceId

+     * @return

+     */

+    public String deleteService(String serviceId) {

+        if (serviceId == null || serviceId.length() == 0) {

+            return ResourceLoader.GetResource(session, "errors.noinput");

+        }

+        List<String> x = new ArrayList<String>();

+        x.add(serviceId.trim());

+        return deleteService(x);

+    }

+

+    /**

+     * deletes a list of services

+     *

+     * @param serviceId

+     * @return

+     */

+    public String deleteService(List<String> serviceId) {

+        if (serviceId == null || serviceId.isEmpty()) {

+            return ResourceLoader.GetResource(session, "errors.noinput");

+        }

+        DeleteService db = new DeleteService();

+        db.setAuthInfo(GetToken());

+        db.getServiceKey().addAll(serviceId);

+        try {

+            try {

+                publish.deleteService(db);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        db.setAuthInfo(GetToken());

+                        publish.deleteService(db);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+        return ResourceLoader.GetResource(session, "actions.delete.service");

+    }

+

+    /**

+     * Deletes a list of UDDI businesses by key

+     *

+     * @param bizid

+     * @return null if successful, otherwise an error message

+     */

+    public String deleteBusiness(List<String> bizid) {

+        if (bizid == null || bizid.isEmpty()) {

+            return ResourceLoader.GetResource(session, "errors.noinput");

+        }

+        DeleteBusiness db = new DeleteBusiness();

+        db.setAuthInfo(GetToken());

+        db.getBusinessKey().addAll(bizid);

+        try {

+            try {

+                publish.deleteBusiness(db);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        db.setAuthInfo(GetToken());

+                        publish.deleteBusiness(db);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+        return ResourceLoader.GetResource(session, "actions.delete.business");

+    }

+

+    /**

+     * delete a tmodel

+     *

+     * @param bizid

+     * @return

+     */

+    public String deleteTmodel(String bizid) {

+        if (bizid == null || bizid.length() == 0) {

+            return ResourceLoader.GetResource(session, "errors.noinput");

+        }

+        List<String> x = new ArrayList<String>();

+        x.add(bizid);

+        return deleteTmodel(x);

+    }

+

+    /**

+     * Deletes a list of UDDI tModels by key

+     *

+     * @param bizid

+     * @return null if successful, otherwise an error message

+     */

+    public String deleteTmodel(List<String> bizid) {

+        if (bizid == null || bizid.isEmpty()) {

+            return ResourceLoader.GetResource(session, "errors.noinput");

+        }

+        DeleteTModel db = new DeleteTModel();

+        db.setAuthInfo(GetToken());

+        db.getTModelKey().addAll(bizid);

+        try {

+            try {

+                publish.deleteTModel(db);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        db.setAuthInfo(GetToken());

+                        publish.deleteTModel(db);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+        return ResourceLoader.GetResource(session, "actions.delete.tmodel");

+    }

+

+    /**

+     * saves a tmodel object

+     *

+     * @param be

+     * @return

+     */

+    public String SaveTModel(TModel be) {

+        try {

+            SaveTModel sb = new SaveTModel();

+            sb.setAuthInfo(GetToken());

+

+            sb.getTModel().add(be);

+            JAXB.marshal(be, System.out);

+            try {

+                publish.saveTModel(sb);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        sb.setAuthInfo(GetToken());

+                        publish.saveTModel(sb);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            return ResourceLoader.GetResource(session, "actions.saved");

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+    }

+

+    /**

+     * This rebuild a tmodel from the http request, such as from the tmodel

+     * editor page

+     *

+     * @param request

+     * @return

+     */

+    public String SaveTModel(HttpServletRequest request) {

+

+        TModel be = new TModel();

+        be.setTModelKey(request.getParameter(PostBackConstants.SERVICEKEY).trim());

+        if (be.getTModelKey() != null && (be.getTModelKey().equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit")))

+                || be.getTModelKey().length() == 0) {

+            be.setTModelKey(null);

+        }

+        be.setName(new Name());

+        String t = request.getParameter(PostBackConstants.NAME + PostBackConstants.VALUE);

+        if (t != null && !t.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit")) && t.length() > 0) {

+            be.getName().setValue(t);

+        }

+        t = request.getParameter(PostBackConstants.NAME + PostBackConstants.LANG);

+        if (t != null && !t.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit")) && t.length() > 0) {

+            be.getName().setLang(t);

+        }

+

+        t = request.getParameter(PostBackConstants.TMODEL_DELETED);

+        if (t != null) {

+            if (t.equalsIgnoreCase("checked")) {

+                be.setDeleted(Boolean.TRUE);

+            }

+        }

+        if (!be.isDeleted()) {

+            be.setDeleted(Boolean.FALSE);

+        }

+

+

+        //TODO signature

+

+        be.getDescription().addAll(Builders.BuildDescription(Builders.MapFilter(request.getParameterMap(), PostBackConstants.DESCRIPTION), PostBackConstants.DESCRIPTION, ResourceLoader.GetResource(session, "items.clicktoedit")));

+        be.getOverviewDoc().addAll(Builders.BuildOverviewDocs(Builders.MapFilter(request.getParameterMap(), PostBackConstants.OVERVIEW), PostBackConstants.OVERVIEW, ResourceLoader.GetResource(session, "items.clicktoedit")));

+

+//            be.setDiscoveryURLs(BuildDisco(MapFilter(request.getParameterMap(), PostBackConstants.DISCOVERYURL), PostBackConstants.DISCOVERYURL));

+        CategoryBag cb = new CategoryBag();

+        cb.getKeyedReference().addAll(Builders.BuildKeyedReference(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF), PostBackConstants.CATBAG_KEY_REF));

+        cb.getKeyedReferenceGroup().addAll(Builders.BuildKeyedReferenceGroup(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF_GRP), PostBackConstants.CATBAG_KEY_REF_GRP));

+

+        if (!cb.getKeyedReference().isEmpty() || !cb.getKeyedReferenceGroup().isEmpty()) {

+            be.setCategoryBag(cb);

+        }

+        be.setIdentifierBag(Builders.BuildIdentBag(Builders.MapFilter(request.getParameterMap(), PostBackConstants.IDENT_KEY_REF), PostBackConstants.IDENT_KEY_REF));

+

+        JAXB.marshal(be, System.out);

+        return SaveTModel(be);

+

+    }

+

+    /**

+     * Converts a UDDI Signature to a readable representation of the signing

+     * certificate subject name

+     *

+     * @param sig

+     * @return

+     */

+    public static String SignatureToReadable(SignatureType sig) {

+        StringBuilder sb = new StringBuilder();

+        // X509Certificate signingcert = null;

+        //sb.append("Signature Id: ").append(sig.getKeyInfo().getId());

+        for (int i = 0; i < sig.getKeyInfo().getContent().size(); i++) {

+            //sb.append("Signature #").append((i + 1)).append(": ");

+            JAXBElement get = (JAXBElement) sig.getKeyInfo().getContent().get(i);

+

+            if (get.getValue() instanceof org.w3._2000._09.xmldsig_.X509DataType) {

+                X509DataType xd = (X509DataType) get.getValue();

+                for (int k = 0; k < xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().size(); k++) {

+                    if (xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().get(k) instanceof JAXBElement) {

+                        JAXBElement element = (JAXBElement) xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().get(k);

+                        if (element.getValue() instanceof byte[]) {

+                            try {

+                                CertificateFactory cf = CertificateFactory.getInstance("X.509");

+                                InputStream is = new ByteArrayInputStream((byte[]) element.getValue());

+                                X509Certificate cert = (X509Certificate) cf.generateCertificate(is);

+                                is.close();

+                                sb.append(cert.getSubjectDN().getName());

+                            } catch (Exception ex) {

+                            }

+                        } else if (element.getValue() instanceof String) {

+                            // sb.append((String) element.getValue());

+                        }

+                    }

+                }

+            }

+        }

+        return sb.toString();

+    }

+

+    /**

+     * converts a UDDI Signature Type element into a base64 string containing

+     * the raw data for the signing certificate, if present

+     *

+     * @param sig

+     * @return

+     */

+    public String SignatureToBase64(SignatureType sig) {

+        if (sig == null) {

+            return "Error, the signature was nullavailable";

+        }

+        for (int i = 0; i < sig.getKeyInfo().getContent().size(); i++) {

+            JAXBElement get = (JAXBElement) sig.getKeyInfo().getContent().get(i);

+

+            if (get.getValue() instanceof org.w3._2000._09.xmldsig_.X509DataType) {

+                X509DataType xd = (X509DataType) get.getValue();

+                for (int k = 0; k < xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().size(); k++) {

+                    if (xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().get(k) instanceof JAXBElement) {

+                        JAXBElement element = (JAXBElement) xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().get(k);

+                        if (element.getValue() instanceof byte[]) {

+                            try {

+                                CertificateFactory cf = CertificateFactory.getInstance("X.509");

+                                InputStream is = new ByteArrayInputStream((byte[]) element.getValue());

+                                X509Certificate cert = (X509Certificate) cf.generateCertificate(is);

+                                is.close();

+                                //this is the most supportable way to do this

+                                BASE64Encoder encoder = new BASE64Encoder();

+                                return encoder.encodeBuffer(cert.getEncoded());

+

+                            } catch (Exception ex) {

+                                return HandleException(ex);

+                            }

+                        } else if (element.getValue() instanceof String) {

+                        }

+                    }

+                }

+            }

+        }

+        return ResourceLoader.GetResource(session, "errors.nocertavaiable");

+    }

+

+    /**

+     * Retrieves the UDDI entity, then attempts to return a base64 encoded

+     * certificate of the N'th indexed signature

+     *

+     * @param ft The type of item requested

+     * @param id the unique identifier of the entity

+     * @param index the offset of the signature, starting at 0

+     * @return the base64 encoded certification, omitting headers and footers OR

+     * "Error" with an error message

+     */

+    public String GetCertificate(FindType ft, String id, int index) {

+        SignatureType st = null;

+        switch (ft) {

+            case BindingTemplate:

+                BindingTemplate GetBindingDetailsAsObject = GetBindingDetailsAsObject(id);

+                if (GetBindingDetailsAsObject != null) {

+                    return SignatureToBase64(GetBindingDetailsAsObject.getSignature().get(index));

+                }

+                break;

+            case Business:

+                BusinessEntity GetBusinessDetailsAsObject = GetBusinessDetailsAsObject(id);

+                if (GetBusinessDetailsAsObject != null) {

+                    return SignatureToBase64(GetBusinessDetailsAsObject.getSignature().get(index));

+                }

+                break;

+            case Service:

+                BusinessService GetServiceDetailsAsObject = GetServiceDetailsAsObject(id);

+                if (GetServiceDetailsAsObject != null) {

+                    return SignatureToBase64(GetServiceDetailsAsObject.getSignature().get(index));

+                }

+                break;

+            case tModel:

+                TModel GettModelDetailsAsObject = GettModelDetailsAsObject(id);

+                if (GettModelDetailsAsObject != null) {

+                    return SignatureToBase64(GettModelDetailsAsObject.getSignature().get(index));

+                }

+                break;

+

+        }

+        return ResourceLoader.GetResource(session, "errors.unknownentity");

+    }

+

+    /**

+     *

+     * @return null if there's an error

+     */

+    public List<Subscription> GetSubscriptions() {

+        try {

+            try {

+                return subscription.getSubscriptions(GetToken());

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        return subscription.getSubscriptions(GetToken());

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            HandleException(ex);

+        }

+        return null;

+    }

+

+    /**

+     * attempts to save subscription

+     *

+     * @param sub

+     * @return a success or fail message

+     */

+    public String AddSubscription(Subscription sub) {

+        Holder<List<Subscription>> data = new Holder<List<Subscription>>();

+        data.value = new ArrayList<Subscription>();

+        data.value.add(sub);

+        try {

+            try {

+                subscription.saveSubscription(GetToken(), data);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        subscription.saveSubscription(GetToken(), data);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+        return ResourceLoader.GetResource(session, "messages.success");

+    }

+

+    /**

+     * Removes/deletes a subscription

+     *

+     * @param key

+     * @return sucess or failure message

+     */

+    public String RemoveSubscription(String key) {

+        DeleteSubscription ds = new DeleteSubscription();

+        ds.setAuthInfo(GetToken());

+        ds.getSubscriptionKey().add(key);

+        try {

+            try {

+                subscription.deleteSubscription(ds);

+                return ResourceLoader.GetResource(session, "actions.deleted");

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        ds.setAuthInfo(GetToken());

+                        subscription.deleteSubscription(ds);

+                        return ResourceLoader.GetResource(session, "actions.deleted");

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+        return ResourceLoader.GetResource(session, "messages.success");

+    }

+

+    /**

+     *

+     * @param ft

+     * @param id

+     * @return null if theres an error

+     */

+    public List<OperationalInfo> GetOperationalInfo(String id) {

+        if (id == null) {

+            return null;

+        }

+        GetOperationalInfo goi = new GetOperationalInfo();

+        goi.setAuthInfo(GetToken());

+        goi.getEntityKey().add(id);

+        OperationalInfos operationalInfo = null;

+        try {

+            try {

+                operationalInfo = inquiry.getOperationalInfo(goi);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        goi.setAuthInfo(GetToken());

+                        operationalInfo = inquiry.getOperationalInfo(goi);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+            return operationalInfo.getOperationalInfo();

+        } catch (Exception ex) {

+            HandleException(ex);

+        }

+        return null;

+    }

+

+    /**

+     * GetOperationalInfo

+     *

+     * @param info

+     * @return

+     */

+    public String GetOperationalInfo(List<OperationalInfo> info) {

+        StringBuilder sb = new StringBuilder();

+

+        if (info != null) {

+            sb.append("<table class=\"table table-hover\">");

+            for (int i = 0; i < info.size(); i++) {

+                sb.append("<tr><th>").

+                        append(ResourceLoader.GetResource(session, "items.nodeid")).

+                        append("</th><th>").

+                        append(ResourceLoader.GetResource(session, "items.authorizedname")).

+                        append("</th><th>").

+                        append(ResourceLoader.GetResource(session, "items.key")).

+                        append("</th><th>").

+                        append(ResourceLoader.GetResource(session, "items.created")).

+                        append("</th><th>").

+                        append(ResourceLoader.GetResource(session, "items.modified")).

+                        append("</th><th>").

+                        append(ResourceLoader.GetResource(session, "items.modifiedwithchildren")).

+                        append("</th></tr>");

+                sb.append("<tr><td>");

+                sb.append(StringEscapeUtils.escapeHtml(info.get(i).getNodeID()))

+                        .append("</td><td>")

+                        .append(StringEscapeUtils.escapeHtml(info.get(i).getAuthorizedName()))

+                        .append("</td><td>")

+                        .append(StringEscapeUtils.escapeHtml(info.get(i).getEntityKey()))

+                        .append("</td><td>")

+                        .append(StringEscapeUtils.escapeHtml(info.get(i).getCreated().toString()))

+                        .append("</td><td>")

+                        .append(StringEscapeUtils.escapeHtml(info.get(i).getModified().toString()))

+                        .append("</td><td>")

+                        .append(StringEscapeUtils.escapeHtml(info.get(i).getModifiedIncludingChildren().toString()))

+                        .append("</td></tr>");

+            }

+            sb.append("</table>");

+        }

+        return sb.toString();

+    }

+

+    /**

+     * This function returns all businesses that the current user owns<br><br>

+     * The get_registeredInfo API call is used to get an abbreviated list of all

+     * businessEntity and tModel data that are controlled by a publisher. When

+     * the registry distinguishes between publishers, this is the individual

+     * associated with the credentials passed in the authInfo element. This

+     * returned information is intended, for example, for driving tools that

+     * display lists of registered information and then provide drill-down

+     * features. This is the recommended API to use after a network problem

+     * results in an unknown status of saved information.

+     *

+     * @return

+     */

+    public RegisteredInfo GetNodeInformation(AtomicReference<String> outmsg) {

+        if (outmsg == null) {

+            outmsg = new AtomicReference<String>();

+        }

+        try {

+            GetRegisteredInfo r = new GetRegisteredInfo();

+            r.setAuthInfo(GetToken());

+            if (r.getAuthInfo() == null) {

+                outmsg.set(ResourceLoader.GetResource(session, "errors.notsignedin"));

+                return null;

+            }

+            r.setInfoSelection(InfoSelection.ALL);

+            RegisteredInfo registeredInfo = null;

+            try {

+                registeredInfo = publish.getRegisteredInfo(r);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        r.setAuthInfo(GetToken());

+                        registeredInfo = publish.getRegisteredInfo(r);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            return registeredInfo;

+        } catch (Exception ex) {

+            outmsg.set(HandleException(ex));

+        }

+        return null;

+    }

+

+    /**

+     * Gets a list of all assertions for all businesses owned by the current

+     * user

+     *

+     * The get_assertionStatusReport API call provides administrative support

+     * for determining the status of current and outstanding publisher

+     * assertions that involve any of the business registrations managed by the

+     * individual publisher. Using this API, a publisher can see the status of

+     * assertions that they have made, as well as see assertions that others

+     * have made that involve businessEntity structures controlled by the

+     * requesting publisher. See Appendix A Relationships and Publisher

+     * Assertions for more information.

+     *

+     * @param msg

+     * @return

+     */

+    public List<AssertionStatusItem> GetPublisherAssertions(AtomicReference<String> msg) {

+        List<AssertionStatusItem> out = new ArrayList<AssertionStatusItem>();

+

+        if (GetToken() == null) {

+            msg.set(ResourceLoader.GetResource(session, "errors.notsignedin"));

+            return null;

+        }

+        List<AssertionStatusItem> STATUS_COMPLETE = null;

+

+        try {

+            try {

+                STATUS_COMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_COMPLETE);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        STATUS_COMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_COMPLETE);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            msg.set(HandleException(ex));

+        }

+        if (STATUS_COMPLETE != null) {

+            out.addAll(STATUS_COMPLETE);

+        }

+        List<AssertionStatusItem> STATUS_FROM_KEY_INCOMPLETE = null;

+        try {

+            try {

+                STATUS_FROM_KEY_INCOMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_FROM_KEY_INCOMPLETE);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        STATUS_FROM_KEY_INCOMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_FROM_KEY_INCOMPLETE);

+

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            msg.set(HandleException(ex));

+        }

+        if (STATUS_FROM_KEY_INCOMPLETE != null) {

+            out.addAll(STATUS_FROM_KEY_INCOMPLETE);

+        }

+        List<AssertionStatusItem> STATUS_TO_KEY_INCOMPLETE = null;

+        try {

+            try {

+                STATUS_TO_KEY_INCOMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_TO_KEY_INCOMPLETE);

+

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        STATUS_TO_KEY_INCOMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_TO_KEY_INCOMPLETE);

+

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            msg.set(HandleException(ex));

+        }

+        if (STATUS_TO_KEY_INCOMPLETE != null) {

+            out.addAll(STATUS_TO_KEY_INCOMPLETE);

+        }

+

+

+        return out;

+        //return publisherAssertions;

+    }

+

+    /**

+     * deletes a publisher assertion, all fields must match exactly

+     *

+     * @param tokey

+     * @param fromkey

+     * @param tmodelkey

+     * @param keyname

+     * @param keyvalue

+     * @return

+     */

+    public String DeletePublisherAssertion(String tokey, String fromkey, String tmodelkey, String keyname, String keyvalue) {

+        DeletePublisherAssertions dp = new DeletePublisherAssertions();

+        dp.setAuthInfo(GetToken());

+        PublisherAssertion add = new PublisherAssertion();

+        add.setToKey(tokey);

+        add.setFromKey(fromkey);

+        add.setKeyedReference(new KeyedReference());

+        add.getKeyedReference().setTModelKey(tmodelkey);

+        add.getKeyedReference().setKeyName(keyname);

+        add.getKeyedReference().setKeyValue(keyvalue);

+        dp.getPublisherAssertion().add(add);

+        try {

+            try {

+                publish.deletePublisherAssertions(dp);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        dp.setAuthInfo(GetToken());

+                        publish.deletePublisherAssertions(dp);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+        return ResourceLoader.GetResource(session, "actions.saved");

+    }

+

+    /**

+     * Adds a new publisher assertion

+     *

+     * @param tokey

+     * @param fromkey

+     * @param keyname

+     * @param keyvalue

+     * @return

+     */

+    public String AddPublisherAssertion(String tokey, String fromkey, String tmodelkey, String keyname, String keyvalue) {

+        // List<PublisherAssertion> x = GetPublisherAssertions();

+        AddPublisherAssertions r = new AddPublisherAssertions();

+        r.setAuthInfo(GetToken());

+        PublisherAssertion add = new PublisherAssertion();

+        add.setToKey(tokey);

+        add.setFromKey(fromkey);

+        add.setKeyedReference(new KeyedReference());

+        add.getKeyedReference().setTModelKey(tmodelkey);

+        add.getKeyedReference().setKeyName(keyname);

+        add.getKeyedReference().setKeyValue(keyvalue);

+        //TODO signatures? :(

+        r.getPublisherAssertion().add(add);

+        try {

+            try {

+                publish.addPublisherAssertions(r);

+

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        r.setAuthInfo(GetToken());

+                        publish.addPublisherAssertions(r);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+        return ResourceLoader.GetResource(session, "actions.saved");

+    }

+

+    /**

+     * Returns bootstrap stylized html representing all changes in the last

+     * refresh

+     *

+     * @param lastRefresh

+     * @return

+     * @throws DatatypeConfigurationException

+     */

+    public String GetNewsFeed(XMLGregorianCalendar lastRefresh) throws DatatypeConfigurationException {

+        if (GetToken() == null) {

+            return ToErrorAlert(ResourceLoader.GetResource(session, "errors.notsignedin"));

+        }

+        if (df == null) {

+            df = DatatypeFactory.newInstance();

+        }

+        List<Subscription> subscriptions = new ArrayList<Subscription>();

+        try {

+            try {

+                subscriptions = subscription.getSubscriptions(GetToken());

+

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+

+                        subscriptions = subscription.getSubscriptions(GetToken());

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+

+

+

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.setTimeInMillis(System.currentTimeMillis());

+

+        GetSubscriptionResults r = new GetSubscriptionResults();

+        r.setAuthInfo(GetToken());

+        r.setCoveragePeriod(new CoveragePeriod());

+        r.getCoveragePeriod().setEndPoint(df.newXMLGregorianCalendar(gcal));

+

+        r.getCoveragePeriod().setStartPoint(lastRefresh);

+        StringBuilder sb = new StringBuilder();

+        for (int k = 0; k < subscriptions.size(); k++) {

+

+            r.setSubscriptionKey(subscriptions.get(k).getSubscriptionKey());

+            SubscriptionResultsList subscriptionResults = null;

+            try {

+                try {

+                    subscriptionResults = subscription.getSubscriptionResults(r);

+

+                } catch (Exception ex) {

+                    if (ex instanceof DispositionReportFaultMessage) {

+                        DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                        if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                            token = null;

+                            r.setAuthInfo(GetToken());

+                            subscriptionResults = subscription.getSubscriptionResults(r);

+                        }

+                    } else {

+                        throw ex;

+                    }

+                }

+            } catch (Exception ex) {

+                return HandleException(ex);

+            }

+

+            if (subscriptionResults != null) {

+                //    subscriptionResults.getAssertionStatusReport().

+                if (subscriptionResults.getAssertionStatusReport() != null) {

+                    sb.append(ResourceLoader.GetResource(session, "items.subscriptions.assertion")).

+                            append("<table class=\"table table-hover\">");

+                    for (int i = 0; i < subscriptionResults.getAssertionStatusReport().getAssertionStatusItem().size(); i++) {

+                        sb.append("<tr><td>");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getAssertionStatusReport().getAssertionStatusItem().get(i).getFromKey()));

+                        sb.append("</td><td>");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getAssertionStatusReport().getAssertionStatusItem().get(i).getToKey()));

+                        sb.append("</td><td>");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getAssertionStatusReport().getAssertionStatusItem().get(i).getCompletionStatus().toString()));

+                        sb.append("</td></tr>");

+                    }

+                    sb.append("</table><br>");

+                }

+                if (subscriptionResults.getBindingDetail() != null) {

+                    sb.append(ResourceLoader.GetResource(session, "items.subscriptions.bindings")).

+                            append("<table class=\"table table-hover\">");

+                    for (int i = 0; i < subscriptionResults.getBindingDetail().getBindingTemplate().size(); i++) {

+                        sb.append("<tr><td>");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getBindingDetail().getBindingTemplate().get(i).getServiceKey()));

+                        sb.append("</td><td>");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getBindingDetail().getBindingTemplate().get(i).getBindingKey()));

+                        sb.append("</td></tr>");

+                    }

+                    sb.append("</table><br>");

+                }

+                if (subscriptionResults.getBusinessDetail() != null) {

+                    sb.append(ResourceLoader.GetResource(session, "items.subscriptions.business")).

+                            append("<table class=\"table table-hover\">");

+                    for (int i = 0; i < subscriptionResults.getBusinessDetail().getBusinessEntity().size(); i++) {

+                        sb.append("<tr><td><a href=\"businessEditor2.jsp?id=");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getBusinessDetail().getBusinessEntity().get(i).getBusinessKey()));

+                        sb.append("\">");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getBusinessDetail().getBusinessEntity().get(i).getBusinessKey()));

+                        sb.append("<i class=\"icon-large icon-edit\"></i></a></td></tr>");

+                    }

+                    sb.append("</table><br>");

+                }

+                if (subscriptionResults.getRelatedBusinessesList() != null) {

+                    sb.append(ResourceLoader.GetResource(session, "items.subscriptions.assertion2")).

+                            append("<table class=\"table table-hover\">");

+                    // for (int i = 0; i < subscriptionResults.getRelatedBusinessesList().getBusinessKey().size(); i++) {

+                    sb.append("<tr><td>");

+                    sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getRelatedBusinessesList().getBusinessKey()));

+                    sb.append("</td></tr>");

+                    //}

+                    sb.append("</table><br>");

+                }

+                if (subscriptionResults.getServiceDetail() != null) {

+                    sb.append(ResourceLoader.GetResource(session, "items.subscriptions.services")).

+                            append("<table class=\"table table-hover\">");

+                    for (int i = 0; i < subscriptionResults.getServiceDetail().getBusinessService().size(); i++) {

+                        sb.append("<tr><td><a href=\"serviceEditor.jsp?id=");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getServiceDetail().getBusinessService().get(i).getServiceKey()));

+                        sb.append("\">");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getServiceDetail().getBusinessService().get(i).getServiceKey()));

+                        sb.append("<i class=\"icon-large icon-edit\"></i></a></td></tr>");

+                    }

+                    sb.append("</table><br>");

+                }

+                if (subscriptionResults.getServiceList() != null) {

+                    sb.append(ResourceLoader.GetResource(session, "items.subscriptions.servicelist")).

+                            append("<table class=\"table table-hover\">");

+                    for (int i = 0; i < subscriptionResults.getServiceList().getServiceInfos().getServiceInfo().size(); i++) {

+                        sb.append("<tr><td>");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getServiceList().getServiceInfos().getServiceInfo().get(i).getServiceKey()));

+

+                        sb.append("</td><td>");

+                        sb.append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(subscriptionResults.getServiceList().getServiceInfos().getServiceInfo().get(i).getName())));

+                        sb.append("</td></tr>");

+                    }

+                    sb.append("</table><br>");

+                }

+                if (subscriptionResults.getTModelDetail() != null) {

+                    sb.append(ResourceLoader.GetResource(session, "items.subscriptions.tmodels")).append("<br><table class=\"table table-hover\">");

+                    for (int i = 0; i < subscriptionResults.getTModelDetail().getTModel().size(); i++) {

+                        sb.append("<tr><td>");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getTModelDetail().getTModel().get(i).getTModelKey()));

+                        sb.append("</td><td>");

+                        sb.append(StringEscapeUtils.escapeHtml((subscriptionResults.getTModelDetail().getTModel().get(i).getName().getValue())));

+                        sb.append("</td></tr>");

+                    }

+                    sb.append("</table><br>");

+                }

+                if (subscriptionResults.getTModelList() != null) {

+                    sb.append(ResourceLoader.GetResource(session, "items.subscriptions.tmodels2"))

+                            .append("<table class=\"table table-hover\">");

+                    for (int i = 0; i < subscriptionResults.getTModelList().getTModelInfos().getTModelInfo().size(); i++) {

+                        sb.append("<tr><td><a href=\"serviceEditor.jsp?id=");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getTModelList().getTModelInfos().getTModelInfo().get(i).getTModelKey()));

+                        sb.append("\">");

+                        sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getTModelList().getTModelInfos().getTModelInfo().get(i).getTModelKey()));

+                        sb.append("<i class=\"icon-large icon-edit\"></i></a></td><td>");

+                        sb.append(StringEscapeUtils.escapeHtml((subscriptionResults.getTModelList().getTModelInfos().getTModelInfo().get(i).getName().getValue())));

+                        sb.append("</td></tr>");

+                    }

+                    sb.append("</table>");

+                }

+

+            }

+        }

+        return sb.toString();

+    }

+

+    /**

+     * Searches first for a service, then iterates through to identify bindings

+     * matching the specified criteria. Since UDDI does not have a find_binding

+     * API, this is as good as it gets.

+     *

+     * @param keyword

+     * @param lang

+     * @param offset

+     * @param maxrecords

+     * @param isChooser

+     * @return

+     */

+    public PagableContainer SearchForBinding(String keyword, String lang, int offset, int maxrecords, boolean isChooser) {

+        PagableContainer ret = new PagableContainer();

+        ret.displaycount = 0;

+        ret.offset = offset;

+        ret.totalrecords = 0;

+        try {

+

+            FindService fs = new FindService();

+            fs.setAuthInfo(GetToken());

+            fs.setMaxRows(maxrecords);

+            fs.setListHead(offset);

+            Name n = new Name();

+            if (lang == null || lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {

+                n.setLang(null);

+            } else {

+                n.setLang(lang);

+            }

+            n.setValue(keyword);

+            fs.getName().add(n);

+            fs.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());

+            fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);

+            ServiceList findService = null;//inquiry.findService(fs);

+            try {

+                findService = inquiry.findService(fs);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        fs.setAuthInfo(GetToken());

+                        findService = inquiry.findService(fs);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+

+            if (findService == null || findService.getServiceInfos() == null) {

+                ret.renderedHtml = ResourceLoader.GetResource(session, "errors.norecordsfound");

+                return ret;

+            }

+            ret.displaycount = findService.getListDescription().getIncludeCount();

+            ret.totalrecords = findService.getListDescription().getActualCount();

+

+            GetServiceDetail gs = new GetServiceDetail();

+            gs.setAuthInfo(GetToken());

+            for (int i = 0; i < findService.getServiceInfos().getServiceInfo().size(); i++) {

+                gs.getServiceKey().add(findService.getServiceInfos().getServiceInfo().get(i).getServiceKey());

+            }

+            ServiceDetail serviceDetail = null;

+            try {

+                serviceDetail = inquiry.getServiceDetail(gs);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        fs.setAuthInfo(GetToken());

+                        serviceDetail = inquiry.getServiceDetail(gs);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+            if (serviceDetail == null || serviceDetail.getBusinessService().isEmpty()) {

+                ret.renderedHtml = ResourceLoader.GetResource(session, "errors.norecordsfound");

+                return ret;

+            }

+

+

+

+            StringBuilder sb = new StringBuilder();

+            sb.append("<table class=\"table\"><tr><th>").

+                    append("</th><th>").

+                    append(ResourceLoader.GetResource(session, "items.business")).

+                    append("</th><th>").

+                    append(ResourceLoader.GetResource(session, "items.service")).

+                    append("</th><th>").

+                    append(ResourceLoader.GetResource(session, "items.bindingtemplate.key")).

+                    append("</th><th>").

+                    append(ResourceLoader.GetResource(session, "items.accesspoint.value")).

+                    append("</th></tr>");

+

+            for (int i = 0; i < serviceDetail.getBusinessService().size(); i++) {

+                //   System.out.println(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size());

+                if (serviceDetail.getBusinessService().get(i).getBindingTemplates() != null) {

+                    for (int k = 0; k < serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size(); k++) {

+                        //System.out.println(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getAccessPoint().getValue());

+                        sb.append("<tr><td><input type=\"checkbox\" class=\"modalableBinding\" id=\"").

+                                append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getBindingKey())).

+                                append("\">").

+                                append("</td><td>").

+                                append("<a href=\"businessEditor2.jsp?id=").

+                                append(StringEscapeUtils.escapeHtml(findService.getServiceInfos().getServiceInfo().get(i).getBusinessKey())).

+                                append("\">").

+                                append(StringEscapeUtils.escapeHtml((findService.getServiceInfos().getServiceInfo().get(i).getBusinessKey()))).

+                                append("</a>").

+                                append("</td><td>").append("<a href=\"serviceEditor.jsp?id=").

+                                append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getServiceKey())).

+                                append("\" title=\"").

+                                append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getServiceKey())).

+                                append("\">").

+                                append(Printers.ListNamesToString(serviceDetail.getBusinessService().get(i).getName())).

+                                append("</a>").

+                                append("</td><td>").

+                                append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getBindingKey())).

+                                append("</td><td>");

+                        if (serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getAccessPoint() != null) {

+                            sb.append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getAccessPoint().getValue()));

+                        }

+                        sb.append("</td></tr>");

+                    }

+                }

+            }

+

+            sb.append("</table>");

+            ret.renderedHtml = sb.toString();

+            return ret;

+        } catch (Exception ex) {

+            ret.renderedHtml = HandleException(ex);

+        }

+        return ret;

+

+    }

+

+    /**

+     * Get a custody transfer token for giving away control of the specified

+     * business or tmodel keys

+     *

+     * authInfo: This OPTIONAL argument is an element that contains an

+     * authentication token. Authentication tokens are obtained using the

+     * get_authToken API call or through some other means external to this

+     * specification, and represent the identity of the publisher at a UDDI

+     * node.

+     *

+     * · transferToken: This is a known transferToken obtained by a publisher at

+     * the node where the get_transferToken API was invoked.

+     *

+     * · keyBag: One or more uddiKeys associated either with businessEntity or

+     * tModel entities owned by the publisher that were to be transferred to

+     * some other publisher and/or node in the registry as the result of

+     * invocation of get_transferToken. At least one businessKey or tModelKey

+     * must be provided in a keyBag.

+     *

+     * @param keys

+     * @param nodeid

+     * @param outExpires

+     * @param outToken

+     * @return

+     */

+    public String GetCustodyTransferToken(org.uddi.custody_v3.KeyBag keys, Holder<String> nodeid, Holder<XMLGregorianCalendar> outExpires, Holder<byte[]> outToken) {

+

+        // org.uddi.custody_v3.KeyBag kb = new org.uddi.custody_v3.KeyBag();

+        // kb.getKey().addAll(keys);

+        try {

+            try {

+                custody.getTransferToken(GetToken(), keys, nodeid, outExpires, outToken);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        custody.getTransferToken(GetToken(), keys, nodeid, outExpires, outToken);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+

+        }

+        return null;//"Success";

+    }

+

+    /**

+     *

+     * @param tokenxml

+     * @return The discard_transferToken API is a client API used to discard a

+     * transferToken obtained through the get_transferToken API at the same

+     * node. This API accepts either a transferToken or a keyBag as parameters

+     * to remove the permission to transfer data associated with a particular

+     * transferToken. If a keyBag is provided, all tokens corresponding to the

+     * keys in the keyBag will be discarded and will no longer be valid for

+     * custody or ownership transfer after the discard_transferToken is

+     * processed, irrespective of whether the keys match any known business or

+     * tmodelKey values. In the event that the keyBag represents a subset of the

+     * keyBag for one or more transferToken elements, the transferToken is

+     * discarded and will no longer be valid for transferring any entity. If the

+     * token passed in the transferToken argument does not match an existing

+     * token known to the system, no action is taken and success is reported.

+     * Keys in the keyBag argument that do not have a corresponding token are

+     * ignored.

+     */

+    public String DiscardToken(String tokenxml) {

+        DiscardTransferToken r = new DiscardTransferToken();

+        r.setAuthInfo(GetToken());

+        r.setTransferToken(JAXB.unmarshal(new StringReader(tokenxml), TransferToken.class));

+

+        try {

+            try {

+                custody.discardTransferToken(r);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        custody.discardTransferToken(r);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+        return null;//"Success";

+

+    }

+

+    /**

+     * Accepts a transfer token and transfers the entities.

+     *

+     * @param tokenXML

+     * @param keyBagXML

+     * @return

+     */

+    public String AcceptCustodyTranferToken(String tokenXML, String keyBagXML) {

+        try {

+            TransferEntities te = new TransferEntities();

+            te.setAuthInfo(GetToken());

+            StringReader sr = new StringReader(tokenXML.trim());

+            te.setTransferToken(JAXB.unmarshal(sr, TransferToken.class));

+            sr = new StringReader(keyBagXML.trim());

+            te.setKeyBag(JAXB.unmarshal(sr, org.uddi.custody_v3.KeyBag.class));

+

+            try {

+                custody.transferEntities(te);

+            } catch (Exception ex) {

+                if (ex instanceof DispositionReportFaultMessage) {

+                    DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;

+                    if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)) {

+                        token = null;

+                        custody.transferEntities(te);

+                    }

+                } else {

+                    throw ex;

+                }

+            }

+        } catch (Exception ex) {

+            return HandleException(ex);

+        }

+        return null;//"Success";

+

+    }

+

+    /**

+     * returns a subscription by id, since UDDI does not provide this function,

+     * it simply gets all of them for the current user then filters out the

+     * requested item

+     *

+     * @param id

+     * @return null if not found

+     */

+    public Subscription GetSubscriptionDetails(String id) {

+        if (id == null) {

+            return null;

+        }

+        List<Subscription> GetSubscriptions = this.GetSubscriptions();

+        if (GetSubscriptions == null) {

+            return null;

+        }

+        for (int i = 0; i < GetSubscriptions.size(); i++) {

+            if (GetSubscriptions.get(i).getSubscriptionKey() != null && GetSubscriptions.get(i).getSubscriptionKey().equalsIgnoreCase(id)) {

+                return GetSubscriptions.get(i);

+            }

+        }

+        return null;

+    }

+}

diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/hub/builders/Builders.java b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/builders/Builders.java
new file mode 100644
index 0000000..c860e5c
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/builders/Builders.java
@@ -0,0 +1,940 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.webconsole.hub.builders;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.servlet.http.HttpSession;
+import javax.xml.datatype.DatatypeFactory;
+import org.apache.juddi.webconsole.PostBackConstants;
+import org.apache.juddi.webconsole.hub.UddiHub;
+import org.apache.juddi.webconsole.resources.ResourceLoader;
+import org.uddi.api_v3.*;
+import org.uddi.sub_v3.Subscription;
+import org.uddi.sub_v3.SubscriptionFilter;
+
+/**
+ * This class provides functions for building UDDI entities from Http request parameters
+ * @author Alex O'Ree
+ */
+public class Builders {
+
+    /**
+     * important - regex to separate postback names from indexes, do not remove
+     * or alter
+     */
+    static final Pattern p = Pattern.compile("[a-zA-Z]");
+
+    /**
+     * Returns a new map, filtering the original map by key string starts with
+     *
+     * @param map
+     * @param pattern
+     * @return
+     */
+    public static Map MapFilter(Map map, String pattern) {
+        Map ret = new HashMap();
+        Iterator it = map.keySet().iterator();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            if (key.startsWith(pattern)) {
+                ret.put(key, map.get(key));
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * Prefix should be contactXName
+     *
+     * @param map
+     * @param prefix
+     * @return
+     */
+    public static List<PersonName> BuildContactPersonNames(Map map, String prefix, String cte) {
+        List<PersonName> ret = new ArrayList();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    PersonName pn = new PersonName();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.LANG);
+                    if (t[0] == null || t[0].equalsIgnoreCase(cte)) {
+                        pn.setLang(null);
+                    } else {
+                        pn.setLang(t[0]);
+                    }
+                    t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    pn.setValue(t[0]);
+                    ret.add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * overview docs
+     * @param map
+     * @param prefix
+     * @param cte
+     * @return 
+     */
+    public static List<OverviewDoc> BuildOverviewDocs(Map map, String prefix, String cte) {
+        List<OverviewDoc> ret = new ArrayList<OverviewDoc>();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    OverviewDoc pn = new OverviewDoc();
+                    pn.setOverviewURL(new OverviewURL());
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    pn.getOverviewURL().setValue(t[0]);
+                    t = (String[]) map.get(prefix + index + PostBackConstants.TYPE);
+                    pn.getOverviewURL().setUseType(t[0]);
+                    pn.getDescription().addAll(BuildDescription(MapFilter(map, prefix + index + PostBackConstants.DESCRIPTION), prefix + index + PostBackConstants.DESCRIPTION, cte));
+                    ret.add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * phone numbers
+     * @param map
+     * @param prefix
+     * @return 
+     */
+    public static List<Phone> BuildPhone(Map map, String prefix) {
+        List<Phone> ret = new ArrayList();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    Phone pn = new Phone();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.TYPE);
+                    pn.setUseType(t[0]);
+                    t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    pn.setValue(t[0]);
+                    ret.add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * builds a contact
+     * @param m
+     * @param prefix
+     * @param cte
+     * @return 
+     */
+    public static Contact BuildSingleContact(Map m, String prefix, String cte) {
+        Contact c = new Contact();
+        String[] t = (String[]) m.get(prefix + PostBackConstants.TYPE);
+        c.setUseType(t[0]);
+        c.getPersonName().addAll(BuildContactPersonNames(MapFilter(m, prefix + PostBackConstants.NAME), prefix + PostBackConstants.NAME, cte));
+        c.getDescription().addAll(BuildDescription(MapFilter(m, prefix + PostBackConstants.DESCRIPTION), prefix + PostBackConstants.DESCRIPTION, cte));
+        c.getEmail().addAll(BuildEmail(MapFilter(m, prefix + PostBackConstants.EMAIL), prefix + PostBackConstants.EMAIL));
+        c.getPhone().addAll(BuildPhone(MapFilter(m, prefix + PostBackConstants.PHONE), prefix + PostBackConstants.PHONE));
+        c.getAddress().addAll(BuildAddress(MapFilter(m, prefix + PostBackConstants.ADDRESS), prefix + PostBackConstants.ADDRESS, cte));
+        return c;
+    }
+
+    /**
+     * name elements
+     * @param map
+     * @param prefix
+     * @param cte
+     * @return 
+     */
+    public static List<Name> BuildNames(Map map, String prefix, String cte) {
+        List<Name> ret = new ArrayList();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    Name pn = new Name();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.LANG);
+                    if (t[0].equalsIgnoreCase(cte)) {
+                        pn.setLang(null);
+                    } else {
+                        pn.setLang(t[0]);
+                    }
+                    t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    pn.setValue(t[0]);
+                    ret.add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * builds a compelte category bag
+     * @param map
+     * @param prefix
+     * @return 
+     */
+    public static CategoryBag BuildCatBag(Map map, String prefix) {
+        CategoryBag ret = new CategoryBag();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    KeyedReference pn = new KeyedReference();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    pn.setTModelKey(t[0]);
+                    t = (String[]) map.get(prefix + index + PostBackConstants.KEYNAME);
+                    pn.setKeyName(t[0]);
+                    t = (String[]) map.get(prefix + index + PostBackConstants.KEYVALUE);
+                    pn.setKeyValue(t[0]);
+                    ret.getKeyedReference().add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+    
+/**
+ * identifier bag
+ * @param map
+ * @param prefix
+ * @return 
+ */
+    public static IdentifierBag BuildIdentBag(Map map, String prefix) {
+        IdentifierBag ret = new IdentifierBag();
+        ret.getKeyedReference().addAll(BuildKeyedReference(map, prefix));
+        if (ret.getKeyedReference().isEmpty()) {
+            return null;
+        }
+        return ret;
+    }
+/**
+ * discovery urls
+ * @param map
+ * @param prefix
+ * @return 
+ */
+    public static DiscoveryURLs BuildDisco(Map map, String prefix) {
+        DiscoveryURLs list = new DiscoveryURLs();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    DiscoveryURL pn = new DiscoveryURL();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.TYPE);
+                    pn.setUseType(t[0]);
+                    t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    pn.setValue(t[0]);
+                    list.getDiscoveryURL().add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        if (list.getDiscoveryURL().isEmpty()) {
+            return null;
+        }
+        return list;
+    }
+
+    /**
+     * addresses
+     * @param map
+     * @param prefix
+     * @param cte
+     * @return 
+     */
+    public static List<Address> BuildAddress(Map map, String prefix, String cte) {
+        List<Address> ret = new ArrayList();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    Address pn = new Address();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.LANG);
+                    if (t[0] == null || t[0].equalsIgnoreCase(cte)) {
+                        pn.setLang(null);
+                    } else {
+                        pn.setLang(t[0]);
+                    }
+                    t = (String[]) map.get(prefix + index + PostBackConstants.TYPE);
+                    if (t[0] == null || t[0].equalsIgnoreCase(cte)) {
+                        pn.setUseType(null);
+                    } else {
+                        pn.setUseType(t[0]);
+                    }
+                    t = (String[]) map.get(prefix + index + PostBackConstants.SORTCODE);
+                    if (t[0] == null || t[0].equalsIgnoreCase(cte)) {
+                        pn.setSortCode(null);
+                    } else {
+                        pn.setSortCode(t[0]);
+                    }
+                    t = (String[]) map.get(prefix + index + PostBackConstants.KEYNAME);
+                    if (t[0] == null || t[0].equalsIgnoreCase(cte)) {
+                        pn.setTModelKey(null);
+                    } else {
+                        pn.setTModelKey(t[0]);
+                    }
+                    pn.getAddressLine().addAll(BuildAddressLine(MapFilter(map, prefix + index + PostBackConstants.ADDRESSLINE), prefix + index + PostBackConstants.ADDRESSLINE));
+                    ret.add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * keyed reference group
+     * @param map
+     * @param prefix
+     * @return 
+     */
+    public static List<KeyedReferenceGroup> BuildKeyedReferenceGroup(Map map, String prefix) {
+        List<KeyedReferenceGroup> ret = new ArrayList<KeyedReferenceGroup>();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    KeyedReferenceGroup pn = new KeyedReferenceGroup();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    if (t != null) {
+                        pn.setTModelKey(t[0]);
+                        pn.getKeyedReference().addAll(BuildKeyedReference(MapFilter(map, prefix + index + PostBackConstants.KEY_REF), prefix + index + PostBackConstants.KEY_REF));
+                        ret.add(pn);
+                    } else {
+                        UddiHub.log.warn("Unexpected null from BuildKeyedReferenceGroup " + filteredkey + " " + prefix + " " + key);
+                    }
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * contactX
+     *
+     * @param map
+     * @return
+     */
+    public static Contacts BuildContacts(Map map, String cte) {
+        Contacts cb = new Contacts();
+        Map contactdata = MapFilter(map, PostBackConstants.CONTACT_PREFIX);
+        Iterator it = contactdata.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            key = key.replace(PostBackConstants.CONTACT_PREFIX, "");
+            Matcher match = p.matcher(key);
+            if (match.find()) {
+                String index = key.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    cb.getContact().add(BuildSingleContact(MapFilter(contactdata, PostBackConstants.CONTACT_PREFIX + index), PostBackConstants.CONTACT_PREFIX + index, cte));
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        if (cb.getContact().isEmpty()) {
+            return null;
+        }
+        return cb;
+    }
+
+    /**
+     * email
+     * @param map
+     * @param prefix
+     * @return 
+     */
+    public static List<Email> BuildEmail(Map map, String prefix) {
+        List<Email> list = new ArrayList<Email>();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    Email pn = new Email();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.TYPE);
+                    pn.setUseType(t[0]);
+                    t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    pn.setValue(t[0]);
+                    list.add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return list;
+    }
+
+    /**
+     * description
+     * @param map
+     * @param prefix
+     * @param cte
+     * @return 
+     */
+    public static List<Description> BuildDescription(Map map, String prefix, String cte) {
+        List<Description> ret = new ArrayList();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    Description pn = new Description();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.LANG);
+                    if (t[0] == null || t[0].equalsIgnoreCase(cte)) {
+                        pn.setLang(null);
+                    } else {
+                        pn.setLang(t[0]);
+                    }
+                    t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    pn.setValue(t[0]);
+                    ret.add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * keyed references
+     * @param map
+     * @param prefix
+     * @return 
+     */
+    public static List<KeyedReference> BuildKeyedReference(Map map, String prefix) {
+        List<KeyedReference> ret = new ArrayList<KeyedReference>();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    KeyedReference pn = new KeyedReference();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    if (t != null) {
+                        pn.setTModelKey(t[0]);
+                        t = (String[]) map.get(prefix + index + PostBackConstants.KEYNAME);
+                        pn.setKeyName(t[0]);
+                        t = (String[]) map.get(prefix + index + PostBackConstants.KEYVALUE);
+                        pn.setKeyValue(t[0]);
+                        ret.add(pn);
+                    }
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * address lines
+     * @param map
+     * @param prefix
+     * @return 
+     */
+    public static List<AddressLine> BuildAddressLine(Map map, String prefix) {
+        List<AddressLine> ret = new ArrayList();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    AddressLine pn = new AddressLine();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    pn.setValue(t[0]);
+                    t = (String[]) map.get(prefix + index + PostBackConstants.KEYNAME);
+                    pn.setKeyName(t[0]);
+                    t = (String[]) map.get(prefix + index + PostBackConstants.KEYVALUE);
+                    pn.setKeyValue(t[0]);
+                    ret.add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * binding templates
+     * @param map
+     * @param prefix
+     * @param cte
+     * @return 
+     */
+    public static List<BindingTemplate> BuildBindingTemplates(Map map, String prefix, String cte) {
+        List<BindingTemplate> ret = new ArrayList();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    BindingTemplate pn = new BindingTemplate();
+//bindingTemplate0Value
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    if (t != null && t.length > 0) {
+                        pn.setBindingKey(t[0]);
+                    }
+
+                    t = (String[]) map.get(prefix + index + PostBackConstants.HOSTINGREDIRECTOR);
+                    if (t != null && t.length > 0) {
+                        pn.setHostingRedirector(new HostingRedirector());
+                        pn.getHostingRedirector().setBindingKey(t[0]);
+                    }
+                    AccessPoint ap = new AccessPoint();
+                    t = (String[]) map.get(prefix + index + PostBackConstants.ACCESSPOINT_TYPE);
+                    if (t != null && t.length > 0) {
+                        ap.setUseType(t[0]);
+                    }
+                    t = (String[]) map.get(prefix + index + PostBackConstants.ACCESSPOINT_VALUE);
+                    if (t != null && t.length > 0) {
+                        ap.setValue(t[0]);
+                    }
+                    if (ap.getValue() != null) {
+                        pn.setAccessPoint(ap);
+                    }
+                    pn.getDescription().addAll(BuildDescription(MapFilter(map, prefix + index + PostBackConstants.DESCRIPTION), prefix + index + PostBackConstants.DESCRIPTION, cte));
+                    CategoryBag cb = new CategoryBag();
+                    cb.getKeyedReference().addAll(BuildKeyedReference(MapFilter(map, prefix + index + PostBackConstants.CATBAG_KEY_REF), prefix + index + PostBackConstants.CATBAG_KEY_REF));
+                    cb.getKeyedReferenceGroup().addAll(BuildKeyedReferenceGroup(MapFilter(map, prefix + index + PostBackConstants.CATBAG_KEY_REF_GRP), prefix + index + PostBackConstants.CATBAG_KEY_REF_GRP));
+                    if (cb.getKeyedReference().isEmpty() && cb.getKeyedReferenceGroup().isEmpty()) {
+                        cb = null;
+                    }
+
+                    pn.setCategoryBag(cb);
+                    pn.setTModelInstanceDetails(BuildTmodelInstanceDetails(MapFilter(map, prefix + index + PostBackConstants.TMODELINSTANCE), prefix + index + PostBackConstants.TMODELINSTANCE, cte));
+
+                    ret.add(pn);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    private static TModelInstanceDetails BuildTmodelInstanceDetails(Map map, String prefix, String cte) {
+        TModelInstanceDetails ret = new TModelInstanceDetails();
+
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+                    TModelInstanceInfo tmi = new TModelInstanceInfo();
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.KEYNAME);
+                    tmi.setTModelKey(t[0]);
+
+                    tmi.setInstanceDetails(BuildInstanceDetails(MapFilter(map, prefix + index + PostBackConstants.INSTANCE), prefix + index + PostBackConstants.INSTANCE, cte));
+
+                    tmi.getDescription().addAll(BuildDescription(MapFilter(map, prefix + index + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION), prefix + index + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION, cte));
+
+                    ret.getTModelInstanceInfo().add(tmi);
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        if (ret.getTModelInstanceInfo().isEmpty()) {
+            return null;
+        }
+        return ret;
+    }
+
+    private static InstanceDetails BuildInstanceDetails(Map map, String prefix, String cte) {
+        InstanceDetails ret = new InstanceDetails();
+        Iterator it = map.keySet().iterator();
+        List<String> processedIndexes = new ArrayList<String>();
+        while (it.hasNext()) {
+            String key = (String) it.next();
+            String filteredkey = key.replace(prefix, "");
+            Matcher match = p.matcher(filteredkey);
+            if (match.find()) {
+                String index = filteredkey.substring(0, match.start());
+                if (!processedIndexes.contains(index)) {
+
+                    String[] t = (String[]) map.get(prefix + index + PostBackConstants.VALUE);
+                    //pn.setValue(t[0]);
+                    ret.setInstanceParms(t[0]);
+
+                    ret.getDescription().addAll(BuildDescription(MapFilter(map, prefix + index + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION), prefix + index + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION, cte));
+                    ret.getOverviewDoc().addAll(BuildOverviewDocs(MapFilter(map, prefix + index + PostBackConstants.OVERVIEW), prefix + index + PostBackConstants.OVERVIEW, cte));
+                    processedIndexes.add(index);
+                }
+            } else {
+                throw new IllegalArgumentException("Invalid form data posted");
+            }
+        }
+        return ret;
+    }
+
+    /**
+     * client subscription api
+     * @param map
+     * @param outmsg
+     * @param session
+     * @return 
+     */
+    public static Subscription BuildClientSubscription(Map map, AtomicReference<String> outmsg, HttpSession session) {
+        Subscription sub = new Subscription();
+        if (outmsg == null) {
+            outmsg = new AtomicReference<String>();
+        }
+
+        try {
+            String alertType = ((String[]) map.get("alertType"))[0];
+            if (alertType == null) {
+                outmsg.set("alertType not defined");
+                return null;
+            }
+            if (alertType.equalsIgnoreCase("specificItem")) {
+                sub = BuildClientSubscriptionSpecificItem(map, outmsg);
+            } else if (alertType.equalsIgnoreCase("searchResults")) {
+                sub = BuildClientSubscriptionSearchResults(map, outmsg);
+            } else {
+                outmsg.set("alertType invalid");
+                return null;
+            }
+            if (sub == null) {
+                return null;
+            }
+
+            String alertTransport = ((String[]) map.get("alertTransport"))[0];
+            if (alertTransport == null) {
+            } else {
+                if (alertTransport.equalsIgnoreCase("bindingTemplate")) {
+                    sub.setBindingKey(((String[]) map.get("bindingKey"))[0]);
+                } else {
+                    sub.setBindingKey(null);
+                }
+            }
+            if (map.get("subkey") != null) {
+                String subkey = ((String[]) map.get("subkey"))[0];
+                if (subkey != null && !subkey.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
+                    sub.setSubscriptionKey(subkey);
+                }
+            }
+            //options
+            sub = BuildSubscriptionOptions(map, sub);
+            return sub;
+        } catch (Exception ex) {
+            outmsg.set(ex.getMessage());
+            return null;
+        }
+
+    }
+
+    private static Subscription BuildClientSubscriptionSpecificItem(Map map, AtomicReference<String> outmsg) {
+        try {
+            Subscription sub = new Subscription();
+            String alertCritera = ((String[]) map.get("alertCriteraSingleItem"))[0];
+
+            List<String> keys = new ArrayList<String>();
+            String ItemKey = ((String[]) map.get("itemKey"))[0];
+            if (ItemKey == null) {
+                outmsg.set("no item defined");
+                return null;
+            }
+            //TODO this is an issue. Unknown if commas can be included within UDDI keys
+            if (ItemKey.contains(",")) {
+                String[] k2 = ItemKey.split(",");
+                for (int i = 0; i < k2.length; i++) {
+                    if (k2[i] == null) {
+                        continue;
+                    }
+                    if (k2[i].trim().isEmpty()) {
+                        continue;
+                    }
+                    keys.add(k2[i].trim());
+                }
+            } else {
+                keys.add(ItemKey);
+            }
+
+
+            sub.setSubscriptionFilter(new SubscriptionFilter());
+
+            if (alertCritera != null) {
+
+                if (alertCritera.equalsIgnoreCase("binding")) {
+                    sub.getSubscriptionFilter().setGetBindingDetail(new GetBindingDetail());
+                    sub.getSubscriptionFilter().getGetBindingDetail().getBindingKey().addAll(keys);
+                } else if (alertCritera.equalsIgnoreCase("service")) {
+                    sub.getSubscriptionFilter().setGetServiceDetail(new GetServiceDetail());
+                    sub.getSubscriptionFilter().getGetServiceDetail().getServiceKey().addAll(keys);
+                } else if (alertCritera.equalsIgnoreCase("business")) {
+                    sub.getSubscriptionFilter().setGetBusinessDetail(new GetBusinessDetail());
+                    sub.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey().addAll(keys);
+                } else if (alertCritera.equalsIgnoreCase("publisherAssertion")) {
+                    //unknow if this will work
+                    sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport());
+                    sub.getSubscriptionFilter().getGetAssertionStatusReport().setCompletionStatus(CompletionStatus.valueOf(((String[]) map.get("assertionStatus"))[0]));
+                } else if (alertCritera.equalsIgnoreCase("relatedBusiness")) {
+                    outmsg.set("relatedBusiness is not supported for single item subscriptions");
+                    return null;
+                } else if (alertCritera.equalsIgnoreCase("tmodel")) {
+                    sub.getSubscriptionFilter().setGetTModelDetail(new GetTModelDetail());
+                    sub.getSubscriptionFilter().getGetTModelDetail().getTModelKey().addAll(keys);
+                } else {
+                    outmsg.set("alert critera invalid");
+                    return null;
+                }
+            } else {
+                outmsg.set("alert critera not defined");
+                return null;
+            }
+            return sub;
+        } catch (Exception ex) {
+            UddiHub.log.warn(null, ex);
+            outmsg.set("error parsing");
+            return null;
+        }
+    }
+
+    private static Subscription BuildClientSubscriptionSearchResults(Map map, AtomicReference<String> outmsg) {
+        try {
+            Subscription sub = new Subscription();
+            String alertCritera = ((String[]) map.get("alertCriteraMultipleItem"))[0];
+
+            sub.setSubscriptionFilter(new SubscriptionFilter());
+            Name name = new Name();
+            name.setValue(((String[]) map.get("searchcontent"))[0]);
+            name.setLang(((String[]) map.get("searchlang"))[0]);
+            FindQualifiers fq = new FindQualifiers();
+            String[] fqs = (String[]) map.get("findqualifier");
+            if (fqs != null) {
+                for (int i = 0; i < fqs.length; i++) {
+                    fq.getFindQualifier().add(fqs[i]);
+                }
+            }
+            if (fq.getFindQualifier().isEmpty()) {
+                fq = null;
+            }
+            if (alertCritera != null) {
+                if (alertCritera.equalsIgnoreCase("binding")) {
+                    //sub.getSubscriptionFilter().setFindBinding(new FindBinding());
+                    //sub.getSubscriptionFilter().getFindBinding().
+                } else if (alertCritera.equalsIgnoreCase("service")) {
+                    sub.getSubscriptionFilter().setFindService(new FindService());
+                    sub.getSubscriptionFilter().getFindService().getName().add(name);
+                    sub.getSubscriptionFilter().getFindService().setFindQualifiers(fq);
+                } else if (alertCritera.equalsIgnoreCase("business")) {
+                    sub.getSubscriptionFilter().setFindBusiness(new FindBusiness());
+                    sub.getSubscriptionFilter().getFindBusiness().setFindQualifiers(fq);
+                    sub.getSubscriptionFilter().getFindBusiness().getName().add(name);
+                    //              sub.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey().addAll(keys);
+                } else if (alertCritera.equalsIgnoreCase("publisherAssertion")) {
+                    //unknow if this will work
+                    sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport());
+                    sub.getSubscriptionFilter().getGetAssertionStatusReport().setCompletionStatus(CompletionStatus.valueOf(((String[]) map.get("assertionStatus"))[0]));
+                } else if (alertCritera.equalsIgnoreCase("relatedBusiness")) {
+                    sub.getSubscriptionFilter().setFindRelatedBusinesses(new FindRelatedBusinesses());
+                    sub.getSubscriptionFilter().getFindRelatedBusinesses().setFindQualifiers(fq);
+                    sub.getSubscriptionFilter().getFindRelatedBusinesses().setBusinessKey(((String[]) map.get("searchcontent"))[0]);
+                } else if (alertCritera.equalsIgnoreCase("tmodel")) {
+                    sub.getSubscriptionFilter().setFindTModel(new FindTModel());
+                    sub.getSubscriptionFilter().getFindTModel().setFindQualifiers(fq);
+                    sub.getSubscriptionFilter().getFindTModel().setName(name);
+                } else {
+                    outmsg.set("alert critera invalid");
+                    return null;
+                }
+            } else {
+                outmsg.set("alert critera not defined");
+                return null;
+            }
+            return sub;
+        } catch (Exception ex) {
+            UddiHub.log.warn(null, ex);
+            outmsg.set("error parsing");
+            return null;
+        }
+    }
+
+    private static Subscription BuildSubscriptionOptions(Map map, Subscription sub) {
+        if (sub == null) {
+            return null;
+        }
+        try {
+            sub.setBrief(Boolean.parseBoolean(((String[]) map.get("brief"))[0]));
+        } catch (Exception x) {
+            sub.setBrief(false);
+        }
+
+        try {
+            sub.setMaxEntities(Integer.parseInt(((String[]) map.get("maxRecords"))[0]));
+        } catch (Exception x) {
+            sub.setBrief(false);
+        }
+
+        try {
+            DatatypeFactory df = DatatypeFactory.newInstance();
+            DateFormat dformat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a");
+            Date parsed = dformat.parse(((String[]) map.get("expires"))[0]);
+
+            GregorianCalendar gcal = new GregorianCalendar();
+            gcal.setTime(parsed);
+            sub.setExpiresAfter(df.newXMLGregorianCalendar(gcal));
+        } catch (Exception ex) {
+            UddiHub.log.warn("Unexpected parsing error ", ex);
+        }
+
+
+        try {
+            DatatypeFactory df = DatatypeFactory.newInstance();
+            DateFormat dformat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a");
+            Date parsed = dformat.parse(((String[]) map.get("expires"))[0]);
+
+            GregorianCalendar gcal = new GregorianCalendar();
+            gcal.setTime(parsed);
+            sub.setExpiresAfter(df.newXMLGregorianCalendar(gcal));
+        } catch (Exception ex) {
+            UddiHub.log.warn("Unexpected parsing error ", ex);
+        }
+
+        try {
+            long durationInMilliSeconds = 0;
+            DatatypeFactory df = DatatypeFactory.newInstance();
+            String interval = ((String[]) map.get("interval"))[0];
+            String[] tokens = interval.split(":");
+            durationInMilliSeconds += Integer.parseInt(tokens[0]) * 60 * 60 * 1000;
+            durationInMilliSeconds += Integer.parseInt(tokens[1]) * 60 * 1000;
+            durationInMilliSeconds += Integer.parseInt(tokens[2]) * 1000;
+
+
+            sub.setNotificationInterval(df.newDuration(durationInMilliSeconds));
+
+        } catch (Exception ex) {
+            UddiHub.log.warn("Unexpected parsing error ", ex);
+        }
+
+
+        return sub;
+    }
+}
diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/hub/builders/Printers.java b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/builders/Printers.java
new file mode 100644
index 0000000..4f58628
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/builders/Printers.java
@@ -0,0 +1,363 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.juddi.webconsole.hub.builders;
+
+import java.util.List;
+import javax.servlet.http.HttpSession;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.juddi.webconsole.resources.ResourceLoader;
+import org.uddi.api_v3.*;
+
+/**
+ * Provides very basic UDDI spec to String formats, mostly used for debugging
+ *
+ * @author Alex O'Ree
+ */
+public class Printers {
+
+    public static String TModelInfoToString(TModelInstanceDetails info) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < info.getTModelInstanceInfo().size(); i++) {
+            sb.append(info.getTModelInstanceInfo().get(i).getTModelKey());
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Converts category bags of tmodels to a readable string
+     *
+     * @param categoryBag
+     * @return
+     */
+    public static String CatBagToString(CategoryBag categoryBag, String locale) {
+        StringBuilder sb = new StringBuilder();
+        if (categoryBag == null) {
+            return "no data";
+        }
+        for (int i = 0; i < categoryBag.getKeyedReference().size(); i++) {
+            sb.append(KeyedReferenceToString(categoryBag.getKeyedReference().get(i), locale));
+        }
+        for (int i = 0; i < categoryBag.getKeyedReferenceGroup().size(); i++) {
+            sb.append("Key Ref Grp: TModelKey=");
+            for (int k = 0; k < categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) {
+                sb.append(KeyedReferenceToString(categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().get(k), locale));
+            }
+        }
+        return sb.toString();
+    }
+
+    public static String KeyedReferenceToString(KeyedReference item, String locale) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("Key Ref: Name=").append(item.getKeyName()).append(" Value=").append(item.getKeyValue()).append(" tModel=").append(item.getTModelKey()).append(System.getProperty("line.separator"));
+        return sb.toString();
+    }
+
+    /**
+     * This function is useful for translating UDDI's somewhat complex data
+     * format to something that is more useful.
+     *
+     * @param bindingTemplates
+     */
+    public static String PrintBindingTemplates(BindingTemplates bindingTemplates, String locale) {
+        if (bindingTemplates == null) {
+            return "No binding templates";
+        }
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < bindingTemplates.getBindingTemplate().size(); i++) {
+            sb.append("Binding Key: ").append(bindingTemplates.getBindingTemplate().get(i).getBindingKey()).append("<Br>");
+            sb.append("Description: ").append(ListToDescString(bindingTemplates.getBindingTemplate().get(i).getDescription())).append("<Br>");
+            sb.append("CatBag: ").append(CatBagToString(bindingTemplates.getBindingTemplate().get(i).getCategoryBag(), locale)).append("<Br>");
+            sb.append("tModels: ").append(Printers.TModelInfoToString(bindingTemplates.getBindingTemplate().get(i).getTModelInstanceDetails())).append("<Br>");
+            if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint() != null) {
+                sb.append("Access Point: ").append(bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getValue()).append(" type ").append(bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType()).append("<Br>");
+            }
+            if (bindingTemplates.getBindingTemplate().get(i).getHostingRedirector() != null) {
+                sb.append("Hosting Director: ").append(bindingTemplates.getBindingTemplate().get(i).getHostingRedirector().getBindingKey()).append("<br>");
+            }
+        }
+        return sb.toString();
+    }
+
+    public static String ListToDescString(List<Description> name) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < name.size(); i++) {
+            sb.append(name.get(i).getValue()).append(" ");
+        }
+        return sb.toString();
+    }
+
+    public static String ListNamesToString(List<Name> name) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < name.size(); i++) {
+            sb.append(name.get(i).getValue()).append(" ");
+        }
+        return sb.toString();
+    }
+
+    public static String ListDiscoToString(DiscoveryURLs info) {
+        StringBuilder sb = new StringBuilder();
+        if (info == null) {
+            return "";
+        }
+        for (int i = 0; i < info.getDiscoveryURL().size(); i++) {
+            sb.append("Type: ").append(StringEscapeUtils.escapeHtml(info.getDiscoveryURL().get(i).getValue())).append(" ").append(StringEscapeUtils.escapeHtml(info.getDiscoveryURL().get(i).getValue()));
+        }
+        return sb.toString();
+    }
+
+    /**
+     * converts contacts to a simple string output
+     */
+    public static String PrintContacts(Contacts contacts, String locale) {
+        if (contacts == null) {
+            return "";
+        }
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < contacts.getContact().size(); i++) {
+            sb.append("Contact ").append(i).append(" type:").append(contacts.getContact().get(i).getUseType()).append("<br>");
+            for (int k = 0; k < contacts.getContact().get(i).getPersonName().size(); k++) {
+                sb.append("Name: ").append(contacts.getContact().get(i).getPersonName().get(k).getValue()).append("<br>");
+            }
+            for (int k = 0; k < contacts.getContact().get(i).getEmail().size(); k++) {
+                sb.append("Email: ").append(contacts.getContact().get(i).getEmail().get(k).getValue()).append("<br>");
+            }
+            for (int k = 0; k < contacts.getContact().get(i).getAddress().size(); k++) {
+                sb.append("Address sort code ").append(contacts.getContact().get(i).getAddress().get(k).getSortCode()).append("<br>");
+                sb.append("Address use type ").append(contacts.getContact().get(i).getAddress().get(k).getUseType()).append("<br>");
+                sb.append("Address tmodel key ").append(contacts.getContact().get(i).getAddress().get(k).getTModelKey()).append("<br>");
+                for (int x = 0; x < contacts.getContact().get(i).getAddress().get(k).getAddressLine().size(); x++) {
+                    sb.append("Address line value ").append(contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getValue()).append("<br>");
+                    sb.append("Address line key name ").append(contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyName()).append("<br>");
+                    sb.append("Address line key value ").append(contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyValue()).append("<br>");
+                }
+            }
+            for (int k = 0; k < contacts.getContact().get(i).getDescription().size(); k++) {
+                sb.append("Desc: ").append(contacts.getContact().get(i).getDescription().get(k).getValue()).append("<br>");
+            }
+            for (int k = 0; k < contacts.getContact().get(i).getPhone().size(); k++) {
+                sb.append("Phone: ").append(contacts.getContact().get(i).getPhone().get(k).getValue()).append("<br>");
+            }
+        }
+        return sb.toString();
+    }
+
+    public static String ListIdentBagToString(IdentifierBag info, String locale) {
+        StringBuilder sb = new StringBuilder();
+        if (info == null) {
+            return "";
+        }
+        for (int i = 0; i < info.getKeyedReference().size(); i++) {
+            sb.append(KeyedReferenceToString(info.getKeyedReference().get(i), locale));
+        }
+        return sb.toString();
+    }
+
+    public static String PublisherAssertionsToHtml(List<PublisherAssertion> list, String locale) {
+        if (list == null || list.isEmpty()) {
+            return "No input";
+        }
+        StringBuilder sb = new StringBuilder();
+        sb.append("<table class=\"table\">");
+        for (int i = 0; i < list.size(); i++) {
+            sb.append("<tr><td>");
+            sb.append(StringEscapeUtils.escapeHtml(list.get(i).getToKey()));
+            sb.append("</td><td>");
+            sb.append(StringEscapeUtils.escapeHtml(list.get(i).getFromKey()));
+            sb.append("</td><td>");
+            sb.append(list.get(i).getSignature().isEmpty());
+            sb.append("</td><td>");
+            sb.append(StringEscapeUtils.escapeHtml(Printers.KeyedReferenceToString(list.get(i).getKeyedReference(), locale)));
+            sb.append("</td></tr>");
+        }
+        sb.append("</table>");
+        return sb.toString();
+    }
+
+    public static String PrintTModelListAsHtml(TModelList findTModel, HttpSession session, boolean isChooser) {
+
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("<table class=\"table table-hover\"><tr><th>");
+        if (isChooser) {
+            sb.append("</th><th>");
+        }
+        sb.append(ResourceLoader.GetResource(session, "items.key"))
+                .append("</th><th>")
+                .append(ResourceLoader.GetResource(session, "items.name"))
+                .append("</th><th>")
+                .append(ResourceLoader.GetResource(session, "items.description"))
+                .append("</th></tr>");
+        for (int i = 0; i < findTModel.getTModelInfos().getTModelInfo().size(); i++) {
+            sb.append("<tr><td>");
+            if (isChooser) {
+                sb.append("<input class=\"modalableTmodel\" type=checkbox id=\"")
+                        .append(StringEscapeUtils.escapeHtml(findTModel.getTModelInfos().getTModelInfo().get(i).getTModelKey()))
+                        .append("\"></td><td>");
+            }
+            if (!isChooser) {
+                sb.append("<a href=\"tmodelEditor.jsp?id=")
+                        .append(StringEscapeUtils.escapeHtml(findTModel.getTModelInfos().getTModelInfo().get(i).getTModelKey()))
+                        .append("\" >");
+            }
+            sb.append(StringEscapeUtils.escapeHtml(findTModel.getTModelInfos().getTModelInfo().get(i).getTModelKey()));
+            if (!isChooser) {
+                sb.append("</a>");
+            }
+            sb.append("</td><td>")
+                    .append(StringEscapeUtils.escapeHtml(findTModel.getTModelInfos().getTModelInfo().get(i).getName().getValue()));
+            if (findTModel.getTModelInfos().getTModelInfo().get(i).getName().getLang() != null) {
+                sb.append(", ")
+                        .append(StringEscapeUtils.escapeHtml(findTModel.getTModelInfos().getTModelInfo().get(i).getName().getLang()));
+            }
+            sb.append("</td><td>")
+                    .append(StringEscapeUtils.escapeHtml(Printers.ListToDescString(findTModel.getTModelInfos().getTModelInfo().get(i).getDescription())))
+                    .append("</td></tr>");
+        }
+        sb.append("</table>");
+        return sb.toString();
+    }
+
+    @Deprecated
+    private static String PrintTModelListAsHtmlModel(TModelList findTModel, HttpSession session) {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("<table class=\"table table-hover\"><tr><th>");
+
+        sb.append("</th><th>");
+
+        sb.append(ResourceLoader.GetResource(session, "items.key"))
+                .append("</th><th>")
+                .append(ResourceLoader.GetResource(session, "items.name"))
+                .append("</th><th>")
+                .append(ResourceLoader.GetResource(session, "items.description"))
+                .append("</th></tr>");
+        for (int i = 0; i < findTModel.getTModelInfos().getTModelInfo().size(); i++) {
+            sb.append("<tr><td>");
+
+            sb.append("<input class=\"modalableTmodel\" type=checkbox id=\"")
+                    .append(StringEscapeUtils.escapeHtml(findTModel.getTModelInfos().getTModelInfo().get(i).getTModelKey()))
+                    .append("\"></td><td>");
+
+            sb.append(StringEscapeUtils.escapeHtml(findTModel.getTModelInfos().getTModelInfo().get(i).getTModelKey()));
+            sb.append("</td><td>")
+                    .append(StringEscapeUtils.escapeHtml(findTModel.getTModelInfos().getTModelInfo().get(i).getName().getValue()));
+            if (findTModel.getTModelInfos().getTModelInfo().get(i).getName().getLang() != null) {
+                sb.append(", ")
+                        .append(StringEscapeUtils.escapeHtml(findTModel.getTModelInfos().getTModelInfo().get(i).getName().getLang()));
+            }
+            sb.append("</td><td>")
+                    .append(StringEscapeUtils.escapeHtml(Printers.ListToDescString(findTModel.getTModelInfos().getTModelInfo().get(i).getDescription())))
+                    .append("</td></tr>");
+        }
+        sb.append("</table>");
+        return sb.toString();
+    }
+
+    public static String BusinessListAsTable(BusinessList findBusiness, HttpSession session, boolean isChooser) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("<table class=\"table table-hover\"<tr><th>");
+        if (isChooser) {
+            sb.append("</th><th>");
+        }
+        sb.append(ResourceLoader.GetResource(session, "items.name")).
+                append("</th><th>").
+                append(ResourceLoader.GetResource(session, "items.service")).
+                append("</th></tr>");
+        for (int i = 0; i < findBusiness.getBusinessInfos().getBusinessInfo().size(); i++) {
+            sb.append("<tr><td>");
+            if (isChooser) {
+                sb.append("<input type=\"checkbox\" class=\"modalableBusinessChooser\" id=\"").
+                        append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).
+                        append("\"></td><td>");
+            }
+            sb.append("<a title=\"").
+                    append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).
+                    append("\"  href=\"businessEditor2.jsp?id=").
+                    append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).
+                    append("\">").
+                    append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getName()))).
+                    append("</a></td><td>").
+                    append("<a class=\"btn btn-primary\" href=\"javascript:ShowServicesByBusinessKey('").
+                    append(StringEscapeUtils.escapeJavaScript(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).
+                    append("');\">");
+
+            if (findBusiness.getBusinessInfos().getBusinessInfo().get(i).getServiceInfos() == null) {
+                sb.append("0");
+            } else {
+                sb.append("Show ").append(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getServiceInfos().getServiceInfo().size());
+            }
+            sb.append("</a>");
+            if (!isChooser) {
+                sb.append("<a class=\"btn btn-primary\" href=\"serviceEditor.jsp?bizid=").
+                        append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).
+                        append("\"><i class=\"icon-plus-sign icon-white  icon-large\"></i></a>");
+            }
+            sb.append("</td></tr>");
+
+            sb.append("<tr><td colspan=3><div id=\"").
+                    append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).
+                    append("\"></div></td></tr>");
+        }
+        sb.append("</table>");
+        return sb.toString();
+    }
+
+    /**
+     * service list as html
+     * @param findService
+     * @param chooser
+     * @param session
+     * @return 
+     */
+    public static String ServiceListAsHtml(ServiceList findService, boolean chooser, HttpSession session) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("<table class=\"table\"><tr><th>");
+        if (chooser) {
+            sb.append("</th><th>");
+        }
+        sb.append(ResourceLoader.GetResource(session, "items.name")).
+                append("</th><th>").
+                append(ResourceLoader.GetResource(session, "items.key")).
+                append("</th><th>").
+                append(ResourceLoader.GetResource(session, "items.business")).
+                append("</th></tr>");
+        for (int i = 0; i < findService.getServiceInfos().getServiceInfo().size(); i++) {
+            sb.append("<tr><td>");
+            if (chooser) {
+                sb.append("<input class=\"modalableServiceChooser\" type=\"checkbox\" id=\"").
+                        append(StringEscapeUtils.escapeHtml(findService.getServiceInfos().getServiceInfo().get(i).getServiceKey())).
+                        append("\">");
+                sb.append("</td><td>");
+            }
+            sb.append("<a href=\"serviceEditor.jsp?id=").
+                    append(StringEscapeUtils.escapeHtml(findService.getServiceInfos().getServiceInfo().get(i).getServiceKey())).
+                    append("\" title=\"").
+                    append(StringEscapeUtils.escapeHtml(findService.getServiceInfos().getServiceInfo().get(i).getServiceKey()))
+                    .append("\">");
+            sb.append(Printers.ListNamesToString(findService.getServiceInfos().getServiceInfo().get(i).getName())).append("<i class=\"icon-edit icon-large\"></i<</a></td><td>");
+           
+            sb.append((findService.getServiceInfos().getServiceInfo().get(i).getServiceKey())).append("</td><td>");
+             sb.append("<a href=\"businessEditor2.jsp?id=")
+                    .append(StringEscapeUtils.escapeHtml((findService.getServiceInfos().getServiceInfo().get(i).getBusinessKey())))
+                    .append("\">");
+            sb.append(StringEscapeUtils.escapeHtml((findService.getServiceInfos().getServiceInfo().get(i).getBusinessKey())))
+                    .append("<i class=\"icon-edit icon-large\"></i<</a></td></tr>");
+        }
+        sb.append("</table>");
+        return sb.toString();
+    }
+}
diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/hub/builders/SubscriptionHelper.java b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/builders/SubscriptionHelper.java
new file mode 100644
index 0000000..e721ed3
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/hub/builders/SubscriptionHelper.java
@@ -0,0 +1,145 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.apache.juddi.webconsole.hub.builders;
+
+import java.util.List;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.uddi.sub_v3.Subscription;
+
+/**
+ * Provides some basic helper functions for the edit Subscription page
+ *
+ * @author Alex O'Ree
+ */
+public class SubscriptionHelper {
+
+    public static String getItemKeySpecific(Subscription sub) {
+        if (sub == null) {
+            return "";
+        }
+        if (sub.getSubscriptionFilter() == null) {
+            return "";
+        }
+        if (sub.getSubscriptionFilter().getGetAssertionStatusReport() != null && sub.getSubscriptionFilter().getGetAssertionStatusReport().getCompletionStatus() != null) {
+            return sub.getSubscriptionFilter().getGetAssertionStatusReport().getCompletionStatus().toString();
+        }
+
+        if (sub.getSubscriptionFilter().getGetBindingDetail() != null) {
+            return ToHtmlOption(sub.getSubscriptionFilter().getGetBindingDetail().getBindingKey());
+        }
+
+        if (sub.getSubscriptionFilter().getGetBusinessDetail() != null) {
+            return ToHtmlOption(sub.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey());
+        }
+
+        if (sub.getSubscriptionFilter().getGetServiceDetail() != null) {
+            return ToHtmlOption(sub.getSubscriptionFilter().getGetServiceDetail().getServiceKey());
+        }
+
+        if (sub.getSubscriptionFilter().getGetTModelDetail() != null) {
+            return ToHtmlOption(sub.getSubscriptionFilter().getGetTModelDetail().getTModelKey());
+        }
+        return "";
+    }
+
+    public static String ToHtmlOption(List<String> items) {
+        StringBuilder sb = new StringBuilder();
+        if (items == null || items.isEmpty()) {
+            return null;
+        }
+        for (int i = 0; i < items.size(); i++) {
+            if (items.get(i) == null) {
+                continue;
+            }
+            if (items.get(i).trim().isEmpty()) {
+                continue;
+            }
+            sb.append("<option value\"").append(StringEscapeUtils.escapeHtml(items.get(i).trim()))
+                    .append("\">")
+                    .append(StringEscapeUtils.escapeHtml(items.get(i)))
+                    .append("</option>");
+        }
+        return sb.toString();
+    }
+
+    public static boolean isSpecificItem(Subscription sub) {
+        if (sub == null) {
+            throw new IllegalArgumentException();
+        }
+        if (sub.getSubscriptionFilter() == null) {
+            throw new IllegalArgumentException();
+        }
+        return (sub.getSubscriptionFilter().getGetAssertionStatusReport() != null
+                || sub.getSubscriptionFilter().getGetBindingDetail() != null
+                || sub.getSubscriptionFilter().getGetBusinessDetail() != null
+                || sub.getSubscriptionFilter().getGetServiceDetail() != null
+                || sub.getSubscriptionFilter().getGetTModelDetail() != null);
+    }
+
+    public static String isBindingSpecific(Subscription sub) {
+        if (sub == null) {
+            return "";
+        }
+        if (sub.getSubscriptionKey() == null) {
+            return "";
+        }
+        if (sub.getSubscriptionFilter().getGetBindingDetail() != null && !sub.getSubscriptionFilter().getGetBindingDetail().getBindingKey().isEmpty()) {
+            return " active ";
+        }
+        return "";
+    }
+
+    public static String isBusinessSpecific(Subscription sub) {
+        if (sub == null) {
+            return "";
+        }
+        if (sub.getSubscriptionKey() == null) {
+            return "";
+        }
+        if (sub.getSubscriptionFilter().getGetBusinessDetail() != null && !sub.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey().isEmpty()) {
+            return " active ";
+        }
+        return "";
+    }
+
+    public static String isServiceSpecific(Subscription sub) {
+        if (sub == null) {
+            return "";
+        }
+        if (sub.getSubscriptionKey() == null) {
+            return "";
+        }
+        if (sub.getSubscriptionFilter().getGetServiceDetail() != null && !sub.getSubscriptionFilter().getGetServiceDetail().getServiceKey().isEmpty()) {
+            return " active ";
+        }
+        return "";
+    }
+
+    public static String isTModelSpecific(Subscription sub) {
+        if (sub == null) {
+            return "";
+        }
+        if (sub.getSubscriptionKey() == null) {
+            return "";
+        }
+        if (sub.getSubscriptionFilter().getGetTModelDetail() != null && !sub.getSubscriptionFilter().getGetTModelDetail().getTModelKey().isEmpty()) {
+            return " active ";
+        }
+        return "";
+    }
+
+    public static String isPublisherAssertionSpecific(Subscription sub) {
+        if (sub == null) {
+            return "";
+        }
+        if (sub.getSubscriptionKey() == null) {
+            return "";
+        }
+        if (sub.getSubscriptionFilter().getGetAssertionStatusReport() != null && sub.getSubscriptionFilter().getGetAssertionStatusReport().getCompletionStatus() != null) {
+            return " active ";
+        }
+        return "";
+    }
+}
diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/resources/ResourceLoader.java b/juddi-gui/src/java/org/apache/juddi/webconsole/resources/ResourceLoader.java
new file mode 100644
index 0000000..3a80a22
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/resources/ResourceLoader.java
@@ -0,0 +1,68 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.apache.juddi.webconsole.resources;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import javax.servlet.http.HttpSession;
+
+/**
+ * This a resource loader for specific locales for internationalization,
+ * provides some basic caching to prevent round trip disk access
+ *
+ * @author Alex O'Ree
+ */
+public class ResourceLoader {
+
+    private static Map map = new HashMap();
+
+    /**
+     * returns a localized string in the locale defined within
+     * session.getAttribute("locale") or in the default locale, en
+     *
+     * @param session
+     * @param key
+     * @return a localized string
+     * @throws IllegalArgumentException if the key is null
+     * @throws MissingResourceException if the resource bundle can't be found
+     */
+    public static String GetResource(HttpSession session, String key) throws MissingResourceException {
+        if (key == null) {
+            throw new IllegalArgumentException("key");
+        }
+        String locale = (String) session.getAttribute("locale");
+        return GetResource(locale, key);
+    }
+
+    /**
+     * returns a localized string in the locale defined within locale or in the
+     * default locale, en
+     *
+     * @param session
+     * @param key
+     * @return a localized string
+     * @throws IllegalArgumentException if the key is null
+     * @throws MissingResourceException if the resource bundle can't be found
+     */
+    public static String GetResource(String locale, String key) throws MissingResourceException {
+        if (key == null) {
+            throw new IllegalArgumentException("key");
+        }
+
+        ResourceBundle bundle = (ResourceBundle) map.get(locale);
+        if (bundle == null) {
+            bundle = ResourceBundle.getBundle("org.apache.juddi.webconsole.resources.web", new Locale(locale));
+            map.put(locale, bundle);
+        }
+        try {
+            return bundle.getString(key.trim());
+        } catch (Exception ex) {
+            return "key " + key + " not found " + ex.getMessage();
+        }
+    }
+}
diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/resources/web.properties b/juddi-gui/src/java/org/apache/juddi/webconsole/resources/web.properties
new file mode 100644
index 0000000..4310937
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/resources/web.properties
@@ -0,0 +1,332 @@
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+language=en
+direction=LTR
+title=Apache jUDDI - Open Source UDDI Discovery Services
+description=jUDDI is a free open source implementation of OASIS's UDDI specification. Think of it as a phone book for web services.
+navbar.home=Home
+
+navbar.discover=Discover
+navbar.businesses=Businesses
+
+navbar.businesses.tooltip=Browse for businesses
+navbar.services=Services
+
+navbar.services.tooltip=Browse for Services
+navbar.tmodels=tModels
+
+navbar.tmodels.tooltip=Browse for tModels
+navbar.publishers=Publishers
+
+navbar.publishers.tooltip=Browse for Publishers
+
+navbar.search=Search
+navbar.search.tooltip=Search
+navbar.create=Create
+navbar.create.business=Business
+navbar.create.business.tooltip=Create a Business
+navbar.create.service=Service
+navbar.create.service.tooltip=Create a Service
+navbar.create.tmodel=tModel
+navbar.create.tmodel.tooltip=Create a tModel
+navbar.create.tmodelkeygen.tooltip=Create a tModel Key Generator
+navbar.create.tmodel=tModel
+navbar.create.publisher=Publisher
+navbar.create.publisher.tooltip=Create a Publisher
+navbar.create.tmodelkeygen=tModel Partition (Key Generator)
+
+navbar.subscriptions=Subscriptions
+navbar.subscriptions.view=View Subscriptions
+navbar.subscriptions.create=Create Subscriptions
+navbar.subscriptions.view.tooltip=View My Subscriptions
+navbar.subscriptions.create.tooltip=Create a Subscription
+
+navbar.settings=Settings
+navbar.settings.config=Configure
+navbar.settings.config.tooltip=Configure this UDDI Browser
+
+navbar.help.userguide=User's Guide
+navbar.help.devguide=Developer's Guide
+navbar.help.api=API Documentation
+navbar.help.wiki=jUDDI Wiki
+navbar.help.bugreport=File a Bug Report
+navbar.help.website=Official jUDDI Website
+navbar.help.mailinglist=Mailing List Archive
+
+navbar.login.username=Username
+navbar.login.password=Password
+navbar.login.button=Login
+navbar.login.logout=Click to logout
+
+index.juddi=jUDDI (pronounced "Judy") is an open source Java implementation of the Universal Description, Discovery, and Integration (UDDI v3) specification for (Web) Services. Think of UDDI as the yellow pages of the phone book for web services.
+learnmore=Learn More
+viewdetails=View Details
+index.learn=Learn all about OASIS's UDDI Technical Specification
+index.search=An advanced search capability that allows you search for specific criteria.
+index.browse=Flip through the pages of UDDI. Whether you're just curious or you're looking for something specific and don't know what to search for, the browse feature is a good place to start.
+index.browse.title=Browse
+index.search.title=Search
+index.learn.title=About UDDI
+footer.apachecopyright=&copy; 2013 The Apache Software Foundation. All Rights Reserved.
+modal.digitalsignaturewarning.title=Digital Signature Warning
+modal.digitalsignaturewarning.body=This item is digitally signed. This means that when saving your changes, all existing signatures will become invalid and will automatically be excluded from the save process. 
+modal.close=Close
+modal.savechanges=Save Changes
+totals.records=Total records
+totals.recordsreturned=Records Returned
+totals.offset=Offset
+items.lang=Language
+items.loading=Loading
+pages.businesseditor.title=Business Editor
+pages.businesskey=Business Key
+pages.businesskey.description=The Business Key is the unique identifier for this business and exists within this registry.
+pages.editor.tabnav.general=General
+pages.editor.tabnav.discovery=Discovery
+pages.editor.tabnav.contacts=Contacts
+pages.editor.tabnav.categories=Categories
+pages.editor.tabnav.identifiers=Identifiers
+pages.editor.tabnav.services=Services
+pages.editor.tabnav.signatures=Signatures
+pages.editor.tabnav.opinfo=Operational Info
+pages.editor.tabnav.relatedbusinesses=Related Businesses
+items.name=Name
+items.business.name.description=Businesses are identified by one or more name. Multiple names are useful for different languages, legal names, or abbreviations.
+items.value=Value
+items.description=Description
+items.businesses.description=businesses can have more than one description, such as in a different language
+items.discoveryurl=Discovery URLs
+items.discoveryurl.description=are typically a link to a simple web page with additional information on it, such as a listing a services. Two reserved values are specified in the specification, 'homepage' and 'businessEntity'.
+items.type=Type
+items.contacts=Contacts
+items.contacts.description=Each business typically has several points of contact for a person or a job role within the business so that someone who finds the information can make human contact for any purpose. Examples for Type: "technical questions", "technical contact", "establish account", "sales contact".
+items.email=Email
+items.phone=Phone
+items.address=Address
+items.addressline.add=Add an addline (at least one is required).
+items.addressvalue=Address Value
+items.keyname.optional=Key Name (optional)
+items.keyvalue.optional=Key Value (optional)
+items.categories.description=UDDI uses a taxonomy system to categorize businesses and their services. These categories are defined as UDDI tModels and are defined by the administrator(s) of this UDDI node. These categories are appended to business registrations either by adding one or more "Key References" or by adding one or more "Key Reference Groups", which in turn can be a zero or more of Key References as part of it.
+items.keyrefcats=Keyed Reference Categories
+items.keyrefcat.add=Add Key Reference
+items.keyrefgroup=Keyed Reference Groups
+items.keyrefgroup.add=Add Key Reference Group
+items.key=Key
+items.identifiers=Identifiers
+items.identifiers.description=optionally, you can attach identifiers that uniquely identify this item from other systems, such as a tax ID or a <a href="http://www.whitehouse.gov/sites/default/files/omb/grants/duns_num_guide.pdf">DUNS Number</a>.
+items.signed.not=This item is not digitally signed.
+item.signed=This item is digitally signed. Signature Count: 
+items.signed.viewcert=View Certificate
+actions.save=Save
+actions.delete=Delete
+actions.sign=Digitally Sign
+actions.transfer=Transfer Ownership
+actions.subscribe=Subscribe
+errors.unknownentity=Error, Unrecongized entity type.
+errors.nodatareturned=No data returned.
+items.business=Business
+error.generic=Error 
+errors.tmodel.prefix=A tModel partition key generator must have a name that starts with uddi: 
+errors.tmodel.postfix=A tModel partition key generator must have a name that ends with :keyGenerator
+messages.success=Success
+errors.norecordsfound=No records were found.
+#just a prefix
+errors.uddi=UDDI Error 
+errors.nocertavaiable=Error, no certificate was available.
+items.nodeid=Node ID
+items.authorizedname=Authorized Name
+items.created=Created
+items.modified=Modified
+items.modifiedwithchildren=Modified include children
+items.signed=This item is digitally signed. Count:
+errors.nobusinessid=No business ID was specified.
+errors.noservicesdefined=No services are defined.
+actions.save.bindingtemplate=Binding Template saved successfully!
+actions.save.service=Service saved successfully!
+errors.noinput.businesskey=Error, no input was provided for the business key.
+items.pubisher.name=Publisher Name
+items.publisher.authname=Authorized Name
+items.publisher.admin=Administrator
+errors.noinput=No input was provided.
+actions.save.tmodel=tModel saved successfully!
+actions.delete.tmodel=tModel deleted successfully.
+actions.delete.business=Business deleted successfully.
+actions.delete.service=Service deleted successfully.
+search.wrylf=What are you looking for?
+items.tmodel=tModel
+items.bindingtemplate=Binding Template
+search.criteria=Search Criteria
+search.criteria.byname=By Name
+search.criteria.bycategory=By Category
+search.criteria.bykey=By Unique Identifier
+search.criteria.bytmodel=By tModel
+search.tip=*Tip: use '%' for any number of wild card characters and '_' for a single wild card character.
+search.results=Search Results
+search.searchfirst=Try searching first
+items.publisher=Publisher
+items.dsigs=Digital Signatures
+items.service.browser=Service Browser
+items.tmodel.browser=tModel Browser
+items.dsigs.description=This page will enable you to digitally sign a UDDI entity using a Java Applet and an X509 Digital Certificate. Windows and MacOS are supported.
+items.settings.description=Administrators can use this page to change the way this UDDI browser is configured, such as endpoint URLs, SSL stores, authentication mechanisms and more.
+pages.tmodelpart.title=tModel Key Generators (Partitions)
+pages.tmodelpart.content=TModel Key Generators are a special kind of tModel that enables you to define new tModels with any arbitrary tModel prefix that you want. For example, if you wanted a tModel defined as "uddi:www.mycompany.com:ServiceAuthenticationMethod", you would first have to create a tModel key generator with the value of "uddi:www.mycompany.com:keyGenerator". This is part of the UDDI specification and acts as a governance mechanism. You can also create a tModel Key Generator by using the Creat tModel menu option and by adding the appropriate settings.
+pages.tmodelpart.juddinote=For jUDDI implementations of UDDI, the "root" account cannot be used to create a keyGenerator.
+pages.tmodelpart.key=The UDDI tModel key
+pages.thmodepart.name=A name describing the key
+pages.viewsubscriptions.content=UDDI offers the ability for users to subscribe for notification to changes in most entities within a UDDI registry. However, the notification part is a bit strange. Users of strict UDDIv3 registries have only one option, periodically poll the UDDI registry for changes via the Subscription API. Although there's data types defined within the UDDI v3 specification, there's no API method for setting up a callback style of subscription, where the registry user hosts a web service that waits for notifications. In a callback subscription, those that need the information are notified immediately.<br><br>jUDDI based registries have an extension to the UDDIv3 specification that enables call back type of communication and is thus preferred mechanism.
+pages.serviceeditor.title=Service Editor
+errors.generic=Error
+pages.businesseditor.businesslist=Business Services
+pages.businesseditor.businesslist2=are defined for this business.
+items.service=Service
+errors.notsignedin=Either an error occured, or you're not signed in.
+pages.viewsubscriptions.listingheader=UDDI Subscriptions
+pages.viewsubscriptions.nosubs=No subscriptions are currently defined.
+errors.juddiapi.without.juddi=You're not connected to a jUDDI registry. Contact the administrator or check the configuration file.
+items.services.name.descriptions=Services are identified by one or more name. Multiple names are useful for different languages, legal names, or abbreviations.
+items.services.description=services can have more than one description, such as in a different language.
+items.bindingtemplate.keyrefgrp=Binding Template Keyed Reference Groups
+items.bindingtemplate.keyrefcat=Binding Template Keyed Reference Categories
+items.overviewurl=Overview Documents
+items.overviewurl.description=These are typically URLs to web pages that describe this tModel's details and usage scenarios.
+items.tmodelinstance.description=tModel Instance Description
+items.tmodelinstance.description2=tModel instance infos can have more than one description, such as in a different language.
+items.tmodelinstance.parameters=tModel Instance Parameters
+items.service.key=Service Key
+items.service.key.description=The Business Key is the unique identifier for the business that this service belongs to. If you specify a service key, it must be prefixed with an existing partition (key generator).
+items.bindingtemplate.description=A service in UDDI really defines a specific type of service, not necessarily an implementation of a service. Binding templates define specifically an implementation of a service and normally includes an access point describing how to use the service. Each service may have 0 or more binding templates. Some registries impose limits on the number of binding templates per service.
+items.bindingtemplate.add=Add a Binding Template
+items.bindingtemplate.key=Binding Template Key
+items.bindingtemplate.description.add=Add a Binding Template Description - binding templates can have more than one description, such as in a different language.
+items.accesspoint=Access Point
+items.accesspoint.description=UDDI allows for a choice of either a Hosting Redirector OR an Access Point. Access Point is recommend. The access point is usually a URL for the service endpoint.
+items.accesspoint.type=Access Point Type
+items.accesspoint.value=Access Point Value
+items.hostingredirector=Hosting Redirector
+items.tmodelinstance.info=tModel Instance Information
+items.tmodelinstance.info.desc=a binding template can have additional information attached to it using the tModel Instance.
+items.overviewurl.add=Add an Overview Document
+items.overviewurl.description.add=Add an Overview Document Description
+items.tmodelinstance.add=Add a tModel Instance
+items.tmodelinstance.description.add=Add a tModel Instance Description
+items.tmodel.key=tModel Key
+items.overviewdocument.description=Overview Document Descriptions
+navbar.help=Help
+pages.tmodeleditor.title=tModel Editor
+pages.editor.tabnav.overview=Overview Documents
+pages.editor.tabnav.overview.description=These are typically URLs to web pages that describe this tModel's details and usage scenarios.
+items.tmodel.description=tModels can have more than one description, such as in a different language.
+items.tmodel.key.description=\ The tModel Key is the unique identifier. If you specify a tModel, it must be prefixed with an existing partition (key generator), other one is generated for you.
+items.tmodel.name=Name - The name describes this tModel. It is a required field.
+items.clicktoedit=Click to edit
+pleasewait=Please wait
+items.description.add=Add a Description
+items.name.add=Add a Name
+items.contact.primary=Primary Contact
+#suggestion
+items.phone.types=(Extension, Domestic, International, DSN)
+items.sortcode=Sort Code
+items.contact.type=Contact Type
+items.contact.default=(Job Title, Role)
+items.addresstype.default=(headquarters. sales office, billing)
+items.welcome=Welcome
+items.expires=Expires
+items.actions=Actions
+actions.asxml=View as XML
+items.name.description=UDDI entities can have more than one name, such as abbreviations or in another language.
+items.signatures.invalid=Signature is invalid! Reason: 
+items.signatures.valid=Digital Signature is valid.
+items.unknown=Error, unable to identify which type of object you wanted.
+items.service.add=Add a Service
+items.publisherassertion.add=Add a Business Relationship (Publisher Assertion)
+actions.saved=Saved!
+items.details=Details
+navbar.publisherassertions=Publisher Assertions
+navbar.publisherassertions.tooltip=Allows you to configure relationships between businesses.
+navbar.create.mybiz=My Businesses
+navbar.create.mybiz.tooltip=A list of all businesses that you can alter.
+navbar.create.mybiz.content=My Businesses contains a list of all the UDDI business elements that you have access to. This typically means that you can make changes to it, however this may vary between vendors.
+actions.transfer.description=Transfer this entity to another UDDI node or publisher.
+actions.subscribe.description=Alert me when this entity changes.
+items.publisherassertions.from=This Business
+items.publisherassertions.to=Is related to business
+items.publisherassertions.relationship=Relationship
+items.status=Status
+actions.deleted=Deleted
+navbar.subscriptions.feed=News Feed
+items.picker=Picker
+navbar.subscriptions.feed.tooltip=A new feed based on your subscription settings.
+items.tmodel.chooser=tModel Chooser
+actions.select=Select
+actions.cancel=Cancel
+navbar.transfer=Transfer Custody
+navbar.transfer.tooltip=Transfer Ownership to another Publisher
+items.subscriptions.assertion=Assertion Status Report Changed
+items.subscriptions.bindings=Bindings Changed
+items.subscriptions.business=Businesses Changed
+items.subscriptions.assertion2=Business Relationships (Publisher Assertions)
+items.subscriptions.services=Services Changed
+items.subscriptions.servicelist=Service Listing
+items.subscriptions.tmodels=tModels Changed
+items.subscriptions.tmodels2=tModel Listing
+actions.canceled=Canceled
+actions.success=Success!
+items.transfertoken=Transfer Token
+items.transferkeys=Keys to Transfer (KeyBag)
+error.ohno=Oh no!
+error.occurred=Unfortunately, an error occurred. 
+error.pleasereport=Please do us a favor and report to your jUDDI administrator.
+error.timeofevent=Time the event occurred
+error.reportadmin=If you are the administrator, please review the server logs and report the findings to the following URL.
+error.filereport=File a Bug Report
+navbar.help.about=About
+navbar.help.about.tooltip=About this site
+pages.about.content=This website is part of the <a href="http://juddi.apache.org">Apache jUDDI</a> project and provides end user functionality for\n            interacting with a UDDI version 3 registry as defined by the OASIS standard located here: <a href="http://uddi.org/pubs/uddi-v3.0.2-20041019.htm">http://uddi.org/pubs/uddi-v3.0.2-20041019.htm</a>.\n            <br><br>\n            This user interface should work with any UDDI v3 implementation but was designed and tested with the Apache jUDDI server and communicates via \n            web service transactions.\n            <br><br>\n            This user interface is open source and uses a number of other open source libraries and capabilities which are listed below.
+items.binding.chooser=Binding Chooser
+items.service.chooser=Service Chooser
+items.business.chooser=Business Chooser
+items.assertion.chooser=Publisher Assertion Status
+items.subscription.CompletionStatus.STATUS_COMPLETE=This means that there is a visible relationship between two businesses.
+items.subscription.CompletionStatus.STATUS_FROM_KEY_INCOMPLETE=This indicates that a business has has asserted a relationship with one of your businesses, but you have not reciprocated the relationship.
+items.subscription.CompletionStatus.STATUS_TO_KEY_INCOMPLETE=This indicates that the owner of the business has asserted a relationship with another business, but it has not be reciprocated.
+items.subscription.CompletionStatus.STATUS_BOTH_INCOMPLETE=This indicates that the publisher assertion embedded in the assertion Status Item has been deleted from both ends of the business relationship.
+pages.subscription.content=UDDI has a feature that allows you to be alerted of updates to either specific UDDI entries or to search results. This page will help you setup a subscription to meet your needs. Note: only one type of subscription filter can be defined per subscription. Normally, users can make as many subscriptions as they want, however it may be effectively limited by the registry implementation.
+pages.subscription.step1=Step 1 - What do you type of information to you want alerts on?
+pages.subscription.step2=Step 2 - Which items do you want alerts on?
+pages.subscription.step1.specific=Changes to a specific item
+pages.subscription.step1.search=Changes to search results, such as a new item
+items.publisherassertion.status=Publisher Assertion Status
+actions.add=Add
+actions.remove=Remove
+items.findqualifiers=Find Qualifiers
+pages.subscription.step3=Step 3 - How do want to receive the alerts?
+pages.subscription.step3.direct=Send me alerts directly
+pages.subscription.step3.direct.tooltip=Either via a UDDI Subscription Client API, Email or some other notifier
+pages.subscription.step3.pickup=I'll pick them up
+pages.subscription.step3.pickup.tooltip=Either via this website or from your own software that periodically checks for updates
+pages.subscription.step3.content=In order for a UDDI server to notify you of updates asynchronously, you first have to define a business, with a service, with a binding template that tells UDDI where to send the notification (Access Point value). Some UDDI servers (such as Apache jUDDI) require you to also add a tModel Instance defining the transport parameter, such as 
+pages.subscription.step4=Step 4 - Options
+items.notificationinterval=Notification Interval (hh:mm:ss)
+items.expiration=Expiration
+items.subscriptionbrief=Brief Subscription
+items.maxrecords.callback=Max records per callback
+navbar.subscriptions.feed.content=The news feed provides you a list of all updated content per your subscription settings
+pages.transfer.content=\ UDDI supports the transfer the ownership of Businesses (and all their child objects including services, binding templates) and tModel entities to another publisher. Publishers represent one or more logins or usernames.<br><Br>Transfers can occur within a UDDI registry node (intra-node) and between multiple registries nodes (inter-node). This utility will help you setup intra-node transfers only. No known UDDI implementations support inter-node transfers (replication API's are not implemented.<br><br>The process is straightforward, select what entities you want to transfer, then click OK. A token will be presented to you which then need to give to the other publisher. The other publisher then needs to accept the token and transfer the ownership to the publisher. Finally, the token is then destroyed to prevent any inadvertent transfers.<br>Transfers can be aborted (token invalidated) before the other publisher transfers the ownership over. Once it's been transfered and you want to undo the transfer, contact the registry administrator and the other publisher.
+pages.transfer.createtoken=Create a new Token
+pages.transfer.discardtoken=Discard a transfer token (abort the transfer)
+pages.transfer.accepttransfer=Accept a Transfer
+actions.refresh=Refresh
+pages.transfer.gettoken=Get a Transfer Token
+items.token=Token
+actions.accept=Accept
+pages.transfer.createtoken.content=This tab will help you create a transfer token. Once you have created it, copy the entire contents of the token and give it to the person you're transfering ownership to.
+pages.transfer.discardtoken.content=Made a mistake? No problem. Enter the token below along with the keys to be transfered and it will be removed from the system, preventing any future transfer. It must match exactly. Note: both fields require XML content.
+pages.transfer.accepttransfer.content=If another UDDI publisher gave you a transfer token and you all agreed to transfer ownership of a business or tModel, it can be done here. Enter the transfer token. It must match exactly.
+actions.savethis=Copy and save this information to your computer. There's no way to retrieve this information again! 
+navbar.help.source=Source Code
+actions.approve=Approve
+navbar.create.serviceimport=Register Services from WSDL
+navbar.create.serviceimport.tooltip=Based on the UDDI TC, Using WSDL in a UDDI Registry
+warning.ssl=Warning, you're not using SSL and your password could be exposed!
diff --git a/juddi-gui/src/java/org/apache/juddi/webconsole/resources/web_es.properties b/juddi-gui/src/java/org/apache/juddi/webconsole/resources/web_es.properties
new file mode 100644
index 0000000..2fd1393
--- /dev/null
+++ b/juddi-gui/src/java/org/apache/juddi/webconsole/resources/web_es.properties
@@ -0,0 +1,333 @@
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+language=es
+direction=LTR
+title=Apache jUDDI - de C\u00f3digo Abierto UDDI Descubrimiento de Servicios
+description=jUDDI es una implementaci\u00f3n de c\u00f3digo abierto de la especificaci\u00f3n OASIS UDDI. Piense en ello como una gu\u00eda telef\u00f3nica para servicios web.
+navbar.home=Casa
+
+navbar.discover=Descubrir
+navbar.businesses=Negocios
+
+navbar.businesses.tooltip=Busque Negocios
+navbar.services=Servicios
+
+navbar.services.tooltip=Busque Servicios
+navbar.tmodels=tModels
+
+navbar.tmodels.tooltip=Busque tModels
+navbar.publishers=Editores
+
+navbar.publishers.tooltip=Busque Editores
+
+navbar.search=Buscar
+navbar.search.tooltip=Buscar
+navbar.create=Crear
+navbar.create.business=Negocios
+navbar.create.business.tooltip=Crear un Negocio
+navbar.create.service=Servicios
+navbar.create.service.tooltip=Crear un Servicio
+navbar.create.tmodel=tModel
+navbar.create.tmodel.tooltip=Crear un tModel
+navbar.create.tmodelkeygen.tooltip=Crear un tModel Generador de Claves
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+navbar.create.tmodel=tModel
+navbar.create.publisher=Editor
+navbar.create.publisher.tooltip=Crear un  Editor
+navbar.create.tmodelkeygen=tModel Partition (Key Generator)
+
+navbar.subscriptions=Suscripciones
+navbar.subscriptions.view=Ver Suscripciones
+navbar.subscriptions.create=Crear Suscripciones
+navbar.subscriptions.view.tooltip=Ver Mis Suscripciones
+navbar.subscriptions.create.tooltip=Crear una suscripci\u00f3n
+
+navbar.settings=Configuraci\u00f3n
+navbar.settings.config=Configurar
+navbar.settings.config.tooltip=Configure este Navegador UDDI
+
+navbar.help.userguide=Gu\u00eda de usuarios
+navbar.help.devguide=Gu\u00eda del desarrollador
+navbar.help.api=API Documentaci\u00f3n
+navbar.help.wiki=jUDDI Wiki
+navbar.help.bugreport=Presentar un informe de errores
+navbar.help.website=Sitio web oficial jUDDI
+navbar.help.mailinglist=Mailing List Archive
+
+navbar.login.username=Nombre de usuario
+navbar.login.password=Contrase\u00f1a
+navbar.login.button=Login
+navbar.login.logout=Pulse para salir
+
+index.juddi=jUDDI (pronunciado "Judy") es una implementaci\u00f3n de c\u00f3digo abierto de Java de la Universal Description, Discovery and Integration (UDDI v3) especificaci\u00f3n (Web) Servicios. Piense en UDDI como las p\u00e1ginas amarillas de la gu\u00eda telef\u00f3nica para los servicios web.
+learnmore=Aprender M\u00e1s
+viewdetails=Ver los Detalles
+index.learn=Aprenda todo acerca de UDDI Especificaci\u00f3n T\u00e9cnica de OASIS
+index.search=Una funci\u00f3n de b\u00fasqueda avanzada que le permite buscar un criterio espec\u00edfico.
+index.browse=Flip a trav\u00e9s de las p\u00e1ginas de UDDI. Si usted es curiosidad o que est\u00e1 buscando algo espec\u00edfico y no saben qu\u00e9 buscar, la funci\u00f3n de b\u00fasqueda es un buen lugar para comenzar.
+index.browse.title=Busque
+index.search.title=Buscar
+index.learn.title=Acerca de UDDI
+footer.apachecopyright=&copy; 2013 La Fundaci\u00f3n de Software Apache. Todos los Derechos Reservados.
+modal.digitalsignaturewarning.title=Advertencia de firma digital
+modal.digitalsignaturewarning.body=Este art\u00edculo est\u00e1 firmado digitalmente. Esto significa que al guardar los cambios, todas las firmas existentes dejar\u00e1n de ser v\u00e1lidos y ser\u00e1n autom\u00e1ticamente excluidos del proceso de guardado.
+modal.close=Cerrar
+modal.savechanges=Guardar cambios
+totals.records=Total de Registros
+totals.recordsreturned=Registros Devueltos
+totals.offset=Offset
+items.lang=Idioma
+items.loading=Carga
+pages.businesseditor.title=Empresas Editor
+pages.businesskey=Business Key
+pages.businesskey.description=La clave del negocio es el identificador \u00fanico para este negocio y existe dentro de este registro.
+pages.editor.tabnav.general=General
+pages.editor.tabnav.discovery=Descubrimiento
+pages.editor.tabnav.contacts=Contactos
+pages.editor.tabnav.categories=Categor\u00edas
+pages.editor.tabnav.identifiers=Identificadores
+pages.editor.tabnav.services=Servicios
+pages.editor.tabnav.signatures=Firmas
+pages.editor.tabnav.opinfo=Informaci\u00f3n sobre el Funcionamiento
+pages.editor.tabnav.relatedbusinesses=Los negocios relacionados
+items.name=Nombre
+items.business.name.description=Las empresas est\u00e1n identificados por una o m\u00e1s nombre. Varios nombres son \u00fatiles para diferentes idiomas, nombres legales o abreviaturas.
+items.value=Valor
+items.description=Descripci\u00f3n
+items.businesses.description=negocios pueden tener m\u00e1s de una descripci\u00f3n, tal como en un idioma diferente
+items.discoveryurl=Descubrimiento URLs
+items.discoveryurl.description=son t\u00edpicamente un enlace a una p\u00e1gina web simple con informaci\u00f3n adicional sobre \u00e9l, tal como un listado a los servicios. Dos valores reservados se especifican en la especificaci\u00f3n, 'homepage' y "businessEntity '.
+items.type=Tipo
+items.contacts=Contactos
+items.contacts.description=Cada negocio tiene t\u00edpicamente varios puntos de contacto de una persona o de un puesto de trabajo dentro de la empresa para que alguien que encuentra la informaci\u00f3n puede hacer que el contacto humano con cualquier prop\u00f3sito. Ejemplos de tipo: "cuestiones t\u00e9cnicas", "contacto t\u00e9cnico", "establecer la cuenta", "contacto de ventas".
+items.email=Email
+items.phone=Tel\u00e9fono
+items.address=Direcci\u00f3n
+items.addressline.add=Agregar una l\u00ednea de direcci\u00f3n (al menos uno es necesario).
+items.addressvalue=Direcci\u00f3n del Valor
+items.keyname.optional=Nombre de clave (opcional)
+items.keyvalue.optional=Valor de clave (opcional)
+items.categories.description=UDDI utiliza un sistema de taxonom\u00eda para categorizar a las empresas y sus servicios. Estas categor\u00edas son definidas como estructuras tModel UDDI y est\u00e1n definidos por el administrador (s) de este nodo UDDI. Estas categor\u00edas se a\u00f1aden a los registros empresariales mediante la adici\u00f3n de uno o m\u00e1s "Referencias clave" o mediante la adici\u00f3n de uno o m\u00e1s "grupos de referencia de teclas", que a su vez puede ser un cero o m\u00e1s de las referencias clave en el contexto de la misma.
+items.keyrefcats=Categor\u00edas con clave de referencia
+items.keyrefcat.add=Agregar referencia clave
+items.keyrefgroup=Grupos con clave de referencia
+items.keyrefgroup.add=Agregar grupo de referencia clave
+items.key=Clave
+items.identifiers=Identificadores
+items.identifiers.description=opcionalmente, puede asociar los identificadores que identifican este tema a partir de otros sistemas, como por ejemplo un n\u00famero de identificaci\u00f3n fiscal o un <a href = http://www.whitehouse.gov/sites/default/files/omb/grants/duns_num_guide.pdf ""> N\u00famero DUNS </ a>.
+items.signed.not=Este art\u00edculo no est\u00e1 firmado digitalmente.
+item.signed=Este art\u00edculo est\u00e1 firmado digitalmente. Firma de visitas:
+items.signed.viewcert=Ver certificado
+actions.save=Guardar
+actions.delete=Borrar
+actions.sign=Firmar Digitalmente
+actions.transfer=Transferencia de la propiedad
+actions.subscribe=Suscribir
+errors.unknownentity=Error, Tipo de entidad Unrecongized.
+errors.nodatareturned=No se obtuvieron datos.
+items.business=Negocios
+error.generic=Error
+errors.tmodel.prefix=Una partici\u00f3n tModel generador de claves debe tener un nombre que comienza con uddi:
+errors.tmodel.postfix=A tModel partition key generator must have a name that ends with :keyGenerator
+messages.success=\u00e9xito
+errors.norecordsfound=No se encontraron registros..
+errors.uddi=UDDI Error 
+errors.nocertavaiable=Error, no se dispone de certificado.
+items.nodeid=Node ID
+items.authorizedname=Nombre autorizado
+items.created=Creado
+items.modified=Modificado
+items.modifiedwithchildren=Modificado incluir a los ni\u00f1os
+items.signed=Este art\u00edculo est\u00e1 firmado digitalmente. Count:
+errors.nobusinessid=No se ha especificado ID de empresa
+errors.noservicesdefined=No hay servicios est\u00e1n definidos.
+actions.save.bindingtemplate=Enlace de plantillas guardado correctamente!
+actions.save.service=Servicio guardado correctamente!
+errors.noinput.businesskey=Error, no se facilit\u00f3 la entrada de la clave de negocio.
+items.pubisher.name=Nombre del editor
+items.publisher.authname=Nombre Autorizado
+items.publisher.admin=Administrador
+errors.noinput=Sin entrada fue proporcionada.
+actions.save.tmodel=tModel guardado correctamente!
+actions.delete.tmodel=tModel eliminado correctamente.
+actions.delete.business=Negocios eliminado correctamente.
+actions.delete.service=Servicio eliminado correctamente.
+search.wrylf=\u00bfQu\u00e9 est\u00e1s buscando?
+items.tmodel=tModel
+items.bindingtemplate=Enlace de Plantillas
+search.criteria=Criterios de B\u00fasqueda
+search.criteria.byname=Por Nombre
+search.criteria.bycategory=Por Categor\u00eda
+search.criteria.bykey=Por Unique Identifier
+search.criteria.bytmodel=Por tModel
+search.tip=* Consejo: '%' uso para cualquier n\u00famero de caracteres comod\u00edn y '_' para un car\u00e1cter comod\u00edn \u00fanico.
+search.results=Resultados de la b\u00fasqueda
+search.searchfirst=Intenta buscar primero
+items.publisher=Editor
+items.dsigs=Firmas Digitales
+items.service.browser=Servicio Explorar
+items.tmodel.browser=tModel Explorar
+items.dsigs.description=Esta p\u00e1gina le permitir\u00e1 firmar digitalmente una entidad UDDI mediante un applet de Java y un certificado X509 Digital. Windows y MacOS son compatibles.
+items.settings.description=Los administradores pueden utilizar esta p\u00e1gina para cambiar la forma en que se configura este navegador UDDI, como direcciones URL de punto final, tiendas de SSL, los mecanismos de autenticaci\u00f3n y m\u00e1s.
+pages.tmodelpart.title=tModel clave Generadores (particiones)
+pages.tmodelpart.content=Generadores TModel clave son un tipo especial de tModel que permite definir nuevas estructuras tModel con cualquier prefijo arbitrario tModel que desea. Por ejemplo, si usted quiere un tModel define como "uddi: www.mycompany.com:ServiceAuthenticationMethod", primero tendr\u00eda que crear un generador de claves tModel con el valor de "uddi: www.mycompany.com:keyGenerator". Esto es parte de la especificaci\u00f3n UDDI y act\u00faa como un mecanismo de gobernanza. Tambi\u00e9n puede crear un generador de claves tModel mediante la opci\u00f3n de men\u00fa tModel Creat y a\u00f1adiendo los valores adecuados.
+pages.tmodelpart.juddinote=Para implementaciones jUDDI de UDDI, la cuenta "root" no se puede utilizar para crear un keygenerator.
+pages.tmodelpart.key=El tModel UDDI clave
+pages.thmodepart.name=Un nombre de describir la tecla
+pages.viewsubscriptions.content=UDDI ofrece la posibilidad a los usuarios a suscribirse para la notificaci\u00f3n de los cambios en la mayor\u00eda de las entidades en un registro UDDI. Sin embargo, la parte de notificaci\u00f3n es un poco extra\u00f1o. Los usuarios de los estrictos UDDIv3 registros tienen una sola opci\u00f3n, sondean peri\u00f3dicamente el registro UDDI para los cambios a trav\u00e9s de la API de Suscripci\u00f3n. Aunque hay tipos de datos definidos en la especificaci\u00f3n UDDI v3, no hay m\u00e9todo de la API para la creaci\u00f3n de un estilo de devoluci\u00f3n de llamada de suscripci\u00f3n, donde el usuario recibe un registro de servicios web que espera para las notificaciones. En una suscripci\u00f3n de devoluci\u00f3n de llamada, los que necesitan la informaci\u00f3n se notificar\u00e1 de inmediato. <br> <br> Registros basados \u200b\u200bjUDDI tener una extensi\u00f3n de la especificaci\u00f3n UDDIv3 que permite llamar de nuevo tipo de comunicaci\u00f3n y por lo tanto mecanismo preferido.
+pages.serviceeditor.title=Servicio Editor
+errors.generic=Error
+pages.businesseditor.businesslist=Servicios Empresariales
+pages.businesseditor.businesslist2=se definen para este negocio.
+items.service=Servicio
+errors.notsignedin=O ha ocurrido un error, o no te has conectado pulg
+pages.viewsubscriptions.listingheader=UDDI Suscripciones
+pages.viewsubscriptions.nosubs=No hay suscripciones se definen actualmente.
+errors.juddiapi.without.juddi=Usted no est\u00e1 conectado a un registro jUDDI. P\u00f3ngase en contacto con el administrador o consulte el archivo de configuraci\u00f3n.
+items.services.name.descriptions=Los servicios son identificadas por una o m\u00e1s nombre. Varios nombres son \u00fatiles para diferentes idiomas, nombres legales o abreviaturas.
+items.services.description=servicios puede tener m\u00e1s de una descripci\u00f3n, tal como en un idioma diferente.
+items.bindingtemplate.keyrefgrp=Enlace de grupos de plantillas de referencia con clave
+items.bindingtemplate.keyrefcat=Encuadernaci\u00f3n Categor\u00edas de plantillas de referencia con clave
+items.overviewurl=Documentos Informaci\u00f3n
+items.overviewurl.description=Por lo general son las URL a las p\u00e1ginas web que describen detalles de este tModel y escenarios de uso.
+items.tmodelinstance.description=Descripci\u00f3n tModel Instancia
+items.tmodelinstance.description2=informaciones sobre TModel instancia puede tener m\u00e1s de una descripci\u00f3n, tal como en un idioma diferente.
+items.tmodelinstance.parameters=Par\u00e1metros TModel Instancia
+items.service.key=Servicio Clave
+items.service.key.description=La clave del negocio es el identificador \u00fanico para el negocio que este servicio pertenece. Si se especifica una clave de servicio, debe ser precedido por una partici\u00f3n existente (generador de claves).
+items.bindingtemplate.description=Un servicio en UDDI realmente define un tipo espec\u00edfico de servicio, no necesariamente una implementaci\u00f3n de un servicio. Plantillas de uni\u00f3n definir espec\u00edficamente una implementaci\u00f3n de un servicio y normalmente incluye un punto de acceso que describe c\u00f3mo utilizar el servicio. Cada servicio puede tener 0 o m\u00e1s plantillas de uni\u00f3n. Algunos registros imponer l\u00edmites en el n\u00famero de plantillas de uni\u00f3n por servicio.
+items.bindingtemplate.add=Agregar un Enlace de plantillas
+items.bindingtemplate.key=Key Enlace de plantillas
+items.bindingtemplate.description.add=A\u00f1adir una descripci\u00f3n de plantillas Binding - Plantillas de uni\u00f3n pueden tener m\u00e1s de una descripci\u00f3n, por ejemplo, en un idioma diferente.
+items.accesspoint=Punto de Acceso
+items.accesspoint.description=UDDI permite una opci\u00f3n de un redireccionamiento de alojamiento o un punto de acceso. Punto de Acceso es recomendable. El punto de acceso es generalmente una URL para el extremo de servicio.
+items.accesspoint.type=Tipo de Punto de Acceso
+items.accesspoint.value=Valor del Punto de Acceso
+items.hostingredirector=Redireccionamiento Hosting
+items.tmodelinstance.info=tModel informaci\u00f3n de instancia
+items.tmodelinstance.info.desc=un modelo de uni\u00f3n puede disponer de informaci\u00f3n adicional que se le atribuye el uso de la Instancia tModel.
+items.overviewurl.add=Agregar un documento general\n
+items.overviewurl.description.add=Agregar un Documento Descripci\u00f3n general
+items.tmodelinstance.add=Agregar una instancia de tModel
+items.tmodelinstance.description.add=Agregar una descripci\u00f3n Instancia tModel
+items.tmodel.key=tModel Clave
+items.overviewdocument.description=Descripci\u00f3n General del Documenton
+navbar.help=Ayudar
+pages.tmodeleditor.title=tModel Editor
+pages.editor.tabnav.overview=Documentos Informaci\u00f3n General
+pages.editor.tabnav.overview.description=ads
+items.tmodel.description=tModels puede tener m\u00e1s de una descripci\u00f3n, tal como en un idioma diferente.
+items.tmodel.key.description=La clave tModel es el identificador \u00fanico. Si se especifica un tModel, debe estar precedido de una partici\u00f3n existente (generador de claves), la otra se genera para usted.
+items.tmodel.name=Nombre - El nombre describe esta estructura tModel. Se trata de un campo obligatorio.
+items.clicktoedit=Haga clic para editar
+pleasewait=Por favor, espere
+items.description.add=Agregar una descripci\u00f3n
+items.name.add=Agregar un Nombre
+items.contact.primary=Contacto Primario
+#suggestion
+items.phone.types=(Extensi\u00f3n, nacionales, internacionales, DSN)
+items.sortcode=C\u00f3digo de Clasificaci\u00f3n
+items.contact.type=Tipo de Contacto
+items.contact.default=(T\u00edtulo del trabajo, Papel)
+items.addresstype.default=(headquarters. oficina de ventas, facturaci\u00f3n)
+items.welcome=Bienvenido
+items.expires=Expira
+items.actions=Acciones
+actions.asxml=Ver como XML
+items.name.description=Entidades UDDI pueden tener m\u00e1s de un nombre, como abreviaturas o en otro idioma.
+items.signatures.invalid=La firma es v\u00e1lida! Raz\u00f3n:
+items.signatures.valid=La firma digital es v\u00e1lida.
+items.unknown=Error, no puede identificar el tipo de objeto que quer\u00eda.
+items.service.add=Agregar un Servicio
+items.publisherassertion.add=Agregar una Relaci\u00f3n de Negocios (aserci\u00f3n Publisher)
+actions.saved=Salvo!
+items.details=Detalles
+navbar.publisherassertions=Las Afirmaciones Editor
+navbar.publisherassertions.tooltip=Permite configurar las relaciones entre empresas.
+navbar.create.mybiz=Mis Empresas
+navbar.create.mybiz.tooltip=Una lista de todos los negocios que se pueden alterar.
+navbar.create.mybiz.content=Mis empresas contiene una lista de todos los elementos empresariales UDDI que usted tiene acceso. Esto normalmente significa que usted puede hacer cambios en \u00e9l, sin embargo esto puede variar entre los proveedores.
+actions.transfer.description=Traslade esta entidad a otro nodo UDDI o el editor.
+actions.subscribe.description=Avisarme cuando esta entidad los cambios.
+items.publisherassertions.from=Este Negocio
+items.publisherassertions.to=Est\u00e1 relacionado con los negocios
+items.publisherassertions.relationship=Relaci\u00f3n
+items.status=Estado
+actions.deleted=Suprimido
+navbar.subscriptions.feed=Noticias Corriente
+items.picker=Selector
+navbar.subscriptions.feed.tooltip=Un nuevo avance basado en la configuraci\u00f3n de la suscripci\u00f3n.
+items.tmodel.chooser=tModel Selector
+actions.select=Seleccionar
+actions.cancel=Cancelar
+navbar.transfer=Transferencia de Custodia
+navbar.transfer.tooltip=Transferencia de la propiedad a otra Editor
+items.subscriptions.assertion=Informe sobre la situaci\u00f3n de aserci\u00f3n cambiado
+items.subscriptions.bindings=Vinculaciones Cambiado
+items.subscriptions.business=Las empresas Cambiado
+items.subscriptions.assertion2=Relaciones comerciales (Aseveraciones Editorial)
+items.subscriptions.services=Servicios Cambiado
+items.subscriptions.servicelist=Lista de servicios
+items.subscriptions.tmodels=tModels Cambiado
+items.subscriptions.tmodels2=Listado tModel
+actions.canceled=Cancelado
+actions.success=\u00c9xito!
+items.transfertoken=Traslado Token
+items.transferkeys=Claves para la transferencia (Bolsa de clave)
+error.ohno=\u00a1Ay no!
+error.occurred=Por desgracia, se ha producido un error.
+error.pleasereport=Por favor, haga el favor de informe al administrador jUDDI.
+error.timeofevent=Hora en que ocurri\u00f3 el evento
+error.reportadmin=Si usted es el administrador, por favor revise los registros del servidor y reportar los resultados a la siguiente URL.
+error.filereport=Presentar un informe de errores
+navbar.help.about=Acerca de
+navbar.help.about.tooltip=Acerca de este sitio
+pages.about.content=Este sitio es parte de la <a href="http://juddi.apache.org"> Apache jUDDI </ a> proyecto y proporciona funcionalidad para el usuario final\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 interactuar con una versi\u00f3n 3 registro UDDI tal como se define por la norma OASIS se encuentra aqu\u00ed: <un\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <br>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Esta interfaz de usuario deber\u00eda funcionar con cualquier aplicaci\u00f3n UDDI v3, pero fue dise\u00f1ado y probado con el servidor Apache jUDDI y se comunica a trav\u00e9s de\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 transacciones de servicios Web.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <br>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Esta interfaz de usuario es de c\u00f3digo abierto y utiliza una serie de otras bibliotecas y las capacidades que se enumeran a continuaci\u00f3n de c\u00f3digo abierto.
+items.binding.chooser=Binding Selector
+items.service.chooser=Servicio de Selector
+items.business.chooser=Negocio Selector
+items.assertion.chooser=Editorial Status Aserci\u00f3n
+items.subscription.CompletionStatus.STATUS_COMPLETE=Esto significa que existe una relaci\u00f3n visible entre dos empresas.
+items.subscription.CompletionStatus.STATUS_FROM_KEY_INCOMPLETE=Esto indica que un negocio se ha sostenido una relaci\u00f3n con una de sus empresas, pero no ha correspondido a la relaci\u00f3n.
+items.subscription.CompletionStatus.STATUS_TO_KEY_INCOMPLETE=Esto indica que el propietario de la empresa ha afirmado una relaci\u00f3n con otra empresa, pero no se ha correspondido.
+items.subscription.CompletionStatus.STATUS_BOTH_INCOMPLETE=Esto indica que la afirmaci\u00f3n editor incrustado en el Estado afirmaci\u00f3n art\u00edculo ha sido borrado de ambos extremos de la relaci\u00f3n de negocios.
+pages.subscription.content=UDDI tiene una caracter\u00edstica que le permite ser alertado de cambios a cualquiera de las entradas espec\u00edficas UDDI o para los resultados de b\u00fasqueda. Esta p\u00e1gina le ayudar\u00e1 a configurar una suscripci\u00f3n para satisfacer sus necesidades. Nota: s\u00f3lo un tipo de filtro de suscripci\u00f3n puede ser definido por suscripci\u00f3n. Normalmente, los usuarios pueden hacer tantas suscripciones como quieren, sin embargo, puede ser efectivamente limitado por la aplicaci\u00f3n de registro.
+pages.subscription.step1=Paso 1 - \u00bfQu\u00e9 tipo de informaci\u00f3n que desea recibir alertas sobre?
+pages.subscription.step2=Paso 2 - \u00bfA qu\u00e9 elementos desea que las alertas en?
+pages.subscription.step1.specific=Los cambios en un elemento espec\u00edfico
+pages.subscription.step1.search=Los cambios en los resultados de b\u00fasqueda, tales como un nuevo elemento
+items.publisherassertion.status=Editorial Status aserci\u00f3n
+actions.add=A\u00f1adir
+actions.remove=Eliminar
+items.findqualifiers=Encontrar Calificadores
+pages.subscription.step3=Paso 3 - \u00bfC\u00f3mo desea recibir las alertas?
+pages.subscription.step3.direct=Recibir avisos directamente
+pages.subscription.step3.direct.tooltip=O a trav\u00e9s de una suscripci\u00f3n de cliente API UDDI, correo electr\u00f3nico o cualquier otro notificador
+pages.subscription.step3.pickup=Yo recoger\u00e9
+pages.subscription.step3.pickup.tooltip=O a trav\u00e9s de este sitio web o de su propio software que comprueba peri\u00f3dicamente si hay actualizaciones
+pages.subscription.step3.content=Para que un servidor UDDI para notificarle de cambios de forma as\u00edncrona, primero hay que definir un negocio con una empresa, con una plantilla de enlace que dice UDDI donde enviar la notificaci\u00f3n (valor del punto de acceso). Algunos servidores UDDI (como Apache jUDDI) requieren que usted agregue tambi\u00e9n una instancia tModel definir el par\u00e1metro de transporte, tales como
+pages.subscription.step4=Paso 4 - Opciones
+items.notificationinterval=Notificaci\u00f3n Intervalo (hh: mm: ss)
+items.expiration=Vencimiento
+items.subscriptionbrief=Breve Suscripci\u00f3n
+items.maxrecords.callback=Registros m\u00e1ximos por devoluci\u00f3n de llamada
+navbar.subscriptions.feed.content=El servicio de noticias que proporciona una lista de todo el contenido actualizado por la configuraci\u00f3n de suscripci\u00f3n
+pages.transfer.content=UDDI soporta la transferencia de la propiedad de las empresas (y todos sus objetos secundarios, incluidos los servicios, las plantillas de uni\u00f3n) y entidades tModel a otro editor. Editores representan una o m\u00e1s conexiones o nombres de usuario. <br> Transferencias <Br> pueden ocurrir dentro de un nodo de registro UDDI (intra-nodo) y entre varios nodos de registros (entre nodos). Esta utilidad le ayudar\u00e1 a configurar las transferencias intra-nodo \u00fanico. No se conocen las implementaciones UDDI soportan transferencias entre nodos (API de replicaci\u00f3n no se implementan. <br> El proceso es sencillo, seleccionar qu\u00e9 entidades que desea transferir y haga clic en Aceptar. Una muestra se presentar\u00e1 para que luego tenga que dar al otro editor. el otro editor debe entonces aceptar el token y transferir la propiedad a \u00e9l. Finalmente, el token se destruye para evitar cualquier transferencia involuntaria. <br> transferencias pueden ser abortados (token invalide) antes de que el otro editor transfiere la propiedad de. Una vez que se ha trasladado y desea deshacer la transferencia, p\u00f3ngase en contacto con el administrador del registro y el otro editor.
+pages.transfer.createtoken=Crear un nuevo Token
+pages.transfer.discardtoken=Descartar un token de transferencia (abortar la transferencia)
+pages.transfer.accepttransfer=Aceptar una transferencia
+actions.refresh=Refrescar
+pages.transfer.gettoken=Obtener un token de transferencia
+items.token=Token
+actions.accept=Accept
+pages.transfer.createtoken.content=Esta ficha le ayudar\u00e1 a crear un token de transferencia. Una vez que haya creado, copiar todo el contenido de la ficha y d\u00e1rselo a la persona que est\u00e1 transfiriendo la propiedad a.
+pages.transfer.discardtoken.content=Cometido un error? No hay problema. Introduzca el token a continuaci\u00f3n junto con las claves para ser transferidos y se elimina del sistema, impedir cualquier transferencia de futuro. Debe coincidir exactamente. Nota: los campos requieren contenido XML.
+pages.transfer.accepttransfer.content=Si otro editor UDDI le dio un token de transferencia y todos ustedes se comprometi\u00f3 a transferir la propiedad de un negocio o tModel, se puede hacer aqu\u00ed. Introduzca el token de transferencia. Debe coincidir exactamente.
+actions.savethis=Copie y guarde esta informaci\u00f3n a su ordenador. No hay manera de recuperar esta informaci\u00f3n de nuevo!
+navbar.help.source=C\u00f3digo Fuente
+actions.approve=Aprobar
+navbar.create.serviceimport=Registro de Servicios de WSDL
+navbar.create.serviceimport.tooltip=Basado en el UDDI TC, utilizando WSDL en un registro UDDI
+warning.ssl=Atenci\u00f3n, usted no est\u00e1 usando SSL y su clave podr\u00eda estar expuesto!
diff --git a/juddi-gui/test/selenium/BusinessEditorRender.html b/juddi-gui/test/selenium/BusinessEditorRender.html
new file mode 100644
index 0000000..4b45baa
--- /dev/null
+++ b/juddi-gui/test/selenium/BusinessEditorRender.html
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/UDDIBrowser" />
+<title>BusinessEditor render</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">BusinessEditor render</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/UDDIBrowser/businessBrowse.jsp</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Discover</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Businesses</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>5000</td>
+	<td>5000</td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=An Apache jUDDI Node</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>View as XML</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>Save</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Operational Info</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=View as XML</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>businessEntity</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>xpath=(//a[contains(text(),'Close')])[2]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Signatures</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>xpath=(//a[contains(text(),'Services')])[2]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Identifiers</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Categories</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=General</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>css=i.icon-plus-sign.icon-large</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>id=Name1Value</td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>name=value</td>
+	<td>new name</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>css=button[type=&quot;submit&quot;]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Save</td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>id=username</td>
+	<td>root</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>id=password</td>
+	<td>root</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>id=loginbutton</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Save</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>id=Name0Lang</td>
+	<td>Click to edit</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>id=Name0Lang</td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>name=value</td>
+	<td>en</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>css=button[type=&quot;submit&quot;]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Save</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>id=Name1Lang</td>
+	<td>en</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>id=Name1Value</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Discover</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Businesses</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Discover</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Services</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Discover</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Businesses</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Create</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Service</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Create</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Service</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Create</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Discover</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Businesses</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Discover</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Services</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Discover</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=tModels</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=exact:uddi:uddi.org:ubr:postaladdress</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/juddi-gui/test/selenium/BusinessSearchBasic.html b/juddi-gui/test/selenium/BusinessSearchBasic.html
new file mode 100644
index 0000000..2c18301
--- /dev/null
+++ b/juddi-gui/test/selenium/BusinessSearchBasic.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/UDDIBrowser" />
+<title>BusinessSearchBasic</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">BusinessSearchBasic</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/UDDIBrowser/home.jsp</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Businesses</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>5000</td>
+	<td>5000</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>An Apache jUDDI Node</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Show 7</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>5000</td>
+	<td>5000</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>UDDI Custody and Ownership Transfer Service</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/juddi-gui/test/selenium/LangSelect1.html b/juddi-gui/test/selenium/LangSelect1.html
new file mode 100644
index 0000000..d8422b2
--- /dev/null
+++ b/juddi-gui/test/selenium/LangSelect1.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/UDDIBrowser" />
+<title>BusinessSearchBasic</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">BusinessSearchBasic</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/UDDIBrowser/home.jsp</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Businesses</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>5000</td>
+	<td>5000</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>An Apache jUDDI Node</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Show 7</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>UDDI Custody and Ownership Transfer Service</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/juddi-gui/test/selenium/LangSelect2.html b/juddi-gui/test/selenium/LangSelect2.html
new file mode 100644
index 0000000..d8422b2
--- /dev/null
+++ b/juddi-gui/test/selenium/LangSelect2.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/UDDIBrowser" />
+<title>BusinessSearchBasic</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">BusinessSearchBasic</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/UDDIBrowser/home.jsp</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Businesses</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>5000</td>
+	<td>5000</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>An Apache jUDDI Node</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Show 7</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>UDDI Custody and Ownership Transfer Service</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/juddi-gui/test/selenium/LoginRoot.html b/juddi-gui/test/selenium/LoginRoot.html
new file mode 100644
index 0000000..d8422b2
--- /dev/null
+++ b/juddi-gui/test/selenium/LoginRoot.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/UDDIBrowser" />
+<title>BusinessSearchBasic</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">BusinessSearchBasic</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/UDDIBrowser/home.jsp</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>link=Businesses</td>
+	<td></td>
+</tr>
+<tr>
+	<td>pause</td>
+	<td>5000</td>
+	<td>5000</td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>An Apache jUDDI Node</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>link=Show 7</td>
+	<td></td>
+</tr>
+<tr>
+	<td>verifyTextPresent</td>
+	<td>UDDI Custody and Ownership Transfer Service</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/juddi-gui/web/META-INF/config.properties b/juddi-gui/web/META-INF/config.properties
new file mode 100644
index 0000000..517954f
--- /dev/null
+++ b/juddi-gui/web/META-INF/config.properties
@@ -0,0 +1,41 @@
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+
+inquiryurl=http://localhost:8080/juddiv3/services/inquiry?wsdl
+publishurl=http://localhost:8080/juddiv3/services/publish?wsdl
+securityurl=http://localhost:8080/juddiv3/services/security?wsdl
+
+custodyurl=http://localhost:8080/juddiv3/services/custody-transfer?wsdl
+juddipapi=http://localhost:8080/juddiv3/services/juddi-api?wsdl
+subscriptionurl=http://localhost:8080/juddiv3/services/subscription?wsdl
+# note used subscriptionlistenerurl=http://localhost:8080/juddiv3/services/subscription-listener?wsdl
+authtype=UDDI_AUTH
+
+registryType=juddi
+#future use
+
+
+#javax.net.ssl.keyStore
+#javax.net.ssl.keyStorePassword
+#javax.net.ssl.trustStore
+#javax.net.ssl.trustStorePassword
+
+
+#
+# The type of file, such as JKS for most Java applications, or WINDOWS-MY
+# to use the Windows certificate store of the current user or KeychainStore
+# for MacOS
+
+#TRUSTSTORE_FILE = keyStorePath
+#TRUSTSTORE_FILETYPE = keyStoreType
+#TRUSTSTORE_FILE_PASSWORD = filePassword
+
+
+# uncomment to override
+#XML_DIGSIG_NS = http://www.w3.org/2000/09/xmldsig#
+
+CHECK_TIMESTAMPS = anyvalue
+#CHECK_REVOCATION_STATUS_OCSP = anyvalue
+#CHECK_REVOCATION_STATUS_CRL = anyvalue
+#CHECK_TRUST_CHAIN = anyvalue
diff --git a/juddi-gui/web/META-INF/context.xml b/juddi-gui/web/META-INF/context.xml
new file mode 100644
index 0000000..e8a9c7f
--- /dev/null
+++ b/juddi-gui/web/META-INF/context.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Context antiJARLocking="true" path="/juddi-gui"/>
diff --git a/juddi-gui/web/WEB-INF/web.xml b/juddi-gui/web/WEB-INF/web.xml
new file mode 100644
index 0000000..27aad4a
--- /dev/null
+++ b/juddi-gui/web/WEB-INF/web.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+    <listener>
+        <!-- this class setups the encryption key for the session-->
+        <listener-class>org.apache.juddi.webconsole.StartupServlet</listener-class>
+    </listener>
+    <session-config>
+        <session-timeout>
+            30
+        </session-timeout>
+    </session-config>
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+    <mime-mapping>
+        <!-- this is added for the Font Awesome extension for bootstrap (cooler, scalable icons)-->
+        <extension>woff</extension>
+        <mime-type>application/x-font-woff</mime-type>
+    </mime-mapping>    
+    <error-page>
+        <description>Missing login</description>
+        <error-code>401</error-code>
+        <location>/error.jsp</location>
+    </error-page>
+    <error-page>
+        <description>Forbidden directory listing</description>
+        <error-code>403</error-code>
+        <location>/error.jsp</location>
+    </error-page>
+    <error-page>
+        <description>Uncaught exception</description>
+        <error-code>500</error-code>
+        <location>/error.jsp</location>
+    </error-page>
+    <error-page>
+        <description>Unsupported servlet method</description>
+        <error-code>503</error-code>
+        <location>/error.jsp</location>
+    </error-page>
+</web-app>
diff --git a/juddi-gui/web/about.jsp b/juddi-gui/web/about.jsp
new file mode 100644
index 0000000..284654f
--- /dev/null
+++ b/juddi-gui/web/about.jsp
@@ -0,0 +1,45 @@
+<%-- 
+    Document   : about
+    Created on : Apr 28, 2013, 4:26:58 PM
+    Author     : Alex O'Ree
+--%>
+
+
+<%@page import="java.net.URLEncoder"%>
+<%@page import="org.apache.juddi.webconsole.hub.builders.Printers"%>
+<%@page import="org.uddi.api_v3.RegisteredInfo"%>
+<%@page import="java.util.Iterator"%>
+<%@page import="java.util.Map.Entry"%>
+<%@page import="java.util.Set"%>
+<%@page import="java.util.Properties"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well">
+        <h1><%=ResourceLoader.GetResource(session, "navbar.help.about")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12">
+            <%=ResourceLoader.GetResource(session, "pages.about.content")%>
+            
+            <ul>
+                <li><a href="http://www.flickr.com/photos/acbo/2073367106/sizes/z/in/photostream/">Splash page photo</a></li>
+                <li><a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a></li>
+                <li><a href="http://tarruda.github.io/bootstrap-datetimepicker/">Date/time picker</a></li>
+                <li><a href="https://github.com/jschr/bootstrap-modal/">Modal Master</a></li>
+                <li><a href="https://github.com/jdewit/bootstrap-timepicker">Time Picker</a></li>
+                <li><a href="http://fortawesome.github.io/Font-Awesome/">Font Awesome</a></li>
+                <li><a href="http://www.appelsiini.net/projects/jeditable">jEditable</a></li>
+                <li><a href="http://jquery.com/">jQuery</a></li>
+                <li><a href="http://jqueryui.com/">jQuery UI</a></li>
+            </ul>
+        </div>
+
+
+    </div>
+
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/abortTransferToken.jsp b/juddi-gui/web/ajax/abortTransferToken.jsp
new file mode 100644
index 0000000..a1df936
--- /dev/null
+++ b/juddi-gui/web/ajax/abortTransferToken.jsp
@@ -0,0 +1,37 @@
+<%-- 
+    Document   : abortTransferToken
+    Created on : Apr 27, 2013, 1:20:37 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.jaxb.PrintUDDI"%>
+<%@page import="org.uddi.custody_v3.TransferToken"%>
+<%@page import="javax.xml.datatype.DatatypeFactory"%>
+<%@page import="java.util.List"%>
+<%@page import="java.util.ArrayList"%>
+<%@page import="javax.xml.datatype.XMLGregorianCalendar"%>
+<%@page import="javax.xml.ws.Holder"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<jsp:include page="../csrf.jsp" />
+<!DOCTYPE html>
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        String tokenxml = request.getParameter("tokenxml");
+
+
+        UddiHub x = UddiHub.getInstance(application, session);
+
+        String msg = x.DiscardToken(tokenxml);
+        if (msg != null) {
+            out.write(msg);
+        } else {
+            out.write(ResourceLoader.GetResource(session, "actions.canceled"));
+
+        }
+    }
+
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/acceptTransferToken.jsp b/juddi-gui/web/ajax/acceptTransferToken.jsp
new file mode 100644
index 0000000..f699e3d
--- /dev/null
+++ b/juddi-gui/web/ajax/acceptTransferToken.jsp
@@ -0,0 +1,45 @@
+<%-- 
+    Document   : acceptTransferToken
+    Created on : Apr 27, 2013, 2:17:35 PM
+    Author     : Alex O'Ree
+--%>
+
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="javax.xml.bind.JAXB"%>
+<%@page import="java.io.StringWriter"%>
+<%@page import="org.apache.juddi.jaxb.PrintUDDI"%>
+<%@page import="org.uddi.custody_v3.TransferToken"%>
+<%@page import="javax.xml.datatype.DatatypeFactory"%>
+<%@page import="java.util.List"%>
+<%@page import="java.util.ArrayList"%>
+<%@page import="javax.xml.datatype.XMLGregorianCalendar"%>
+<%@page import="javax.xml.ws.Holder"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<jsp:include page="../csrf.jsp" />
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        String keyBagXML = request.getParameter("keybag");
+        String tokenXML = request.getParameter("tokenxml");
+
+        if (keyBagXML==null || tokenXML==null)
+                       {
+            response.setStatus(400);
+        }
+        else
+                       {
+        UddiHub x = UddiHub.getInstance(application, session);
+     
+        String msg = x.AcceptCustodyTranferToken(tokenXML, keyBagXML);
+        if (msg != null) {
+            out.write(msg);
+        } else {
+           out.write(ResourceLoader.GetResource(session, "actions.success"));
+          
+        }
+    }
+
+    }
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/assertions.jsp b/juddi-gui/web/ajax/assertions.jsp
new file mode 100644
index 0000000..56d8fdc
--- /dev/null
+++ b/juddi-gui/web/ajax/assertions.jsp
@@ -0,0 +1,112 @@
+<%-- 
+    Document   : assertions
+    Created on : Apr 13, 2013, 7:44:30 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.uddi.api_v3.CompletionStatus"%>
+<%@page import="org.uddi.api_v3.AssertionStatusItem"%>
+<%@page import="org.apache.commons.lang.StringEscapeUtils"%>
+<%@page import="java.util.concurrent.atomic.AtomicReference"%>
+<%@page import="javax.xml.ws.Holder"%>
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+<%@page import="java.util.List"%>
+<%@page import="org.uddi.api_v3.PublisherAssertion"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<jsp:include page="../csrf.jsp" />
+<%
+    UddiHub x = UddiHub.getInstance(application, session);
+    if (request.getMethod().equalsIgnoreCase("post")) {
+        if (request.getParameter("action") != null) {
+            String action = request.getParameter("action");
+            if (action.equalsIgnoreCase("delete")) {
+                String msg = x.DeletePublisherAssertion(request.getParameter("tokey"), request.getParameter("fromkey"), request.getParameter("tmodelkey"), request.getParameter("keyname"), request.getParameter("keyvalue"));
+                if (!msg.equals(ResourceLoader.GetResource(session, "actions.saved"))) {
+                    response.setStatus(500);
+                }
+                out.write(msg);
+            }
+        } else {
+            String msg = x.AddPublisherAssertion(request.getParameter("tokey"), request.getParameter("fromkey"), request.getParameter("tmodelkey"), request.getParameter("keyname"), request.getParameter("keyvalue"));
+            if (!msg.equals(ResourceLoader.GetResource(session, "actions.saved"))) {
+                response.setStatus(500);
+            }
+            out.write(msg);
+        }
+    } else {
+
+        List<AssertionStatusItem> data = null;
+        AtomicReference<String> msg = new AtomicReference<String>();
+        data = x.GetPublisherAssertions(msg);
+        if (msg != null && msg.get() != null) {
+            out.write(UddiHub.ToErrorAlert(msg.get()));
+        } else if (data == null || data.isEmpty())
+            out.write(UddiHub.ToErrorAlert(ResourceLoader.GetResource(session, "errors.nodatareturned")));
+        else {
+
+%>
+<table class="table table-hover">
+    <tr><th><%=ResourceLoader.GetResource(session, "items.publisherassertions.from")%></th>
+        <th><%=ResourceLoader.GetResource(session, "items.publisherassertions.to")%></th>
+        <th><%=ResourceLoader.GetResource(session, "items.publisherassertions.relationship")%></th>
+        <th><%=ResourceLoader.GetResource(session, "items.actions")%></th>
+        <th><%=ResourceLoader.GetResource(session, "items.status")%></th>
+    </tr>
+        <%
+   
+        
+            for (int i = 0; i < data.size(); i++) {
+                out.write("<tr><td>");
+                out.write(data.get(i).getFromKey());
+                out.write("</td><td>");
+                out.write(data.get(i).getToKey());
+                out.write("</td><td>");
+                if (data.get(i).getKeyedReference() != null) {
+                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " :</div><div id=\"" + PostBackConstants.VALUE + "\" class=\"edit\">" + data.get(i).getKeyedReference().getTModelKey());
+                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + " :</div><div id=\"" + PostBackConstants.KEYNAME + "\" class=\"edit\">" + data.get(i).getKeyedReference().getKeyName());
+                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + " :</div><div id=\"" + PostBackConstants.KEYVALUE + "\" class=\"edit\">" + data.get(i).getKeyedReference().getKeyValue());
+                }
+                out.write("</td><td>");
+                if (data.get(i).getCompletionStatus() == CompletionStatus.STATUS_FROM_KEY_INCOMPLETE ||
+                        data.get(i).getCompletionStatus() == CompletionStatus.STATUS_TO_KEY_INCOMPLETE)
+                                       {
+                     out.write("<a class=\"btn btn-primary\" href=\"javascript:approveAssertion('"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getFromKey())
+                        + "','"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getToKey())
+                        + "','"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getKeyedReference().getTModelKey())
+                        + "','"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getKeyedReference().getKeyName())
+                        + "','"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getKeyedReference().getKeyValue())
+                        + "');"
+                        + "\">" + ResourceLoader.GetResource(session, "actions.approve") + "</a>");
+                }
+                out.write("<a class=\"btn btn-primary\" href=\"javascript:removeAssertion('"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getFromKey())
+                        + "','"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getToKey())
+                        + "','"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getKeyedReference().getTModelKey())
+                        + "','"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getKeyedReference().getKeyName())
+                        + "','"
+                        + StringEscapeUtils.escapeJavaScript(data.get(i).getKeyedReference().getKeyValue())
+                        + "');"
+                        + "\">" + ResourceLoader.GetResource(session, "actions.delete") + "</a>");
+                out.write("</td><td>");
+                out.write(data.get(i).getCompletionStatus().toString());
+                out.write("</td></tr>");
+                
+            }
+
+        %>
+</table>
+<%
+        }
+    }
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/bindingsearch.jsp b/juddi-gui/web/ajax/bindingsearch.jsp
new file mode 100644
index 0000000..f83ada5
--- /dev/null
+++ b/juddi-gui/web/ajax/bindingsearch.jsp
@@ -0,0 +1,58 @@
+<%-- 
+    Document   : tmodelsearch
+    Created on : Mar 13, 2013, 8:54:47 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+<%@page import="org.apache.juddi.webconsole.hub.PagableContainer"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<%
+    UddiHub x = UddiHub.getInstance(application, request.getSession());
+    int maxrecords = 50;
+    int offset = 0;
+    String lang = request.getParameter("lang");
+    if (lang == null || lang.length() == 0) {
+        lang = null;
+    }
+    if (lang != null && lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
+        lang = null;
+    }
+
+    String keyword = request.getParameter("keyword");
+    if (keyword == null || keyword.length() == 0) {
+        keyword = "%";
+    }
+    try {
+        maxrecords = Integer.parseInt(request.getParameter("maxrecords"));
+    } catch (Exception ex) {
+    }
+    try {
+        offset = Integer.parseInt(request.getParameter("offset"));
+    } catch (Exception ex) {
+    }
+    if (offset < 0) {
+        offset = 0;
+    }
+    if (maxrecords > 50) {
+        maxrecords = 50;
+    }
+    boolean isChooser = false;
+    try {
+        isChooser = Boolean.parseBoolean(request.getParameter("chooser"));
+    } catch (Exception ex) {
+    }
+    PagableContainer ret = (x.SearchForBinding(keyword, lang, offset, maxrecords, isChooser));
+
+    out.write(ret.renderedHtml);
+%>
+<script type="text/javascript">
+    totalrecordsBinding=<%=ret.totalrecords%>;
+    $("#totalrecordsBinding").text(totalrecordsBinding);
+    $("#offsetBinding").text('<%=offset%>');
+    $("#displayrecordsBinding").text ('<%=ret.displaycount%>');
+    refresh();
+</script>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/businessAsSelect.jsp b/juddi-gui/web/ajax/businessAsSelect.jsp
new file mode 100644
index 0000000..4441cdb
--- /dev/null
+++ b/juddi-gui/web/ajax/businessAsSelect.jsp
@@ -0,0 +1,16 @@
+<%-- 
+    Document   : businessAsSelect This actually returns a list of all businesses and/or tmodel keys owned by the current user
+    Created on : Apr 27, 2013, 10:05:21 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<jsp:include page="../csrf.jsp" />
+<%
+    UddiHub x = UddiHub.getInstance(application, session);
+
+    out.write(x.GetMyTransferableKeys(true, true));
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/businesssearch.jsp b/juddi-gui/web/ajax/businesssearch.jsp
new file mode 100644
index 0000000..dce80c5
--- /dev/null
+++ b/juddi-gui/web/ajax/businesssearch.jsp
@@ -0,0 +1,63 @@
+<%-- 
+    Document   : businessbrowse
+    Created on : Mar 12, 2013, 9:40:19 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+<%@page import="org.apache.juddi.webconsole.hub.PagableContainer"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include  file="../csrf.jsp" %>
+<%
+    
+    UddiHub x = UddiHub.getInstance(application, request.getSession());
+    int offset = 0;
+    int maxrecords = 20;
+    String lang = request.getParameter("lang");
+    if (lang == null || lang.length() == 0) {
+        lang = null;
+    }
+    if (lang!=null && lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
+        lang = null;
+    }
+    String keyword = "%";
+    try {
+        offset = Integer.parseInt(request.getParameter("offset"));
+        if (offset < 0) {
+            offset = 0;
+        }
+    } catch (Exception ex) {
+    }
+    try {
+        keyword =(request.getParameter("keyword"));
+      if (keyword==null || keyword.length()==0)
+          keyword="%";
+    } catch (Exception ex) {
+        keyword="%";
+    }
+    try {
+        maxrecords = Integer.parseInt(request.getParameter("maxrecords"));
+        if (maxrecords <= 0 || maxrecords > 50) {
+            maxrecords = 50;
+        }
+    } catch (Exception ex) {
+    }
+     boolean isChooser = false;
+    try {
+        isChooser = Boolean.parseBoolean(request.getParameter("chooser"));
+    } catch (Exception ex) {
+    }
+     
+
+    PagableContainer ret= (x.GetBusinessListAsHtml(offset, maxrecords, keyword, lang, isChooser));
+    out.write(ret.renderedHtml);
+%>
+<script type="text/javascript">
+    totalrecordsBusiness=<%=ret.totalrecords%>;
+    $("#totalrecordsBusiness").text(totalrecordsBusiness);
+    $("#offsetBusiness").text(<%=offset%>);
+    $("#displayrecordsBusiness").text (<%=ret.displaycount%>);
+    refresh();
+</script>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/deletebusiness.jsp b/juddi-gui/web/ajax/deletebusiness.jsp
new file mode 100644
index 0000000..9aabe5b
--- /dev/null
+++ b/juddi-gui/web/ajax/deletebusiness.jsp
@@ -0,0 +1,16 @@
+<%-- 
+    Document   : deletebusiness
+    Created on : Feb 27, 2013, 8:39:54 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+
+<%@include  file="../csrf.jsp" %>
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        UddiHub x =UddiHub.getInstance(application, session);
+       out.write(x.deleteBusiness(request.getParameter("id")));
+    }
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/deleteservice.jsp b/juddi-gui/web/ajax/deleteservice.jsp
new file mode 100644
index 0000000..10f50d3
--- /dev/null
+++ b/juddi-gui/web/ajax/deleteservice.jsp
@@ -0,0 +1,16 @@
+<%-- 
+    Document   : deleteservice
+    Created on : Mar 16, 2013, 12:25:13 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+
+<%@include  file="../csrf.jsp" %>
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        UddiHub x = UddiHub.getInstance(application, session);
+        out.write(x.deleteService(request.getParameter("id")));
+    }
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/deletetmodel.jsp b/juddi-gui/web/ajax/deletetmodel.jsp
new file mode 100644
index 0000000..e10f7b3
--- /dev/null
+++ b/juddi-gui/web/ajax/deletetmodel.jsp
@@ -0,0 +1,16 @@
+<%-- 
+    Document   : deleteTmodel
+    Created on : Feb 27, 2013, 8:39:54 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+
+<%@include  file="../csrf.jsp" %>
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        UddiHub x =UddiHub.getInstance(application, session);
+       out.write(x.deleteTmodel(request.getParameter("id")));
+    }
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/getCert.jsp b/juddi-gui/web/ajax/getCert.jsp
new file mode 100644
index 0000000..8fdbf55
--- /dev/null
+++ b/juddi-gui/web/ajax/getCert.jsp
@@ -0,0 +1,36 @@
+<%-- 
+    Document   : getCert - returns a base64 PKI certificate
+    Created on : Mar 28, 2013, 6:39:09 PM
+    Author     : Alex O'Ree
+--%><%@page import="org.apache.juddi.webconsole.hub.UddiHub"%><%
+    String type = request.getParameter("type");
+    String id = request.getParameter("id");
+    int index = 0;
+    try {
+        index = Integer.parseInt(request.getParameter("index"));
+    } catch (Exception ex) {
+    }
+
+    UddiHub x = UddiHub.getInstance(application, session);
+    String data = null;
+    if (type.equalsIgnoreCase("business")) {
+        data = (x.GetCertificate(UddiHub.FindType.Business, id, index));
+    } else if (type.equalsIgnoreCase("service")) {
+        data = (x.GetCertificate(UddiHub.FindType.Service, id, index));
+    } else if (type.equalsIgnoreCase("bindingTemplate")) {
+        data = (x.GetCertificate(UddiHub.FindType.BindingTemplate, id, index));
+    } else if (type.equalsIgnoreCase("tModel")) {
+        data = (x.GetCertificate(UddiHub.FindType.tModel, id, index));
+    }
+    if (data != null && !data.startsWith("Error")) {
+        response.setContentType("application/octet-stream");
+        response.setHeader("Content-Disposition", "inline; filename=cert.crt");
+        out.write("-----BEGIN CERTIFICATE-----" + System.getProperty("line.separator"));
+        out.write(data + System.getProperty("line.separator"));
+        out.write("-----END CERTIFICATE-----" + System.getProperty("line.separator"));
+    } else {
+        response.setStatus(500);
+        out.write(data);
+    }
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/getTransferToken.jsp b/juddi-gui/web/ajax/getTransferToken.jsp
new file mode 100644
index 0000000..dcf7ccc
--- /dev/null
+++ b/juddi-gui/web/ajax/getTransferToken.jsp
@@ -0,0 +1,86 @@
+<%-- 
+    Document   : getTransferToken
+    Created on : Apr 27, 2013, 9:13:27 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="javax.xml.bind.JAXB"%>
+<%@page import="java.io.StringWriter"%>
+<%@page import="org.apache.juddi.jaxb.PrintUDDI"%>
+<%@page import="org.uddi.custody_v3.TransferToken"%>
+<%@page import="javax.xml.datatype.DatatypeFactory"%>
+<%@page import="java.util.List"%>
+<%@page import="java.util.ArrayList"%>
+<%@page import="javax.xml.datatype.XMLGregorianCalendar"%>
+<%@page import="javax.xml.ws.Holder"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<jsp:include page="../csrf.jsp" />
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        String keylist = request.getParameter("keylist");
+        if (keylist == null) {
+            response.setStatus(400);
+        } else {
+
+            UddiHub x = UddiHub.getInstance(application, session);
+            Holder<byte[]> outToken = new Holder<byte[]>();
+            Holder<XMLGregorianCalendar> outXcal = new Holder<XMLGregorianCalendar>();
+            DatatypeFactory df = DatatypeFactory.newInstance();
+            outXcal.value = df.newXMLGregorianCalendar();
+            Holder<String> transferTo = new Holder<String>();
+            //transferTo.value = username;
+            //  List<String> keys = new ArrayList<String>();
+
+            /*if (tmodellist != null) {
+             String[] tmodelkeys = tmodellist.split(",");
+             for (int i = 0; i < tmodelkeys.length; i++) {
+             keys.add(tmodelkeys[i]);
+             }
+             }*/
+            org.uddi.custody_v3.KeyBag keys = new org.uddi.custody_v3.KeyBag();
+
+            if (keylist != null) {
+                String[] keylists = keylist.split(",");
+
+                for (int i = 0; i < keylists.length; i++) {
+                    keys.getKey().add(keylists[i]);
+                }
+            }
+
+            String msg = x.GetCustodyTransferToken(keys, transferTo, outXcal, outToken);
+            if (msg != null) {
+                out.write(msg);
+                response.setStatus(400);
+            } else {
+                TransferToken tt = new TransferToken();
+                tt.setExpirationTime(outXcal.value);
+                tt.setNodeID(transferTo.value);
+                tt.setOpaqueToken(outToken.value);
+                try {
+                    StringWriter sw = new StringWriter();
+//BREAK is replaced via javascript in a popup
+                    sw.write(ResourceLoader.GetResource(session, "actions.savethis") + "  BREAK  ");
+                    sw.write(ResourceLoader.GetResource(session, "items.transfertoken") + ": BREAK ");
+                    JAXB.marshal(tt, sw);
+
+
+                    sw.write(" BREAK BREAK" + ResourceLoader.GetResource(session, "items.transferkeys") + ": BREAK ");
+                    JAXB.marshal(keys, sw);
+                    out.write(sw.toString());
+
+
+                } catch (Exception ex) {
+                    response.setStatus(400);
+                    out.write(ex.getMessage());
+                }
+
+
+                //out.write(new String(outToken.value) + "<br>");
+            }
+        }
+    }
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/importFromWsdl.jsp b/juddi-gui/web/ajax/importFromWsdl.jsp
new file mode 100644
index 0000000..fe11c16
--- /dev/null
+++ b/juddi-gui/web/ajax/importFromWsdl.jsp
@@ -0,0 +1,116 @@
+<%-- 
+    Document   : importFromWsdl
+    Created on : May 11, 2013, 3:26:42 PM
+    Author     : Alex O'Ree
+--%>
+<%@page import="java.util.ArrayList"%>
+<%@page import="java.util.List"%>
+<%@page import="org.apache.juddi.webconsole.hub.builders.Printers"%>
+<%@page import="org.apache.commons.lang.StringEscapeUtils"%>
+<%@page import="java.util.Set"%>
+<%@page import="javax.xml.namespace.QName"%>
+<%@page import="javax.wsdl.PortType"%>
+<%@page import="java.util.Map"%>
+<%@page import="org.uddi.api_v3.BusinessServices"%>
+<%@page import="org.apache.juddi.v3.client.mapping.WSDL2UDDI"%>
+<%@page import="org.apache.juddi.v3.client.mapping.URLLocalizerDefaultImpl"%>
+<%@page import="java.util.Properties"%>
+<%@page import="javax.wsdl.Definition"%>
+<%@page import="org.apache.juddi.v3.client.mapping.ReadWSDL"%>
+<%@page import="org.apache.juddi.v3.client.config.UDDIClerk"%>
+<%@page import="org.uddi.api_v3.TModel"%>
+<%@page import="java.net.URL"%>
+<%@include  file="../csrf.jsp" %>
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        String method = request.getParameter("formaction");
+        if (method != null && method.length() > 0) {
+            if (method.equalsIgnoreCase("preview")) {
+                //Fetch the WSDL w/wo credentials
+                String uri = request.getParameter("wsdlurl");
+                String username = request.getParameter("wsdlusername");
+                String password = request.getParameter("wsdlpassword");
+                String keydomain = request.getParameter("keydomain");
+                String businessname = request.getParameter("businessname");
+                boolean ignoreSSL = false;
+                try{
+                    ignoreSSL = Boolean.parseBoolean(request.getParameter("ignoressl"));
+                }catch (Exception ex){}
+                try {
+                    URL url = new URL(uri);
+                    //"http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl");
+                    String domain = url.getHost();
+                    //TModel keygen = UDDIClerk.createKeyGenator("uddi:" + domain + ":keygenerator", domain, "en");
+
+                    ReadWSDL rw = new ReadWSDL();
+                    rw.setIgnoreSSLErrors(ignoreSSL);
+                    Definition wsdlDefinition = rw.readWSDL(url, username, password);
+                    Properties properties = new Properties();
+                    properties.put("keyDomain", keydomain);
+                    properties.put("businessName", businessname);
+                    properties.put("serverName", url.getHost());
+                    properties.put("serverPort", url.getPort());
+                    String wsdlURL = wsdlDefinition.getDocumentBaseURI();
+                    WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(null, new URLLocalizerDefaultImpl(), properties);
+                    BusinessServices businessServices = wsdl2UDDI.createBusinessServices(wsdlDefinition);
+                    @SuppressWarnings("unchecked")
+                    Map<QName, PortType> portTypes = (Map<QName, PortType>) wsdlDefinition.getAllPortTypes();
+                    Set<TModel> portTypeTModels = wsdl2UDDI.createWSDLPortTypeTModels(wsdlURL, portTypes);
+                    Map allBindings = wsdlDefinition.getAllBindings();
+                    Set<TModel> bindingTmodels = wsdl2UDDI.createWSDLBindingTModels(wsdlURL, allBindings);
+                    List<TModel> tmodels = new ArrayList<TModel>();
+                    tmodels.addAll(bindingTmodels);
+                    tmodels.addAll(portTypeTModels);
+
+                    out.write("<i class=\"icon-thumbs-up icon-large\"></i> WSDL successfully parsed! This will create " + portTypeTModels.size()
+                            + " portType tmodel(s), " + bindingTmodels.size()
+                            + " binding tModel(s), " + allBindings.size()
+                            + " binding(s), and " + businessServices.getBusinessService().size() + " service(s).<br>");
+                    out.write("Services:<br><ul>");
+                    for (int i = 0; i < businessServices.getBusinessService().size(); i++) {
+                        out.write("<li>Key:"
+                                + StringEscapeUtils.escapeHtml(businessServices.getBusinessService().get(i).getServiceKey())
+                                + " <br>Name: "
+                                + StringEscapeUtils.escapeHtml(Printers.ListNamesToString(businessServices.getBusinessService().get(i).getName())));
+                        if (businessServices.getBusinessService().get(i).getBindingTemplates() != null) {
+                            out.write("<br>Binding Templates:<ul>");
+                            for (int k = 0; k < businessServices.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size(); k++) {
+                                out.write("<li>Key: " + StringEscapeUtils.escapeHtml(businessServices.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getBindingKey())
+                                        + "<br>Access Point: ");
+                                if (businessServices.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getAccessPoint() != null) {
+                                    out.write(StringEscapeUtils.escapeHtml(
+                                            businessServices.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getAccessPoint().getValue()));
+                                }
+                                out.write("</li>");
+                            }
+                            out.write("</ul>");
+                        }
+                        out.write("</li>");
+                    }
+                    out.write("</ul>");
+
+                    out.write("tModels<br><ul>");
+                    for (int i = 0; i < tmodels.size(); i++) {
+                        out.write("<li>Key:"
+                                + StringEscapeUtils.escapeHtml(tmodels.get(i).getTModelKey())
+                                + " Name: "
+                                + StringEscapeUtils.escapeHtml(tmodels.get(i).getName().getValue())
+                                + "</li>");
+                    }
+                    out.write("</ul>");
+
+
+%>
+
+
+<%
+                } catch (Exception ex) {
+                    out.write("<i class=\"icon-thumbs-down icon-large\"></i> Error! " +ex.getClass().getCanonicalName() + " " + ex.getMessage());
+                }
+            }
+        }
+    }
+
+
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/loginpost.jsp b/juddi-gui/web/ajax/loginpost.jsp
new file mode 100644
index 0000000..ae0c4e2
--- /dev/null
+++ b/juddi-gui/web/ajax/loginpost.jsp
@@ -0,0 +1,40 @@
+<%-- 
+    Document   : loginpost
+    Created on : Feb 24, 2013, 3:36:37 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.util.Properties"%>
+<%@page import="java.io.InputStream"%>
+<%@page import="java.net.URL"%>
+<%@page import="org.apache.juddi.webconsole.AES"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<%@include  file="../csrf.jsp" %>
+<%
+
+    URL prop = application.getResource("/META-INF/config.properties");
+    if (prop == null) {
+        prop = application.getResource("META-INF/config.properties");
+
+    }
+    if (prop == null) {
+        throw new Exception("Cannot locate the configuration file.");
+    }
+    
+    InputStream in = prop.openStream();
+    Properties p = new Properties();
+    p.load(in);
+    in.close();
+    session.setAttribute("username", request.getParameter("username"));
+    session.setAttribute("password", AES.Encrypt(request.getParameter("password"), (String) p.get("key")));
+
+
+
+    UddiHub.reset(request.getSession());
+    UddiHub x = UddiHub.getInstance(application, request.getSession());
+
+
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/opInfo.jsp b/juddi-gui/web/ajax/opInfo.jsp
new file mode 100644
index 0000000..f93cf55
--- /dev/null
+++ b/juddi-gui/web/ajax/opInfo.jsp
@@ -0,0 +1,19 @@
+<%-- 
+    Document   : opInfo
+    Created on : Mar 28, 2013, 10:25:03 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<%
+    String id=null;
+    id = request.getParameter("id");
+    if (id!=null){
+        UddiHub x = UddiHub.getInstance(application, session);
+        out.write(x.GetOperationalInfo(x.GetOperationalInfo(id)));
+    }
+
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/saveFromXML.jsp b/juddi-gui/web/ajax/saveFromXML.jsp
new file mode 100644
index 0000000..06ccd67
--- /dev/null
+++ b/juddi-gui/web/ajax/saveFromXML.jsp
@@ -0,0 +1,79 @@
+<%-- 
+    Document   : fromXML
+    Created on : Mar 24, 2013, 9:31:37 AM
+    Author     : Alex O'Ree
+--%><%@page import="java.util.concurrent.atomic.AtomicReference"%>
+<%@page import="java.util.Map.Entry"%>
+<%@page import="java.util.Iterator"%>
+<%@page import="java.util.Set"%>
+<%@page import="java.util.Set"%>
+<%@page import="java.util.Properties"%>
+<%@page import="org.apache.juddi.v3.client.crypto.DigSigUtil"%>
+<%@page import="java.io.StringReader"%>
+<%@page import="javax.xml.bind.JAXB"%>
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.jaxb.JAXBMarshaller"%>
+<%@page import="org.uddi.api_v3.TModel"%>
+<%@page import="org.uddi.api_v3.BindingTemplate"%>
+<%@page import="org.uddi.api_v3.BusinessService"%>
+<%@page import="org.uddi.api_v3.BusinessEntity"%>
+<%@page import="org.apache.juddi.jaxb.EntityCreator"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page import="org.apache.juddi.jaxb.PrintUDDI"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%><%
+
+    UddiHub x = UddiHub.getInstance(application, session);
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        String type = request.getParameter("type");
+        String id = request.getParameter("id");
+        if ((type != null && type.length() != 0) && (id != null && id.length() != 0)) {
+
+
+            String signedxml = request.getParameter("data");
+            if (signedxml == null) {
+                out.write("no input");
+            } else {
+                signedxml = signedxml.trim();
+                if (signedxml.startsWith("<?xml ")) {
+                    int idx = signedxml.indexOf(">");
+                    signedxml = signedxml.substring(idx + 1, signedxml.length()).trim();
+
+                }
+                signedxml = signedxml.trim();
+
+                Object j = null;// JAXBMarshaller.unmarshallFromString(signedxml, JAXBMarshaller.PACKAGE_UDDIAPI);
+                StringReader sr = new StringReader(signedxml);
+                String msg = null;
+                if (type.equalsIgnoreCase("business")) {
+                    BusinessEntity be = (BusinessEntity) JAXB.unmarshal(sr, BusinessEntity.class);
+                    msg = (x.SaveBusinessDetails(be));
+                } else if (type.equalsIgnoreCase("service")) {
+                    BusinessService be = (BusinessService) JAXB.unmarshal(sr, BusinessService.class);
+                    msg = (x.SaveService(be));
+                } else if (type.equalsIgnoreCase("bindingTemplate")) {
+                    BindingTemplate be = (BindingTemplate) JAXB.unmarshal(sr, BindingTemplate.class);
+                    msg = (x.SaveBindingTemplate(be));
+                } else if (type.equalsIgnoreCase("tModel")) {
+                    TModel be = (TModel) JAXB.unmarshal(sr, TModel.class);
+                    msg = (x.SaveTModel(be));
+                } else {
+                    msg = (ResourceLoader.GetResource(session, "errors.unknownentity"));
+                }
+
+                if (!msg.equalsIgnoreCase(ResourceLoader.GetResource(session, "actions.saved"))) {
+                    //response.setStatus(500);
+                }
+                out.write(msg);
+            }
+        }
+    }
+
+
+
+    //get parameter type
+    //fetch from UDDI
+    //convert to string and output
+
+
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/savebusiness.jsp b/juddi-gui/web/ajax/savebusiness.jsp
new file mode 100644
index 0000000..701626e
--- /dev/null
+++ b/juddi-gui/web/ajax/savebusiness.jsp
@@ -0,0 +1,25 @@
+<%-- 
+   Document   : savebusiness
+   Created on : Feb 26, 2013, 6:57:52 AM
+   Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page import="java.util.Enumeration"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include  file="../csrf.jsp" %>
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+      /*  Enumeration it = request.getParameterNames();
+        while (it.hasMoreElements()) {
+            String name = (String) it.nextElement();
+            out.write(name + " " + request.getParameter(name) + "<br>");
+        }*/
+        //out.write("success");
+        UddiHub hub = UddiHub.getInstance(application, session);
+        
+        out.write(hub.SaveBusinessDetails(request));
+     
+    }
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/saveservicedetails.jsp b/juddi-gui/web/ajax/saveservicedetails.jsp
new file mode 100644
index 0000000..5ab6689
--- /dev/null
+++ b/juddi-gui/web/ajax/saveservicedetails.jsp
@@ -0,0 +1,18 @@
+<%-- 
+    Document   : saveservicedetails
+    Created on : Feb 24, 2013, 3:12:11 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+
+<%@include  file="../csrf.jsp" %>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        UddiHub x = UddiHub.getInstance(application, request.getSession());
+        out.write(x.SaveServiceDetails(request));
+    }
+
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/savetmodel.jsp b/juddi-gui/web/ajax/savetmodel.jsp
new file mode 100644
index 0000000..65b9a36
--- /dev/null
+++ b/juddi-gui/web/ajax/savetmodel.jsp
@@ -0,0 +1,25 @@
+<%-- 
+   Document   : savebusiness
+   Created on : Feb 26, 2013, 6:57:52 AM
+   Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page import="java.util.Enumeration"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include  file="../csrf.jsp" %>
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        /*  Enumeration it = request.getParameterNames();
+         while (it.hasMoreElements()) {
+         String name = (String) it.nextElement();
+         out.write(name + " " + request.getParameter(name) + "<br>");
+         }*/
+        //out.write("success");
+        UddiHub hub = UddiHub.getInstance(application, session);
+
+        out.write(hub.SaveTModel(request));
+      
+    }
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/search.jsp b/juddi-gui/web/ajax/search.jsp
new file mode 100644
index 0000000..ebafb65
--- /dev/null
+++ b/juddi-gui/web/ajax/search.jsp
@@ -0,0 +1,81 @@
+<%-- 
+    Document   : search
+    Created on : Mar 19, 2013, 2:01:55 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub.FindType"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub.CriteriaType"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<%@include file="../csrf.jsp" %>
+<%
+    if (request.getMethod().equalsIgnoreCase("post")) {
+        String lang = request.getParameter("lang");
+        //searchcriteria name category key tmodel
+        String selection = request.getParameter("selection");
+        //searchcontent the thing we're looking for
+        String searchcontent = request.getParameter("searchcontent");
+        //findqualifier - use value as is
+        String[] findqualifier = request.getParameterValues("findqualifier");
+        //type of thing we need business service bindingTemplate tModel
+        String searchfor = request.getParameter("searchfor");
+        boolean ok = true;
+        if (selection == null) {
+            ok = false;
+        }
+
+        if (!ok) {
+            response.sendRedirect("../index.jsp");
+        }
+        CriteriaType criteria = null;
+        if (selection.equalsIgnoreCase("name")) {
+            criteria = CriteriaType.Name;
+        }
+        if (selection.equalsIgnoreCase("category")) {
+            criteria = CriteriaType.Category;
+        }
+        if (selection.equalsIgnoreCase("key")) {
+            criteria = CriteriaType.uid;
+        }
+        if (selection.equalsIgnoreCase("tmodel")) {
+            criteria = CriteriaType.tmodel;
+        }
+
+        if (criteria == null) {
+            ok = false;
+        }
+        if (!ok) {
+            response.sendRedirect("../index.jsp");
+        }
+        FindType type = null;
+        if (searchfor.equalsIgnoreCase("business")) {
+            type = FindType.Business;
+        }
+        if (searchfor.equalsIgnoreCase("service")) {
+            type = FindType.Service;
+        }
+        if (searchfor.equalsIgnoreCase("bindingTemplate")) {
+            type = FindType.BindingTemplate;
+        }
+        if (searchfor.equalsIgnoreCase("tModel")) {
+            type = FindType.tModel;
+        }
+       
+        if (searchfor.equalsIgnoreCase("RelatedBusiness")) {
+            type = FindType.RelatedBusiness;
+        }
+        if (type == null) {
+            ok = false;
+        }
+        if (!ok) {
+            response.sendRedirect("../index.jsp");
+        }
+
+        UddiHub x = UddiHub.getInstance(application, session);
+        out.write(x.Search(type, criteria, searchcontent, lang, findqualifier));
+    } else {
+        response.sendRedirect("../index.jsp");
+    }
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/servicedetails.jsp b/juddi-gui/web/ajax/servicedetails.jsp
new file mode 100644
index 0000000..b91a4d9
--- /dev/null
+++ b/juddi-gui/web/ajax/servicedetails.jsp
@@ -0,0 +1,15 @@
+<%-- 
+    Document   : servicedetails
+    Created on : Feb 24, 2013, 1:55:14 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include  file="../csrf.jsp" %>
+<!DOCTYPE html>
+<%
+    UddiHub x = UddiHub.getInstance(application, request.getSession());
+
+    out.write(x.GetServiceDetailAsHtml(request.getParameter("id")));
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/servicelist.jsp b/juddi-gui/web/ajax/servicelist.jsp
new file mode 100644
index 0000000..d56ebaa
--- /dev/null
+++ b/juddi-gui/web/ajax/servicelist.jsp
@@ -0,0 +1,15 @@
+<%-- 
+    Document   : businesslist
+    Created on : Feb 24, 2013, 10:27:22 AM
+    Author     : Alex O'Ree
+--%>
+
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include  file="../csrf.jsp" %>
+<!DOCTYPE html>
+<%
+    UddiHub x = UddiHub.getInstance(application, request.getSession());
+    out.write(x.GetServiceList(request.getParameter("id")));
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/servicesearch.jsp b/juddi-gui/web/ajax/servicesearch.jsp
new file mode 100644
index 0000000..ee78cd4
--- /dev/null
+++ b/juddi-gui/web/ajax/servicesearch.jsp
@@ -0,0 +1,61 @@
+<%-- 
+    Document   : servicesearch
+    Created on : Feb 27, 2013, 4:46:08 PM
+    Author     : Alex O'Ree
+--%>
+
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+<%@page import="org.apache.juddi.webconsole.hub.PagableContainer"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include  file="../csrf.jsp" %>
+<!DOCTYPE html>
+<%
+    UddiHub x = UddiHub.getInstance(application, request.getSession());
+    //keyword=' + keyword + "&offset=" + offset + "&maxrecords=" + maxrecords
+    int maxrecords = 50;
+    int offset = 0;
+    String lang = request.getParameter("lang");
+    if (lang == null || lang.length() == 0) {
+        lang = null;
+    }
+    if (lang != null && lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
+        lang = null;
+    }
+    String keyword = request.getParameter("keyword");
+    if (keyword == null || keyword.length() == 0) {
+        keyword = "%";
+    }
+    try {
+        maxrecords = Integer.parseInt(request.getParameter("maxrecords"));
+    } catch (Exception ex) {
+    }
+    try {
+        offset = Integer.parseInt(request.getParameter("offset"));
+    } catch (Exception ex) {
+    }
+    if (offset < 0) {
+        offset = 0;
+    }
+    if (maxrecords > 50) {
+        maxrecords = 50;
+    }
+    boolean isChooser = false;
+    try {
+        isChooser = Boolean.parseBoolean(request.getParameter("chooser"));
+    } catch (Exception ex) {
+    }
+
+    PagableContainer ret = (x.SearchForServices(keyword, lang, maxrecords, offset, isChooser));
+    out.write(ret.renderedHtml);
+
+%>
+<script type="text/javascript">
+    totalrecordsService=<%=ret.totalrecords%>;
+    $("#totalrecordsService").text(totalrecordsService);
+    $("#offsetService").text(<%=offset%>);
+    $("#displayrecordsService").text (<%=ret.displaycount%>);
+    refresh();
+</script>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/settings.jsp b/juddi-gui/web/ajax/settings.jsp
new file mode 100644
index 0000000..51ef966
--- /dev/null
+++ b/juddi-gui/web/ajax/settings.jsp
@@ -0,0 +1,43 @@
+<%-- 
+    Document   : settings
+    Created on : Apr 6, 2013, 9:45:02 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.io.File"%>
+<%@page import="java.io.FileOutputStream"%>
+<%@page import="java.util.Properties"%>
+<%@page import="java.util.Enumeration"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include  file="../csrf.jsp" %>
+<%
+    if (!request.getRemoteHost().equalsIgnoreCase("localhost") && !request.getRemoteHost().equalsIgnoreCase("127.0.0.1")) {
+        response.setStatus(403);
+    }
+    if (!request.isUserInRole("manager")) {
+        response.setStatus(403);
+    }
+    if (request.getMethod().equalsIgnoreCase("post")) {
+        UddiHub x = UddiHub.getInstance(application, session);
+        Properties p = x.GetRawConfiguration();
+        Enumeration it = request.getParameterNames();
+        while (it.hasMoreElements()) {
+            String key = (String) it.nextElement();
+            String value = request.getParameter(key);
+            p.setProperty(key, value);
+        }
+        try {
+            FileOutputStream fos = new FileOutputStream(new File(x.GetRawConfigurationPath()));
+            String msg = "Edited at " + System.currentTimeMillis() + " by " + request.getRemoteUser();
+            if (request.getUserPrincipal() != null) {
+                msg += " " + request.getUserPrincipal().toString();
+            }
+            p.store(fos, "Edited at " + System.currentTimeMillis() + " by " + request.getRemoteUser() + request.getUserPrincipal().getName());
+            fos.close();
+        } catch (Exception ex) {
+            response.setStatus(500);
+            out.write("Error saving configuration " + ex.getMessage());
+        }
+
+    }
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/subscription.jsp b/juddi-gui/web/ajax/subscription.jsp
new file mode 100644
index 0000000..8a64945
--- /dev/null
+++ b/juddi-gui/web/ajax/subscription.jsp
@@ -0,0 +1,32 @@
+<%-- 
+    Document   : subscription
+    Created on : Apr 21, 2013, 12:00:30 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.util.concurrent.atomic.AtomicReference"%>
+<%@page import="org.apache.juddi.webconsole.hub.builders.Builders"%>
+<%@page import="org.uddi.sub_v3.Subscription"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<jsp:include page="../csrf.jsp"></jsp:include>
+<%
+    if (request.getMethod().equalsIgnoreCase("POST")) {
+        UddiHub x = UddiHub.getInstance(application, session);
+        if (request.getParameter("DELETE") != null) {
+          out.write( x.RemoveSubscription(request.getParameter("DELETE")));
+        } else {
+            AtomicReference<String> outmsg = new AtomicReference<String>();
+            Subscription sub = Builders.BuildClientSubscription(request.getParameterMap(), outmsg, session);
+            if (sub == null) {
+                out.write(outmsg.get());
+            } else {
+                out.write(x.AddSubscription(sub));
+            }
+        }
+    } else {
+        response.setStatus(500);
+    }
+
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/subscriptionFeed.jsp b/juddi-gui/web/ajax/subscriptionFeed.jsp
new file mode 100644
index 0000000..3db8d68
--- /dev/null
+++ b/juddi-gui/web/ajax/subscriptionFeed.jsp
@@ -0,0 +1,24 @@
+<%-- 
+    Document   : subscriptionFeed
+    Created on : Apr 14, 2013, 7:56:16 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.util.Calendar"%>
+<%@page import="javax.xml.datatype.XMLGregorianCalendar"%>
+<%@page import="java.util.GregorianCalendar"%>
+<%@page import="javax.xml.datatype.DatatypeFactory"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<%
+    UddiHub x = UddiHub.getInstance(application, session);
+    DatatypeFactory df = DatatypeFactory.newInstance();
+    GregorianCalendar gcal = new GregorianCalendar();
+    gcal.setTimeInMillis(System.currentTimeMillis());
+    //TODO get/set cookie data
+    gcal.add(Calendar.DATE, -1);
+    XMLGregorianCalendar xcal = df.newXMLGregorianCalendar(gcal);
+    out.write(x.GetNewsFeed(xcal));
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/tmodel.jsp b/juddi-gui/web/ajax/tmodel.jsp
new file mode 100644
index 0000000..6f0efca
--- /dev/null
+++ b/juddi-gui/web/ajax/tmodel.jsp
@@ -0,0 +1,18 @@
+<%-- 
+    Document   : addKeyGenerator
+    Created on : Feb 28, 2013, 8:10:10 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<%    
+    UddiHub hub = UddiHub.getInstance(application, session);
+    if (request.getParameter("action") != null) {
+        String action = request.getParameter("action");
+        if (action.equalsIgnoreCase("createKeyGen")) {
+            out.write(hub.AddTmodelKenGenerator(request.getParameter("key"),request.getParameter("name"), request.getParameter("lang")));
+        }
+    }
+%>
diff --git a/juddi-gui/web/ajax/tmodelsearch.jsp b/juddi-gui/web/ajax/tmodelsearch.jsp
new file mode 100644
index 0000000..3380164
--- /dev/null
+++ b/juddi-gui/web/ajax/tmodelsearch.jsp
@@ -0,0 +1,58 @@
+<%-- 
+    Document   : tmodelsearch
+    Created on : Mar 13, 2013, 8:54:47 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+<%@page import="org.apache.juddi.webconsole.hub.PagableContainer"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<%
+    UddiHub x = UddiHub.getInstance(application, request.getSession());
+    int maxrecords = 50;
+    int offset = 0;
+    String lang = request.getParameter("lang");
+    if (lang == null || lang.length() == 0) {
+        lang = null;
+    }
+    if (lang != null && lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
+        lang = null;
+    }
+
+    String keyword = request.getParameter("keyword");
+    if (keyword == null || keyword.length() == 0) {
+        keyword = "%";
+    }
+    try {
+        maxrecords = Integer.parseInt(request.getParameter("maxrecords"));
+    } catch (Exception ex) {
+    }
+    try {
+        offset = Integer.parseInt(request.getParameter("offset"));
+    } catch (Exception ex) {
+    }
+    if (offset < 0) {
+        offset = 0;
+    }
+    if (maxrecords > 50) {
+        maxrecords = 50;
+    }
+    boolean isChooser = false;
+    try {
+        isChooser = Boolean.parseBoolean(request.getParameter("chooser"));
+    } catch (Exception ex) {
+    }
+    PagableContainer ret = (x.tModelListAsHtml(keyword, lang, offset, maxrecords, isChooser));
+
+    out.write(ret.renderedHtml);
+%>
+<script type="text/javascript">
+    totalrecords=<%=ret.totalrecords%>;
+    $("#totalrecords").text(totalrecords);
+    $("#offset").text(<%=offset%>);
+    $("#displayrecords").text (<%=ret.displaycount%>);
+    refresh();
+</script>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/toXML.jsp b/juddi-gui/web/ajax/toXML.jsp
new file mode 100644
index 0000000..cf6a4e2
--- /dev/null
+++ b/juddi-gui/web/ajax/toXML.jsp
@@ -0,0 +1,41 @@
+<%-- 
+    Document   : toXML
+    Created on : Mar 14, 2013, 9:17:21 PM
+    Author     : Alex O'Ree
+--%><%@page import="javax.xml.bind.JAXB"%><%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%><%@page import="org.apache.juddi.jaxb.JAXBMarshaller"%><%@page import="org.apache.juddi.jaxb.EntityCreator"%><%@page import="org.apache.juddi.webconsole.hub.UddiHub"%><%@page import="org.apache.juddi.jaxb.PrintUDDI"%><%@page contentType="text/html" pageEncoding="UTF-8"%><%
+//<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+    //org.apache.juddi.jaxb.PrintUDDI p = new PrintUDDI();
+    UddiHub x = UddiHub.getInstance(application, session);
+
+    String type = request.getParameter("type");
+    String id = request.getParameter("id");
+    if ((type != null && type.length() != 0) && (id != null && id.length() != 0)) {
+        Object j = null;
+        if (type.equalsIgnoreCase("business")) {
+            j = x.GetBusinessDetailsAsObject(id);
+        } else if (type.equalsIgnoreCase("service")) {
+            j = x.GetServiceDetailsAsObject(id);
+        } else if (type.equalsIgnoreCase("bindingTemplate")) {
+            j = x.GetBindingDetailsAsObject(id);
+        } else if (type.equalsIgnoreCase("tModel")) {
+            j = x.GettModelDetailsAsObject(id);
+        }
+        else if (type.equalsIgnoreCase("subscription")) {
+            j = x.GetSubscriptionDetails(id);
+        }
+        if (j != null) {
+            JAXB.marshal(j, out);
+         //   out.write(JAXBMarshaller.marshallToString(j, JAXBMarshaller.PACKAGE_UDDIAPI));
+            // out.write(EntityCreator.outputEntityToString(j, "org.apache.juddi.api_v3"));
+        } else {
+            out.write(ResourceLoader.GetResource(session, "items.unknown"));
+        }
+    }
+
+    //get parameter type
+    //fetch from UDDI
+    //convert to string and output
+
+
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/ajax/validateSignature.jsp b/juddi-gui/web/ajax/validateSignature.jsp
new file mode 100644
index 0000000..15b71f7
--- /dev/null
+++ b/juddi-gui/web/ajax/validateSignature.jsp
@@ -0,0 +1,68 @@
+<%-- 
+    Document   : validateSignature
+    Created on : Apr 10, 2013, 10:14:19 PM
+    Author     : Alex O'Ree
+--%>
+<%@page import="java.util.Iterator"%>
+<%@page import="java.util.Map.Entry"%>
+<%@page import="java.util.Set"%>
+<%@page import="java.util.Properties"%>
+<%@page import="java.util.concurrent.atomic.AtomicReference"%>
+<%@page import="org.apache.juddi.v3.client.crypto.DigSigUtil"%>
+<%@page import="org.apache.juddi.jaxb.JAXBMarshaller"%>
+<%@page import="org.apache.juddi.jaxb.EntityCreator"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%
+    //org.apache.juddi.jaxb.PrintUDDI p = new PrintUDDI();
+    UddiHub x = UddiHub.getInstance(application, session);
+
+    String type = request.getParameter("type");
+    String id = request.getParameter("id");
+    if ((type != null && type.length() != 0) && (id != null && id.length() != 0)) {
+        Object j = null;
+        if (type.equalsIgnoreCase("business")) {
+            j = x.GetBusinessDetailsAsObject(id);
+        } else if (type.equalsIgnoreCase("service")) {
+            j = x.GetServiceDetailsAsObject(id);
+        } else if (type.equalsIgnoreCase("bindingTemplate")) {
+            j = x.GetBindingDetailsAsObject(id);
+        } else if (type.equalsIgnoreCase("tModel")) {
+            j = x.GettModelDetailsAsObject(id);
+        }
+        if (j != null) {
+            org.apache.juddi.v3.client.crypto.DigSigUtil dsig = new DigSigUtil();
+            UddiHub hub = UddiHub.getInstance(application, session);
+            Properties config2 = hub.GetRawConfiguration();
+            Set<Entry<Object, Object>> it = config2.entrySet();
+            Iterator it2 = it.iterator();
+            while (it2.hasNext()) {
+                Object j2 = it2.next();
+                Entry<Object, Object> item = (Entry<Object, Object>) j2;
+                dsig.put((String) item.getKey(), (String) item.getValue());
+            }
+
+
+            AtomicReference<String> msg = new AtomicReference<String>();
+            // dsig.put(DigSigUtil., value);
+            boolean success = dsig.verifySignedUddiEntity(j, msg);
+            if (!success) {
+                out.write("<span class=\"label label-important\">" + ResourceLoader.GetResource(session, "items.signatures.invalid") + msg.get() + "</span>");
+            } else {
+                out.write("<span class=\"label label-success\">" + ResourceLoader.GetResource(session, "items.signatures.valid") + "</span>");
+            }
+        } else {
+            response.setStatus(500);
+            out.write(ResourceLoader.GetResource(session, "items.unknown"));
+        }
+    }
+
+
+    //get parameter type
+    //fetch from UDDI
+    //convert to string and output
+
+
+
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/applets/juddi-gui-dsig.jar b/juddi-gui/web/applets/juddi-gui-dsig.jar
new file mode 100644
index 0000000..5e5be07
--- /dev/null
+++ b/juddi-gui/web/applets/juddi-gui-dsig.jar
Binary files differ
diff --git a/juddi-gui/web/applets/lib/commons-logging-api-1.1.jar b/juddi-gui/web/applets/lib/commons-logging-api-1.1.jar
new file mode 100644
index 0000000..55a5493
--- /dev/null
+++ b/juddi-gui/web/applets/lib/commons-logging-api-1.1.jar
Binary files differ
diff --git a/juddi-gui/web/applets/lib/juddi-client-3.1.5-SNAPSHOT.jar b/juddi-gui/web/applets/lib/juddi-client-3.1.5-SNAPSHOT.jar
new file mode 100644
index 0000000..ae80068
--- /dev/null
+++ b/juddi-gui/web/applets/lib/juddi-client-3.1.5-SNAPSHOT.jar
Binary files differ
diff --git a/juddi-gui/web/applets/lib/uddi-ws-3.1.5-SNAPSHOT.jar b/juddi-gui/web/applets/lib/uddi-ws-3.1.5-SNAPSHOT.jar
new file mode 100644
index 0000000..76b24a5
--- /dev/null
+++ b/juddi-gui/web/applets/lib/uddi-ws-3.1.5-SNAPSHOT.jar
Binary files differ
diff --git a/juddi-gui/web/assertions.jsp b/juddi-gui/web/assertions.jsp
new file mode 100644
index 0000000..5e05cdb
--- /dev/null
+++ b/juddi-gui/web/assertions.jsp
@@ -0,0 +1,277 @@
+<%-- 
+    Document   : assertions
+    Created on : April 13, 2013, 9:14:01 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h1><%=ResourceLoader.GetResource(session, "navbar.publisherassertions")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+
+            <a href="javascript:ShowAssertionDialog();" ><i class="icon-plus-sign icon-large"></i><%=ResourceLoader.GetResource(session, "items.publisherassertion.add")%> </a><br><br>
+            <div id="businesslist">
+                <img src="img/bigrollergreen.gif" title="<%=ResourceLoader.GetResource(session, "items.loading")%>"/>
+            </div>
+
+
+            <script type="text/javascript">
+               
+                function ShowAssertionDialog()
+                {
+                    $("#addPublisherAssertion").modal('show');
+                }
+                function RenderAssertions()
+                {
+                    var lang = $("#lang").text();
+                    $("#businesslist").html("<img src=\"img/bigrollergreen.gif\" title=\"Loading\"/>");
+                    var request=   $.ajax({
+                        url: 'ajax/assertions.jsp',
+                        type:"GET",
+                        cache: false
+                    });
+                  
+                    request.done(function(msg) {
+                        window.console && console.log('postback done ');                
+                        $("#businesslist").html(msg);
+                        //refresh();
+                    });
+
+                    request.fail(function(jqXHR, textStatus) {
+                        window.console && console.log('postback failed ');                                
+                        $("#businesslist").html("An error occured! " + jqXHR.responseText + textStatus);
+                        //refresh();
+                    });
+                }
+                $('.edit').editable(function(value, settings) { 
+                    console.log(this);
+                    console.log(value);
+                    console.log(settings);
+                    RenderAssertions();
+                    return(value);
+                }, { 
+                    type    : 'text',
+                    submit  : 'OK'
+                });
+                
+                RenderAssertions();
+
+                function addAssertion()
+                {
+                    var ok=true;
+                    var url='ajax/assertions.jsp';
+                    var postbackdata = new Array();
+                    $("div.edit").each(function()
+                    {
+                        //TODO filter out (click to edit) values
+                        var id=$(this).attr("id");
+                        var value=$(this).text();
+                        if (value == i18n_clicktoedit)
+                            ok = false;
+                        postbackdata.push({
+                            name: id, 
+                            value: value
+                        });
+                    }); 
+                    postbackdata.push({
+                        name:"nonce", 
+                        value: $("#nonce").val()
+                    });
+                    $("div.noedit").each(function()
+                    {
+                        var id=$(this).attr("id");
+                        var value=$(this).text();
+                        postbackdata.push({
+                            name: id, 
+                            value: value
+                        });
+                    }); 
+                    if (!ok)
+                    {//TODO more internationalization
+                        $("#saveresult").html("A value must be specified for each value.");
+                        return;
+                    }
+    
+                    var request=   $.ajax({
+                        url: url,
+                        type:"POST",
+                        //  data" + i18n_type + ": "html", 
+                        cache: false, 
+                        //  processData: false,f
+                        data: postbackdata
+                    });
+                
+                
+                    request.done(function(msg) {
+                        window.console && console.log('postback done '  + url);                
+                        $("#saveresult").html(msg);
+                        RenderAssertions();
+                    });
+
+                    request.fail(function(jqXHR, textStatus) {
+                        window.console && console.log('postback failed ' + url);                                
+                        $("#saveresult").html(jqXHR.responseText + textStatus);
+                    });
+                }
+              
+                function approveAssertion(fromkey,tokey, tmodelkey, keyname, keyvalue)
+                {
+                    var ok=true;
+                    var url='ajax/assertions.jsp';
+                    var postbackdata = new Array();
+                    postbackdata.push({
+                        name: 'fromkey', 
+                        value: fromkey
+                    });
+                    postbackdata.push({
+                        name: 'tokey', 
+                        value: tokey
+                    });
+                    postbackdata.push({
+                        name: 'tmodelkey', 
+                        value: tmodelkey
+                    });
+                    postbackdata.push({
+                        name: 'keyname', 
+                        value: keyname
+                    });
+                    postbackdata.push({
+                        name: 'keyvalue', 
+                        value: keyvalue
+                    });
+                        
+                    postbackdata.push({
+                        name:"nonce", 
+                        value: $("#nonce").val()
+                    });
+                    
+                    var request=   $.ajax({
+                        url: url,
+                        type:"POST",
+                        //  data" + i18n_type + ": "html", 
+                        cache: false, 
+                        //  processData: false,f
+                        data: postbackdata
+                    });
+                
+                
+                    request.done(function(msg) {
+                        window.console && console.log('postback done '  + url);                
+                        $("#saveresult").html(msg);
+                        RenderAssertions();
+                    });
+
+                    request.fail(function(jqXHR, textStatus) {
+                        window.console && console.log('postback failed ' + url);                                
+                        $("#saveresult").html(jqXHR.responseText + textStatus);
+                    });
+                }
+              
+                function removeAssertion(fromkey,tokey, tmodelkey, keyname, keyvalue)
+                {
+                    var ok=true;
+                    var url='ajax/assertions.jsp?action=delete';
+                    var postbackdata = new Array();
+                    postbackdata.push({
+                        name: 'fromkey', 
+                        value: fromkey
+                    });
+                    postbackdata.push({
+                        name: 'tokey', 
+                        value: tokey
+                    });
+                    postbackdata.push({
+                        name: 'tmodelkey', 
+                        value: tmodelkey
+                    });
+                    postbackdata.push({
+                        name: 'keyname', 
+                        value: keyname
+                    });
+                    postbackdata.push({
+                        name: 'keyvalue', 
+                        value: keyvalue
+                    });
+                    postbackdata.push({
+                        name: 'action', 
+                        value: 'delete'
+                    });
+                        
+                        
+                    postbackdata.push({
+                        name:"nonce", 
+                        value: $("#nonce").val()
+                    });
+                    
+                    var request=   $.ajax({
+                        url: url,
+                        type:"POST",
+                        //  data" + i18n_type + ": "html", 
+                        cache: false, 
+                        //  processData: false,f
+                        data: postbackdata
+                    });
+                
+                
+                    request.done(function(msg) {
+                        window.console && console.log('postback done '  + url);                
+                        $("#saveresult").html(msg);
+                        RenderAssertions();
+                    });
+
+                    request.fail(function(jqXHR, textStatus) {
+                        window.console && console.log('postback failed ' + url);                                
+                        $("#saveresult").html(jqXHR.responseText + textStatus);
+                    });
+                }
+
+                <%
+                    String fromkey = request.getParameter("fromkey");
+                %>
+            </script>
+        </div>
+    </div>
+
+    <div class="modal hide fade" id="addPublisherAssertion">
+        <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <h3><%=ResourceLoader.GetResource(session, "items.publisherassertion.add")%></h3>
+        </div>
+        <div class="modal-body" id="addPublisherAssertionContent">
+            <div style="float:left;width:25%">From Key : </div><div id="fromkey" class="edit"><%
+                if (fromkey != null) {
+                    out.write(StringEscapeUtils.escapeHtml(fromkey));
+                }
+                %></div>
+            <div style="float:left;width:25%">To Key : </div><div id="tokey" class="edit"></div>
+            <div style="float:left;width:25%">tModel Key : </div><div id="tmodelkey" class="edit">uddi:uddi.org:relationships</div>
+            <div style="float:left;width:25%">Key Name : </div><div id="keyname" class="edit">Subsidiary</div>
+            <div style="float:left;width:25%">Key Value : </div><div id="keyvalue" class="edit">parent-child</div>
+            <div id="saveresult" style="color:red"></div>
+        </div>
+        <script type="text/javascript">
+            Reedit();
+        </script>
+        <div class="modal-footer">
+            <a href="javascript:addAssertion();" class="btn btn-primary"><%=ResourceLoader.GetResource(session, "actions.save")%></a>
+            <a href="javascript:$('#addPublisherAssertion').modal('hide');" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+        </div>
+    </div>
+    <script type="text/javascript">
+        <%if (fromkey != null) {
+        %>
+            $("#addPublisherAssertion").modal('show');
+        <%                    }
+        %>
+    </script>
+
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/bindingChooser.jsp b/juddi-gui/web/bindingChooser.jsp
new file mode 100644
index 0000000..af96e3b
--- /dev/null
+++ b/juddi-gui/web/bindingChooser.jsp
@@ -0,0 +1,59 @@
+<%-- 
+    Document   : bindingChooser
+    Created on : Apr 24, 2013, 6:25:00 PM
+    Author     : Alex O'Ree
+this page is meant to be included via jsp:include
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<div class="modal hide fade container " id="bindingChooser">
+    <div class="modal-header">
+        <a href="javascript:$('#bindingChooser').modal('hide');" class="close" data-dismiss="modal" aria-hidden="true">&times;</a>
+        <h3><%=ResourceLoader.GetResource(session, "items.binding.chooser")%> </h3>
+    </div>
+    <div class="modal-body">
+
+        <%=ResourceLoader.GetResource(session, "totals.records")%>: <span id="totalrecordsBinding"></span><br>
+        <%=ResourceLoader.GetResource(session, "totals.recordsreturned")%>: <span id="displayrecordsBinding"></span><br>
+        <%=ResourceLoader.GetResource(session, "totals.offset")%> : <span id="offsetBinding">0</span><br>
+        <%//ResourceLoader.GetResource(session, "items.lang")%> <span id="langBinding" class=""></span><br>
+
+        <a href="javascript:pagedownChooserBinding();"><i class="icon-circle-arrow-left disabled icon-2x" id="pageupBinding"></i></a>
+        <a href="javascript:reloadBinding();"><i class="icon-refresh icon-2x"></i></a>
+        <a href="javascript:pageupChooserBinding();"><i class="icon-circle-arrow-right disabled icon-2x" id="pagedownBinding"></i></a>
+
+        <div id="bindinglist">
+            <img src="img/bigrollergreen.gif" title="Loading"/>
+        </div>
+        <script src="js/bindingChooser.js"></script>
+        <script type="text/javascript">
+                    
+            $('.edit').editable(function(value, settings) { 
+                console.log(this);
+                console.log(value);
+                console.log(settings);
+                reloadBindingModal();
+                //  RenderTmodelListBySearch('%', offset, maxrecords);
+                return(value);
+            }, { 
+                type    : 'text',
+                submit  : 'OK'
+            });
+            //only init the data when required reloadTmodelModal();
+        </script>
+
+    </div>
+    <div class="modal-footer">
+        <a href="#" class="btn" data-dismiss="modal"><%=ResourceLoader.GetResource(session, "actions.cancel")%></a>
+        <a href="javascript:$('#bindingChooser').modal('hide');" class="btn btn-primary" data-dismiss="modal"><%=ResourceLoader.GetResource(session, "actions.select")%></a>
+    </div>
+</div>
+<%
+//<a href="javascript:tModelCancel();" class="close" class="btn btn-danger">Cancel</a>
+//<a href="javascript:tModelModal();" class="btn" >Pick a tModel</a>
+
+
+//<a href="javascript:$('#bindingChooser').modal();" class="btn btn-primary" data-dismiss="modal">< %=ResourceLoader.GetResource(session, "actions.select")% ></a>
+%>
+
diff --git a/juddi-gui/web/businessBrowse.jsp b/juddi-gui/web/businessBrowse.jsp
new file mode 100644
index 0000000..8383048
--- /dev/null
+++ b/juddi-gui/web/businessBrowse.jsp
@@ -0,0 +1,48 @@
+<%-- 
+    Document   : browse
+    Created on : Feb 24, 2013, 9:14:01 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h1><%=ResourceLoader.GetResource(session, "navbar.businesses")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+            <%=ResourceLoader.GetResource(session, "totals.records")%>: <span id="totalrecordsBusiness"></span><br>
+            <%=ResourceLoader.GetResource(session, "totals.recordsreturned")%>: <span id="displayrecordsBusiness"></span><br>
+            <%=ResourceLoader.GetResource(session, "totals.offset")%> : <span id="offsetBusiness">0</span><br>
+            <%=ResourceLoader.GetResource(session, "items.lang")%>: <span id="lang" class="edit"></span><br>
+            <a href="javascript:pagedownBusiness();"><i class="icon-circle-arrow-left disabled icon-2x" id="pageupBusiness"></i></a>
+            <a href="javascript:refreshBusinessList();"><i class="icon-refresh icon-2x" id="refresh"></i></a>
+            <a href="javascript:pageupBusiness();"><i class="icon-circle-arrow-right disabled icon-2x" id="pagedownBusiness"></i></a>
+
+            <div id="businesslist">
+                <img src="img/bigrollergreen.gif" title="<%=ResourceLoader.GetResource(session, "items.loading")%>"/>
+            </div>
+
+            <script src="js/businesssearch.js"></script>
+            <script type="text/javascript">
+                
+                $('.edit').editable(function(value, settings) { 
+                    console.log(this);
+                    console.log(value);
+                    console.log(settings);
+                    RenderBusinessListBySearch('%', offset, maxrecords);
+                    return(value);
+                }, { 
+                    type    : 'text',
+                    submit  : 'OK'
+                });
+            </script>
+        </div>
+    </div>
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/businessChooser.jsp b/juddi-gui/web/businessChooser.jsp
new file mode 100644
index 0000000..a6e17b8
--- /dev/null
+++ b/juddi-gui/web/businessChooser.jsp
@@ -0,0 +1,59 @@
+<%-- 
+    Document   : businessChooser
+    Created on : Apr 24, 2013, 6:25:00 PM
+    Author     : Alex O'Ree
+this page is meant to be included via jsp:include
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<div class="modal hide fade container " id="businessChooser">
+    <div class="modal-header">
+        <a href="javascript:$('#businessChooser').modal('hide');" class="close" data-dismiss="modal" aria-hidden="true">&times;</a>
+        <h3><%=ResourceLoader.GetResource(session, "items.business.chooser")%> </h3>
+    </div>
+    <div class="modal-body">
+
+        <%=ResourceLoader.GetResource(session, "totals.records")%>: <span id="totalrecordsBusiness"></span><br>
+        <%=ResourceLoader.GetResource(session, "totals.recordsreturned")%>: <span id="displayrecordsBusiness"></span><br>
+        <%=ResourceLoader.GetResource(session, "totals.offset")%> : <span id="offsetBusiness">0</span><br>
+        <%//ResourceLoader.GetResource(session, "items.lang")%> <span id="langBusiness" class=""></span><br>
+
+        <a href="javascript:pagedownChooserBusiness();"><i class="icon-circle-arrow-left disabled icon-2x" id="pageupBusiness"></i></a>
+        <a href="javascript:reloadBusiness();"><i class="icon-refresh icon-2x"></i></a>
+        <a href="javascript:pageupChooserBusiness();"><i class="icon-circle-arrow-right disabled icon-2x" id="pagedownBusiness"></i></a>
+
+        <div id="businesslist">
+            <img src="img/bigrollergreen.gif" title="Loading"/>
+        </div>
+        <script src="js/businessChooser.js"></script>
+        <script type="text/javascript">
+                    
+            $('.edit').editable(function(value, settings) { 
+                console.log(this);
+                console.log(value);
+                console.log(settings);
+                reloadBusinessModal();
+                //  RenderTmodelListBySearch('%', offset, maxrecords);
+                return(value);
+            }, { 
+                type    : 'text',
+                submit  : 'OK'
+            });
+            //only init the data when required reloadTmodelModal();
+        </script>
+
+    </div>
+    <div class="modal-footer">
+        <a href="#" class="btn" data-dismiss="modal"><%=ResourceLoader.GetResource(session, "actions.cancel")%></a>
+        <a href="javascript:$('#businessChooser').modal('hide');" class="btn btn-primary" data-dismiss="modal"><%=ResourceLoader.GetResource(session, "actions.select")%></a>
+    </div>
+</div>
+<%
+//<a href="javascript:tModelCancel();" class="close" class="btn btn-danger">Cancel</a>
+//<a href="javascript:tModelModal();" class="btn" >Pick a tModel</a>
+
+
+//<a href="javascript:$('#businessChooser').modal();" class="btn btn-primary" data-dismiss="modal">< %=ResourceLoader.GetResource(session, "actions.select")% ></a>
+%>
+
diff --git a/juddi-gui/web/businessEditor2.jsp b/juddi-gui/web/businessEditor2.jsp
new file mode 100644
index 0000000..236f900
--- /dev/null
+++ b/juddi-gui/web/businessEditor2.jsp
@@ -0,0 +1,711 @@
+<%-- 
+    Document   : businesseditor
+    Created on : Feb 24, 2013, 3:31:39 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.net.URLEncoder"%>
+<%@page import="org.uddi.api_v3.IdentifierBag"%>
+<%@page import="org.uddi.api_v3.CategoryBag"%>
+<%@page import="org.uddi.api_v3.Contacts"%>
+<%@page import="org.uddi.api_v3.BusinessEntity"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h1><%=ResourceLoader.GetResource(session, "pages.businesseditor.title")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+            <script type="text/javascript" src="js/businessEditor.js"></script>
+            <div id="businesseditor">
+                <%
+                    boolean newitem = false;
+
+                    UddiHub x = UddiHub.getInstance(application, request.getSession());
+                    String bizid = request.getParameter("id");
+                    if (bizid == null || bizid.isEmpty()) {
+                        //response.sendRedirect("browse.jsp");
+                        newitem = true;
+                    }
+
+                    BusinessEntity bd = null;
+                    if (!newitem) {
+                        bd = x.GetBusinessDetails(bizid);
+                    } else {
+                        bd = new BusinessEntity();
+                    }
+                    if (bd == null) {
+                        bd = new BusinessEntity();
+                        newitem = true;
+                    }
+
+                %>
+                <%
+
+                    if (!newitem) {
+                        out.write("<i class=\"icon-lock icon-large\"></i>");
+                    }
+                %>
+                <b><%=ResourceLoader.GetResource(session, "pages.businesskey")%></b>-
+                <%=ResourceLoader.GetResource(session, "pages.businesskey.description")%>
+                <br>
+                <div style="border-width: 2px; border-style: solid;" class="<%
+
+                    if (newitem) {
+                        out.write("edit");
+                    } else {
+                        out.write("noedit");
+                    }
+
+                     %>" id="<%=PostBackConstants.BUSINESSKEY%>">
+                    <%
+                        out.write(StringEscapeUtils.escapeHtml(bd.getBusinessKey()));
+
+                        if (bd.getContacts()
+                                == null) {
+                            bd.setContacts(new Contacts());
+                        }
+                        if (bd.getCategoryBag() == null) {
+                            bd.setCategoryBag(new CategoryBag());
+                        }
+                        if (bd.getIdentifierBag() == null) {
+                            bd.setIdentifierBag(new IdentifierBag());
+                        }
+                    %></div><br>
+
+                <script type="text/javascript">
+                    var currentNameEntries=<%= bd.getName().size() - 1%>;
+                    var currentDisco=<%= bd.getContacts().getContact().size() - 1%>;
+                    var currentDescriptionEntries=<%= bd.getDescription().size() - 1%>;
+                    var currentContacts=<%= bd.getContacts().getContact().size() - 1%>;
+                    var currentcatkeyref=<%=bd.getCategoryBag().getKeyedReference().size()%>;
+                    var currentcatkeyrefgrp=<%=bd.getCategoryBag().getKeyedReferenceGroup().size()%>;
+                    var currentident=<%=bd.getIdentifierBag().getKeyedReference().size()%>;
+                </script>
+
+                <ul class="nav nav-tabs" id="myTab">
+                    <li class="active"><a  href="#general"><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.general")%></a></li>
+
+                    <li><a href="#discovery" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.discovery")%></a></li>
+                    <li><a href="#contacts" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.contacts")%></a></li>
+                    <li><a href="#categories" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.categories")%></a></li>
+
+                    <li><a href="#identifiers" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.identifiers")%></a></li>
+                    <li><a href="#services" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.services")%></a></li>
+                    <li><a href="#signatures" id="sigtagheader"><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.signatures")%></a></li>
+
+                    <li><a href="#opinfo" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.opinfo")%></a></li>
+                    <li><a href="#relations" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.relatedbusinesses")%></a></li>
+                </ul>
+                <script>
+                    $(function () {
+                        $('#myTab').tab;//('show');
+                    })
+                    $('#myTab a[href=#general]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#discovery]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#contacts]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#categories]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#identifiers]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#services]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#signatures]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#opinfo]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#relations]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    
+                </script>
+                <div class="tab-content">
+                    <div class="tab-pane active" id="general">
+                        <a href="javascript:AddName();"><i class="icon-plus-sign icon-large"></i></a> <b><%=ResourceLoader.GetResource(session, "items.name")%></b> - 
+                        <%=ResourceLoader.GetResource(session, "items.business.name.description")%>
+
+                        <div id="nameContainer" style="border-width: 2px; border-style: solid;" >
+                            <%
+                                for (int i = 0; i < bd.getName().size(); i++) {
+                                    out.write("<div id=\"" + PostBackConstants.NAME + i + "\" style=\"border-width:1px; border-style:solid\" >");
+                                    out.write("<div style=\"float:left; height:100%\"><a href=\"javascript:Remove('Name" + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ":&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.NAME + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getName().get(i).getValue()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + "&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.NAME + i + PostBackConstants.LANG + "\">");
+                                    if (bd.getName().get(i).getLang() != null) {
+                                        out.write(StringEscapeUtils.escapeHtml(bd.getName().get(i).getLang()));
+                                    }
+                                    out.write("</div>");
+
+                                    out.write("</div>");
+                                }
+                            %>
+                        </div>
+                        <Br>
+                        <a href="javascript:AddDescription();"><i class="icon-plus-sign  icon-large"></i></a> <b><%=ResourceLoader.GetResource(session, "items.description")%> </b>- 
+                        <%=ResourceLoader.GetResource(session, "items.businesses.description")%>.
+                        <div id="Description" style="border-width: 2px; border-style: solid;" >
+                            <%
+                                for (int i = 0; i < bd.getDescription().size(); i++) {
+                                    out.write("<div id=\"" + PostBackConstants.DESCRIPTION + i + "\" style=\"border-width:1px; border-style:solid\">");
+                                    out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('Description" + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ":&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.DESCRIPTION + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getDescription().get(i).getValue()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ":&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.DESCRIPTION + i + PostBackConstants.LANG + "\">"
+                                            + (bd.getDescription().get(i).getLang() == null ? "" : StringEscapeUtils.escapeHtml(bd.getDescription().get(i).getLang())) + "</div>");
+
+                                    out.write("</div>");
+                                }
+                            %>
+                        </div>
+                    </div>
+                    <div class="tab-pane " id="discovery">
+
+                        <a href="javascript:AddDisco();"><i class="icon-plus-sign icon-large"></i></a>
+                        <b><%=ResourceLoader.GetResource(session, "items.discoveryurl")%></b>- <%=ResourceLoader.GetResource(session, "items.discoveryurl.description")%>
+                        <div id="discoContainer" style="border-width: 2px; border-style: solid;" >
+                            <%
+                                if (bd.getDiscoveryURLs()
+                                        != null) {
+                                    for (int i = 0; i < bd.getDiscoveryURLs().getDiscoveryURL().size(); i++) {
+
+                                        out.write("<div id=\"disco" + i + "\" style=\"border-width:1px; border-style:solid\">");
+                                        out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('disco" + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ":&nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.DISCOVERYURL + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getDiscoveryURLs().getDiscoveryURL().get(i).getValue()) + "</div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.type") + ":&nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.DISCOVERYURL + i + PostBackConstants.TYPE + "\">" + StringEscapeUtils.escapeHtml(bd.getDiscoveryURLs().getDiscoveryURL().get(i).getUseType()) + "</div>");
+
+                                        out.write("</div>");
+
+
+                                    }
+                                }
+
+                            %>
+                        </div>
+                    </div>
+                    <div class="tab-pane " id="contacts">
+                        <a href="javascript:AddContact();"><i class="icon-plus-sign icon-large"></i></a>
+                        <b><%=ResourceLoader.GetResource(session, "items.contacts")%></b>-
+                        <%=ResourceLoader.GetResource(session, "items.contacts.description")%><br>
+
+                        <div id="contactsContainer" style="border-width: 2px; border-style: solid;" >
+                            <%
+                                if (bd.getContacts() == null) {
+                                    bd.setContacts(new Contacts());
+                                }
+                                for (int i = 0; i < bd.getContacts().getContact().size(); i++) {
+                                    //this is the outer framework, the add buttons
+                                    out.write("<div id=\"" + PostBackConstants.CONTACT_PREFIX + i + "\" style=\"border-width:2px; border-style:solid; border-color:red\" >"
+                                            + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CONTACT_PREFIX + i
+                                            + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+                                            + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.contact.type") + ": &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + i + PostBackConstants.TYPE + "\">"
+                                            + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getUseType())
+                                            + "</div>"
+                                            + "<a href=\"javascript:AddContactName('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>" + ResourceLoader.GetResource(session, "items.name") + " &nbsp"
+                                            + "<a href=\"javascript:AddContactEmail('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>" + ResourceLoader.GetResource(session, "items.email") + " &nbsp"
+                                            + "<a href=\"javascript:AddContactDescription('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>" + ResourceLoader.GetResource(session, "items.description") + " &nbsp"
+                                            + "<a href=\"javascript:AddContactPhone('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>" + ResourceLoader.GetResource(session, "items.phone") + " &nbsp"
+                                            + "<a href=\"javascript:AddContactAddress('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>" + ResourceLoader.GetResource(session, "items.address") + " &nbsp");
+                                    int contactid = i;
+                                    //person name
+                                    for (int k = 0; k < bd.getContacts().getContact().get(i).getPersonName().size(); k++) {
+
+                                        int contactname = k;
+                                        out.write("<div id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.NAME + contactname + "\" style=\"border-width:1px; border-style:solid\" >"
+                                                + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.NAME + contactname
+                                                + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.NAME + contactname + PostBackConstants.VALUE + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getPersonName().get(k).getValue()) + "</div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.NAME + contactname + PostBackConstants.LANG + "\">"
+                                                + (bd.getContacts().getContact().get(i).getPersonName().get(k).getLang() == null ? ""
+                                                : StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getPersonName().get(k).getLang())) + "</div>"
+                                                + "</div>");
+                                        //  + "</div>");
+                                    }
+                                    //email
+                                    for (int k = 0; k < bd.getContacts().getContact().get(i).getEmail().size(); k++) {
+                                        int contactemail = k;
+                                        out.write("<div id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.EMAIL + contactemail + "\" style=\"border-width:1px; border-style:solid\" >"
+                                                + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.EMAIL + contactemail
+                                                + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.type") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.EMAIL + contactemail + PostBackConstants.TYPE + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getEmail().get(k).getUseType())
+                                                + "</div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.EMAIL + contactemail + PostBackConstants.VALUE + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getEmail().get(k).getValue()) + "</div>"
+                                                + "</div>");
+                                    }
+                                    //out.write("</div>");
+                                    //contact description
+                                    for (int k = 0; k < bd.getContacts().getContact().get(i).getDescription().size(); k++) {
+                                        int contactdescription = k;
+                                        out.write("<div id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.DESCRIPTION + contactdescription + "\" style=\"border-width:1px; border-style:solid\" >"
+                                                + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.DESCRIPTION + contactdescription
+                                                + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.description") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.DESCRIPTION + contactdescription + PostBackConstants.VALUE + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getDescription().get(k).getValue())
+                                                + "</div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.DESCRIPTION + contactdescription + PostBackConstants.LANG + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getDescription().get(k).getLang())
+                                                + "</div>" //keep it
+                                                + "</div>");
+                                    }
+
+                                    //contact phone
+                                    for (int k = 0; k < bd.getContacts().getContact().get(i).getPhone().size(); k++) {
+                                        int contactphone = k;
+                                        out.write("<div id=\"" + PostBackConstants.CONTACT_PREFIX
+                                                + contactid
+                                                + PostBackConstants.PHONE
+                                                + contactphone
+                                                + "\" style=\"border-width:1px; border-style:solid\" >"
+                                                + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('"
+                                                + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.PHONE + contactphone
+                                                + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.phone") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.PHONE + contactphone + PostBackConstants.VALUE + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getPhone().get(k).getValue())
+                                                + "</div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.type") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.PHONE + contactphone + PostBackConstants.TYPE + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getPhone().get(k).getUseType())
+                                                + "</div>"
+                                                + "</div>");
+
+                                    }
+
+                                    //contact addresses
+                                    for (int k = 0; k < bd.getContacts().getContact().get(i).getAddress().size(); k++) {
+                                        int contactaddress = k;
+                                        out.write("<div id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + contactaddress + "\" style=\"border-width:1px; border-style:solid\" >"
+                                                + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + contactaddress
+                                                + "');\"><i class=\"icon-trash icon-large\"></i></a>" + ResourceLoader.GetResource(session, "items.address") + "</div><br>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + contactaddress + PostBackConstants.LANG + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getAddress().get(k).getLang())
+                                                + "</div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.sortcode") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + contactaddress + PostBackConstants.SORTCODE + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getAddress().get(k).getSortCode())
+                                                + "</div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.type") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + contactaddress + PostBackConstants.TYPE + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getAddress().get(k).getUseType())
+                                                + "</div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.tmodel.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + contactaddress + PostBackConstants.KEYNAME + "')\" >" + "<i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + contactaddress + PostBackConstants.KEYNAME + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getAddress().get(k).getTModelKey())
+                                                + "</div>"
+                                                + "<div><br><a href=\"javascript:AddContactAddressLine('" + contactid + PostBackConstants.ADDRESS + contactaddress + "');\">"
+                                                + "<i class=\"icon-plus-sign icon-large\"></i></a> " + ResourceLoader.GetResource(session, "items.addressline.add") + "</div>");
+
+
+                                        for (int j = 0; j < bd.getContacts().getContact().get(i).getAddress().get(k).getAddressLine().size(); j++) {
+                                            int contactaddresslines = j;
+                                            out.write("<div id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + k + PostBackConstants.ADDRESSLINE + contactaddresslines
+                                                    + "\" style=\"border-width:1px; border-style:solid\" >"
+                                                    + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESSLINE + contactaddresslines
+                                                    + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+                                                    + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.addressvalue") + ": &nbsp;</div>"
+                                                    + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + k + PostBackConstants.ADDRESSLINE + contactaddresslines + PostBackConstants.VALUE + "\">"
+                                                    + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getAddress().get(k).getAddressLine().get(k).getValue())
+                                                    + "</div>"
+                                                    + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.keyname.optional") + ": &nbsp;</div>"
+                                                    + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + k + PostBackConstants.ADDRESSLINE + contactaddresslines + PostBackConstants.KEYNAME + "\">"
+                                                    + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getAddress().get(k).getAddressLine().get(k).getKeyName())
+                                                    + "</div>"
+                                                    + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.keyvalue.optional") + ": &nbsp;</div>"
+                                                    + "<div class=\"edit\" id=\"" + PostBackConstants.CONTACT_PREFIX + contactid + PostBackConstants.ADDRESS + k + PostBackConstants.ADDRESSLINE + contactaddresslines + PostBackConstants.KEYVALUE + "\">"
+                                                    + StringEscapeUtils.escapeHtml(bd.getContacts().getContact().get(i).getAddress().get(k).getAddressLine().get(k).getKeyValue())
+                                                    + "</div>"
+                                                    + "</div>");
+                                        }   //address line loop
+                                        out.write("</div>");
+
+                                    }     //end of address loop
+                                    out.write("</div>");
+                                }//end of contact loop
+
+
+                            %>
+                        </div><!-- contact container -->
+                    </div><!-- contact tab -->
+                    <div class="tab-pane " id="categories">
+
+                        <b><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.categories")%> </b>- 
+                        <%=ResourceLoader.GetResource(session, "items.categories.description")%>
+                        <br><br>
+                        <b><%=ResourceLoader.GetResource(session, "items.keyrefcats")%>:</b><br>
+                        <a href="javascript:AddCategoryKeyReference();"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.keyrefcat.add")%> <Br>
+                        <div id="catContainer" style="border-width: 2px; border-style: solid;" >
+
+
+
+                            <%
+                                if (bd.getCategoryBag() == null) {
+                                    bd.setCategoryBag(new CategoryBag());
+                                }
+                                //                        out.write("Keyed Reference Categories:");
+                                for (int i = 0; i < bd.getCategoryBag().getKeyedReference().size(); i++) {
+
+                                    out.write("<div id=\"" + PostBackConstants.CATBAG_KEY_REF + i + "\" style=\"border-width:2px; border-style:solid\">");
+                                    out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CATBAG_KEY_REF + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.VALUE + "')\" >" + "<i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReference().get(i).getTModelKey()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ": &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.KEYNAME + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReference().get(i).getKeyName()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.KEYVALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReference().get(i).getKeyValue()) + "</div>");
+                                    out.write("</div>");
+                                }
+                            %>
+                        </div>
+                        <br>
+                        <b><%=ResourceLoader.GetResource(session, "items.keyrefgroup")%></b><br>
+                        <a href="javascript:AddCategoryKeyReferenceGroup();"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.keyrefgroup.add")%><br>
+                        <div id="catContainerGrp" style="border-width: 2px; border-style: solid;" >
+
+
+                            <%
+                                for (int i = 0; i < bd.getCategoryBag().getKeyedReferenceGroup().size(); i++) {
+
+                                    out.write("<div id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + "\" style=\"border-width:2px; border-style:solid\">"
+                                            + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CATBAG_KEY_REF_GRP + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+                                            + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.VALUE + "')\" >" + "<i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.VALUE + "\">"
+                                            + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReferenceGroup().get(i).getTModelKey())
+                                            + "</div>"
+                                            + "<div id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + "\" style=\"border-width:1px; border-style:solid\">"
+                                            + "<div style=\"float:left;height:100%\"><a href=\"javascript:AddCategoryKeyReferenceGroupKeyRef('" + PostBackConstants.CATBAG_KEY_REF_GRP + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a></div>"
+                                            + ResourceLoader.GetResource(session, "items.keyrefcat.add")
+                                            + "</div>");
+                                    for (int k = 0; k < bd.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) {
+
+                                        out.write("<div id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + "\" style=\"border-width:1px; border-style:solid\">");
+                                        out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + PostBackConstants.VALUE + "')\" >" + "<i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getTModelKey()) + "</div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ":  &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + PostBackConstants.KEYNAME + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getKeyName()) + "</div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + PostBackConstants.KEYVALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getKeyValue()) + "</div>");
+                                        out.write("</div>");
+                                    }
+
+                                    out.write("</div>");
+                                }
+
+
+                            %>
+                        </div>
+                    </div>
+                    <div class="tab-pane " id="identifiers">
+                        <b><%=ResourceLoader.GetResource(session, "items.identifiers")%> </b>- 
+                        <%=ResourceLoader.GetResource(session, "items.identifiers.description")%>
+
+                        <Br>
+                        <a href="javascript:AddIdentKeyReference();"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.keyrefcat.add")%> <Br>
+                        <div id="identContainer" style="border-width: 2px; border-style: solid;" >
+                            <%
+                                for (int i = 0; i < bd.getIdentifierBag().getKeyedReference().size(); i++) {
+                                    out.write("<div id=\"identbagkeyref" + i + "\" style=\"border-width:2px; border-style:solid\">");
+                                    out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('identbagkeyref" + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.IDENT_KEY_REF + i + PostBackConstants.VALUE + "')\" >" + "<i class=\"icon-list-alt icon-large\"></i> " + ResourceLoader.GetResource(session, "items.picker") + "</a>):  &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.IDENT_KEY_REF + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getIdentifierBag().getKeyedReference().get(i).getTModelKey()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ":  &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.IDENT_KEY_REF + i + PostBackConstants.KEYNAME + "\">" + StringEscapeUtils.escapeHtml(bd.getIdentifierBag().getKeyedReference().get(i).getKeyName()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.IDENT_KEY_REF + i + PostBackConstants.KEYVALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getIdentifierBag().getKeyedReference().get(i).getKeyValue()) + "</div>");
+                                    out.write("</div>");
+                                }
+                            %>
+                        </div>
+                    </div>
+                    <div class="tab-pane " id="services">
+                        <b><%=ResourceLoader.GetResource(session, "pages.businesseditor.businesslist")%> </b>- 
+                        <%
+                            if (bd.getBusinessServices() != null) {
+                                out.write(Integer.toString(bd.getBusinessServices().getBusinessService().size()));
+                            } else {
+                                out.write("0");
+                            }
+                        %> <%=ResourceLoader.GetResource(session, "pages.businesseditor.businesslist2")%>
+                        <%if (!newitem) {
+                        %>
+                        <br>
+                        <a href="serviceEditor.jsp?bizid=<%=URLEncoder.encode(bd.getBusinessKey(), "UTF-8")%>"><i class="icon-plus-sign icon-large"></i> <%=ResourceLoader.GetResource(session, "items.service.add")%> </a>
+                        <%
+                            }
+                        %>
+                        <br>
+                        <table class="table table-hover"><tr>
+                                <th><%=ResourceLoader.GetResource(session, "items.name")%> </th>
+                                <th><%=ResourceLoader.GetResource(session, "items.key")%></th>
+                                <th><%=ResourceLoader.GetResource(session, "items.bindingtemplate")%></th></tr>
+                            <%
+                                if (bd.getBusinessServices() != null) {
+                                    for (int i = 0; i < bd.getBusinessServices().getBusinessService().size(); i++) {
+                            %><tr>
+                                <td><%
+                                    if (!bd.getBusinessServices().getBusinessService().get(i).getName().isEmpty()) {
+                                        out.write(bd.getBusinessServices().getBusinessService().get(i).getName().get(0).getValue());
+                                    }
+                                    %>
+                                </td><td><a href="serviceEditor.jsp?id=<%=StringEscapeUtils.escapeHtml(bd.getBusinessServices().getBusinessService().get(i).getServiceKey())%>">
+                                        <%
+                                            out.write(bd.getBusinessServices().getBusinessService().get(i).getServiceKey());
+                                        %>
+                                        <i class="icon-edit icon-large"></i></a>
+                                </td><td>
+                                    <%
+                                        if (bd.getBusinessServices().getBusinessService().get(i).getBindingTemplates() == null) {
+                                            out.write("0");
+                                        } else {
+                                            out.write(Integer.toString(bd.getBusinessServices().getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size()));
+                                        }
+                                    %>
+                                </td>
+                            </tr>
+                            <%
+                                    }
+                                }
+                            %>
+                        </table>
+
+                    </div>
+                    <div class="tab-pane" id="signatures"><b><%=ResourceLoader.GetResource(session, "items.dsigs")%></b>
+                        <br>
+                        <%
+                            //icon-exclamation-sign
+                            if (bd.getSignature().isEmpty()) {
+                                out.write(ResourceLoader.GetResource(session, "items.signed.not"));
+                            } else {
+                                out.write(ResourceLoader.GetResource(session, "items.signed") + " " + bd.getSignature().size());
+                        %>
+                        <table class="table table-hover">
+                            <tr><th>#</th><th>Signed by</th><th></th><th>Signature Status</th></tr>
+
+                            <%
+                                for (int k = 0; k < bd.getSignature().size(); k++) {
+                                    out.write("<tr><td>" + k + "</td><td>");
+                                    out.write(x.SignatureToReadable(bd.getSignature().get(k)));
+                                    out.write("</td><td>");
+                                    out.write("<a href=\"ajax/getCert.jsp?type=business&id=" + URLEncoder.encode(bd.getBusinessKey(), "UTF-8") + "&index=" + k + "\">" + ResourceLoader.GetResource(session, "items.signed.viewcert") + "</a>");
+                                    out.write("</td><td><div id=\"digsig" + k + "\">" + ResourceLoader.GetResource(session, "items.loading") + "</div>");
+                            %>
+                            <script type="text/javascript">
+                                $.get("ajax/validateSignature.jsp?type=business&id=<%=StringEscapeUtils.escapeJavaScript(bd.getBusinessKey())%>", function(data){
+                                    $("#digsig<%=k%>").html(data);
+                                    if (data.indexOf("invalid") !== -1 )
+                                    {
+                                        $("#sigtagheader").html($("#sigtagheader").html() + "<i class=\"icon-thumbs-down icon-large\" style=\"color:red\"></i>");
+                                    }
+                                    else
+                                    {
+                                        $("#sigtagheader").html($("#sigtagheader").html() + "<i class=\"icon-thumbs-up icon-large\" style=\"color:green\"></i>");
+                                    }
+                                } )
+                            </script>
+                            <%
+                                    out.write("</td></tr>");
+                                }
+                            %>
+                        </table>
+                        <%
+                            }
+                        %>
+                    </div>
+
+                    <div class="tab-pane" id="opinfo">
+                        <script type="text/javascript">
+                            $.get("ajax/opInfo.jsp?id=<%=StringEscapeUtils.escapeJavaScript(bd.getBusinessKey())%>", function(data){
+                                $("#opinfodiv").html(data);
+                            } )
+                        </script>
+                        <div id="opinfodiv"></div>
+
+                    </div>
+                    <div class="tab-pane" id="relations">
+                        <%
+                            if (!newitem) {
+
+                        %>
+                        <script type="text/javascript">
+                            var data2 = new Array();
+                            data2.push({
+                                name: "selection",
+                                value: "key"});
+                            data2.push({
+                                name: "nonce",
+                                value:"<%=(String) session.getAttribute("nonce")%>"});
+                            data2.push({    
+                                name: "searchfor", 
+                                value: "RelatedBusiness"
+                            });
+                            data2.push({
+                                name:"searchcontent",
+                                value:"<%=StringEscapeUtils.escapeJavaScript(bd.getBusinessKey())%>"
+                            });
+                            
+                            $.ajax({url:"ajax/search.jsp", type:"post", data:data2, 
+                                success: function (x){
+                                    $("#relationresults").html(x);
+                                }});
+                            
+                        </script>
+                        <a href="assertions.jsp?fromkey=<%=URLEncoder.encode(bizid, "UTF-8")%>"> <i class="icon-plus-sign icon-large"></i>
+                            <%=ResourceLoader.GetResource(session, "items.publisherassertion.add")%></a><br>
+                        <div id="relationresults"></div>
+
+                        <%
+                            }
+                        %>
+                    </div>
+                </div>
+            </div>
+            <div><br>
+                <%
+                    if (bd.getSignature().isEmpty()) {
+                %>
+                <a class="btn btn-primary " href="javascript:saveBusiness();"><i class="icon-save icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.save")%></a>
+                <%  } else {
+                %>
+                <a href="#confirmDialog" role="button" class="btn btn-primary" data-toggle="modal"><i class="icon-save icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.save")%></a>
+
+                <%        }
+                    if (!newitem) {
+
+                %> | 
+                <a class="btn btn-danger " href="javascript:deleteBusiness();"><i class="icon-trash icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.delete")%></a> |
+                <a class="btn btn-success " href="signer.jsp?id=<%=URLEncoder.encode(bizid, "UTF-8")%>&type=business"><i class="icon-pencil icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.sign")%></a> |
+                <a class="btn btn-info " href="#" title="<%=ResourceLoader.GetResource(session, "actions.subscribe.description")%>"><i class="icon-rss icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.subscribe")%></a> |
+                <a class="btn btn-warning "  href="transfer.jsp?biz=<%=URLEncoder.encode(bizid, "UTF-8")%>" title="<%=ResourceLoader.GetResource(session, "actions.transfer.description")%>"><i class="icon-exchange icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.transfer")%></a> |
+                <a class="btn "  href="javascript:ViewAsXML();"><i class="icon-screenshot icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.asxml")%></a>
+                <%
+                    }
+                %>
+
+                <script type="text/javascript">
+                    Reedit();
+                    <%
+                        if (!newitem) {
+
+                    %>
+                        function ViewAsXML()
+                        {
+                            $.get("ajax/toXML.jsp?id=<%=URLEncoder.encode(bizid, "UTF-8")%>&type=business", function(data){
+                                window.console && console.log('asXml success');                
+                  
+                                $("#viewAsXmlContent").html(safe_tags_replace(data));
+                                $( "#viewAsXml" ).modal('show');
+                            });
+                       
+                        }
+                    <%
+                        }
+                    %>
+                </script>
+
+            </div>
+        </div>
+    </div>
+
+
+    <div class="modal hide fade" id="confirmDialog">
+        <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <h3><%=ResourceLoader.GetResource(session, "modal.digitalsignaturewarning.title")%></h3>
+        </div>
+        <div class="modal-body">
+            <p><%=ResourceLoader.GetResource(session, "modal.digitalsignaturewarning.body")%></p>
+        </div>
+        <div class="modal-footer">
+            <a href="#" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+            <a href="javascript:saveBusiness();$('#confirmDialog').modal('hide');" class="btn btn-primary">
+                <%=ResourceLoader.GetResource(session, "modal.savechanges")%></a>
+        </div>
+    </div>
+
+    <%
+        if (!newitem) {
+
+    %>
+    <div class="modal hide fade container" id="viewAsXml">
+        <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <h3><%=ResourceLoader.GetResource(session, "actions.asxml")%></h3>
+        </div>
+        <div class="modal-body" id="viewAsXmlContent">
+
+
+        </div>
+        <div class="modal-footer">
+            <a href="ajax/toXML.jsp?id=<%=URLEncoder.encode(bd.getBusinessKey(), "UTF-8")%>&type=business" class="btn btn-primary" target="_blank">Popout</a> 
+            <a href="javascript:closeXmlPop('viewAsXml');" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+        </div>
+    </div>
+    <script type="text/javascript">
+        function closeXmlPop(modaldiv)
+        {
+            $('#' + modaldiv).modal('hide');
+        }
+    </script>
+    <div class="modal hide fade container" id="addSubscriptionModal">
+        <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <h3>Add a subscription</h3>
+        </div>
+        <div class="modal-body">
+            You can setup a subscription for this business to automatically alert you when there is a change
+        </div>
+        <div class="modal-footer">
+
+            <a href="javascript:closeXmlPop('viewAsXml');" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+        </div>
+    </div>
+    <%
+        }
+    %>
+    <%@include file="tmodelChooser.jsp" %>
+    <!-- container div is in header bottom-->
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/csrf.jsp b/juddi-gui/web/csrf.jsp
new file mode 100644
index 0000000..e1b22ec
--- /dev/null
+++ b/juddi-gui/web/csrf.jsp
@@ -0,0 +1,78 @@
+<%-- 
+    Document   : csrf Provides basic Cross site request forgery protection
+    Created on : Feb 27, 2013, 8:42:07 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.CrossSiteRequestForgeryException"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page import="org.apache.log4j.Logger"%>
+<%@page import="org.apache.log4j.Level"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%
+    //this is to catch someone that bookmarked a page after selecting a language
+    Cookie[] cookies3 = request.getCookies();
+    if (cookies3 != null && cookies3.length > 0) {
+        for (int i = 0; i < cookies3.length; i++) {
+            if (cookies3[i] != null && cookies3[i].getName() != null && cookies3[i].getName().equalsIgnoreCase("locale")) {
+                if (cookies3[i].getValue() != null) {
+                    session.setAttribute("locale", cookies3[i].getValue());
+                }
+            }
+        }
+    }
+    if (session.getAttribute("locale")==null){
+        //last change, default to english
+        session.setAttribute("locale", "en");
+    }
+    String currentNonce = null;
+
+    if (request.getMethod().equalsIgnoreCase("post")) {
+
+        if ((request.getParameter("nonce") == null || request.getParameter("nonce").isEmpty())) {
+            //reject it
+            session.removeAttribute("nonce");
+            response.sendRedirect("index.jsp");
+            UddiHub.log.log(Level.WARN, "CSRF Test failed, no nonce guid." + request.getRemoteAddr() + request.getRemoteUser());
+            throw new CrossSiteRequestForgeryException();
+        } else {
+
+            String noncestr = (String) session.getAttribute("nonce");
+            if (noncestr == null) {
+                //no session variable to test against, reject it
+                UddiHub.log.log(Level.WARN, "CSRF Test failed, no session guid." + request.getRemoteAddr() + request.getRemoteUser());
+                session.removeAttribute("nonce");
+                throw new CrossSiteRequestForgeryException("Cross Site Request Forgery");
+            }
+            String postedstr = request.getParameter("nonce");
+
+            //check session against existing nonce, if match
+            //generate new one, add to page and session
+            //else redirect to index page
+            if (noncestr.equals(postedstr)) {
+                currentNonce = noncestr;
+                //OK
+                // current = UUID.randomUUID();
+                //session.removeAttribute("nonce");
+                // session.setAttribute("nonce", current.toString());
+                UddiHub.log.log(Level.INFO, "CSRF Test passed.");
+            } else {
+                //mismatch, reject it
+                UddiHub.log.log(Level.WARN, "CSRF Test failed, session did not match nonce guid." + request.getRemoteAddr() + request.getRemoteUser());
+                session.removeAttribute("nonce");
+                throw new CrossSiteRequestForgeryException("Cross Site Request Forgery");
+            }
+        }
+    } else {
+        //HTTP GET or otherwise message
+        if ((currentNonce == null) || currentNonce.isEmpty()) {
+            currentNonce = (String)session.getAttribute("nonce");
+            if (currentNonce == null) {
+                currentNonce = java.util.UUID.randomUUID().toString();
+            }
+            session.setAttribute("nonce", currentNonce);
+        }
+
+    }
+
+%>
diff --git a/juddi-gui/web/css/bootstrap-datetimepicker.min.css b/juddi-gui/web/css/bootstrap-datetimepicker.min.css
new file mode 100644
index 0000000..6c40dea
--- /dev/null
+++ b/juddi-gui/web/css/bootstrap-datetimepicker.min.css
@@ -0,0 +1,8 @@
+/*!
+ * Datepicker for Bootstrap
+ *
+ * Copyright 2012 Stefan Petre
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-datetimepicker-widget{top:0;left:0;width:250px;padding:4px;margin-top:1px;z-index:3000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.bootstrap-datetimepicker-widget:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:6px}.bootstrap-datetimepicker-widget:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.bootstrap-datetimepicker-widget>ul{list-style-type:none;margin:0}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:100%;font-weight:bold;font-size:1.2em}.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator{width:4px;padding:0;margin:0}.bootstrap-datetimepicker-widget .datepicker>div{display:none}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget td,.bootstrap-datetimepicker-widget th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.bootstrap-datetimepicker-widget td.day:hover,.bootstrap-datetimepicker-widget td.hour:hover,.bootstrap-datetimepicker-widget td.minute:hover,.bootstrap-datetimepicker-widget td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget td.old,.bootstrap-datetimepicker-widget td.new{color:#999}.bootstrap-datetimepicker-widget td.active,.bootstrap-datetimepicker-widget td.active:hover{color:#fff;background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget td.active:hover,.bootstrap-datetimepicker-widget td.active:hover:hover,.bootstrap-datetimepicker-widget td.active:active,.bootstrap-datetimepicker-widget td.active:hover:active,.bootstrap-datetimepicker-widget td.active.active,.bootstrap-datetimepicker-widget td.active:hover.active,.bootstrap-datetimepicker-widget td.active.disabled,.bootstrap-datetimepicker-widget td.active:hover.disabled,.bootstrap-datetimepicker-widget td.active[disabled],.bootstrap-datetimepicker-widget td.active:hover[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.bootstrap-datetimepicker-widget td.active:active,.bootstrap-datetimepicker-widget td.active:hover:active,.bootstrap-datetimepicker-widget td.active.active,.bootstrap-datetimepicker-widget td.active:hover.active{background-color:#039 \9}.bootstrap-datetimepicker-widget td.disabled,.bootstrap-datetimepicker-widget td.disabled:hover{background:0;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget td span{display:block;width:47px;height:54px;line-height:54px;float:left;margin:2px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.bootstrap-datetimepicker-widget td span:hover{background:#eee}.bootstrap-datetimepicker-widget td span.active{color:#fff;background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget td span.active:hover,.bootstrap-datetimepicker-widget td span.active:active,.bootstrap-datetimepicker-widget td span.active.active,.bootstrap-datetimepicker-widget td span.active.disabled,.bootstrap-datetimepicker-widget td span.active[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.bootstrap-datetimepicker-widget td span.active:active,.bootstrap-datetimepicker-widget td span.active.active{background-color:#039 \9}.bootstrap-datetimepicker-widget td span.old{color:#999}.bootstrap-datetimepicker-widget td span.disabled,.bootstrap-datetimepicker-widget td span.disabled:hover{background:0;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget th.switch{width:145px}.bootstrap-datetimepicker-widget th.next,.bootstrap-datetimepicker-widget th.prev{font-size:21px}.bootstrap-datetimepicker-widget th.disabled,.bootstrap-datetimepicker-widget th.disabled:hover{background:0;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget thead tr:first-child th:hover{background:#eee}.input-append.date .add-on i,.input-prepend.date .add-on i{display:block;cursor:pointer;width:16px;height:16px}
\ No newline at end of file
diff --git a/juddi-gui/web/css/bootstrap-modal.css b/juddi-gui/web/css/bootstrap-modal.css
new file mode 100644
index 0000000..76e3be2
--- /dev/null
+++ b/juddi-gui/web/css/bootstrap-modal.css
@@ -0,0 +1,214 @@
+/*!
+ * Bootstrap Modal
+ *
+ * Copyright Jordan Schroter
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+
+.modal-open {
+	overflow: hidden;
+}
+
+
+/* add a scroll bar to stop page from jerking around */
+.modal-open.page-overflow .page-container,
+.modal-open.page-overflow .page-container .navbar-fixed-top,
+.modal-open.page-overflow .page-container .navbar-fixed-bottom,
+.modal-open.page-overflow .modal-scrollable {
+	overflow-y: scroll;
+}
+
+@media (max-width: 979px) {
+	.modal-open.page-overflow .page-container .navbar-fixed-top,
+	.modal-open.page-overflow .page-container .navbar-fixed-bottom  {
+		overflow-y: visible;
+	}
+}
+
+
+.modal-scrollable {
+	position: fixed;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	overflow: auto;
+}
+
+.modal {
+	outline: none;
+	position: absolute;
+	margin-top: 0;
+	top: 50%;
+	overflow: visible; /* allow content to popup out (i.e tooltips) */
+}
+
+.modal.fade {
+	top: -100%;
+	-webkit-transition: opacity 0.3s linear, top 0.3s ease-out, bottom 0.3s ease-out, margin-top 0.3s ease-out;	
+	   -moz-transition: opacity 0.3s linear, top 0.3s ease-out, bottom 0.3s ease-out, margin-top 0.3s ease-out;
+	     -o-transition: opacity 0.3s linear, top 0.3s ease-out, bottom 0.3s ease-out, margin-top 0.3s ease-out;
+	        transition: opacity 0.3s linear, top 0.3s ease-out, bottom 0.3s ease-out, margin-top 0.3s ease-out;
+}
+
+.modal.fade.in {
+	top: 50%;
+}
+
+.modal-body {
+	max-height: none;
+	overflow: visible;
+}
+
+.modal.modal-absolute {
+	position: absolute;
+	z-index: 950;
+}
+
+.modal .loading-mask {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	background: #fff;
+	border-radius: 6px;
+}
+
+.modal-backdrop.modal-absolute{
+	position: absolute;
+	z-index: 940;
+}
+
+.modal-backdrop, 
+.modal-backdrop.fade.in{
+	opacity: 0.7;
+	filter: alpha(opacity=70);
+	background: #fff;
+}
+
+.modal.container {
+  width: 940px;
+  margin-left: -470px;
+}
+
+/* Modal Overflow */
+
+.modal-overflow.modal {
+	top: 1%;
+}
+
+.modal-overflow.modal.fade {
+	top: -100%;
+}
+
+.modal-overflow.modal.fade.in {
+	top: 1%;
+}
+
+.modal-overflow .modal-body {
+	overflow: auto;
+	-webkit-overflow-scrolling: touch;
+}
+
+/* Responsive */
+
+@media (min-width: 1200px) {
+	.modal.container {
+		width: 1170px;
+		margin-left: -585px;
+	}
+}
+
+@media (max-width: 979px) {
+	.modal, 
+	.modal.container,
+	.modal.modal-overflow 	{
+		top: 1%;
+		right: 1%;
+		left: 1%;
+		bottom: auto;
+		width: auto !important;
+		height: auto !important;
+		margin: 0 !important;
+		padding: 0 !important;
+	}
+	
+	.modal.fade.in, 
+	.modal.container.fade.in,
+	.modal.modal-overflow.fade.in {
+		top: 1%;
+		bottom: auto;
+	}
+	
+	.modal-body,
+	.modal-overflow .modal-body {
+		position: static;
+		margin: 0;
+		height: auto !important;
+		max-height: none !important;
+		overflow: visible !important;
+	}
+	
+	.modal-footer,
+	.modal-overflow .modal-footer {
+		position: static;
+	}
+}
+
+.loading-spinner {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	margin: -12px 0 0 -12px;
+}
+
+/*
+Animate.css - http://daneden.me/animate
+Licensed under the ☺ license (http://licence.visualidiot.com/)
+
+Copyright (c) 2012 Dan Eden*/
+
+.animated {
+	-webkit-animation-duration: 1s;
+	   -moz-animation-duration: 1s;
+	     -o-animation-duration: 1s;
+	        animation-duration: 1s;
+	-webkit-animation-fill-mode: both;
+	   -moz-animation-fill-mode: both;
+	     -o-animation-fill-mode: both;
+	        animation-fill-mode: both;
+}
+
+@-webkit-keyframes shake {
+	0%, 100% {-webkit-transform: translateX(0);}
+	10%, 30%, 50%, 70%, 90% {-webkit-transform: translateX(-10px);}
+	20%, 40%, 60%, 80% {-webkit-transform: translateX(10px);}
+}
+
+@-moz-keyframes shake {
+	0%, 100% {-moz-transform: translateX(0);}
+	10%, 30%, 50%, 70%, 90% {-moz-transform: translateX(-10px);}
+	20%, 40%, 60%, 80% {-moz-transform: translateX(10px);}
+}
+
+@-o-keyframes shake {
+	0%, 100% {-o-transform: translateX(0);}
+	10%, 30%, 50%, 70%, 90% {-o-transform: translateX(-10px);}
+	20%, 40%, 60%, 80% {-o-transform: translateX(10px);}
+}
+
+@keyframes shake {
+	0%, 100% {transform: translateX(0);}
+	10%, 30%, 50%, 70%, 90% {transform: translateX(-10px);}
+	20%, 40%, 60%, 80% {transform: translateX(10px);}
+}
+
+.shake {
+	-webkit-animation-name: shake;
+	-moz-animation-name: shake;
+	-o-animation-name: shake;
+	animation-name: shake;
+}
diff --git a/juddi-gui/web/css/bootstrap-responsive.css b/juddi-gui/web/css/bootstrap-responsive.css
new file mode 100644
index 0000000..5215a5d
--- /dev/null
+++ b/juddi-gui/web/css/bootstrap-responsive.css
@@ -0,0 +1,1109 @@
+/*!
+ * Bootstrap Responsive v2.3.0
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+.clearfix {
+  *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.clearfix:after {
+  clear: both;
+}
+
+.hide-text {
+  font: 0/0 a;
+  color: transparent;
+  text-shadow: none;
+  background-color: transparent;
+  border: 0;
+}
+
+.input-block-level {
+  display: block;
+  width: 100%;
+  min-height: 30px;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+@-ms-viewport {
+  width: device-width;
+}
+
+.hidden {
+  display: none;
+  visibility: hidden;
+}
+
+.visible-phone {
+  display: none !important;
+}
+
+.visible-tablet {
+  display: none !important;
+}
+
+.hidden-desktop {
+  display: none !important;
+}
+
+.visible-desktop {
+  display: inherit !important;
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+  .hidden-desktop {
+    display: inherit !important;
+  }
+  .visible-desktop {
+    display: none !important ;
+  }
+  .visible-tablet {
+    display: inherit !important;
+  }
+  .hidden-tablet {
+    display: none !important;
+  }
+}
+
+@media (max-width: 767px) {
+  .hidden-desktop {
+    display: inherit !important;
+  }
+  .visible-desktop {
+    display: none !important;
+  }
+  .visible-phone {
+    display: inherit !important;
+  }
+  .hidden-phone {
+    display: none !important;
+  }
+}
+
+.visible-print {
+  display: none !important;
+}
+
+@media print {
+  .visible-print {
+    display: inherit !important;
+  }
+  .hidden-print {
+    display: none !important;
+  }
+}
+
+@media (min-width: 1200px) {
+  .row {
+    margin-left: -30px;
+    *zoom: 1;
+  }
+  .row:before,
+  .row:after {
+    display: table;
+    line-height: 0;
+    content: "";
+  }
+  .row:after {
+    clear: both;
+  }
+  [class*="span"] {
+    float: left;
+    min-height: 1px;
+    margin-left: 30px;
+  }
+  .container,
+  .navbar-static-top .container,
+  .navbar-fixed-top .container,
+  .navbar-fixed-bottom .container {
+    width: 1170px;
+  }
+  .span12 {
+    width: 1170px;
+  }
+  .span11 {
+    width: 1070px;
+  }
+  .span10 {
+    width: 970px;
+  }
+  .span9 {
+    width: 870px;
+  }
+  .span8 {
+    width: 770px;
+  }
+  .span7 {
+    width: 670px;
+  }
+  .span6 {
+    width: 570px;
+  }
+  .span5 {
+    width: 470px;
+  }
+  .span4 {
+    width: 370px;
+  }
+  .span3 {
+    width: 270px;
+  }
+  .span2 {
+    width: 170px;
+  }
+  .span1 {
+    width: 70px;
+  }
+  .offset12 {
+    margin-left: 1230px;
+  }
+  .offset11 {
+    margin-left: 1130px;
+  }
+  .offset10 {
+    margin-left: 1030px;
+  }
+  .offset9 {
+    margin-left: 930px;
+  }
+  .offset8 {
+    margin-left: 830px;
+  }
+  .offset7 {
+    margin-left: 730px;
+  }
+  .offset6 {
+    margin-left: 630px;
+  }
+  .offset5 {
+    margin-left: 530px;
+  }
+  .offset4 {
+    margin-left: 430px;
+  }
+  .offset3 {
+    margin-left: 330px;
+  }
+  .offset2 {
+    margin-left: 230px;
+  }
+  .offset1 {
+    margin-left: 130px;
+  }
+  .row-fluid {
+    width: 100%;
+    *zoom: 1;
+  }
+  .row-fluid:before,
+  .row-fluid:after {
+    display: table;
+    line-height: 0;
+    content: "";
+  }
+  .row-fluid:after {
+    clear: both;
+  }
+  .row-fluid [class*="span"] {
+    display: block;
+    float: left;
+    width: 100%;
+    min-height: 30px;
+    margin-left: 2.564102564102564%;
+    *margin-left: 2.5109110747408616%;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+            box-sizing: border-box;
+  }
+  .row-fluid [class*="span"]:first-child {
+    margin-left: 0;
+  }
+  .row-fluid .controls-row [class*="span"] + [class*="span"] {
+    margin-left: 2.564102564102564%;
+  }
+  .row-fluid .span12 {
+    width: 100%;
+    *width: 99.94680851063829%;
+  }
+  .row-fluid .span11 {
+    width: 91.45299145299145%;
+    *width: 91.39979996362975%;
+  }
+  .row-fluid .span10 {
+    width: 82.90598290598291%;
+    *width: 82.8527914166212%;
+  }
+  .row-fluid .span9 {
+    width: 74.35897435897436%;
+    *width: 74.30578286961266%;
+  }
+  .row-fluid .span8 {
+    width: 65.81196581196582%;
+    *width: 65.75877432260411%;
+  }
+  .row-fluid .span7 {
+    width: 57.26495726495726%;
+    *width: 57.21176577559556%;
+  }
+  .row-fluid .span6 {
+    width: 48.717948717948715%;
+    *width: 48.664757228587014%;
+  }
+  .row-fluid .span5 {
+    width: 40.17094017094017%;
+    *width: 40.11774868157847%;
+  }
+  .row-fluid .span4 {
+    width: 31.623931623931625%;
+    *width: 31.570740134569924%;
+  }
+  .row-fluid .span3 {
+    width: 23.076923076923077%;
+    *width: 23.023731587561375%;
+  }
+  .row-fluid .span2 {
+    width: 14.52991452991453%;
+    *width: 14.476723040552828%;
+  }
+  .row-fluid .span1 {
+    width: 5.982905982905983%;
+    *width: 5.929714493544281%;
+  }
+  .row-fluid .offset12 {
+    margin-left: 105.12820512820512%;
+    *margin-left: 105.02182214948171%;
+  }
+  .row-fluid .offset12:first-child {
+    margin-left: 102.56410256410257%;
+    *margin-left: 102.45771958537915%;
+  }
+  .row-fluid .offset11 {
+    margin-left: 96.58119658119658%;
+    *margin-left: 96.47481360247316%;
+  }
+  .row-fluid .offset11:first-child {
+    margin-left: 94.01709401709402%;
+    *margin-left: 93.91071103837061%;
+  }
+  .row-fluid .offset10 {
+    margin-left: 88.03418803418803%;
+    *margin-left: 87.92780505546462%;
+  }
+  .row-fluid .offset10:first-child {
+    margin-left: 85.47008547008548%;
+    *margin-left: 85.36370249136206%;
+  }
+  .row-fluid .offset9 {
+    margin-left: 79.48717948717949%;
+    *margin-left: 79.38079650845607%;
+  }
+  .row-fluid .offset9:first-child {
+    margin-left: 76.92307692307693%;
+    *margin-left: 76.81669394435352%;
+  }
+  .row-fluid .offset8 {
+    margin-left: 70.94017094017094%;
+    *margin-left: 70.83378796144753%;
+  }
+  .row-fluid .offset8:first-child {
+    margin-left: 68.37606837606839%;
+    *margin-left: 68.26968539734497%;
+  }
+  .row-fluid .offset7 {
+    margin-left: 62.393162393162385%;
+    *margin-left: 62.28677941443899%;
+  }
+  .row-fluid .offset7:first-child {
+    margin-left: 59.82905982905982%;
+    *margin-left: 59.72267685033642%;
+  }
+  .row-fluid .offset6 {
+    margin-left: 53.84615384615384%;
+    *margin-left: 53.739770867430444%;
+  }
+  .row-fluid .offset6:first-child {
+    margin-left: 51.28205128205128%;
+    *margin-left: 51.175668303327875%;
+  }
+  .row-fluid .offset5 {
+    margin-left: 45.299145299145295%;
+    *margin-left: 45.1927623204219%;
+  }
+  .row-fluid .offset5:first-child {
+    margin-left: 42.73504273504273%;
+    *margin-left: 42.62865975631933%;
+  }
+  .row-fluid .offset4 {
+    margin-left: 36.75213675213675%;
+    *margin-left: 36.645753773413354%;
+  }
+  .row-fluid .offset4:first-child {
+    margin-left: 34.18803418803419%;
+    *margin-left: 34.081651209310785%;
+  }
+  .row-fluid .offset3 {
+    margin-left: 28.205128205128204%;
+    *margin-left: 28.0987452264048%;
+  }
+  .row-fluid .offset3:first-child {
+    margin-left: 25.641025641025642%;
+    *margin-left: 25.53464266230224%;
+  }
+  .row-fluid .offset2 {
+    margin-left: 19.65811965811966%;
+    *margin-left: 19.551736679396257%;
+  }
+  .row-fluid .offset2:first-child {
+    margin-left: 17.094017094017094%;
+    *margin-left: 16.98763411529369%;
+  }
+  .row-fluid .offset1 {
+    margin-left: 11.11111111111111%;
+    *margin-left: 11.004728132387708%;
+  }
+  .row-fluid .offset1:first-child {
+    margin-left: 8.547008547008547%;
+    *margin-left: 8.440625568285142%;
+  }
+  input,
+  textarea,
+  .uneditable-input {
+    margin-left: 0;
+  }
+  .controls-row [class*="span"] + [class*="span"] {
+    margin-left: 30px;
+  }
+  input.span12,
+  textarea.span12,
+  .uneditable-input.span12 {
+    width: 1156px;
+  }
+  input.span11,
+  textarea.span11,
+  .uneditable-input.span11 {
+    width: 1056px;
+  }
+  input.span10,
+  textarea.span10,
+  .uneditable-input.span10 {
+    width: 956px;
+  }
+  input.span9,
+  textarea.span9,
+  .uneditable-input.span9 {
+    width: 856px;
+  }
+  input.span8,
+  textarea.span8,
+  .uneditable-input.span8 {
+    width: 756px;
+  }
+  input.span7,
+  textarea.span7,
+  .uneditable-input.span7 {
+    width: 656px;
+  }
+  input.span6,
+  textarea.span6,
+  .uneditable-input.span6 {
+    width: 556px;
+  }
+  input.span5,
+  textarea.span5,
+  .uneditable-input.span5 {
+    width: 456px;
+  }
+  input.span4,
+  textarea.span4,
+  .uneditable-input.span4 {
+    width: 356px;
+  }
+  input.span3,
+  textarea.span3,
+  .uneditable-input.span3 {
+    width: 256px;
+  }
+  input.span2,
+  textarea.span2,
+  .uneditable-input.span2 {
+    width: 156px;
+  }
+  input.span1,
+  textarea.span1,
+  .uneditable-input.span1 {
+    width: 56px;
+  }
+  .thumbnails {
+    margin-left: -30px;
+  }
+  .thumbnails > li {
+    margin-left: 30px;
+  }
+  .row-fluid .thumbnails {
+    margin-left: 0;
+  }
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+  .row {
+    margin-left: -20px;
+    *zoom: 1;
+  }
+  .row:before,
+  .row:after {
+    display: table;
+    line-height: 0;
+    content: "";
+  }
+  .row:after {
+    clear: both;
+  }
+  [class*="span"] {
+    float: left;
+    min-height: 1px;
+    margin-left: 20px;
+  }
+  .container,
+  .navbar-static-top .container,
+  .navbar-fixed-top .container,
+  .navbar-fixed-bottom .container {
+    width: 724px;
+  }
+  .span12 {
+    width: 724px;
+  }
+  .span11 {
+    width: 662px;
+  }
+  .span10 {
+    width: 600px;
+  }
+  .span9 {
+    width: 538px;
+  }
+  .span8 {
+    width: 476px;
+  }
+  .span7 {
+    width: 414px;
+  }
+  .span6 {
+    width: 352px;
+  }
+  .span5 {
+    width: 290px;
+  }
+  .span4 {
+    width: 228px;
+  }
+  .span3 {
+    width: 166px;
+  }
+  .span2 {
+    width: 104px;
+  }
+  .span1 {
+    width: 42px;
+  }
+  .offset12 {
+    margin-left: 764px;
+  }
+  .offset11 {
+    margin-left: 702px;
+  }
+  .offset10 {
+    margin-left: 640px;
+  }
+  .offset9 {
+    margin-left: 578px;
+  }
+  .offset8 {
+    margin-left: 516px;
+  }
+  .offset7 {
+    margin-left: 454px;
+  }
+  .offset6 {
+    margin-left: 392px;
+  }
+  .offset5 {
+    margin-left: 330px;
+  }
+  .offset4 {
+    margin-left: 268px;
+  }
+  .offset3 {
+    margin-left: 206px;
+  }
+  .offset2 {
+    margin-left: 144px;
+  }
+  .offset1 {
+    margin-left: 82px;
+  }
+  .row-fluid {
+    width: 100%;
+    *zoom: 1;
+  }
+  .row-fluid:before,
+  .row-fluid:after {
+    display: table;
+    line-height: 0;
+    content: "";
+  }
+  .row-fluid:after {
+    clear: both;
+  }
+  .row-fluid [class*="span"] {
+    display: block;
+    float: left;
+    width: 100%;
+    min-height: 30px;
+    margin-left: 2.7624309392265194%;
+    *margin-left: 2.709239449864817%;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+            box-sizing: border-box;
+  }
+  .row-fluid [class*="span"]:first-child {
+    margin-left: 0;
+  }
+  .row-fluid .controls-row [class*="span"] + [class*="span"] {
+    margin-left: 2.7624309392265194%;
+  }
+  .row-fluid .span12 {
+    width: 100%;
+    *width: 99.94680851063829%;
+  }
+  .row-fluid .span11 {
+    width: 91.43646408839778%;
+    *width: 91.38327259903608%;
+  }
+  .row-fluid .span10 {
+    width: 82.87292817679558%;
+    *width: 82.81973668743387%;
+  }
+  .row-fluid .span9 {
+    width: 74.30939226519337%;
+    *width: 74.25620077583166%;
+  }
+  .row-fluid .span8 {
+    width: 65.74585635359117%;
+    *width: 65.69266486422946%;
+  }
+  .row-fluid .span7 {
+    width: 57.18232044198895%;
+    *width: 57.12912895262725%;
+  }
+  .row-fluid .span6 {
+    width: 48.61878453038674%;
+    *width: 48.56559304102504%;
+  }
+  .row-fluid .span5 {
+    width: 40.05524861878453%;
+    *width: 40.00205712942283%;
+  }
+  .row-fluid .span4 {
+    width: 31.491712707182323%;
+    *width: 31.43852121782062%;
+  }
+  .row-fluid .span3 {
+    width: 22.92817679558011%;
+    *width: 22.87498530621841%;
+  }
+  .row-fluid .span2 {
+    width: 14.3646408839779%;
+    *width: 14.311449394616199%;
+  }
+  .row-fluid .span1 {
+    width: 5.801104972375691%;
+    *width: 5.747913483013988%;
+  }
+  .row-fluid .offset12 {
+    margin-left: 105.52486187845304%;
+    *margin-left: 105.41847889972962%;
+  }
+  .row-fluid .offset12:first-child {
+    margin-left: 102.76243093922652%;
+    *margin-left: 102.6560479605031%;
+  }
+  .row-fluid .offset11 {
+    margin-left: 96.96132596685082%;
+    *margin-left: 96.8549429881274%;
+  }
+  .row-fluid .offset11:first-child {
+    margin-left: 94.1988950276243%;
+    *margin-left: 94.09251204890089%;
+  }
+  .row-fluid .offset10 {
+    margin-left: 88.39779005524862%;
+    *margin-left: 88.2914070765252%;
+  }
+  .row-fluid .offset10:first-child {
+    margin-left: 85.6353591160221%;
+    *margin-left: 85.52897613729868%;
+  }
+  .row-fluid .offset9 {
+    margin-left: 79.8342541436464%;
+    *margin-left: 79.72787116492299%;
+  }
+  .row-fluid .offset9:first-child {
+    margin-left: 77.07182320441989%;
+    *margin-left: 76.96544022569647%;
+  }
+  .row-fluid .offset8 {
+    margin-left: 71.2707182320442%;
+    *margin-left: 71.16433525332079%;
+  }
+  .row-fluid .offset8:first-child {
+    margin-left: 68.50828729281768%;
+    *margin-left: 68.40190431409427%;
+  }
+  .row-fluid .offset7 {
+    margin-left: 62.70718232044199%;
+    *margin-left: 62.600799341718584%;
+  }
+  .row-fluid .offset7:first-child {
+    margin-left: 59.94475138121547%;
+    *margin-left: 59.838368402492065%;
+  }
+  .row-fluid .offset6 {
+    margin-left: 54.14364640883978%;
+    *margin-left: 54.037263430116376%;
+  }
+  .row-fluid .offset6:first-child {
+    margin-left: 51.38121546961326%;
+    *margin-left: 51.27483249088986%;
+  }
+  .row-fluid .offset5 {
+    margin-left: 45.58011049723757%;
+    *margin-left: 45.47372751851417%;
+  }
+  .row-fluid .offset5:first-child {
+    margin-left: 42.81767955801105%;
+    *margin-left: 42.71129657928765%;
+  }
+  .row-fluid .offset4 {
+    margin-left: 37.01657458563536%;
+    *margin-left: 36.91019160691196%;
+  }
+  .row-fluid .offset4:first-child {
+    margin-left: 34.25414364640884%;
+    *margin-left: 34.14776066768544%;
+  }
+  .row-fluid .offset3 {
+    margin-left: 28.45303867403315%;
+    *margin-left: 28.346655695309746%;
+  }
+  .row-fluid .offset3:first-child {
+    margin-left: 25.69060773480663%;
+    *margin-left: 25.584224756083227%;
+  }
+  .row-fluid .offset2 {
+    margin-left: 19.88950276243094%;
+    *margin-left: 19.783119783707537%;
+  }
+  .row-fluid .offset2:first-child {
+    margin-left: 17.12707182320442%;
+    *margin-left: 17.02068884448102%;
+  }
+  .row-fluid .offset1 {
+    margin-left: 11.32596685082873%;
+    *margin-left: 11.219583872105325%;
+  }
+  .row-fluid .offset1:first-child {
+    margin-left: 8.56353591160221%;
+    *margin-left: 8.457152932878806%;
+  }
+  input,
+  textarea,
+  .uneditable-input {
+    margin-left: 0;
+  }
+  .controls-row [class*="span"] + [class*="span"] {
+    margin-left: 20px;
+  }
+  input.span12,
+  textarea.span12,
+  .uneditable-input.span12 {
+    width: 710px;
+  }
+  input.span11,
+  textarea.span11,
+  .uneditable-input.span11 {
+    width: 648px;
+  }
+  input.span10,
+  textarea.span10,
+  .uneditable-input.span10 {
+    width: 586px;
+  }
+  input.span9,
+  textarea.span9,
+  .uneditable-input.span9 {
+    width: 524px;
+  }
+  input.span8,
+  textarea.span8,
+  .uneditable-input.span8 {
+    width: 462px;
+  }
+  input.span7,
+  textarea.span7,
+  .uneditable-input.span7 {
+    width: 400px;
+  }
+  input.span6,
+  textarea.span6,
+  .uneditable-input.span6 {
+    width: 338px;
+  }
+  input.span5,
+  textarea.span5,
+  .uneditable-input.span5 {
+    width: 276px;
+  }
+  input.span4,
+  textarea.span4,
+  .uneditable-input.span4 {
+    width: 214px;
+  }
+  input.span3,
+  textarea.span3,
+  .uneditable-input.span3 {
+    width: 152px;
+  }
+  input.span2,
+  textarea.span2,
+  .uneditable-input.span2 {
+    width: 90px;
+  }
+  input.span1,
+  textarea.span1,
+  .uneditable-input.span1 {
+    width: 28px;
+  }
+}
+
+@media (max-width: 767px) {
+  body {
+    padding-right: 20px;
+    padding-left: 20px;
+  }
+  .navbar-fixed-top,
+  .navbar-fixed-bottom,
+  .navbar-static-top {
+    margin-right: -20px;
+    margin-left: -20px;
+  }
+  .container-fluid {
+    padding: 0;
+  }
+  .dl-horizontal dt {
+    float: none;
+    width: auto;
+    clear: none;
+    text-align: left;
+  }
+  .dl-horizontal dd {
+    margin-left: 0;
+  }
+  .container {
+    width: auto;
+  }
+  .row-fluid {
+    width: 100%;
+  }
+  .row,
+  .thumbnails {
+    margin-left: 0;
+  }
+  .thumbnails > li {
+    float: none;
+    margin-left: 0;
+  }
+  [class*="span"],
+  .uneditable-input[class*="span"],
+  .row-fluid [class*="span"] {
+    display: block;
+    float: none;
+    width: 100%;
+    margin-left: 0;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+            box-sizing: border-box;
+  }
+  .span12,
+  .row-fluid .span12 {
+    width: 100%;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+            box-sizing: border-box;
+  }
+  .row-fluid [class*="offset"]:first-child {
+    margin-left: 0;
+  }
+  .input-large,
+  .input-xlarge,
+  .input-xxlarge,
+  input[class*="span"],
+  select[class*="span"],
+  textarea[class*="span"],
+  .uneditable-input {
+    display: block;
+    width: 100%;
+    min-height: 30px;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+            box-sizing: border-box;
+  }
+  .input-prepend input,
+  .input-append input,
+  .input-prepend input[class*="span"],
+  .input-append input[class*="span"] {
+    display: inline-block;
+    width: auto;
+  }
+  .controls-row [class*="span"] + [class*="span"] {
+    margin-left: 0;
+  }
+  .modal {
+    position: fixed;
+    top: 20px;
+    right: 20px;
+    left: 20px;
+    width: auto;
+    margin: 0;
+  }
+  .modal.fade {
+    top: -100px;
+  }
+  .modal.fade.in {
+    top: 20px;
+  }
+}
+
+@media (max-width: 480px) {
+  .nav-collapse {
+    -webkit-transform: translate3d(0, 0, 0);
+  }
+  .page-header h1 small {
+    display: block;
+    line-height: 20px;
+  }
+  input[type="checkbox"],
+  input[type="radio"] {
+    border: 1px solid #ccc;
+  }
+  .form-horizontal .control-label {
+    float: none;
+    width: auto;
+    padding-top: 0;
+    text-align: left;
+  }
+  .form-horizontal .controls {
+    margin-left: 0;
+  }
+  .form-horizontal .control-list {
+    padding-top: 0;
+  }
+  .form-horizontal .form-actions {
+    padding-right: 10px;
+    padding-left: 10px;
+  }
+  .media .pull-left,
+  .media .pull-right {
+    display: block;
+    float: none;
+    margin-bottom: 10px;
+  }
+  .media-object {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .modal {
+    top: 10px;
+    right: 10px;
+    left: 10px;
+  }
+  .modal-header .close {
+    padding: 10px;
+    margin: -10px;
+  }
+  .carousel-caption {
+    position: static;
+  }
+}
+
+@media (max-width: 979px) {
+  body {
+    padding-top: 0;
+  }
+  .navbar-fixed-top,
+  .navbar-fixed-bottom {
+    position: static;
+  }
+  .navbar-fixed-top {
+    margin-bottom: 20px;
+  }
+  .navbar-fixed-bottom {
+    margin-top: 20px;
+  }
+  .navbar-fixed-top .navbar-inner,
+  .navbar-fixed-bottom .navbar-inner {
+    padding: 5px;
+  }
+  .navbar .container {
+    width: auto;
+    padding: 0;
+  }
+  .navbar .brand {
+    padding-right: 10px;
+    padding-left: 10px;
+    margin: 0 0 0 -5px;
+  }
+  .nav-collapse {
+    clear: both;
+  }
+  .nav-collapse .nav {
+    float: none;
+    margin: 0 0 10px;
+  }
+  .nav-collapse .nav > li {
+    float: none;
+  }
+  .nav-collapse .nav > li > a {
+    margin-bottom: 2px;
+  }
+  .nav-collapse .nav > .divider-vertical {
+    display: none;
+  }
+  .nav-collapse .nav .nav-header {
+    color: #777777;
+    text-shadow: none;
+  }
+  .nav-collapse .nav > li > a,
+  .nav-collapse .dropdown-menu a {
+    padding: 9px 15px;
+    font-weight: bold;
+    color: #777777;
+    -webkit-border-radius: 3px;
+       -moz-border-radius: 3px;
+            border-radius: 3px;
+  }
+  .nav-collapse .btn {
+    padding: 4px 10px 4px;
+    font-weight: normal;
+    -webkit-border-radius: 4px;
+       -moz-border-radius: 4px;
+            border-radius: 4px;
+  }
+  .nav-collapse .dropdown-menu li + li a {
+    margin-bottom: 2px;
+  }
+  .nav-collapse .nav > li > a:hover,
+  .nav-collapse .nav > li > a:focus,
+  .nav-collapse .dropdown-menu a:hover,
+  .nav-collapse .dropdown-menu a:focus {
+    background-color: #f2f2f2;
+  }
+  .navbar-inverse .nav-collapse .nav > li > a,
+  .navbar-inverse .nav-collapse .dropdown-menu a {
+    color: #999999;
+  }
+  .navbar-inverse .nav-collapse .nav > li > a:hover,
+  .navbar-inverse .nav-collapse .nav > li > a:focus,
+  .navbar-inverse .nav-collapse .dropdown-menu a:hover,
+  .navbar-inverse .nav-collapse .dropdown-menu a:focus {
+    background-color: #111111;
+  }
+  .nav-collapse.in .btn-group {
+    padding: 0;
+    margin-top: 5px;
+  }
+  .nav-collapse .dropdown-menu {
+    position: static;
+    top: auto;
+    left: auto;
+    display: none;
+    float: none;
+    max-width: none;
+    padding: 0;
+    margin: 0 15px;
+    background-color: transparent;
+    border: none;
+    -webkit-border-radius: 0;
+       -moz-border-radius: 0;
+            border-radius: 0;
+    -webkit-box-shadow: none;
+       -moz-box-shadow: none;
+            box-shadow: none;
+  }
+  .nav-collapse .open > .dropdown-menu {
+    display: block;
+  }
+  .nav-collapse .dropdown-menu:before,
+  .nav-collapse .dropdown-menu:after {
+    display: none;
+  }
+  .nav-collapse .dropdown-menu .divider {
+    display: none;
+  }
+  .nav-collapse .nav > li > .dropdown-menu:before,
+  .nav-collapse .nav > li > .dropdown-menu:after {
+    display: none;
+  }
+  .nav-collapse .navbar-form,
+  .nav-collapse .navbar-search {
+    float: none;
+    padding: 10px 15px;
+    margin: 10px 0;
+    border-top: 1px solid #f2f2f2;
+    border-bottom: 1px solid #f2f2f2;
+    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+       -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+  }
+  .navbar-inverse .nav-collapse .navbar-form,
+  .navbar-inverse .nav-collapse .navbar-search {
+    border-top-color: #111111;
+    border-bottom-color: #111111;
+  }
+  .navbar .nav-collapse .nav.pull-right {
+    float: none;
+    margin-left: 0;
+  }
+  .nav-collapse,
+  .nav-collapse.collapse {
+    height: 0;
+    overflow: hidden;
+  }
+  .navbar .btn-navbar {
+    display: block;
+  }
+  .navbar-static .navbar-inner {
+    padding-right: 10px;
+    padding-left: 10px;
+  }
+}
+
+@media (min-width: 980px) {
+  .nav-collapse.collapse {
+    height: auto !important;
+    overflow: visible !important;
+  }
+}
diff --git a/juddi-gui/web/css/bootstrap-responsive.min.css b/juddi-gui/web/css/bootstrap-responsive.min.css
new file mode 100644
index 0000000..0597860
--- /dev/null
+++ b/juddi-gui/web/css/bootstrap-responsive.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap Responsive v2.3.0
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
diff --git a/juddi-gui/web/css/bootstrap-timepicker.min.css b/juddi-gui/web/css/bootstrap-timepicker.min.css
new file mode 100644
index 0000000..b59d6f7
--- /dev/null
+++ b/juddi-gui/web/css/bootstrap-timepicker.min.css
@@ -0,0 +1,10 @@
+/*!
+ * Timepicker Component for Twitter Bootstrap
+ *
+ * Copyright 2013 Joris de Wit
+ *
+ * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,0.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td:not(.separator){min-width:30px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px transparent solid;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media(min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media(max-width:767px){.bootstrap-timepicker{width:100%}.bootstrap-timepicker .dropdown-menu{width:100%}}
\ No newline at end of file
diff --git a/juddi-gui/web/css/bootstrap.css b/juddi-gui/web/css/bootstrap.css
new file mode 100644
index 0000000..b255056
--- /dev/null
+++ b/juddi-gui/web/css/bootstrap.css
@@ -0,0 +1,6158 @@
+/*!
+ * Bootstrap v2.3.0
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+.clearfix {
+  *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.clearfix:after {
+  clear: both;
+}
+
+.hide-text {
+  font: 0/0 a;
+  color: transparent;
+  text-shadow: none;
+  background-color: transparent;
+  border: 0;
+}
+
+.input-block-level {
+  display: block;
+  width: 100%;
+  min-height: 30px;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+  display: block;
+}
+
+audio,
+canvas,
+video {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+}
+
+audio:not([controls]) {
+  display: none;
+}
+
+html {
+  font-size: 100%;
+  -webkit-text-size-adjust: 100%;
+      -ms-text-size-adjust: 100%;
+}
+
+a:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+
+a:hover,
+a:active {
+  outline: 0;
+}
+
+sub,
+sup {
+  position: relative;
+  font-size: 75%;
+  line-height: 0;
+  vertical-align: baseline;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+img {
+  width: auto\9;
+  height: auto;
+  max-width: 100%;
+  vertical-align: middle;
+  border: 0;
+  -ms-interpolation-mode: bicubic;
+}
+
+#map_canvas img,
+.google-maps img {
+  max-width: none;
+}
+
+button,
+input,
+select,
+textarea {
+  margin: 0;
+  font-size: 100%;
+  vertical-align: middle;
+}
+
+button,
+input {
+  *overflow: visible;
+  line-height: normal;
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  cursor: pointer;
+  -webkit-appearance: button;
+}
+
+label,
+select,
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"],
+input[type="radio"],
+input[type="checkbox"] {
+  cursor: pointer;
+}
+
+input[type="search"] {
+  -webkit-box-sizing: content-box;
+     -moz-box-sizing: content-box;
+          box-sizing: content-box;
+  -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+textarea {
+  overflow: auto;
+  vertical-align: top;
+}
+
+@media print {
+  * {
+    color: #000 !important;
+    text-shadow: none !important;
+    background: transparent !important;
+    box-shadow: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  a[href]:after {
+    content: " (" attr(href) ")";
+  }
+  abbr[title]:after {
+    content: " (" attr(title) ")";
+  }
+  .ir a:after,
+  a[href^="javascript:"]:after,
+  a[href^="#"]:after {
+    content: "";
+  }
+  pre,
+  blockquote {
+    border: 1px solid #999;
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  tr,
+  img {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  @page  {
+    margin: 0.5cm;
+  }
+  p,
+  h2,
+  h3 {
+    orphans: 3;
+    widows: 3;
+  }
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+}
+
+body {
+  margin: 0;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  line-height: 20px;
+  color: #333333;
+  background-color: #ffffff;
+}
+
+a {
+  color: #0088cc;
+  text-decoration: none;
+}
+
+a:hover,
+a:focus {
+  color: #005580;
+  text-decoration: underline;
+}
+
+.img-rounded {
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.img-polaroid {
+  padding: 4px;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+     -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.img-circle {
+  -webkit-border-radius: 500px;
+     -moz-border-radius: 500px;
+          border-radius: 500px;
+}
+
+.row {
+  margin-left: -20px;
+  *zoom: 1;
+}
+
+.row:before,
+.row:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.row:after {
+  clear: both;
+}
+
+[class*="span"] {
+  float: left;
+  min-height: 1px;
+  margin-left: 20px;
+}
+
+.container,
+.navbar-static-top .container,
+.navbar-fixed-top .container,
+.navbar-fixed-bottom .container {
+  width: 940px;
+}
+
+.span12 {
+  width: 940px;
+}
+
+.span11 {
+  width: 860px;
+}
+
+.span10 {
+  width: 780px;
+}
+
+.span9 {
+  width: 700px;
+}
+
+.span8 {
+  width: 620px;
+}
+
+.span7 {
+  width: 540px;
+}
+
+.span6 {
+  width: 460px;
+}
+
+.span5 {
+  width: 380px;
+}
+
+.span4 {
+  width: 300px;
+}
+
+.span3 {
+  width: 220px;
+}
+
+.span2 {
+  width: 140px;
+}
+
+.span1 {
+  width: 60px;
+}
+
+.offset12 {
+  margin-left: 980px;
+}
+
+.offset11 {
+  margin-left: 900px;
+}
+
+.offset10 {
+  margin-left: 820px;
+}
+
+.offset9 {
+  margin-left: 740px;
+}
+
+.offset8 {
+  margin-left: 660px;
+}
+
+.offset7 {
+  margin-left: 580px;
+}
+
+.offset6 {
+  margin-left: 500px;
+}
+
+.offset5 {
+  margin-left: 420px;
+}
+
+.offset4 {
+  margin-left: 340px;
+}
+
+.offset3 {
+  margin-left: 260px;
+}
+
+.offset2 {
+  margin-left: 180px;
+}
+
+.offset1 {
+  margin-left: 100px;
+}
+
+.row-fluid {
+  width: 100%;
+  *zoom: 1;
+}
+
+.row-fluid:before,
+.row-fluid:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.row-fluid:after {
+  clear: both;
+}
+
+.row-fluid [class*="span"] {
+  display: block;
+  float: left;
+  width: 100%;
+  min-height: 30px;
+  margin-left: 2.127659574468085%;
+  *margin-left: 2.074468085106383%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.row-fluid [class*="span"]:first-child {
+  margin-left: 0;
+}
+
+.row-fluid .controls-row [class*="span"] + [class*="span"] {
+  margin-left: 2.127659574468085%;
+}
+
+.row-fluid .span12 {
+  width: 100%;
+  *width: 99.94680851063829%;
+}
+
+.row-fluid .span11 {
+  width: 91.48936170212765%;
+  *width: 91.43617021276594%;
+}
+
+.row-fluid .span10 {
+  width: 82.97872340425532%;
+  *width: 82.92553191489361%;
+}
+
+.row-fluid .span9 {
+  width: 74.46808510638297%;
+  *width: 74.41489361702126%;
+}
+
+.row-fluid .span8 {
+  width: 65.95744680851064%;
+  *width: 65.90425531914893%;
+}
+
+.row-fluid .span7 {
+  width: 57.44680851063829%;
+  *width: 57.39361702127659%;
+}
+
+.row-fluid .span6 {
+  width: 48.93617021276595%;
+  *width: 48.88297872340425%;
+}
+
+.row-fluid .span5 {
+  width: 40.42553191489362%;
+  *width: 40.37234042553192%;
+}
+
+.row-fluid .span4 {
+  width: 31.914893617021278%;
+  *width: 31.861702127659576%;
+}
+
+.row-fluid .span3 {
+  width: 23.404255319148934%;
+  *width: 23.351063829787233%;
+}
+
+.row-fluid .span2 {
+  width: 14.893617021276595%;
+  *width: 14.840425531914894%;
+}
+
+.row-fluid .span1 {
+  width: 6.382978723404255%;
+  *width: 6.329787234042553%;
+}
+
+.row-fluid .offset12 {
+  margin-left: 104.25531914893617%;
+  *margin-left: 104.14893617021275%;
+}
+
+.row-fluid .offset12:first-child {
+  margin-left: 102.12765957446808%;
+  *margin-left: 102.02127659574467%;
+}
+
+.row-fluid .offset11 {
+  margin-left: 95.74468085106382%;
+  *margin-left: 95.6382978723404%;
+}
+
+.row-fluid .offset11:first-child {
+  margin-left: 93.61702127659574%;
+  *margin-left: 93.51063829787232%;
+}
+
+.row-fluid .offset10 {
+  margin-left: 87.23404255319149%;
+  *margin-left: 87.12765957446807%;
+}
+
+.row-fluid .offset10:first-child {
+  margin-left: 85.1063829787234%;
+  *margin-left: 84.99999999999999%;
+}
+
+.row-fluid .offset9 {
+  margin-left: 78.72340425531914%;
+  *margin-left: 78.61702127659572%;
+}
+
+.row-fluid .offset9:first-child {
+  margin-left: 76.59574468085106%;
+  *margin-left: 76.48936170212764%;
+}
+
+.row-fluid .offset8 {
+  margin-left: 70.2127659574468%;
+  *margin-left: 70.10638297872339%;
+}
+
+.row-fluid .offset8:first-child {
+  margin-left: 68.08510638297872%;
+  *margin-left: 67.9787234042553%;
+}
+
+.row-fluid .offset7 {
+  margin-left: 61.70212765957446%;
+  *margin-left: 61.59574468085106%;
+}
+
+.row-fluid .offset7:first-child {
+  margin-left: 59.574468085106375%;
+  *margin-left: 59.46808510638297%;
+}
+
+.row-fluid .offset6 {
+  margin-left: 53.191489361702125%;
+  *margin-left: 53.085106382978715%;
+}
+
+.row-fluid .offset6:first-child {
+  margin-left: 51.063829787234035%;
+  *margin-left: 50.95744680851063%;
+}
+
+.row-fluid .offset5 {
+  margin-left: 44.68085106382979%;
+  *margin-left: 44.57446808510638%;
+}
+
+.row-fluid .offset5:first-child {
+  margin-left: 42.5531914893617%;
+  *margin-left: 42.4468085106383%;
+}
+
+.row-fluid .offset4 {
+  margin-left: 36.170212765957444%;
+  *margin-left: 36.06382978723405%;
+}
+
+.row-fluid .offset4:first-child {
+  margin-left: 34.04255319148936%;
+  *margin-left: 33.93617021276596%;
+}
+
+.row-fluid .offset3 {
+  margin-left: 27.659574468085104%;
+  *margin-left: 27.5531914893617%;
+}
+
+.row-fluid .offset3:first-child {
+  margin-left: 25.53191489361702%;
+  *margin-left: 25.425531914893618%;
+}
+
+.row-fluid .offset2 {
+  margin-left: 19.148936170212764%;
+  *margin-left: 19.04255319148936%;
+}
+
+.row-fluid .offset2:first-child {
+  margin-left: 17.02127659574468%;
+  *margin-left: 16.914893617021278%;
+}
+
+.row-fluid .offset1 {
+  margin-left: 10.638297872340425%;
+  *margin-left: 10.53191489361702%;
+}
+
+.row-fluid .offset1:first-child {
+  margin-left: 8.51063829787234%;
+  *margin-left: 8.404255319148938%;
+}
+
+[class*="span"].hide,
+.row-fluid [class*="span"].hide {
+  display: none;
+}
+
+[class*="span"].pull-right,
+.row-fluid [class*="span"].pull-right {
+  float: right;
+}
+
+.container {
+  margin-right: auto;
+  margin-left: auto;
+  *zoom: 1;
+}
+
+.container:before,
+.container:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.container:after {
+  clear: both;
+}
+
+.container-fluid {
+  padding-right: 20px;
+  padding-left: 20px;
+  *zoom: 1;
+}
+
+.container-fluid:before,
+.container-fluid:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.container-fluid:after {
+  clear: both;
+}
+
+p {
+  margin: 0 0 10px;
+}
+
+.lead {
+  margin-bottom: 20px;
+  font-size: 21px;
+  font-weight: 200;
+  line-height: 30px;
+}
+
+small {
+  font-size: 85%;
+}
+
+strong {
+  font-weight: bold;
+}
+
+em {
+  font-style: italic;
+}
+
+cite {
+  font-style: normal;
+}
+
+.muted {
+  color: #999999;
+}
+
+a.muted:hover,
+a.muted:focus {
+  color: #808080;
+}
+
+.text-warning {
+  color: #c09853;
+}
+
+a.text-warning:hover,
+a.text-warning:focus {
+  color: #a47e3c;
+}
+
+.text-error {
+  color: #b94a48;
+}
+
+a.text-error:hover,
+a.text-error:focus {
+  color: #953b39;
+}
+
+.text-info {
+  color: #3a87ad;
+}
+
+a.text-info:hover,
+a.text-info:focus {
+  color: #2d6987;
+}
+
+.text-success {
+  color: #468847;
+}
+
+a.text-success:hover,
+a.text-success:focus {
+  color: #356635;
+}
+
+.text-left {
+  text-align: left;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.text-center {
+  text-align: center;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  margin: 10px 0;
+  font-family: inherit;
+  font-weight: bold;
+  line-height: 20px;
+  color: inherit;
+  text-rendering: optimizelegibility;
+}
+
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+  font-weight: normal;
+  line-height: 1;
+  color: #999999;
+}
+
+h1,
+h2,
+h3 {
+  line-height: 40px;
+}
+
+h1 {
+  font-size: 38.5px;
+}
+
+h2 {
+  font-size: 31.5px;
+}
+
+h3 {
+  font-size: 24.5px;
+}
+
+h4 {
+  font-size: 17.5px;
+}
+
+h5 {
+  font-size: 14px;
+}
+
+h6 {
+  font-size: 11.9px;
+}
+
+h1 small {
+  font-size: 24.5px;
+}
+
+h2 small {
+  font-size: 17.5px;
+}
+
+h3 small {
+  font-size: 14px;
+}
+
+h4 small {
+  font-size: 14px;
+}
+
+.page-header {
+  padding-bottom: 9px;
+  margin: 20px 0 30px;
+  border-bottom: 1px solid #eeeeee;
+}
+
+ul,
+ol {
+  padding: 0;
+  margin: 0 0 10px 25px;
+}
+
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+  margin-bottom: 0;
+}
+
+li {
+  line-height: 20px;
+}
+
+ul.unstyled,
+ol.unstyled {
+  margin-left: 0;
+  list-style: none;
+}
+
+ul.inline,
+ol.inline {
+  margin-left: 0;
+  list-style: none;
+}
+
+ul.inline > li,
+ol.inline > li {
+  display: inline-block;
+  *display: inline;
+  padding-right: 5px;
+  padding-left: 5px;
+  *zoom: 1;
+}
+
+dl {
+  margin-bottom: 20px;
+}
+
+dt,
+dd {
+  line-height: 20px;
+}
+
+dt {
+  font-weight: bold;
+}
+
+dd {
+  margin-left: 10px;
+}
+
+.dl-horizontal {
+  *zoom: 1;
+}
+
+.dl-horizontal:before,
+.dl-horizontal:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.dl-horizontal:after {
+  clear: both;
+}
+
+.dl-horizontal dt {
+  float: left;
+  width: 160px;
+  overflow: hidden;
+  clear: left;
+  text-align: right;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.dl-horizontal dd {
+  margin-left: 180px;
+}
+
+hr {
+  margin: 20px 0;
+  border: 0;
+  border-top: 1px solid #eeeeee;
+  border-bottom: 1px solid #ffffff;
+}
+
+abbr[title],
+abbr[data-original-title] {
+  cursor: help;
+  border-bottom: 1px dotted #999999;
+}
+
+abbr.initialism {
+  font-size: 90%;
+  text-transform: uppercase;
+}
+
+blockquote {
+  padding: 0 0 0 15px;
+  margin: 0 0 20px;
+  border-left: 5px solid #eeeeee;
+}
+
+blockquote p {
+  margin-bottom: 0;
+  font-size: 17.5px;
+  font-weight: 300;
+  line-height: 1.25;
+}
+
+blockquote small {
+  display: block;
+  line-height: 20px;
+  color: #999999;
+}
+
+blockquote small:before {
+  content: '\2014 \00A0';
+}
+
+blockquote.pull-right {
+  float: right;
+  padding-right: 15px;
+  padding-left: 0;
+  border-right: 5px solid #eeeeee;
+  border-left: 0;
+}
+
+blockquote.pull-right p,
+blockquote.pull-right small {
+  text-align: right;
+}
+
+blockquote.pull-right small:before {
+  content: '';
+}
+
+blockquote.pull-right small:after {
+  content: '\00A0 \2014';
+}
+
+q:before,
+q:after,
+blockquote:before,
+blockquote:after {
+  content: "";
+}
+
+address {
+  display: block;
+  margin-bottom: 20px;
+  font-style: normal;
+  line-height: 20px;
+}
+
+code,
+pre {
+  padding: 0 3px 2px;
+  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
+  font-size: 12px;
+  color: #333333;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+code {
+  padding: 2px 4px;
+  color: #d14;
+  white-space: nowrap;
+  background-color: #f7f7f9;
+  border: 1px solid #e1e1e8;
+}
+
+pre {
+  display: block;
+  padding: 9.5px;
+  margin: 0 0 10px;
+  font-size: 13px;
+  line-height: 20px;
+  word-break: break-all;
+  word-wrap: break-word;
+  white-space: pre;
+  white-space: pre-wrap;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.15);
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+pre.prettyprint {
+  margin-bottom: 20px;
+}
+
+pre code {
+  padding: 0;
+  color: inherit;
+  white-space: pre;
+  white-space: pre-wrap;
+  background-color: transparent;
+  border: 0;
+}
+
+.pre-scrollable {
+  max-height: 340px;
+  overflow-y: scroll;
+}
+
+form {
+  margin: 0 0 20px;
+}
+
+fieldset {
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+
+legend {
+  display: block;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 20px;
+  font-size: 21px;
+  line-height: 40px;
+  color: #333333;
+  border: 0;
+  border-bottom: 1px solid #e5e5e5;
+}
+
+legend small {
+  font-size: 15px;
+  color: #999999;
+}
+
+label,
+input,
+button,
+select,
+textarea {
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 20px;
+}
+
+input,
+button,
+select,
+textarea {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+label {
+  display: block;
+  margin-bottom: 5px;
+}
+
+select,
+textarea,
+input[type="text"],
+input[type="password"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="date"],
+input[type="month"],
+input[type="time"],
+input[type="week"],
+input[type="number"],
+input[type="email"],
+input[type="url"],
+input[type="search"],
+input[type="tel"],
+input[type="color"],
+.uneditable-input {
+  display: inline-block;
+  height: 20px;
+  padding: 4px 6px;
+  margin-bottom: 10px;
+  font-size: 14px;
+  line-height: 20px;
+  color: #555555;
+  vertical-align: middle;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+input,
+textarea,
+.uneditable-input {
+  width: 206px;
+}
+
+textarea {
+  height: auto;
+}
+
+textarea,
+input[type="text"],
+input[type="password"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="date"],
+input[type="month"],
+input[type="time"],
+input[type="week"],
+input[type="number"],
+input[type="email"],
+input[type="url"],
+input[type="search"],
+input[type="tel"],
+input[type="color"],
+.uneditable-input {
+  background-color: #ffffff;
+  border: 1px solid #cccccc;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+     -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+       -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+          transition: border linear 0.2s, box-shadow linear 0.2s;
+}
+
+textarea:focus,
+input[type="text"]:focus,
+input[type="password"]:focus,
+input[type="datetime"]:focus,
+input[type="datetime-local"]:focus,
+input[type="date"]:focus,
+input[type="month"]:focus,
+input[type="time"]:focus,
+input[type="week"]:focus,
+input[type="number"]:focus,
+input[type="email"]:focus,
+input[type="url"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="color"]:focus,
+.uneditable-input:focus {
+  border-color: rgba(82, 168, 236, 0.8);
+  outline: 0;
+  outline: thin dotted \9;
+  /* IE6-9 */
+
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+  margin: 4px 0 0;
+  margin-top: 1px \9;
+  *margin-top: 0;
+  line-height: normal;
+}
+
+input[type="file"],
+input[type="image"],
+input[type="submit"],
+input[type="reset"],
+input[type="button"],
+input[type="radio"],
+input[type="checkbox"] {
+  width: auto;
+}
+
+select,
+input[type="file"] {
+  height: 30px;
+  /* In IE7, the height of the select element cannot be changed by height, only font-size */
+
+  *margin-top: 4px;
+  /* For IE7, add top margin to align select with labels */
+
+  line-height: 30px;
+}
+
+select {
+  width: 220px;
+  background-color: #ffffff;
+  border: 1px solid #cccccc;
+}
+
+select[multiple],
+select[size] {
+  height: auto;
+}
+
+select:focus,
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+
+.uneditable-input,
+.uneditable-textarea {
+  color: #999999;
+  cursor: not-allowed;
+  background-color: #fcfcfc;
+  border-color: #cccccc;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+}
+
+.uneditable-input {
+  overflow: hidden;
+  white-space: nowrap;
+}
+
+.uneditable-textarea {
+  width: auto;
+  height: auto;
+}
+
+input:-moz-placeholder,
+textarea:-moz-placeholder {
+  color: #999999;
+}
+
+input:-ms-input-placeholder,
+textarea:-ms-input-placeholder {
+  color: #999999;
+}
+
+input::-webkit-input-placeholder,
+textarea::-webkit-input-placeholder {
+  color: #999999;
+}
+
+.radio,
+.checkbox {
+  min-height: 20px;
+  padding-left: 20px;
+}
+
+.radio input[type="radio"],
+.checkbox input[type="checkbox"] {
+  float: left;
+  margin-left: -20px;
+}
+
+.controls > .radio:first-child,
+.controls > .checkbox:first-child {
+  padding-top: 5px;
+}
+
+.radio.inline,
+.checkbox.inline {
+  display: inline-block;
+  padding-top: 5px;
+  margin-bottom: 0;
+  vertical-align: middle;
+}
+
+.radio.inline + .radio.inline,
+.checkbox.inline + .checkbox.inline {
+  margin-left: 10px;
+}
+
+.input-mini {
+  width: 60px;
+}
+
+.input-small {
+  width: 90px;
+}
+
+.input-medium {
+  width: 150px;
+}
+
+.input-large {
+  width: 210px;
+}
+
+.input-xlarge {
+  width: 270px;
+}
+
+.input-xxlarge {
+  width: 530px;
+}
+
+input[class*="span"],
+select[class*="span"],
+textarea[class*="span"],
+.uneditable-input[class*="span"],
+.row-fluid input[class*="span"],
+.row-fluid select[class*="span"],
+.row-fluid textarea[class*="span"],
+.row-fluid .uneditable-input[class*="span"] {
+  float: none;
+  margin-left: 0;
+}
+
+.input-append input[class*="span"],
+.input-append .uneditable-input[class*="span"],
+.input-prepend input[class*="span"],
+.input-prepend .uneditable-input[class*="span"],
+.row-fluid input[class*="span"],
+.row-fluid select[class*="span"],
+.row-fluid textarea[class*="span"],
+.row-fluid .uneditable-input[class*="span"],
+.row-fluid .input-prepend [class*="span"],
+.row-fluid .input-append [class*="span"] {
+  display: inline-block;
+}
+
+input,
+textarea,
+.uneditable-input {
+  margin-left: 0;
+}
+
+.controls-row [class*="span"] + [class*="span"] {
+  margin-left: 20px;
+}
+
+input.span12,
+textarea.span12,
+.uneditable-input.span12 {
+  width: 926px;
+}
+
+input.span11,
+textarea.span11,
+.uneditable-input.span11 {
+  width: 846px;
+}
+
+input.span10,
+textarea.span10,
+.uneditable-input.span10 {
+  width: 766px;
+}
+
+input.span9,
+textarea.span9,
+.uneditable-input.span9 {
+  width: 686px;
+}
+
+input.span8,
+textarea.span8,
+.uneditable-input.span8 {
+  width: 606px;
+}
+
+input.span7,
+textarea.span7,
+.uneditable-input.span7 {
+  width: 526px;
+}
+
+input.span6,
+textarea.span6,
+.uneditable-input.span6 {
+  width: 446px;
+}
+
+input.span5,
+textarea.span5,
+.uneditable-input.span5 {
+  width: 366px;
+}
+
+input.span4,
+textarea.span4,
+.uneditable-input.span4 {
+  width: 286px;
+}
+
+input.span3,
+textarea.span3,
+.uneditable-input.span3 {
+  width: 206px;
+}
+
+input.span2,
+textarea.span2,
+.uneditable-input.span2 {
+  width: 126px;
+}
+
+input.span1,
+textarea.span1,
+.uneditable-input.span1 {
+  width: 46px;
+}
+
+.controls-row {
+  *zoom: 1;
+}
+
+.controls-row:before,
+.controls-row:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.controls-row:after {
+  clear: both;
+}
+
+.controls-row [class*="span"],
+.row-fluid .controls-row [class*="span"] {
+  float: left;
+}
+
+.controls-row .checkbox[class*="span"],
+.controls-row .radio[class*="span"] {
+  padding-top: 5px;
+}
+
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+  cursor: not-allowed;
+  background-color: #eeeeee;
+}
+
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"][readonly],
+input[type="checkbox"][readonly] {
+  background-color: transparent;
+}
+
+.control-group.warning .control-label,
+.control-group.warning .help-block,
+.control-group.warning .help-inline {
+  color: #c09853;
+}
+
+.control-group.warning .checkbox,
+.control-group.warning .radio,
+.control-group.warning input,
+.control-group.warning select,
+.control-group.warning textarea {
+  color: #c09853;
+}
+
+.control-group.warning input,
+.control-group.warning select,
+.control-group.warning textarea {
+  border-color: #c09853;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.warning input:focus,
+.control-group.warning select:focus,
+.control-group.warning textarea:focus {
+  border-color: #a47e3c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+}
+
+.control-group.warning .input-prepend .add-on,
+.control-group.warning .input-append .add-on {
+  color: #c09853;
+  background-color: #fcf8e3;
+  border-color: #c09853;
+}
+
+.control-group.error .control-label,
+.control-group.error .help-block,
+.control-group.error .help-inline {
+  color: #b94a48;
+}
+
+.control-group.error .checkbox,
+.control-group.error .radio,
+.control-group.error input,
+.control-group.error select,
+.control-group.error textarea {
+  color: #b94a48;
+}
+
+.control-group.error input,
+.control-group.error select,
+.control-group.error textarea {
+  border-color: #b94a48;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.error input:focus,
+.control-group.error select:focus,
+.control-group.error textarea:focus {
+  border-color: #953b39;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+}
+
+.control-group.error .input-prepend .add-on,
+.control-group.error .input-append .add-on {
+  color: #b94a48;
+  background-color: #f2dede;
+  border-color: #b94a48;
+}
+
+.control-group.success .control-label,
+.control-group.success .help-block,
+.control-group.success .help-inline {
+  color: #468847;
+}
+
+.control-group.success .checkbox,
+.control-group.success .radio,
+.control-group.success input,
+.control-group.success select,
+.control-group.success textarea {
+  color: #468847;
+}
+
+.control-group.success input,
+.control-group.success select,
+.control-group.success textarea {
+  border-color: #468847;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.success input:focus,
+.control-group.success select:focus,
+.control-group.success textarea:focus {
+  border-color: #356635;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+}
+
+.control-group.success .input-prepend .add-on,
+.control-group.success .input-append .add-on {
+  color: #468847;
+  background-color: #dff0d8;
+  border-color: #468847;
+}
+
+.control-group.info .control-label,
+.control-group.info .help-block,
+.control-group.info .help-inline {
+  color: #3a87ad;
+}
+
+.control-group.info .checkbox,
+.control-group.info .radio,
+.control-group.info input,
+.control-group.info select,
+.control-group.info textarea {
+  color: #3a87ad;
+}
+
+.control-group.info input,
+.control-group.info select,
+.control-group.info textarea {
+  border-color: #3a87ad;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.info input:focus,
+.control-group.info select:focus,
+.control-group.info textarea:focus {
+  border-color: #2d6987;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+}
+
+.control-group.info .input-prepend .add-on,
+.control-group.info .input-append .add-on {
+  color: #3a87ad;
+  background-color: #d9edf7;
+  border-color: #3a87ad;
+}
+
+input:focus:invalid,
+textarea:focus:invalid,
+select:focus:invalid {
+  color: #b94a48;
+  border-color: #ee5f5b;
+}
+
+input:focus:invalid:focus,
+textarea:focus:invalid:focus,
+select:focus:invalid:focus {
+  border-color: #e9322d;
+  -webkit-box-shadow: 0 0 6px #f8b9b7;
+     -moz-box-shadow: 0 0 6px #f8b9b7;
+          box-shadow: 0 0 6px #f8b9b7;
+}
+
+.form-actions {
+  padding: 19px 20px 20px;
+  margin-top: 20px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border-top: 1px solid #e5e5e5;
+  *zoom: 1;
+}
+
+.form-actions:before,
+.form-actions:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.form-actions:after {
+  clear: both;
+}
+
+.help-block,
+.help-inline {
+  color: #595959;
+}
+
+.help-block {
+  display: block;
+  margin-bottom: 10px;
+}
+
+.help-inline {
+  display: inline-block;
+  *display: inline;
+  padding-left: 5px;
+  vertical-align: middle;
+  *zoom: 1;
+}
+
+.input-append,
+.input-prepend {
+  display: inline-block;
+  margin-bottom: 10px;
+  font-size: 0;
+  white-space: nowrap;
+  vertical-align: middle;
+}
+
+.input-append input,
+.input-prepend input,
+.input-append select,
+.input-prepend select,
+.input-append .uneditable-input,
+.input-prepend .uneditable-input,
+.input-append .dropdown-menu,
+.input-prepend .dropdown-menu,
+.input-append .popover,
+.input-prepend .popover {
+  font-size: 14px;
+}
+
+.input-append input,
+.input-prepend input,
+.input-append select,
+.input-prepend select,
+.input-append .uneditable-input,
+.input-prepend .uneditable-input {
+  position: relative;
+  margin-bottom: 0;
+  *margin-left: 0;
+  vertical-align: top;
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-append input:focus,
+.input-prepend input:focus,
+.input-append select:focus,
+.input-prepend select:focus,
+.input-append .uneditable-input:focus,
+.input-prepend .uneditable-input:focus {
+  z-index: 2;
+}
+
+.input-append .add-on,
+.input-prepend .add-on {
+  display: inline-block;
+  width: auto;
+  height: 20px;
+  min-width: 16px;
+  padding: 4px 5px;
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 20px;
+  text-align: center;
+  text-shadow: 0 1px 0 #ffffff;
+  background-color: #eeeeee;
+  border: 1px solid #ccc;
+}
+
+.input-append .add-on,
+.input-prepend .add-on,
+.input-append .btn,
+.input-prepend .btn,
+.input-append .btn-group > .dropdown-toggle,
+.input-prepend .btn-group > .dropdown-toggle {
+  vertical-align: top;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.input-append .active,
+.input-prepend .active {
+  background-color: #a9dba9;
+  border-color: #46a546;
+}
+
+.input-prepend .add-on,
+.input-prepend .btn {
+  margin-right: -1px;
+}
+
+.input-prepend .add-on:first-child,
+.input-prepend .btn:first-child {
+  -webkit-border-radius: 4px 0 0 4px;
+     -moz-border-radius: 4px 0 0 4px;
+          border-radius: 4px 0 0 4px;
+}
+
+.input-append input,
+.input-append select,
+.input-append .uneditable-input {
+  -webkit-border-radius: 4px 0 0 4px;
+     -moz-border-radius: 4px 0 0 4px;
+          border-radius: 4px 0 0 4px;
+}
+
+.input-append input + .btn-group .btn:last-child,
+.input-append select + .btn-group .btn:last-child,
+.input-append .uneditable-input + .btn-group .btn:last-child {
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-append .add-on,
+.input-append .btn,
+.input-append .btn-group {
+  margin-left: -1px;
+}
+
+.input-append .add-on:last-child,
+.input-append .btn:last-child,
+.input-append .btn-group:last-child > .dropdown-toggle {
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-prepend.input-append input,
+.input-prepend.input-append select,
+.input-prepend.input-append .uneditable-input {
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.input-prepend.input-append input + .btn-group .btn,
+.input-prepend.input-append select + .btn-group .btn,
+.input-prepend.input-append .uneditable-input + .btn-group .btn {
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-prepend.input-append .add-on:first-child,
+.input-prepend.input-append .btn:first-child {
+  margin-right: -1px;
+  -webkit-border-radius: 4px 0 0 4px;
+     -moz-border-radius: 4px 0 0 4px;
+          border-radius: 4px 0 0 4px;
+}
+
+.input-prepend.input-append .add-on:last-child,
+.input-prepend.input-append .btn:last-child {
+  margin-left: -1px;
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-prepend.input-append .btn-group:first-child {
+  margin-left: 0;
+}
+
+input.search-query {
+  padding-right: 14px;
+  padding-right: 4px \9;
+  padding-left: 14px;
+  padding-left: 4px \9;
+  /* IE7-8 doesn't have border-radius, so don't indent the padding */
+
+  margin-bottom: 0;
+  -webkit-border-radius: 15px;
+     -moz-border-radius: 15px;
+          border-radius: 15px;
+}
+
+/* Allow for input prepend/append in search forms */
+
+.form-search .input-append .search-query,
+.form-search .input-prepend .search-query {
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.form-search .input-append .search-query {
+  -webkit-border-radius: 14px 0 0 14px;
+     -moz-border-radius: 14px 0 0 14px;
+          border-radius: 14px 0 0 14px;
+}
+
+.form-search .input-append .btn {
+  -webkit-border-radius: 0 14px 14px 0;
+     -moz-border-radius: 0 14px 14px 0;
+          border-radius: 0 14px 14px 0;
+}
+
+.form-search .input-prepend .search-query {
+  -webkit-border-radius: 0 14px 14px 0;
+     -moz-border-radius: 0 14px 14px 0;
+          border-radius: 0 14px 14px 0;
+}
+
+.form-search .input-prepend .btn {
+  -webkit-border-radius: 14px 0 0 14px;
+     -moz-border-radius: 14px 0 0 14px;
+          border-radius: 14px 0 0 14px;
+}
+
+.form-search input,
+.form-inline input,
+.form-horizontal input,
+.form-search textarea,
+.form-inline textarea,
+.form-horizontal textarea,
+.form-search select,
+.form-inline select,
+.form-horizontal select,
+.form-search .help-inline,
+.form-inline .help-inline,
+.form-horizontal .help-inline,
+.form-search .uneditable-input,
+.form-inline .uneditable-input,
+.form-horizontal .uneditable-input,
+.form-search .input-prepend,
+.form-inline .input-prepend,
+.form-horizontal .input-prepend,
+.form-search .input-append,
+.form-inline .input-append,
+.form-horizontal .input-append {
+  display: inline-block;
+  *display: inline;
+  margin-bottom: 0;
+  vertical-align: middle;
+  *zoom: 1;
+}
+
+.form-search .hide,
+.form-inline .hide,
+.form-horizontal .hide {
+  display: none;
+}
+
+.form-search label,
+.form-inline label,
+.form-search .btn-group,
+.form-inline .btn-group {
+  display: inline-block;
+}
+
+.form-search .input-append,
+.form-inline .input-append,
+.form-search .input-prepend,
+.form-inline .input-prepend {
+  margin-bottom: 0;
+}
+
+.form-search .radio,
+.form-search .checkbox,
+.form-inline .radio,
+.form-inline .checkbox {
+  padding-left: 0;
+  margin-bottom: 0;
+  vertical-align: middle;
+}
+
+.form-search .radio input[type="radio"],
+.form-search .checkbox input[type="checkbox"],
+.form-inline .radio input[type="radio"],
+.form-inline .checkbox input[type="checkbox"] {
+  float: left;
+  margin-right: 3px;
+  margin-left: 0;
+}
+
+.control-group {
+  margin-bottom: 10px;
+}
+
+legend + .control-group {
+  margin-top: 20px;
+  -webkit-margin-top-collapse: separate;
+}
+
+.form-horizontal .control-group {
+  margin-bottom: 20px;
+  *zoom: 1;
+}
+
+.form-horizontal .control-group:before,
+.form-horizontal .control-group:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.form-horizontal .control-group:after {
+  clear: both;
+}
+
+.form-horizontal .control-label {
+  float: left;
+  width: 160px;
+  padding-top: 5px;
+  text-align: right;
+}
+
+.form-horizontal .controls {
+  *display: inline-block;
+  *padding-left: 20px;
+  margin-left: 180px;
+  *margin-left: 0;
+}
+
+.form-horizontal .controls:first-child {
+  *padding-left: 180px;
+}
+
+.form-horizontal .help-block {
+  margin-bottom: 0;
+}
+
+.form-horizontal input + .help-block,
+.form-horizontal select + .help-block,
+.form-horizontal textarea + .help-block,
+.form-horizontal .uneditable-input + .help-block,
+.form-horizontal .input-prepend + .help-block,
+.form-horizontal .input-append + .help-block {
+  margin-top: 10px;
+}
+
+.form-horizontal .form-actions {
+  padding-left: 180px;
+}
+
+table {
+  max-width: 100%;
+  background-color: transparent;
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+.table {
+  width: 100%;
+  margin-bottom: 20px;
+}
+
+.table th,
+.table td {
+  padding: 8px;
+  line-height: 20px;
+  text-align: left;
+  vertical-align: top;
+  border-top: 1px solid #dddddd;
+}
+
+.table th {
+  font-weight: bold;
+}
+
+.table thead th {
+  vertical-align: bottom;
+}
+
+.table caption + thead tr:first-child th,
+.table caption + thead tr:first-child td,
+.table colgroup + thead tr:first-child th,
+.table colgroup + thead tr:first-child td,
+.table thead:first-child tr:first-child th,
+.table thead:first-child tr:first-child td {
+  border-top: 0;
+}
+
+.table tbody + tbody {
+  border-top: 2px solid #dddddd;
+}
+
+.table .table {
+  background-color: #ffffff;
+}
+
+.table-condensed th,
+.table-condensed td {
+  padding: 4px 5px;
+}
+
+.table-bordered {
+  border: 1px solid #dddddd;
+  border-collapse: separate;
+  *border-collapse: collapse;
+  border-left: 0;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+.table-bordered th,
+.table-bordered td {
+  border-left: 1px solid #dddddd;
+}
+
+.table-bordered caption + thead tr:first-child th,
+.table-bordered caption + tbody tr:first-child th,
+.table-bordered caption + tbody tr:first-child td,
+.table-bordered colgroup + thead tr:first-child th,
+.table-bordered colgroup + tbody tr:first-child th,
+.table-bordered colgroup + tbody tr:first-child td,
+.table-bordered thead:first-child tr:first-child th,
+.table-bordered tbody:first-child tr:first-child th,
+.table-bordered tbody:first-child tr:first-child td {
+  border-top: 0;
+}
+
+.table-bordered thead:first-child tr:first-child > th:first-child,
+.table-bordered tbody:first-child tr:first-child > td:first-child,
+.table-bordered tbody:first-child tr:first-child > th:first-child {
+  -webkit-border-top-left-radius: 4px;
+          border-top-left-radius: 4px;
+  -moz-border-radius-topleft: 4px;
+}
+
+.table-bordered thead:first-child tr:first-child > th:last-child,
+.table-bordered tbody:first-child tr:first-child > td:last-child,
+.table-bordered tbody:first-child tr:first-child > th:last-child {
+  -webkit-border-top-right-radius: 4px;
+          border-top-right-radius: 4px;
+  -moz-border-radius-topright: 4px;
+}
+
+.table-bordered thead:last-child tr:last-child > th:first-child,
+.table-bordered tbody:last-child tr:last-child > td:first-child,
+.table-bordered tbody:last-child tr:last-child > th:first-child,
+.table-bordered tfoot:last-child tr:last-child > td:first-child,
+.table-bordered tfoot:last-child tr:last-child > th:first-child {
+  -webkit-border-bottom-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+  -moz-border-radius-bottomleft: 4px;
+}
+
+.table-bordered thead:last-child tr:last-child > th:last-child,
+.table-bordered tbody:last-child tr:last-child > td:last-child,
+.table-bordered tbody:last-child tr:last-child > th:last-child,
+.table-bordered tfoot:last-child tr:last-child > td:last-child,
+.table-bordered tfoot:last-child tr:last-child > th:last-child {
+  -webkit-border-bottom-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+  -moz-border-radius-bottomright: 4px;
+}
+
+.table-bordered tfoot + tbody:last-child tr:last-child td:first-child {
+  -webkit-border-bottom-left-radius: 0;
+          border-bottom-left-radius: 0;
+  -moz-border-radius-bottomleft: 0;
+}
+
+.table-bordered tfoot + tbody:last-child tr:last-child td:last-child {
+  -webkit-border-bottom-right-radius: 0;
+          border-bottom-right-radius: 0;
+  -moz-border-radius-bottomright: 0;
+}
+
+.table-bordered caption + thead tr:first-child th:first-child,
+.table-bordered caption + tbody tr:first-child td:first-child,
+.table-bordered colgroup + thead tr:first-child th:first-child,
+.table-bordered colgroup + tbody tr:first-child td:first-child {
+  -webkit-border-top-left-radius: 4px;
+          border-top-left-radius: 4px;
+  -moz-border-radius-topleft: 4px;
+}
+
+.table-bordered caption + thead tr:first-child th:last-child,
+.table-bordered caption + tbody tr:first-child td:last-child,
+.table-bordered colgroup + thead tr:first-child th:last-child,
+.table-bordered colgroup + tbody tr:first-child td:last-child {
+  -webkit-border-top-right-radius: 4px;
+          border-top-right-radius: 4px;
+  -moz-border-radius-topright: 4px;
+}
+
+.table-striped tbody > tr:nth-child(odd) > td,
+.table-striped tbody > tr:nth-child(odd) > th {
+  background-color: #f9f9f9;
+}
+
+.table-hover tbody tr:hover > td,
+.table-hover tbody tr:hover > th {
+  background-color: #f5f5f5;
+}
+
+table td[class*="span"],
+table th[class*="span"],
+.row-fluid table td[class*="span"],
+.row-fluid table th[class*="span"] {
+  display: table-cell;
+  float: none;
+  margin-left: 0;
+}
+
+.table td.span1,
+.table th.span1 {
+  float: none;
+  width: 44px;
+  margin-left: 0;
+}
+
+.table td.span2,
+.table th.span2 {
+  float: none;
+  width: 124px;
+  margin-left: 0;
+}
+
+.table td.span3,
+.table th.span3 {
+  float: none;
+  width: 204px;
+  margin-left: 0;
+}
+
+.table td.span4,
+.table th.span4 {
+  float: none;
+  width: 284px;
+  margin-left: 0;
+}
+
+.table td.span5,
+.table th.span5 {
+  float: none;
+  width: 364px;
+  margin-left: 0;
+}
+
+.table td.span6,
+.table th.span6 {
+  float: none;
+  width: 444px;
+  margin-left: 0;
+}
+
+.table td.span7,
+.table th.span7 {
+  float: none;
+  width: 524px;
+  margin-left: 0;
+}
+
+.table td.span8,
+.table th.span8 {
+  float: none;
+  width: 604px;
+  margin-left: 0;
+}
+
+.table td.span9,
+.table th.span9 {
+  float: none;
+  width: 684px;
+  margin-left: 0;
+}
+
+.table td.span10,
+.table th.span10 {
+  float: none;
+  width: 764px;
+  margin-left: 0;
+}
+
+.table td.span11,
+.table th.span11 {
+  float: none;
+  width: 844px;
+  margin-left: 0;
+}
+
+.table td.span12,
+.table th.span12 {
+  float: none;
+  width: 924px;
+  margin-left: 0;
+}
+
+.table tbody tr.success > td {
+  background-color: #dff0d8;
+}
+
+.table tbody tr.error > td {
+  background-color: #f2dede;
+}
+
+.table tbody tr.warning > td {
+  background-color: #fcf8e3;
+}
+
+.table tbody tr.info > td {
+  background-color: #d9edf7;
+}
+
+.table-hover tbody tr.success:hover > td {
+  background-color: #d0e9c6;
+}
+
+.table-hover tbody tr.error:hover > td {
+  background-color: #ebcccc;
+}
+
+.table-hover tbody tr.warning:hover > td {
+  background-color: #faf2cc;
+}
+
+.table-hover tbody tr.info:hover > td {
+  background-color: #c4e3f3;
+}
+
+[class^="icon-"],
+[class*=" icon-"] {
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  margin-top: 1px;
+  *margin-right: .3em;
+  line-height: 14px;
+  vertical-align: text-top;
+  background-image: url("../img/glyphicons-halflings.png");
+  background-position: 14px 14px;
+  background-repeat: no-repeat;
+}
+
+/* White icons with optional class, or on hover/focus/active states of certain elements */
+
+.icon-white,
+.nav-pills > .active > a > [class^="icon-"],
+.nav-pills > .active > a > [class*=" icon-"],
+.nav-list > .active > a > [class^="icon-"],
+.nav-list > .active > a > [class*=" icon-"],
+.navbar-inverse .nav > .active > a > [class^="icon-"],
+.navbar-inverse .nav > .active > a > [class*=" icon-"],
+.dropdown-menu > li > a:hover > [class^="icon-"],
+.dropdown-menu > li > a:focus > [class^="icon-"],
+.dropdown-menu > li > a:hover > [class*=" icon-"],
+.dropdown-menu > li > a:focus > [class*=" icon-"],
+.dropdown-menu > .active > a > [class^="icon-"],
+.dropdown-menu > .active > a > [class*=" icon-"],
+.dropdown-submenu:hover > a > [class^="icon-"],
+.dropdown-submenu:focus > a > [class^="icon-"],
+.dropdown-submenu:hover > a > [class*=" icon-"],
+.dropdown-submenu:focus > a > [class*=" icon-"] {
+  background-image: url("../img/glyphicons-halflings-white.png");
+}
+
+.icon-glass {
+  background-position: 0      0;
+}
+
+.icon-music {
+  background-position: -24px 0;
+}
+
+.icon-search {
+  background-position: -48px 0;
+}
+
+.icon-envelope {
+  background-position: -72px 0;
+}
+
+.icon-heart {
+  background-position: -96px 0;
+}
+
+.icon-star {
+  background-position: -120px 0;
+}
+
+.icon-star-empty {
+  background-position: -144px 0;
+}
+
+.icon-user {
+  background-position: -168px 0;
+}
+
+.icon-film {
+  background-position: -192px 0;
+}
+
+.icon-th-large {
+  background-position: -216px 0;
+}
+
+.icon-th {
+  background-position: -240px 0;
+}
+
+.icon-th-list {
+  background-position: -264px 0;
+}
+
+.icon-ok {
+  background-position: -288px 0;
+}
+
+.icon-remove {
+  background-position: -312px 0;
+}
+
+.icon-zoom-in {
+  background-position: -336px 0;
+}
+
+.icon-zoom-out {
+  background-position: -360px 0;
+}
+
+.icon-off {
+  background-position: -384px 0;
+}
+
+.icon-signal {
+  background-position: -408px 0;
+}
+
+.icon-cog {
+  background-position: -432px 0;
+}
+
+.icon-trash {
+  background-position: -456px 0;
+}
+
+.icon-home {
+  background-position: 0 -24px;
+}
+
+.icon-file {
+  background-position: -24px -24px;
+}
+
+.icon-time {
+  background-position: -48px -24px;
+}
+
+.icon-road {
+  background-position: -72px -24px;
+}
+
+.icon-download-alt {
+  background-position: -96px -24px;
+}
+
+.icon-download {
+  background-position: -120px -24px;
+}
+
+.icon-upload {
+  background-position: -144px -24px;
+}
+
+.icon-inbox {
+  background-position: -168px -24px;
+}
+
+.icon-play-circle {
+  background-position: -192px -24px;
+}
+
+.icon-repeat {
+  background-position: -216px -24px;
+}
+
+.icon-refresh {
+  background-position: -240px -24px;
+}
+
+.icon-list-alt {
+  background-position: -264px -24px;
+}
+
+.icon-lock {
+  background-position: -287px -24px;
+}
+
+.icon-flag {
+  background-position: -312px -24px;
+}
+
+.icon-headphones {
+  background-position: -336px -24px;
+}
+
+.icon-volume-off {
+  background-position: -360px -24px;
+}
+
+.icon-volume-down {
+  background-position: -384px -24px;
+}
+
+.icon-volume-up {
+  background-position: -408px -24px;
+}
+
+.icon-qrcode {
+  background-position: -432px -24px;
+}
+
+.icon-barcode {
+  background-position: -456px -24px;
+}
+
+.icon-tag {
+  background-position: 0 -48px;
+}
+
+.icon-tags {
+  background-position: -25px -48px;
+}
+
+.icon-book {
+  background-position: -48px -48px;
+}
+
+.icon-bookmark {
+  background-position: -72px -48px;
+}
+
+.icon-print {
+  background-position: -96px -48px;
+}
+
+.icon-camera {
+  background-position: -120px -48px;
+}
+
+.icon-font {
+  background-position: -144px -48px;
+}
+
+.icon-bold {
+  background-position: -167px -48px;
+}
+
+.icon-italic {
+  background-position: -192px -48px;
+}
+
+.icon-text-height {
+  background-position: -216px -48px;
+}
+
+.icon-text-width {
+  background-position: -240px -48px;
+}
+
+.icon-align-left {
+  background-position: -264px -48px;
+}
+
+.icon-align-center {
+  background-position: -288px -48px;
+}
+
+.icon-align-right {
+  background-position: -312px -48px;
+}
+
+.icon-align-justify {
+  background-position: -336px -48px;
+}
+
+.icon-list {
+  background-position: -360px -48px;
+}
+
+.icon-indent-left {
+  background-position: -384px -48px;
+}
+
+.icon-indent-right {
+  background-position: -408px -48px;
+}
+
+.icon-facetime-video {
+  background-position: -432px -48px;
+}
+
+.icon-picture {
+  background-position: -456px -48px;
+}
+
+.icon-pencil {
+  background-position: 0 -72px;
+}
+
+.icon-map-marker {
+  background-position: -24px -72px;
+}
+
+.icon-adjust {
+  background-position: -48px -72px;
+}
+
+.icon-tint {
+  background-position: -72px -72px;
+}
+
+.icon-edit {
+  background-position: -96px -72px;
+}
+
+.icon-share {
+  background-position: -120px -72px;
+}
+
+.icon-check {
+  background-position: -144px -72px;
+}
+
+.icon-move {
+  background-position: -168px -72px;
+}
+
+.icon-step-backward {
+  background-position: -192px -72px;
+}
+
+.icon-fast-backward {
+  background-position: -216px -72px;
+}
+
+.icon-backward {
+  background-position: -240px -72px;
+}
+
+.icon-play {
+  background-position: -264px -72px;
+}
+
+.icon-pause {
+  background-position: -288px -72px;
+}
+
+.icon-stop {
+  background-position: -312px -72px;
+}
+
+.icon-forward {
+  background-position: -336px -72px;
+}
+
+.icon-fast-forward {
+  background-position: -360px -72px;
+}
+
+.icon-step-forward {
+  background-position: -384px -72px;
+}
+
+.icon-eject {
+  background-position: -408px -72px;
+}
+
+.icon-chevron-left {
+  background-position: -432px -72px;
+}
+
+.icon-chevron-right {
+  background-position: -456px -72px;
+}
+
+.icon-plus-sign {
+  background-position: 0 -96px;
+}
+
+.icon-minus-sign {
+  background-position: -24px -96px;
+}
+
+.icon-remove-sign {
+  background-position: -48px -96px;
+}
+
+.icon-ok-sign {
+  background-position: -72px -96px;
+}
+
+.icon-question-sign {
+  background-position: -96px -96px;
+}
+
+.icon-info-sign {
+  background-position: -120px -96px;
+}
+
+.icon-screenshot {
+  background-position: -144px -96px;
+}
+
+.icon-remove-circle {
+  background-position: -168px -96px;
+}
+
+.icon-ok-circle {
+  background-position: -192px -96px;
+}
+
+.icon-ban-circle {
+  background-position: -216px -96px;
+}
+
+.icon-arrow-left {
+  background-position: -240px -96px;
+}
+
+.icon-arrow-right {
+  background-position: -264px -96px;
+}
+
+.icon-arrow-up {
+  background-position: -289px -96px;
+}
+
+.icon-arrow-down {
+  background-position: -312px -96px;
+}
+
+.icon-share-alt {
+  background-position: -336px -96px;
+}
+
+.icon-resize-full {
+  background-position: -360px -96px;
+}
+
+.icon-resize-small {
+  background-position: -384px -96px;
+}
+
+.icon-plus {
+  background-position: -408px -96px;
+}
+
+.icon-minus {
+  background-position: -433px -96px;
+}
+
+.icon-asterisk {
+  background-position: -456px -96px;
+}
+
+.icon-exclamation-sign {
+  background-position: 0 -120px;
+}
+
+.icon-gift {
+  background-position: -24px -120px;
+}
+
+.icon-leaf {
+  background-position: -48px -120px;
+}
+
+.icon-fire {
+  background-position: -72px -120px;
+}
+
+.icon-eye-open {
+  background-position: -96px -120px;
+}
+
+.icon-eye-close {
+  background-position: -120px -120px;
+}
+
+.icon-warning-sign {
+  background-position: -144px -120px;
+}
+
+.icon-plane {
+  background-position: -168px -120px;
+}
+
+.icon-calendar {
+  background-position: -192px -120px;
+}
+
+.icon-random {
+  width: 16px;
+  background-position: -216px -120px;
+}
+
+.icon-comment {
+  background-position: -240px -120px;
+}
+
+.icon-magnet {
+  background-position: -264px -120px;
+}
+
+.icon-chevron-up {
+  background-position: -288px -120px;
+}
+
+.icon-chevron-down {
+  background-position: -313px -119px;
+}
+
+.icon-retweet {
+  background-position: -336px -120px;
+}
+
+.icon-shopping-cart {
+  background-position: -360px -120px;
+}
+
+.icon-folder-close {
+  width: 16px;
+  background-position: -384px -120px;
+}
+
+.icon-folder-open {
+  width: 16px;
+  background-position: -408px -120px;
+}
+
+.icon-resize-vertical {
+  background-position: -432px -119px;
+}
+
+.icon-resize-horizontal {
+  background-position: -456px -118px;
+}
+
+.icon-hdd {
+  background-position: 0 -144px;
+}
+
+.icon-bullhorn {
+  background-position: -24px -144px;
+}
+
+.icon-bell {
+  background-position: -48px -144px;
+}
+
+.icon-certificate {
+  background-position: -72px -144px;
+}
+
+.icon-thumbs-up {
+  background-position: -96px -144px;
+}
+
+.icon-thumbs-down {
+  background-position: -120px -144px;
+}
+
+.icon-hand-right {
+  background-position: -144px -144px;
+}
+
+.icon-hand-left {
+  background-position: -168px -144px;
+}
+
+.icon-hand-up {
+  background-position: -192px -144px;
+}
+
+.icon-hand-down {
+  background-position: -216px -144px;
+}
+
+.icon-circle-arrow-right {
+  background-position: -240px -144px;
+}
+
+.icon-circle-arrow-left {
+  background-position: -264px -144px;
+}
+
+.icon-circle-arrow-up {
+  background-position: -288px -144px;
+}
+
+.icon-circle-arrow-down {
+  background-position: -312px -144px;
+}
+
+.icon-globe {
+  background-position: -336px -144px;
+}
+
+.icon-wrench {
+  background-position: -360px -144px;
+}
+
+.icon-tasks {
+  background-position: -384px -144px;
+}
+
+.icon-filter {
+  background-position: -408px -144px;
+}
+
+.icon-briefcase {
+  background-position: -432px -144px;
+}
+
+.icon-fullscreen {
+  background-position: -456px -144px;
+}
+
+.dropup,
+.dropdown {
+  position: relative;
+}
+
+.dropdown-toggle {
+  *margin-bottom: -3px;
+}
+
+.dropdown-toggle:active,
+.open .dropdown-toggle {
+  outline: 0;
+}
+
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  vertical-align: top;
+  border-top: 4px solid #000000;
+  border-right: 4px solid transparent;
+  border-left: 4px solid transparent;
+  content: "";
+}
+
+.dropdown .caret {
+  margin-top: 8px;
+  margin-left: 2px;
+}
+
+.dropdown-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: 1000;
+  display: none;
+  float: left;
+  min-width: 160px;
+  padding: 5px 0;
+  margin: 2px 0 0;
+  list-style: none;
+  background-color: #ffffff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  *border-right-width: 2px;
+  *border-bottom-width: 2px;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+     -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding;
+          background-clip: padding-box;
+}
+
+.dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+
+.dropdown-menu .divider {
+  *width: 100%;
+  height: 1px;
+  margin: 9px 1px;
+  *margin: -5px 0 5px;
+  overflow: hidden;
+  background-color: #e5e5e5;
+  border-bottom: 1px solid #ffffff;
+}
+
+.dropdown-menu > li > a {
+  display: block;
+  padding: 3px 20px;
+  clear: both;
+  font-weight: normal;
+  line-height: 20px;
+  color: #333333;
+  white-space: nowrap;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus,
+.dropdown-submenu:hover > a,
+.dropdown-submenu:focus > a {
+  color: #ffffff;
+  text-decoration: none;
+  background-color: #0081c2;
+  background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
+  background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
+  background-image: -o-linear-gradient(top, #0088cc, #0077b3);
+  background-image: linear-gradient(to bottom, #0088cc, #0077b3);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
+}
+
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  color: #ffffff;
+  text-decoration: none;
+  background-color: #0081c2;
+  background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
+  background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
+  background-image: -o-linear-gradient(top, #0088cc, #0077b3);
+  background-image: linear-gradient(to bottom, #0088cc, #0077b3);
+  background-repeat: repeat-x;
+  outline: 0;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
+}
+
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  color: #999999;
+}
+
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  text-decoration: none;
+  cursor: default;
+  background-color: transparent;
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.open {
+  *z-index: 1000;
+}
+
+.open > .dropdown-menu {
+  display: block;
+}
+
+.pull-right > .dropdown-menu {
+  right: 0;
+  left: auto;
+}
+
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+  border-top: 0;
+  border-bottom: 4px solid #000000;
+  content: "";
+}
+
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+  top: auto;
+  bottom: 100%;
+  margin-bottom: 1px;
+}
+
+.dropdown-submenu {
+  position: relative;
+}
+
+.dropdown-submenu > .dropdown-menu {
+  top: 0;
+  left: 100%;
+  margin-top: -6px;
+  margin-left: -1px;
+  -webkit-border-radius: 0 6px 6px 6px;
+     -moz-border-radius: 0 6px 6px 6px;
+          border-radius: 0 6px 6px 6px;
+}
+
+.dropdown-submenu:hover > .dropdown-menu {
+  display: block;
+}
+
+.dropup .dropdown-submenu > .dropdown-menu {
+  top: auto;
+  bottom: 0;
+  margin-top: 0;
+  margin-bottom: -2px;
+  -webkit-border-radius: 5px 5px 5px 0;
+     -moz-border-radius: 5px 5px 5px 0;
+          border-radius: 5px 5px 5px 0;
+}
+
+.dropdown-submenu > a:after {
+  display: block;
+  float: right;
+  width: 0;
+  height: 0;
+  margin-top: 5px;
+  margin-right: -10px;
+  border-color: transparent;
+  border-left-color: #cccccc;
+  border-style: solid;
+  border-width: 5px 0 5px 5px;
+  content: " ";
+}
+
+.dropdown-submenu:hover > a:after {
+  border-left-color: #ffffff;
+}
+
+.dropdown-submenu.pull-left {
+  float: none;
+}
+
+.dropdown-submenu.pull-left > .dropdown-menu {
+  left: -100%;
+  margin-left: 10px;
+  -webkit-border-radius: 6px 0 6px 6px;
+     -moz-border-radius: 6px 0 6px 6px;
+          border-radius: 6px 0 6px 6px;
+}
+
+.dropdown .dropdown-menu .nav-header {
+  padding-right: 20px;
+  padding-left: 20px;
+}
+
+.typeahead {
+  z-index: 1051;
+  margin-top: 2px;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+
+.well blockquote {
+  border-color: #ddd;
+  border-color: rgba(0, 0, 0, 0.15);
+}
+
+.well-large {
+  padding: 24px;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.well-small {
+  padding: 9px;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.fade {
+  opacity: 0;
+  -webkit-transition: opacity 0.15s linear;
+     -moz-transition: opacity 0.15s linear;
+       -o-transition: opacity 0.15s linear;
+          transition: opacity 0.15s linear;
+}
+
+.fade.in {
+  opacity: 1;
+}
+
+.collapse {
+  position: relative;
+  height: 0;
+  overflow: hidden;
+  -webkit-transition: height 0.35s ease;
+     -moz-transition: height 0.35s ease;
+       -o-transition: height 0.35s ease;
+          transition: height 0.35s ease;
+}
+
+.collapse.in {
+  height: auto;
+}
+
+.close {
+  float: right;
+  font-size: 20px;
+  font-weight: bold;
+  line-height: 20px;
+  color: #000000;
+  text-shadow: 0 1px 0 #ffffff;
+  opacity: 0.2;
+  filter: alpha(opacity=20);
+}
+
+.close:hover,
+.close:focus {
+  color: #000000;
+  text-decoration: none;
+  cursor: pointer;
+  opacity: 0.4;
+  filter: alpha(opacity=40);
+}
+
+button.close {
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+}
+
+.btn {
+  display: inline-block;
+  *display: inline;
+  padding: 4px 12px;
+  margin-bottom: 0;
+  *margin-left: .3em;
+  font-size: 14px;
+  line-height: 20px;
+  color: #333333;
+  text-align: center;
+  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+  vertical-align: middle;
+  cursor: pointer;
+  background-color: #f5f5f5;
+  *background-color: #e6e6e6;
+  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
+  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
+  background-repeat: repeat-x;
+  border: 1px solid #cccccc;
+  *border: 0;
+  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-bottom-color: #b3b3b3;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+  *zoom: 1;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn:hover,
+.btn:focus,
+.btn:active,
+.btn.active,
+.btn.disabled,
+.btn[disabled] {
+  color: #333333;
+  background-color: #e6e6e6;
+  *background-color: #d9d9d9;
+}
+
+.btn:active,
+.btn.active {
+  background-color: #cccccc \9;
+}
+
+.btn:first-child {
+  *margin-left: 0;
+}
+
+.btn:hover,
+.btn:focus {
+  color: #333333;
+  text-decoration: none;
+  background-position: 0 -15px;
+  -webkit-transition: background-position 0.1s linear;
+     -moz-transition: background-position 0.1s linear;
+       -o-transition: background-position 0.1s linear;
+          transition: background-position 0.1s linear;
+}
+
+.btn:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+
+.btn.active,
+.btn:active {
+  background-image: none;
+  outline: 0;
+  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn.disabled,
+.btn[disabled] {
+  cursor: default;
+  background-image: none;
+  opacity: 0.65;
+  filter: alpha(opacity=65);
+  -webkit-box-shadow: none;
+     -moz-box-shadow: none;
+          box-shadow: none;
+}
+
+.btn-large {
+  padding: 11px 19px;
+  font-size: 17.5px;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.btn-large [class^="icon-"],
+.btn-large [class*=" icon-"] {
+  margin-top: 4px;
+}
+
+.btn-small {
+  padding: 2px 10px;
+  font-size: 11.9px;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.btn-small [class^="icon-"],
+.btn-small [class*=" icon-"] {
+  margin-top: 0;
+}
+
+.btn-mini [class^="icon-"],
+.btn-mini [class*=" icon-"] {
+  margin-top: -1px;
+}
+
+.btn-mini {
+  padding: 0 6px;
+  font-size: 10.5px;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.btn-block {
+  display: block;
+  width: 100%;
+  padding-right: 0;
+  padding-left: 0;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.btn-block + .btn-block {
+  margin-top: 5px;
+}
+
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+  width: 100%;
+}
+
+.btn-primary.active,
+.btn-warning.active,
+.btn-danger.active,
+.btn-success.active,
+.btn-info.active,
+.btn-inverse.active {
+  color: rgba(255, 255, 255, 0.75);
+}
+
+.btn-primary {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #006dcc;
+  *background-color: #0044cc;
+  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+  background-image: linear-gradient(to bottom, #0088cc, #0044cc);
+  background-repeat: repeat-x;
+  border-color: #0044cc #0044cc #002a80;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active,
+.btn-primary.active,
+.btn-primary.disabled,
+.btn-primary[disabled] {
+  color: #ffffff;
+  background-color: #0044cc;
+  *background-color: #003bb3;
+}
+
+.btn-primary:active,
+.btn-primary.active {
+  background-color: #003399 \9;
+}
+
+.btn-warning {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #faa732;
+  *background-color: #f89406;
+  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+  background-image: -o-linear-gradient(top, #fbb450, #f89406);
+  background-image: linear-gradient(to bottom, #fbb450, #f89406);
+  background-repeat: repeat-x;
+  border-color: #f89406 #f89406 #ad6704;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning:active,
+.btn-warning.active,
+.btn-warning.disabled,
+.btn-warning[disabled] {
+  color: #ffffff;
+  background-color: #f89406;
+  *background-color: #df8505;
+}
+
+.btn-warning:active,
+.btn-warning.active {
+  background-color: #c67605 \9;
+}
+
+.btn-danger {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #da4f49;
+  *background-color: #bd362f;
+  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
+  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
+  background-repeat: repeat-x;
+  border-color: #bd362f #bd362f #802420;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger:active,
+.btn-danger.active,
+.btn-danger.disabled,
+.btn-danger[disabled] {
+  color: #ffffff;
+  background-color: #bd362f;
+  *background-color: #a9302a;
+}
+
+.btn-danger:active,
+.btn-danger.active {
+  background-color: #942a25 \9;
+}
+
+.btn-success {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #5bb75b;
+  *background-color: #51a351;
+  background-image: -moz-linear-gradient(top, #62c462, #51a351);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
+  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
+  background-image: -o-linear-gradient(top, #62c462, #51a351);
+  background-image: linear-gradient(to bottom, #62c462, #51a351);
+  background-repeat: repeat-x;
+  border-color: #51a351 #51a351 #387038;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-success:hover,
+.btn-success:focus,
+.btn-success:active,
+.btn-success.active,
+.btn-success.disabled,
+.btn-success[disabled] {
+  color: #ffffff;
+  background-color: #51a351;
+  *background-color: #499249;
+}
+
+.btn-success:active,
+.btn-success.active {
+  background-color: #408140 \9;
+}
+
+.btn-info {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #49afcd;
+  *background-color: #2f96b4;
+  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
+  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
+  background-repeat: repeat-x;
+  border-color: #2f96b4 #2f96b4 #1f6377;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-info:hover,
+.btn-info:focus,
+.btn-info:active,
+.btn-info.active,
+.btn-info.disabled,
+.btn-info[disabled] {
+  color: #ffffff;
+  background-color: #2f96b4;
+  *background-color: #2a85a0;
+}
+
+.btn-info:active,
+.btn-info.active {
+  background-color: #24748c \9;
+}
+
+.btn-inverse {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #363636;
+  *background-color: #222222;
+  background-image: -moz-linear-gradient(top, #444444, #222222);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
+  background-image: -webkit-linear-gradient(top, #444444, #222222);
+  background-image: -o-linear-gradient(top, #444444, #222222);
+  background-image: linear-gradient(to bottom, #444444, #222222);
+  background-repeat: repeat-x;
+  border-color: #222222 #222222 #000000;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-inverse:hover,
+.btn-inverse:focus,
+.btn-inverse:active,
+.btn-inverse.active,
+.btn-inverse.disabled,
+.btn-inverse[disabled] {
+  color: #ffffff;
+  background-color: #222222;
+  *background-color: #151515;
+}
+
+.btn-inverse:active,
+.btn-inverse.active {
+  background-color: #080808 \9;
+}
+
+button.btn,
+input[type="submit"].btn {
+  *padding-top: 3px;
+  *padding-bottom: 3px;
+}
+
+button.btn::-moz-focus-inner,
+input[type="submit"].btn::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+
+button.btn.btn-large,
+input[type="submit"].btn.btn-large {
+  *padding-top: 7px;
+  *padding-bottom: 7px;
+}
+
+button.btn.btn-small,
+input[type="submit"].btn.btn-small {
+  *padding-top: 3px;
+  *padding-bottom: 3px;
+}
+
+button.btn.btn-mini,
+input[type="submit"].btn.btn-mini {
+  *padding-top: 1px;
+  *padding-bottom: 1px;
+}
+
+.btn-link,
+.btn-link:active,
+.btn-link[disabled] {
+  background-color: transparent;
+  background-image: none;
+  -webkit-box-shadow: none;
+     -moz-box-shadow: none;
+          box-shadow: none;
+}
+
+.btn-link {
+  color: #0088cc;
+  cursor: pointer;
+  border-color: transparent;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.btn-link:hover,
+.btn-link:focus {
+  color: #005580;
+  text-decoration: underline;
+  background-color: transparent;
+}
+
+.btn-link[disabled]:hover,
+.btn-link[disabled]:focus {
+  color: #333333;
+  text-decoration: none;
+}
+
+.btn-group {
+  position: relative;
+  display: inline-block;
+  *display: inline;
+  *margin-left: .3em;
+  font-size: 0;
+  white-space: nowrap;
+  vertical-align: middle;
+  *zoom: 1;
+}
+
+.btn-group:first-child {
+  *margin-left: 0;
+}
+
+.btn-group + .btn-group {
+  margin-left: 5px;
+}
+
+.btn-toolbar {
+  margin-top: 10px;
+  margin-bottom: 10px;
+  font-size: 0;
+}
+
+.btn-toolbar > .btn + .btn,
+.btn-toolbar > .btn-group + .btn,
+.btn-toolbar > .btn + .btn-group {
+  margin-left: 5px;
+}
+
+.btn-group > .btn {
+  position: relative;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.btn-group > .btn + .btn {
+  margin-left: -1px;
+}
+
+.btn-group > .btn,
+.btn-group > .dropdown-menu,
+.btn-group > .popover {
+  font-size: 14px;
+}
+
+.btn-group > .btn-mini {
+  font-size: 10.5px;
+}
+
+.btn-group > .btn-small {
+  font-size: 11.9px;
+}
+
+.btn-group > .btn-large {
+  font-size: 17.5px;
+}
+
+.btn-group > .btn:first-child {
+  margin-left: 0;
+  -webkit-border-bottom-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+  -webkit-border-top-left-radius: 4px;
+          border-top-left-radius: 4px;
+  -moz-border-radius-bottomleft: 4px;
+  -moz-border-radius-topleft: 4px;
+}
+
+.btn-group > .btn:last-child,
+.btn-group > .dropdown-toggle {
+  -webkit-border-top-right-radius: 4px;
+          border-top-right-radius: 4px;
+  -webkit-border-bottom-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+  -moz-border-radius-topright: 4px;
+  -moz-border-radius-bottomright: 4px;
+}
+
+.btn-group > .btn.large:first-child {
+  margin-left: 0;
+  -webkit-border-bottom-left-radius: 6px;
+          border-bottom-left-radius: 6px;
+  -webkit-border-top-left-radius: 6px;
+          border-top-left-radius: 6px;
+  -moz-border-radius-bottomleft: 6px;
+  -moz-border-radius-topleft: 6px;
+}
+
+.btn-group > .btn.large:last-child,
+.btn-group > .large.dropdown-toggle {
+  -webkit-border-top-right-radius: 6px;
+          border-top-right-radius: 6px;
+  -webkit-border-bottom-right-radius: 6px;
+          border-bottom-right-radius: 6px;
+  -moz-border-radius-topright: 6px;
+  -moz-border-radius-bottomright: 6px;
+}
+
+.btn-group > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group > .btn:active,
+.btn-group > .btn.active {
+  z-index: 2;
+}
+
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+  outline: 0;
+}
+
+.btn-group > .btn + .dropdown-toggle {
+  *padding-top: 5px;
+  padding-right: 8px;
+  *padding-bottom: 5px;
+  padding-left: 8px;
+  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn-group > .btn-mini + .dropdown-toggle {
+  *padding-top: 2px;
+  padding-right: 5px;
+  *padding-bottom: 2px;
+  padding-left: 5px;
+}
+
+.btn-group > .btn-small + .dropdown-toggle {
+  *padding-top: 5px;
+  *padding-bottom: 4px;
+}
+
+.btn-group > .btn-large + .dropdown-toggle {
+  *padding-top: 7px;
+  padding-right: 12px;
+  *padding-bottom: 7px;
+  padding-left: 12px;
+}
+
+.btn-group.open .dropdown-toggle {
+  background-image: none;
+  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn-group.open .btn.dropdown-toggle {
+  background-color: #e6e6e6;
+}
+
+.btn-group.open .btn-primary.dropdown-toggle {
+  background-color: #0044cc;
+}
+
+.btn-group.open .btn-warning.dropdown-toggle {
+  background-color: #f89406;
+}
+
+.btn-group.open .btn-danger.dropdown-toggle {
+  background-color: #bd362f;
+}
+
+.btn-group.open .btn-success.dropdown-toggle {
+  background-color: #51a351;
+}
+
+.btn-group.open .btn-info.dropdown-toggle {
+  background-color: #2f96b4;
+}
+
+.btn-group.open .btn-inverse.dropdown-toggle {
+  background-color: #222222;
+}
+
+.btn .caret {
+  margin-top: 8px;
+  margin-left: 0;
+}
+
+.btn-large .caret {
+  margin-top: 6px;
+}
+
+.btn-large .caret {
+  border-top-width: 5px;
+  border-right-width: 5px;
+  border-left-width: 5px;
+}
+
+.btn-mini .caret,
+.btn-small .caret {
+  margin-top: 8px;
+}
+
+.dropup .btn-large .caret {
+  border-bottom-width: 5px;
+}
+
+.btn-primary .caret,
+.btn-warning .caret,
+.btn-danger .caret,
+.btn-info .caret,
+.btn-success .caret,
+.btn-inverse .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+}
+
+.btn-group-vertical {
+  display: inline-block;
+  *display: inline;
+  /* IE7 inline-block hack */
+
+  *zoom: 1;
+}
+
+.btn-group-vertical > .btn {
+  display: block;
+  float: none;
+  max-width: 100%;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.btn-group-vertical > .btn + .btn {
+  margin-top: -1px;
+  margin-left: 0;
+}
+
+.btn-group-vertical > .btn:first-child {
+  -webkit-border-radius: 4px 4px 0 0;
+     -moz-border-radius: 4px 4px 0 0;
+          border-radius: 4px 4px 0 0;
+}
+
+.btn-group-vertical > .btn:last-child {
+  -webkit-border-radius: 0 0 4px 4px;
+     -moz-border-radius: 0 0 4px 4px;
+          border-radius: 0 0 4px 4px;
+}
+
+.btn-group-vertical > .btn-large:first-child {
+  -webkit-border-radius: 6px 6px 0 0;
+     -moz-border-radius: 6px 6px 0 0;
+          border-radius: 6px 6px 0 0;
+}
+
+.btn-group-vertical > .btn-large:last-child {
+  -webkit-border-radius: 0 0 6px 6px;
+     -moz-border-radius: 0 0 6px 6px;
+          border-radius: 0 0 6px 6px;
+}
+
+.alert {
+  padding: 8px 35px 8px 14px;
+  margin-bottom: 20px;
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  background-color: #fcf8e3;
+  border: 1px solid #fbeed5;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+.alert,
+.alert h4 {
+  color: #c09853;
+}
+
+.alert h4 {
+  margin: 0;
+}
+
+.alert .close {
+  position: relative;
+  top: -2px;
+  right: -21px;
+  line-height: 20px;
+}
+
+.alert-success {
+  color: #468847;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+
+.alert-success h4 {
+  color: #468847;
+}
+
+.alert-danger,
+.alert-error {
+  color: #b94a48;
+  background-color: #f2dede;
+  border-color: #eed3d7;
+}
+
+.alert-danger h4,
+.alert-error h4 {
+  color: #b94a48;
+}
+
+.alert-info {
+  color: #3a87ad;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+
+.alert-info h4 {
+  color: #3a87ad;
+}
+
+.alert-block {
+  padding-top: 14px;
+  padding-bottom: 14px;
+}
+
+.alert-block > p,
+.alert-block > ul {
+  margin-bottom: 0;
+}
+
+.alert-block p + p {
+  margin-top: 5px;
+}
+
+.nav {
+  margin-bottom: 20px;
+  margin-left: 0;
+  list-style: none;
+}
+
+.nav > li > a {
+  display: block;
+}
+
+.nav > li > a:hover,
+.nav > li > a:focus {
+  text-decoration: none;
+  background-color: #eeeeee;
+}
+
+.nav > li > a > img {
+  max-width: none;
+}
+
+.nav > .pull-right {
+  float: right;
+}
+
+.nav-header {
+  display: block;
+  padding: 3px 15px;
+  font-size: 11px;
+  font-weight: bold;
+  line-height: 20px;
+  color: #999999;
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  text-transform: uppercase;
+}
+
+.nav li + .nav-header {
+  margin-top: 9px;
+}
+
+.nav-list {
+  padding-right: 15px;
+  padding-left: 15px;
+  margin-bottom: 0;
+}
+
+.nav-list > li > a,
+.nav-list .nav-header {
+  margin-right: -15px;
+  margin-left: -15px;
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+
+.nav-list > li > a {
+  padding: 3px 15px;
+}
+
+.nav-list > .active > a,
+.nav-list > .active > a:hover,
+.nav-list > .active > a:focus {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+  background-color: #0088cc;
+}
+
+.nav-list [class^="icon-"],
+.nav-list [class*=" icon-"] {
+  margin-right: 2px;
+}
+
+.nav-list .divider {
+  *width: 100%;
+  height: 1px;
+  margin: 9px 1px;
+  *margin: -5px 0 5px;
+  overflow: hidden;
+  background-color: #e5e5e5;
+  border-bottom: 1px solid #ffffff;
+}
+
+.nav-tabs,
+.nav-pills {
+  *zoom: 1;
+}
+
+.nav-tabs:before,
+.nav-pills:before,
+.nav-tabs:after,
+.nav-pills:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.nav-tabs:after,
+.nav-pills:after {
+  clear: both;
+}
+
+.nav-tabs > li,
+.nav-pills > li {
+  float: left;
+}
+
+.nav-tabs > li > a,
+.nav-pills > li > a {
+  padding-right: 12px;
+  padding-left: 12px;
+  margin-right: 2px;
+  line-height: 14px;
+}
+
+.nav-tabs {
+  border-bottom: 1px solid #ddd;
+}
+
+.nav-tabs > li {
+  margin-bottom: -1px;
+}
+
+.nav-tabs > li > a {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  line-height: 20px;
+  border: 1px solid transparent;
+  -webkit-border-radius: 4px 4px 0 0;
+     -moz-border-radius: 4px 4px 0 0;
+          border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs > li > a:hover,
+.nav-tabs > li > a:focus {
+  border-color: #eeeeee #eeeeee #dddddd;
+}
+
+.nav-tabs > .active > a,
+.nav-tabs > .active > a:hover,
+.nav-tabs > .active > a:focus {
+  color: #555555;
+  cursor: default;
+  background-color: #ffffff;
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+}
+
+.nav-pills > li > a {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  margin-top: 2px;
+  margin-bottom: 2px;
+  -webkit-border-radius: 5px;
+     -moz-border-radius: 5px;
+          border-radius: 5px;
+}
+
+.nav-pills > .active > a,
+.nav-pills > .active > a:hover,
+.nav-pills > .active > a:focus {
+  color: #ffffff;
+  background-color: #0088cc;
+}
+
+.nav-stacked > li {
+  float: none;
+}
+
+.nav-stacked > li > a {
+  margin-right: 0;
+}
+
+.nav-tabs.nav-stacked {
+  border-bottom: 0;
+}
+
+.nav-tabs.nav-stacked > li > a {
+  border: 1px solid #ddd;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.nav-tabs.nav-stacked > li:first-child > a {
+  -webkit-border-top-right-radius: 4px;
+          border-top-right-radius: 4px;
+  -webkit-border-top-left-radius: 4px;
+          border-top-left-radius: 4px;
+  -moz-border-radius-topright: 4px;
+  -moz-border-radius-topleft: 4px;
+}
+
+.nav-tabs.nav-stacked > li:last-child > a {
+  -webkit-border-bottom-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+  -webkit-border-bottom-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+  -moz-border-radius-bottomright: 4px;
+  -moz-border-radius-bottomleft: 4px;
+}
+
+.nav-tabs.nav-stacked > li > a:hover,
+.nav-tabs.nav-stacked > li > a:focus {
+  z-index: 2;
+  border-color: #ddd;
+}
+
+.nav-pills.nav-stacked > li > a {
+  margin-bottom: 3px;
+}
+
+.nav-pills.nav-stacked > li:last-child > a {
+  margin-bottom: 1px;
+}
+
+.nav-tabs .dropdown-menu {
+  -webkit-border-radius: 0 0 6px 6px;
+     -moz-border-radius: 0 0 6px 6px;
+          border-radius: 0 0 6px 6px;
+}
+
+.nav-pills .dropdown-menu {
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.nav .dropdown-toggle .caret {
+  margin-top: 6px;
+  border-top-color: #0088cc;
+  border-bottom-color: #0088cc;
+}
+
+.nav .dropdown-toggle:hover .caret,
+.nav .dropdown-toggle:focus .caret {
+  border-top-color: #005580;
+  border-bottom-color: #005580;
+}
+
+/* move down carets for tabs */
+
+.nav-tabs .dropdown-toggle .caret {
+  margin-top: 8px;
+}
+
+.nav .active .dropdown-toggle .caret {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+
+.nav-tabs .active .dropdown-toggle .caret {
+  border-top-color: #555555;
+  border-bottom-color: #555555;
+}
+
+.nav > .dropdown.active > a:hover,
+.nav > .dropdown.active > a:focus {
+  cursor: pointer;
+}
+
+.nav-tabs .open .dropdown-toggle,
+.nav-pills .open .dropdown-toggle,
+.nav > li.dropdown.open.active > a:hover,
+.nav > li.dropdown.open.active > a:focus {
+  color: #ffffff;
+  background-color: #999999;
+  border-color: #999999;
+}
+
+.nav li.dropdown.open .caret,
+.nav li.dropdown.open.active .caret,
+.nav li.dropdown.open a:hover .caret,
+.nav li.dropdown.open a:focus .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+
+.tabs-stacked .open > a:hover,
+.tabs-stacked .open > a:focus {
+  border-color: #999999;
+}
+
+.tabbable {
+  *zoom: 1;
+}
+
+.tabbable:before,
+.tabbable:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.tabbable:after {
+  clear: both;
+}
+
+.tab-content {
+  overflow: auto;
+}
+
+.tabs-below > .nav-tabs,
+.tabs-right > .nav-tabs,
+.tabs-left > .nav-tabs {
+  border-bottom: 0;
+}
+
+.tab-content > .tab-pane,
+.pill-content > .pill-pane {
+  display: none;
+}
+
+.tab-content > .active,
+.pill-content > .active {
+  display: block;
+}
+
+.tabs-below > .nav-tabs {
+  border-top: 1px solid #ddd;
+}
+
+.tabs-below > .nav-tabs > li {
+  margin-top: -1px;
+  margin-bottom: 0;
+}
+
+.tabs-below > .nav-tabs > li > a {
+  -webkit-border-radius: 0 0 4px 4px;
+     -moz-border-radius: 0 0 4px 4px;
+          border-radius: 0 0 4px 4px;
+}
+
+.tabs-below > .nav-tabs > li > a:hover,
+.tabs-below > .nav-tabs > li > a:focus {
+  border-top-color: #ddd;
+  border-bottom-color: transparent;
+}
+
+.tabs-below > .nav-tabs > .active > a,
+.tabs-below > .nav-tabs > .active > a:hover,
+.tabs-below > .nav-tabs > .active > a:focus {
+  border-color: transparent #ddd #ddd #ddd;
+}
+
+.tabs-left > .nav-tabs > li,
+.tabs-right > .nav-tabs > li {
+  float: none;
+}
+
+.tabs-left > .nav-tabs > li > a,
+.tabs-right > .nav-tabs > li > a {
+  min-width: 74px;
+  margin-right: 0;
+  margin-bottom: 3px;
+}
+
+.tabs-left > .nav-tabs {
+  float: left;
+  margin-right: 19px;
+  border-right: 1px solid #ddd;
+}
+
+.tabs-left > .nav-tabs > li > a {
+  margin-right: -1px;
+  -webkit-border-radius: 4px 0 0 4px;
+     -moz-border-radius: 4px 0 0 4px;
+          border-radius: 4px 0 0 4px;
+}
+
+.tabs-left > .nav-tabs > li > a:hover,
+.tabs-left > .nav-tabs > li > a:focus {
+  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+
+.tabs-left > .nav-tabs .active > a,
+.tabs-left > .nav-tabs .active > a:hover,
+.tabs-left > .nav-tabs .active > a:focus {
+  border-color: #ddd transparent #ddd #ddd;
+  *border-right-color: #ffffff;
+}
+
+.tabs-right > .nav-tabs {
+  float: right;
+  margin-left: 19px;
+  border-left: 1px solid #ddd;
+}
+
+.tabs-right > .nav-tabs > li > a {
+  margin-left: -1px;
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.tabs-right > .nav-tabs > li > a:hover,
+.tabs-right > .nav-tabs > li > a:focus {
+  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+
+.tabs-right > .nav-tabs .active > a,
+.tabs-right > .nav-tabs .active > a:hover,
+.tabs-right > .nav-tabs .active > a:focus {
+  border-color: #ddd #ddd #ddd transparent;
+  *border-left-color: #ffffff;
+}
+
+.nav > .disabled > a {
+  color: #999999;
+}
+
+.nav > .disabled > a:hover,
+.nav > .disabled > a:focus {
+  text-decoration: none;
+  cursor: default;
+  background-color: transparent;
+}
+
+.navbar {
+  *position: relative;
+  *z-index: 2;
+  margin-bottom: 20px;
+  overflow: visible;
+}
+
+.navbar-inner {
+  min-height: 40px;
+  padding-right: 20px;
+  padding-left: 20px;
+  background-color: #fafafa;
+  background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
+  background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
+  background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
+  background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
+  background-repeat: repeat-x;
+  border: 1px solid #d4d4d4;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
+  *zoom: 1;
+  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+     -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+          box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+}
+
+.navbar-inner:before,
+.navbar-inner:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.navbar-inner:after {
+  clear: both;
+}
+
+.navbar .container {
+  width: auto;
+}
+
+.nav-collapse.collapse {
+  height: auto;
+  overflow: visible;
+}
+
+.navbar .brand {
+  display: block;
+  float: left;
+  padding: 10px 20px 10px;
+  margin-left: -20px;
+  font-size: 20px;
+  font-weight: 200;
+  color: #777777;
+  text-shadow: 0 1px 0 #ffffff;
+}
+
+.navbar .brand:hover,
+.navbar .brand:focus {
+  text-decoration: none;
+}
+
+.navbar-text {
+  margin-bottom: 0;
+  line-height: 40px;
+  color: #777777;
+}
+
+.navbar-link {
+  color: #777777;
+}
+
+.navbar-link:hover,
+.navbar-link:focus {
+  color: #333333;
+}
+
+.navbar .divider-vertical {
+  height: 40px;
+  margin: 0 9px;
+  border-right: 1px solid #ffffff;
+  border-left: 1px solid #f2f2f2;
+}
+
+.navbar .btn,
+.navbar .btn-group {
+  margin-top: 5px;
+}
+
+.navbar .btn-group .btn,
+.navbar .input-prepend .btn,
+.navbar .input-append .btn,
+.navbar .input-prepend .btn-group,
+.navbar .input-append .btn-group {
+  margin-top: 0;
+}
+
+.navbar-form {
+  margin-bottom: 0;
+  *zoom: 1;
+}
+
+.navbar-form:before,
+.navbar-form:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.navbar-form:after {
+  clear: both;
+}
+
+.navbar-form input,
+.navbar-form select,
+.navbar-form .radio,
+.navbar-form .checkbox {
+  margin-top: 5px;
+}
+
+.navbar-form input,
+.navbar-form select,
+.navbar-form .btn {
+  display: inline-block;
+  margin-bottom: 0;
+}
+
+.navbar-form input[type="image"],
+.navbar-form input[type="checkbox"],
+.navbar-form input[type="radio"] {
+  margin-top: 3px;
+}
+
+.navbar-form .input-append,
+.navbar-form .input-prepend {
+  margin-top: 5px;
+  white-space: nowrap;
+}
+
+.navbar-form .input-append input,
+.navbar-form .input-prepend input {
+  margin-top: 0;
+}
+
+.navbar-search {
+  position: relative;
+  float: left;
+  margin-top: 5px;
+  margin-bottom: 0;
+}
+
+.navbar-search .search-query {
+  padding: 4px 14px;
+  margin-bottom: 0;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  font-weight: normal;
+  line-height: 1;
+  -webkit-border-radius: 15px;
+     -moz-border-radius: 15px;
+          border-radius: 15px;
+}
+
+.navbar-static-top {
+  position: static;
+  margin-bottom: 0;
+}
+
+.navbar-static-top .navbar-inner {
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  position: fixed;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+  margin-bottom: 0;
+}
+
+.navbar-fixed-top .navbar-inner,
+.navbar-static-top .navbar-inner {
+  border-width: 0 0 1px;
+}
+
+.navbar-fixed-bottom .navbar-inner {
+  border-width: 1px 0 0;
+}
+
+.navbar-fixed-top .navbar-inner,
+.navbar-fixed-bottom .navbar-inner {
+  padding-right: 0;
+  padding-left: 0;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.navbar-static-top .container,
+.navbar-fixed-top .container,
+.navbar-fixed-bottom .container {
+  width: 940px;
+}
+
+.navbar-fixed-top {
+  top: 0;
+}
+
+.navbar-fixed-top .navbar-inner,
+.navbar-static-top .navbar-inner {
+  -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+     -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+          box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+}
+
+.navbar-fixed-bottom {
+  bottom: 0;
+}
+
+.navbar-fixed-bottom .navbar-inner {
+  -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+     -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+          box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+}
+
+.navbar .nav {
+  position: relative;
+  left: 0;
+  display: block;
+  float: left;
+  margin: 0 10px 0 0;
+}
+
+.navbar .nav.pull-right {
+  float: right;
+  margin-right: 0;
+}
+
+.navbar .nav > li {
+  float: left;
+}
+
+.navbar .nav > li > a {
+  float: none;
+  padding: 10px 15px 10px;
+  color: #777777;
+  text-decoration: none;
+  text-shadow: 0 1px 0 #ffffff;
+}
+
+.navbar .nav .dropdown-toggle .caret {
+  margin-top: 8px;
+}
+
+.navbar .nav > li > a:focus,
+.navbar .nav > li > a:hover {
+  color: #333333;
+  text-decoration: none;
+  background-color: transparent;
+}
+
+.navbar .nav > .active > a,
+.navbar .nav > .active > a:hover,
+.navbar .nav > .active > a:focus {
+  color: #555555;
+  text-decoration: none;
+  background-color: #e5e5e5;
+  -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+     -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+          box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+}
+
+.navbar .btn-navbar {
+  display: none;
+  float: right;
+  padding: 7px 10px;
+  margin-right: 5px;
+  margin-left: 5px;
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #ededed;
+  *background-color: #e5e5e5;
+  background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));
+  background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5);
+  background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5);
+  background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5);
+  background-repeat: repeat-x;
+  border-color: #e5e5e5 #e5e5e5 #bfbfbf;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+}
+
+.navbar .btn-navbar:hover,
+.navbar .btn-navbar:focus,
+.navbar .btn-navbar:active,
+.navbar .btn-navbar.active,
+.navbar .btn-navbar.disabled,
+.navbar .btn-navbar[disabled] {
+  color: #ffffff;
+  background-color: #e5e5e5;
+  *background-color: #d9d9d9;
+}
+
+.navbar .btn-navbar:active,
+.navbar .btn-navbar.active {
+  background-color: #cccccc \9;
+}
+
+.navbar .btn-navbar .icon-bar {
+  display: block;
+  width: 18px;
+  height: 2px;
+  background-color: #f5f5f5;
+  -webkit-border-radius: 1px;
+     -moz-border-radius: 1px;
+          border-radius: 1px;
+  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+     -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+          box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.btn-navbar .icon-bar + .icon-bar {
+  margin-top: 3px;
+}
+
+.navbar .nav > li > .dropdown-menu:before {
+  position: absolute;
+  top: -7px;
+  left: 9px;
+  display: inline-block;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid #ccc;
+  border-left: 7px solid transparent;
+  border-bottom-color: rgba(0, 0, 0, 0.2);
+  content: '';
+}
+
+.navbar .nav > li > .dropdown-menu:after {
+  position: absolute;
+  top: -6px;
+  left: 10px;
+  display: inline-block;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #ffffff;
+  border-left: 6px solid transparent;
+  content: '';
+}
+
+.navbar-fixed-bottom .nav > li > .dropdown-menu:before {
+  top: auto;
+  bottom: -7px;
+  border-top: 7px solid #ccc;
+  border-bottom: 0;
+  border-top-color: rgba(0, 0, 0, 0.2);
+}
+
+.navbar-fixed-bottom .nav > li > .dropdown-menu:after {
+  top: auto;
+  bottom: -6px;
+  border-top: 6px solid #ffffff;
+  border-bottom: 0;
+}
+
+.navbar .nav li.dropdown > a:hover .caret,
+.navbar .nav li.dropdown > a:focus .caret {
+  border-top-color: #333333;
+  border-bottom-color: #333333;
+}
+
+.navbar .nav li.dropdown.open > .dropdown-toggle,
+.navbar .nav li.dropdown.active > .dropdown-toggle,
+.navbar .nav li.dropdown.open.active > .dropdown-toggle {
+  color: #555555;
+  background-color: #e5e5e5;
+}
+
+.navbar .nav li.dropdown > .dropdown-toggle .caret {
+  border-top-color: #777777;
+  border-bottom-color: #777777;
+}
+
+.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
+.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
+.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
+  border-top-color: #555555;
+  border-bottom-color: #555555;
+}
+
+.navbar .pull-right > li > .dropdown-menu,
+.navbar .nav > li > .dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+
+.navbar .pull-right > li > .dropdown-menu:before,
+.navbar .nav > li > .dropdown-menu.pull-right:before {
+  right: 12px;
+  left: auto;
+}
+
+.navbar .pull-right > li > .dropdown-menu:after,
+.navbar .nav > li > .dropdown-menu.pull-right:after {
+  right: 13px;
+  left: auto;
+}
+
+.navbar .pull-right > li > .dropdown-menu .dropdown-menu,
+.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu {
+  right: 100%;
+  left: auto;
+  margin-right: -1px;
+  margin-left: 0;
+  -webkit-border-radius: 6px 0 6px 6px;
+     -moz-border-radius: 6px 0 6px 6px;
+          border-radius: 6px 0 6px 6px;
+}
+
+.navbar-inverse .navbar-inner {
+  background-color: #1b1b1b;
+  background-image: -moz-linear-gradient(top, #222222, #111111);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
+  background-image: -webkit-linear-gradient(top, #222222, #111111);
+  background-image: -o-linear-gradient(top, #222222, #111111);
+  background-image: linear-gradient(to bottom, #222222, #111111);
+  background-repeat: repeat-x;
+  border-color: #252525;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
+}
+
+.navbar-inverse .brand,
+.navbar-inverse .nav > li > a {
+  color: #999999;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.navbar-inverse .brand:hover,
+.navbar-inverse .nav > li > a:hover,
+.navbar-inverse .brand:focus,
+.navbar-inverse .nav > li > a:focus {
+  color: #ffffff;
+}
+
+.navbar-inverse .brand {
+  color: #999999;
+}
+
+.navbar-inverse .navbar-text {
+  color: #999999;
+}
+
+.navbar-inverse .nav > li > a:focus,
+.navbar-inverse .nav > li > a:hover {
+  color: #ffffff;
+  background-color: transparent;
+}
+
+.navbar-inverse .nav .active > a,
+.navbar-inverse .nav .active > a:hover,
+.navbar-inverse .nav .active > a:focus {
+  color: #ffffff;
+  background-color: #111111;
+}
+
+.navbar-inverse .navbar-link {
+  color: #999999;
+}
+
+.navbar-inverse .navbar-link:hover,
+.navbar-inverse .navbar-link:focus {
+  color: #ffffff;
+}
+
+.navbar-inverse .divider-vertical {
+  border-right-color: #222222;
+  border-left-color: #111111;
+}
+
+.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
+.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
+.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
+  color: #ffffff;
+  background-color: #111111;
+}
+
+.navbar-inverse .nav li.dropdown > a:hover .caret,
+.navbar-inverse .nav li.dropdown > a:focus .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+}
+
+.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {
+  border-top-color: #999999;
+  border-bottom-color: #999999;
+}
+
+.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,
+.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,
+.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+}
+
+.navbar-inverse .navbar-search .search-query {
+  color: #ffffff;
+  background-color: #515151;
+  border-color: #111111;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+  -webkit-transition: none;
+     -moz-transition: none;
+       -o-transition: none;
+          transition: none;
+}
+
+.navbar-inverse .navbar-search .search-query:-moz-placeholder {
+  color: #cccccc;
+}
+
+.navbar-inverse .navbar-search .search-query:-ms-input-placeholder {
+  color: #cccccc;
+}
+
+.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {
+  color: #cccccc;
+}
+
+.navbar-inverse .navbar-search .search-query:focus,
+.navbar-inverse .navbar-search .search-query.focused {
+  padding: 5px 15px;
+  color: #333333;
+  text-shadow: 0 1px 0 #ffffff;
+  background-color: #ffffff;
+  border: 0;
+  outline: 0;
+  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+     -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+          box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+}
+
+.navbar-inverse .btn-navbar {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #0e0e0e;
+  *background-color: #040404;
+  background-image: -moz-linear-gradient(top, #151515, #040404);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));
+  background-image: -webkit-linear-gradient(top, #151515, #040404);
+  background-image: -o-linear-gradient(top, #151515, #040404);
+  background-image: linear-gradient(to bottom, #151515, #040404);
+  background-repeat: repeat-x;
+  border-color: #040404 #040404 #000000;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.navbar-inverse .btn-navbar:hover,
+.navbar-inverse .btn-navbar:focus,
+.navbar-inverse .btn-navbar:active,
+.navbar-inverse .btn-navbar.active,
+.navbar-inverse .btn-navbar.disabled,
+.navbar-inverse .btn-navbar[disabled] {
+  color: #ffffff;
+  background-color: #040404;
+  *background-color: #000000;
+}
+
+.navbar-inverse .btn-navbar:active,
+.navbar-inverse .btn-navbar.active {
+  background-color: #000000 \9;
+}
+
+.breadcrumb {
+  padding: 8px 15px;
+  margin: 0 0 20px;
+  list-style: none;
+  background-color: #f5f5f5;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+.breadcrumb > li {
+  display: inline-block;
+  *display: inline;
+  text-shadow: 0 1px 0 #ffffff;
+  *zoom: 1;
+}
+
+.breadcrumb > li > .divider {
+  padding: 0 5px;
+  color: #ccc;
+}
+
+.breadcrumb > .active {
+  color: #999999;
+}
+
+.pagination {
+  margin: 20px 0;
+}
+
+.pagination ul {
+  display: inline-block;
+  *display: inline;
+  margin-bottom: 0;
+  margin-left: 0;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  *zoom: 1;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.pagination ul > li {
+  display: inline;
+}
+
+.pagination ul > li > a,
+.pagination ul > li > span {
+  float: left;
+  padding: 4px 12px;
+  line-height: 20px;
+  text-decoration: none;
+  background-color: #ffffff;
+  border: 1px solid #dddddd;
+  border-left-width: 0;
+}
+
+.pagination ul > li > a:hover,
+.pagination ul > li > a:focus,
+.pagination ul > .active > a,
+.pagination ul > .active > span {
+  background-color: #f5f5f5;
+}
+
+.pagination ul > .active > a,
+.pagination ul > .active > span {
+  color: #999999;
+  cursor: default;
+}
+
+.pagination ul > .disabled > span,
+.pagination ul > .disabled > a,
+.pagination ul > .disabled > a:hover,
+.pagination ul > .disabled > a:focus {
+  color: #999999;
+  cursor: default;
+  background-color: transparent;
+}
+
+.pagination ul > li:first-child > a,
+.pagination ul > li:first-child > span {
+  border-left-width: 1px;
+  -webkit-border-bottom-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+  -webkit-border-top-left-radius: 4px;
+          border-top-left-radius: 4px;
+  -moz-border-radius-bottomleft: 4px;
+  -moz-border-radius-topleft: 4px;
+}
+
+.pagination ul > li:last-child > a,
+.pagination ul > li:last-child > span {
+  -webkit-border-top-right-radius: 4px;
+          border-top-right-radius: 4px;
+  -webkit-border-bottom-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+  -moz-border-radius-topright: 4px;
+  -moz-border-radius-bottomright: 4px;
+}
+
+.pagination-centered {
+  text-align: center;
+}
+
+.pagination-right {
+  text-align: right;
+}
+
+.pagination-large ul > li > a,
+.pagination-large ul > li > span {
+  padding: 11px 19px;
+  font-size: 17.5px;
+}
+
+.pagination-large ul > li:first-child > a,
+.pagination-large ul > li:first-child > span {
+  -webkit-border-bottom-left-radius: 6px;
+          border-bottom-left-radius: 6px;
+  -webkit-border-top-left-radius: 6px;
+          border-top-left-radius: 6px;
+  -moz-border-radius-bottomleft: 6px;
+  -moz-border-radius-topleft: 6px;
+}
+
+.pagination-large ul > li:last-child > a,
+.pagination-large ul > li:last-child > span {
+  -webkit-border-top-right-radius: 6px;
+          border-top-right-radius: 6px;
+  -webkit-border-bottom-right-radius: 6px;
+          border-bottom-right-radius: 6px;
+  -moz-border-radius-topright: 6px;
+  -moz-border-radius-bottomright: 6px;
+}
+
+.pagination-mini ul > li:first-child > a,
+.pagination-small ul > li:first-child > a,
+.pagination-mini ul > li:first-child > span,
+.pagination-small ul > li:first-child > span {
+  -webkit-border-bottom-left-radius: 3px;
+          border-bottom-left-radius: 3px;
+  -webkit-border-top-left-radius: 3px;
+          border-top-left-radius: 3px;
+  -moz-border-radius-bottomleft: 3px;
+  -moz-border-radius-topleft: 3px;
+}
+
+.pagination-mini ul > li:last-child > a,
+.pagination-small ul > li:last-child > a,
+.pagination-mini ul > li:last-child > span,
+.pagination-small ul > li:last-child > span {
+  -webkit-border-top-right-radius: 3px;
+          border-top-right-radius: 3px;
+  -webkit-border-bottom-right-radius: 3px;
+          border-bottom-right-radius: 3px;
+  -moz-border-radius-topright: 3px;
+  -moz-border-radius-bottomright: 3px;
+}
+
+.pagination-small ul > li > a,
+.pagination-small ul > li > span {
+  padding: 2px 10px;
+  font-size: 11.9px;
+}
+
+.pagination-mini ul > li > a,
+.pagination-mini ul > li > span {
+  padding: 0 6px;
+  font-size: 10.5px;
+}
+
+.pager {
+  margin: 20px 0;
+  text-align: center;
+  list-style: none;
+  *zoom: 1;
+}
+
+.pager:before,
+.pager:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.pager:after {
+  clear: both;
+}
+
+.pager li {
+  display: inline;
+}
+
+.pager li > a,
+.pager li > span {
+  display: inline-block;
+  padding: 5px 14px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  -webkit-border-radius: 15px;
+     -moz-border-radius: 15px;
+          border-radius: 15px;
+}
+
+.pager li > a:hover,
+.pager li > a:focus {
+  text-decoration: none;
+  background-color: #f5f5f5;
+}
+
+.pager .next > a,
+.pager .next > span {
+  float: right;
+}
+
+.pager .previous > a,
+.pager .previous > span {
+  float: left;
+}
+
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+  color: #999999;
+  cursor: default;
+  background-color: #fff;
+}
+
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000000;
+}
+
+.modal-backdrop.fade {
+  opacity: 0;
+}
+
+.modal-backdrop,
+.modal-backdrop.fade.in {
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+}
+
+.modal {
+  position: fixed;
+  top: 10%;
+  left: 50%;
+  z-index: 1050;
+  width: 560px;
+  margin-left: -280px;
+  background-color: #ffffff;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, 0.3);
+  *border: 1px solid #999;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  outline: none;
+  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+     -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+          box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding-box;
+          background-clip: padding-box;
+}
+
+.modal.fade {
+  top: -25%;
+  -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
+     -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
+       -o-transition: opacity 0.3s linear, top 0.3s ease-out;
+          transition: opacity 0.3s linear, top 0.3s ease-out;
+}
+
+.modal.fade.in {
+  top: 10%;
+}
+
+.modal-header {
+  padding: 9px 15px;
+  border-bottom: 1px solid #eee;
+}
+
+.modal-header .close {
+  margin-top: 2px;
+}
+
+.modal-header h3 {
+  margin: 0;
+  line-height: 30px;
+}
+
+.modal-body {
+  position: relative;
+  max-height: 400px;
+  padding: 15px;
+  overflow-y: auto;
+}
+
+.modal-form {
+  margin-bottom: 0;
+}
+
+.modal-footer {
+  padding: 14px 15px 15px;
+  margin-bottom: 0;
+  text-align: right;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  -webkit-border-radius: 0 0 6px 6px;
+     -moz-border-radius: 0 0 6px 6px;
+          border-radius: 0 0 6px 6px;
+  *zoom: 1;
+  -webkit-box-shadow: inset 0 1px 0 #ffffff;
+     -moz-box-shadow: inset 0 1px 0 #ffffff;
+          box-shadow: inset 0 1px 0 #ffffff;
+}
+
+.modal-footer:before,
+.modal-footer:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.modal-footer:after {
+  clear: both;
+}
+
+.modal-footer .btn + .btn {
+  margin-bottom: 0;
+  margin-left: 5px;
+}
+
+.modal-footer .btn-group .btn + .btn {
+  margin-left: -1px;
+}
+
+.modal-footer .btn-block + .btn-block {
+  margin-left: 0;
+}
+
+.tooltip {
+  position: absolute;
+  z-index: 1030;
+  display: block;
+  font-size: 11px;
+  line-height: 1.4;
+  opacity: 0;
+  filter: alpha(opacity=0);
+  visibility: visible;
+}
+
+.tooltip.in {
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+}
+
+.tooltip.top {
+  padding: 5px 0;
+  margin-top: -3px;
+}
+
+.tooltip.right {
+  padding: 0 5px;
+  margin-left: 3px;
+}
+
+.tooltip.bottom {
+  padding: 5px 0;
+  margin-top: 3px;
+}
+
+.tooltip.left {
+  padding: 0 5px;
+  margin-left: -3px;
+}
+
+.tooltip-inner {
+  max-width: 200px;
+  padding: 8px;
+  color: #ffffff;
+  text-align: center;
+  text-decoration: none;
+  background-color: #000000;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+.tooltip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.tooltip.top .tooltip-arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-top-color: #000000;
+  border-width: 5px 5px 0;
+}
+
+.tooltip.right .tooltip-arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-right-color: #000000;
+  border-width: 5px 5px 5px 0;
+}
+
+.tooltip.left .tooltip-arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-left-color: #000000;
+  border-width: 5px 0 5px 5px;
+}
+
+.tooltip.bottom .tooltip-arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-bottom-color: #000000;
+  border-width: 0 5px 5px;
+}
+
+.popover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1010;
+  display: none;
+  max-width: 276px;
+  padding: 1px;
+  text-align: left;
+  white-space: normal;
+  background-color: #ffffff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+     -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding;
+          background-clip: padding-box;
+}
+
+.popover.top {
+  margin-top: -10px;
+}
+
+.popover.right {
+  margin-left: 10px;
+}
+
+.popover.bottom {
+  margin-top: 10px;
+}
+
+.popover.left {
+  margin-left: -10px;
+}
+
+.popover-title {
+  padding: 8px 14px;
+  margin: 0;
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 18px;
+  background-color: #f7f7f7;
+  border-bottom: 1px solid #ebebeb;
+  -webkit-border-radius: 5px 5px 0 0;
+     -moz-border-radius: 5px 5px 0 0;
+          border-radius: 5px 5px 0 0;
+}
+
+.popover-title:empty {
+  display: none;
+}
+
+.popover-content {
+  padding: 9px 14px;
+}
+
+.popover .arrow,
+.popover .arrow:after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.popover .arrow {
+  border-width: 11px;
+}
+
+.popover .arrow:after {
+  border-width: 10px;
+  content: "";
+}
+
+.popover.top .arrow {
+  bottom: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-color: #999;
+  border-top-color: rgba(0, 0, 0, 0.25);
+  border-bottom-width: 0;
+}
+
+.popover.top .arrow:after {
+  bottom: 1px;
+  margin-left: -10px;
+  border-top-color: #ffffff;
+  border-bottom-width: 0;
+}
+
+.popover.right .arrow {
+  top: 50%;
+  left: -11px;
+  margin-top: -11px;
+  border-right-color: #999;
+  border-right-color: rgba(0, 0, 0, 0.25);
+  border-left-width: 0;
+}
+
+.popover.right .arrow:after {
+  bottom: -10px;
+  left: 1px;
+  border-right-color: #ffffff;
+  border-left-width: 0;
+}
+
+.popover.bottom .arrow {
+  top: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-bottom-color: #999;
+  border-bottom-color: rgba(0, 0, 0, 0.25);
+  border-top-width: 0;
+}
+
+.popover.bottom .arrow:after {
+  top: 1px;
+  margin-left: -10px;
+  border-bottom-color: #ffffff;
+  border-top-width: 0;
+}
+
+.popover.left .arrow {
+  top: 50%;
+  right: -11px;
+  margin-top: -11px;
+  border-left-color: #999;
+  border-left-color: rgba(0, 0, 0, 0.25);
+  border-right-width: 0;
+}
+
+.popover.left .arrow:after {
+  right: 1px;
+  bottom: -10px;
+  border-left-color: #ffffff;
+  border-right-width: 0;
+}
+
+.thumbnails {
+  margin-left: -20px;
+  list-style: none;
+  *zoom: 1;
+}
+
+.thumbnails:before,
+.thumbnails:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.thumbnails:after {
+  clear: both;
+}
+
+.row-fluid .thumbnails {
+  margin-left: 0;
+}
+
+.thumbnails > li {
+  float: left;
+  margin-bottom: 20px;
+  margin-left: 20px;
+}
+
+.thumbnail {
+  display: block;
+  padding: 4px;
+  line-height: 20px;
+  border: 1px solid #ddd;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+     -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+  -webkit-transition: all 0.2s ease-in-out;
+     -moz-transition: all 0.2s ease-in-out;
+       -o-transition: all 0.2s ease-in-out;
+          transition: all 0.2s ease-in-out;
+}
+
+a.thumbnail:hover,
+a.thumbnail:focus {
+  border-color: #0088cc;
+  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+     -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+          box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+}
+
+.thumbnail > img {
+  display: block;
+  max-width: 100%;
+  margin-right: auto;
+  margin-left: auto;
+}
+
+.thumbnail .caption {
+  padding: 9px;
+  color: #555555;
+}
+
+.media,
+.media-body {
+  overflow: hidden;
+  *overflow: visible;
+  zoom: 1;
+}
+
+.media,
+.media .media {
+  margin-top: 15px;
+}
+
+.media:first-child {
+  margin-top: 0;
+}
+
+.media-object {
+  display: block;
+}
+
+.media-heading {
+  margin: 0 0 5px;
+}
+
+.media > .pull-left {
+  margin-right: 10px;
+}
+
+.media > .pull-right {
+  margin-left: 10px;
+}
+
+.media-list {
+  margin-left: 0;
+  list-style: none;
+}
+
+.label,
+.badge {
+  display: inline-block;
+  padding: 2px 4px;
+  font-size: 11.844px;
+  font-weight: bold;
+  line-height: 14px;
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  white-space: nowrap;
+  vertical-align: baseline;
+  background-color: #999999;
+}
+
+.label {
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.badge {
+  padding-right: 9px;
+  padding-left: 9px;
+  -webkit-border-radius: 9px;
+     -moz-border-radius: 9px;
+          border-radius: 9px;
+}
+
+.label:empty,
+.badge:empty {
+  display: none;
+}
+
+a.label:hover,
+a.label:focus,
+a.badge:hover,
+a.badge:focus {
+  color: #ffffff;
+  text-decoration: none;
+  cursor: pointer;
+}
+
+.label-important,
+.badge-important {
+  background-color: #b94a48;
+}
+
+.label-important[href],
+.badge-important[href] {
+  background-color: #953b39;
+}
+
+.label-warning,
+.badge-warning {
+  background-color: #f89406;
+}
+
+.label-warning[href],
+.badge-warning[href] {
+  background-color: #c67605;
+}
+
+.label-success,
+.badge-success {
+  background-color: #468847;
+}
+
+.label-success[href],
+.badge-success[href] {
+  background-color: #356635;
+}
+
+.label-info,
+.badge-info {
+  background-color: #3a87ad;
+}
+
+.label-info[href],
+.badge-info[href] {
+  background-color: #2d6987;
+}
+
+.label-inverse,
+.badge-inverse {
+  background-color: #333333;
+}
+
+.label-inverse[href],
+.badge-inverse[href] {
+  background-color: #1a1a1a;
+}
+
+.btn .label,
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+
+.btn-mini .label,
+.btn-mini .badge {
+  top: 0;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+
+@-moz-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+
+@-ms-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+
+@-o-keyframes progress-bar-stripes {
+  from {
+    background-position: 0 0;
+  }
+  to {
+    background-position: 40px 0;
+  }
+}
+
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+
+.progress {
+  height: 20px;
+  margin-bottom: 20px;
+  overflow: hidden;
+  background-color: #f7f7f7;
+  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
+  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
+  background-repeat: repeat-x;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+}
+
+.progress .bar {
+  float: left;
+  width: 0;
+  height: 100%;
+  font-size: 12px;
+  color: #ffffff;
+  text-align: center;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #0e90d2;
+  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
+  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
+  background-image: -o-linear-gradient(top, #149bdf, #0480be);
+  background-image: linear-gradient(to bottom, #149bdf, #0480be);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+     -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+  -webkit-transition: width 0.6s ease;
+     -moz-transition: width 0.6s ease;
+       -o-transition: width 0.6s ease;
+          transition: width 0.6s ease;
+}
+
+.progress .bar + .bar {
+  -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+     -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+          box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+}
+
+.progress-striped .bar {
+  background-color: #149bdf;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  -webkit-background-size: 40px 40px;
+     -moz-background-size: 40px 40px;
+       -o-background-size: 40px 40px;
+          background-size: 40px 40px;
+}
+
+.progress.active .bar {
+  -webkit-animation: progress-bar-stripes 2s linear infinite;
+     -moz-animation: progress-bar-stripes 2s linear infinite;
+      -ms-animation: progress-bar-stripes 2s linear infinite;
+       -o-animation: progress-bar-stripes 2s linear infinite;
+          animation: progress-bar-stripes 2s linear infinite;
+}
+
+.progress-danger .bar,
+.progress .bar-danger {
+  background-color: #dd514c;
+  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
+  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);
+}
+
+.progress-danger.progress-striped .bar,
+.progress-striped .bar-danger {
+  background-color: #ee5f5b;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-success .bar,
+.progress .bar-success {
+  background-color: #5eb95e;
+  background-image: -moz-linear-gradient(top, #62c462, #57a957);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
+  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+  background-image: -o-linear-gradient(top, #62c462, #57a957);
+  background-image: linear-gradient(to bottom, #62c462, #57a957);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);
+}
+
+.progress-success.progress-striped .bar,
+.progress-striped .bar-success {
+  background-color: #62c462;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-info .bar,
+.progress .bar-info {
+  background-color: #4bb1cf;
+  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
+  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);
+}
+
+.progress-info.progress-striped .bar,
+.progress-striped .bar-info {
+  background-color: #5bc0de;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-warning .bar,
+.progress .bar-warning {
+  background-color: #faa732;
+  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+  background-image: -o-linear-gradient(top, #fbb450, #f89406);
+  background-image: linear-gradient(to bottom, #fbb450, #f89406);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
+}
+
+.progress-warning.progress-striped .bar,
+.progress-striped .bar-warning {
+  background-color: #fbb450;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.accordion {
+  margin-bottom: 20px;
+}
+
+.accordion-group {
+  margin-bottom: 2px;
+  border: 1px solid #e5e5e5;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+.accordion-heading {
+  border-bottom: 0;
+}
+
+.accordion-heading .accordion-toggle {
+  display: block;
+  padding: 8px 15px;
+}
+
+.accordion-toggle {
+  cursor: pointer;
+}
+
+.accordion-inner {
+  padding: 9px 15px;
+  border-top: 1px solid #e5e5e5;
+}
+
+.carousel {
+  position: relative;
+  margin-bottom: 20px;
+  line-height: 1;
+}
+
+.carousel-inner {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+}
+
+.carousel-inner > .item {
+  position: relative;
+  display: none;
+  -webkit-transition: 0.6s ease-in-out left;
+     -moz-transition: 0.6s ease-in-out left;
+       -o-transition: 0.6s ease-in-out left;
+          transition: 0.6s ease-in-out left;
+}
+
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+  display: block;
+  line-height: 1;
+}
+
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+  display: block;
+}
+
+.carousel-inner > .active {
+  left: 0;
+}
+
+.carousel-inner > .next,
+.carousel-inner > .prev {
+  position: absolute;
+  top: 0;
+  width: 100%;
+}
+
+.carousel-inner > .next {
+  left: 100%;
+}
+
+.carousel-inner > .prev {
+  left: -100%;
+}
+
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+  left: 0;
+}
+
+.carousel-inner > .active.left {
+  left: -100%;
+}
+
+.carousel-inner > .active.right {
+  left: 100%;
+}
+
+.carousel-control {
+  position: absolute;
+  top: 40%;
+  left: 15px;
+  width: 40px;
+  height: 40px;
+  margin-top: -20px;
+  font-size: 60px;
+  font-weight: 100;
+  line-height: 30px;
+  color: #ffffff;
+  text-align: center;
+  background: #222222;
+  border: 3px solid #ffffff;
+  -webkit-border-radius: 23px;
+     -moz-border-radius: 23px;
+          border-radius: 23px;
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+}
+
+.carousel-control.right {
+  right: 15px;
+  left: auto;
+}
+
+.carousel-control:hover,
+.carousel-control:focus {
+  color: #ffffff;
+  text-decoration: none;
+  opacity: 0.9;
+  filter: alpha(opacity=90);
+}
+
+.carousel-indicators {
+  position: absolute;
+  top: 15px;
+  right: 15px;
+  z-index: 5;
+  margin: 0;
+  list-style: none;
+}
+
+.carousel-indicators li {
+  display: block;
+  float: left;
+  width: 10px;
+  height: 10px;
+  margin-left: 5px;
+  text-indent: -999px;
+  background-color: #ccc;
+  background-color: rgba(255, 255, 255, 0.25);
+  border-radius: 5px;
+}
+
+.carousel-indicators .active {
+  background-color: #fff;
+}
+
+.carousel-caption {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  padding: 15px;
+  background: #333333;
+  background: rgba(0, 0, 0, 0.75);
+}
+
+.carousel-caption h4,
+.carousel-caption p {
+  line-height: 20px;
+  color: #ffffff;
+}
+
+.carousel-caption h4 {
+  margin: 0 0 5px;
+}
+
+.carousel-caption p {
+  margin-bottom: 0;
+}
+
+.hero-unit {
+  padding: 60px;
+  margin-bottom: 30px;
+  font-size: 18px;
+  font-weight: 200;
+  line-height: 30px;
+  color: inherit;
+  background-color: #eeeeee;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.hero-unit h1 {
+  margin-bottom: 0;
+  font-size: 60px;
+  line-height: 1;
+  letter-spacing: -1px;
+  color: inherit;
+}
+
+.hero-unit li {
+  line-height: 30px;
+}
+
+.pull-right {
+  float: right;
+}
+
+.pull-left {
+  float: left;
+}
+
+.hide {
+  display: none;
+}
+
+.show {
+  display: block;
+}
+
+.invisible {
+  visibility: hidden;
+}
+
+.affix {
+  position: fixed;
+}
diff --git a/juddi-gui/web/css/bootstrap.min.css b/juddi-gui/web/css/bootstrap.min.css
new file mode 100644
index 0000000..fd5ed73
--- /dev/null
+++ b/juddi-gui/web/css/bootstrap.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap v2.3.0
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/juddi-gui/web/css/font-awesome-ie7.min.css b/juddi-gui/web/css/font-awesome-ie7.min.css
new file mode 100644
index 0000000..ae30160
--- /dev/null
+++ b/juddi-gui/web/css/font-awesome-ie7.min.css
@@ -0,0 +1,22 @@
+/*!
+ *  Font Awesome 3.0.2
+ *  the iconic font designed for use with Twitter Bootstrap
+ *  -------------------------------------------------------
+ *  The full suite of pictographic icons, examples, and documentation
+ *  can be found at: http://fortawesome.github.com/Font-Awesome/
+ *
+ *  License
+ *  -------------------------------------------------------
+ *  - The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL
+ *  - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License -
+ *    http://opensource.org/licenses/mit-license.html
+ *  - The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/
+ *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
+ *    "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome"
+
+ *  Contact
+ *  -------------------------------------------------------
+ *  Email: dave@davegandy.com
+ *  Twitter: http://twitter.com/fortaweso_me
+ *  Work: Lead Product Designer @ http://kyruus.com
+ */.icon-large{font-size:1.3333333333333333em;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;vertical-align:middle}.nav [class^="icon-"],.nav [class*=" icon-"]{vertical-align:inherit;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px}.nav [class^="icon-"].icon-large,.nav [class*=" icon-"].icon-large{vertical-align:-25%}.nav-pills [class^="icon-"].icon-large,.nav-tabs [class^="icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large{line-height:.75em;margin-top:-7px;padding-top:5px;margin-bottom:-5px;padding-bottom:4px}.btn [class^="icon-"].pull-left,.btn [class*=" icon-"].pull-left,.btn [class^="icon-"].pull-right,.btn [class*=" icon-"].pull-right{vertical-align:inherit}.btn [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large{margin-top:-0.5em}a [class^="icon-"],a [class*=" icon-"]{cursor:pointer}ul.icons{text-indent:-1.5em;margin-left:3em}.icon-glass{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf000;')}.icon-music{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf001;')}.icon-search{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf002;')}.icon-envelope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf003;')}.icon-heart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf004;')}.icon-star{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf005;')}.icon-star-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf006;')}.icon-user{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf007;')}.icon-film{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf008;')}.icon-th-large{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf009;')}.icon-th{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf00a;')}.icon-th-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf00b;')}.icon-ok{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf00c;')}.icon-remove{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf00d;')}.icon-zoom-in{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf00e;')}.icon-zoom-out{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf010;')}.icon-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf011;')}.icon-signal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf012;')}.icon-cog{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf013;')}.icon-trash{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf014;')}.icon-home{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf015;')}.icon-file{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf016;')}.icon-time{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf017;')}.icon-road{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf018;')}.icon-download-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf019;')}.icon-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf01a;')}.icon-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf01b;')}.icon-inbox{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf01c;')}.icon-play-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf01d;')}.icon-repeat{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf01e;')}.icon-refresh{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf021;')}.icon-list-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf022;')}.icon-lock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf023;')}.icon-flag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf024;')}.icon-headphones{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf025;')}.icon-volume-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf026;')}.icon-volume-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf027;')}.icon-volume-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf028;')}.icon-qrcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf029;')}.icon-barcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf02a;')}.icon-tag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf02b;')}.icon-tags{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf02c;')}.icon-book{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf02d;')}.icon-bookmark{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf02e;')}.icon-print{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf02f;')}.icon-camera{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf030;')}.icon-font{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf031;')}.icon-bold{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf032;')}.icon-italic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf033;')}.icon-text-height{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf034;')}.icon-text-width{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf035;')}.icon-align-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf036;')}.icon-align-center{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf037;')}.icon-align-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf038;')}.icon-align-justify{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf039;')}.icon-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf03a;')}.icon-indent-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf03b;')}.icon-indent-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf03c;')}.icon-facetime-video{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf03d;')}.icon-picture{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf03e;')}.icon-pencil{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf040;')}.icon-map-marker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf041;')}.icon-adjust{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf042;')}.icon-tint{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf043;')}.icon-edit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf044;')}.icon-share{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf045;')}.icon-check{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf046;')}.icon-move{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf047;')}.icon-step-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf048;')}.icon-fast-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf049;')}.icon-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf04a;')}.icon-play{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf04b;')}.icon-pause{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf04c;')}.icon-stop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf04d;')}.icon-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf04e;')}.icon-fast-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf050;')}.icon-step-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf051;')}.icon-eject{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf052;')}.icon-chevron-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf053;')}.icon-chevron-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf054;')}.icon-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf055;')}.icon-minus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf056;')}.icon-remove-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf057;')}.icon-ok-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf058;')}.icon-question-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf059;')}.icon-info-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf05a;')}.icon-screenshot{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf05b;')}.icon-remove-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf05c;')}.icon-ok-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf05d;')}.icon-ban-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf05e;')}.icon-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf060;')}.icon-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf061;')}.icon-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf062;')}.icon-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf063;')}.icon-share-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf064;')}.icon-resize-full{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf065;')}.icon-resize-small{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf066;')}.icon-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf067;')}.icon-minus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf068;')}.icon-asterisk{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf069;')}.icon-exclamation-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf06a;')}.icon-gift{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf06b;')}.icon-leaf{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf06c;')}.icon-fire{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf06d;')}.icon-eye-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf06e;')}.icon-eye-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf070;')}.icon-warning-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf071;')}.icon-plane{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf072;')}.icon-calendar{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf073;')}.icon-random{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf074;')}.icon-comment{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf075;')}.icon-magnet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf076;')}.icon-chevron-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf077;')}.icon-chevron-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf078;')}.icon-retweet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf079;')}.icon-shopping-cart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf07a;')}.icon-folder-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf07b;')}.icon-folder-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf07c;')}.icon-resize-vertical{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf07d;')}.icon-resize-horizontal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf07e;')}.icon-bar-chart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf080;')}.icon-twitter-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf081;')}.icon-facebook-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf082;')}.icon-camera-retro{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf083;')}.icon-key{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf084;')}.icon-cogs{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf085;')}.icon-comments{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf086;')}.icon-thumbs-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf087;')}.icon-thumbs-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf088;')}.icon-star-half{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf089;')}.icon-heart-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf08a;')}.icon-signout{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf08b;')}.icon-linkedin-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf08c;')}.icon-pushpin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf08d;')}.icon-external-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf08e;')}.icon-signin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf090;')}.icon-trophy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf091;')}.icon-github-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf092;')}.icon-upload-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf093;')}.icon-lemon{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf094;')}.icon-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf095;')}.icon-check-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf096;')}.icon-bookmark-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf097;')}.icon-phone-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf098;')}.icon-twitter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf099;')}.icon-facebook{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf09a;')}.icon-github{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf09b;')}.icon-unlock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf09c;')}.icon-credit-card{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf09d;')}.icon-rss{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf09e;')}.icon-hdd{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a0;')}.icon-bullhorn{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a1;')}.icon-bell{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a2;')}.icon-certificate{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a3;')}.icon-hand-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a4;')}.icon-hand-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a5;')}.icon-hand-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a6;')}.icon-hand-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a7;')}.icon-circle-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a8;')}.icon-circle-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0a9;')}.icon-circle-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0aa;')}.icon-circle-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ab;')}.icon-globe{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ac;')}.icon-wrench{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ad;')}.icon-tasks{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ae;')}.icon-filter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0b0;')}.icon-briefcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0b1;')}.icon-fullscreen{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0b2;')}.icon-group{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c0;')}.icon-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c1;')}.icon-cloud{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c2;')}.icon-beaker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c3;')}.icon-cut{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c4;')}.icon-copy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c5;')}.icon-paper-clip{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c6;')}.icon-save{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c7;')}.icon-sign-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c8;')}.icon-reorder{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0c9;')}.icon-list-ul{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ca;')}.icon-list-ol{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0cb;')}.icon-strikethrough{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0cc;')}.icon-underline{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0cd;')}.icon-table{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ce;')}.icon-magic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d0;')}.icon-truck{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d1;')}.icon-pinterest{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d2;')}.icon-pinterest-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d3;')}.icon-google-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d4;')}.icon-google-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d5;')}.icon-money{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d6;')}.icon-caret-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d7;')}.icon-caret-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d8;')}.icon-caret-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0d9;')}.icon-caret-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0da;')}.icon-columns{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0db;')}.icon-sort{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0dc;')}.icon-sort-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0dd;')}.icon-sort-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0de;')}.icon-envelope-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e0;')}.icon-linkedin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e1;')}.icon-undo{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e2;')}.icon-legal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e3;')}.icon-dashboard{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e4;')}.icon-comment-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e5;')}.icon-comments-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e6;')}.icon-bolt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e7;')}.icon-sitemap{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e8;')}.icon-umbrella{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0e9;')}.icon-paste{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ea;')}.icon-lightbulb{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0eb;')}.icon-exchange{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ec;')}.icon-cloud-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ed;')}.icon-cloud-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0ee;')}.icon-user-md{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f0;')}.icon-stethoscope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f1;')}.icon-suitcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f2;')}.icon-bell-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f3;')}.icon-coffee{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f4;')}.icon-food{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f5;')}.icon-file-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f6;')}.icon-building{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f7;')}.icon-hospital{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f8;')}.icon-ambulance{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0f9;')}.icon-medkit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0fa;')}.icon-fighter-jet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0fb;')}.icon-beer{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0fc;')}.icon-h-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0fd;')}.icon-plus-sign-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf0fe;')}.icon-double-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf100;')}.icon-double-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf101;')}.icon-double-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf102;')}.icon-double-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf103;')}.icon-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf104;')}.icon-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf105;')}.icon-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf106;')}.icon-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf107;')}.icon-desktop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf108;')}.icon-laptop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf109;')}.icon-tablet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf10a;')}.icon-mobile-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf10b;')}.icon-circle-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf10c;')}.icon-quote-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf10d;')}.icon-quote-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf10e;')}.icon-spinner{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf110;')}.icon-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf111;')}.icon-reply{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf112;')}.icon-github-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf113;')}.icon-folder-close-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf114;')}.icon-folder-open-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '&#xf115;')}
\ No newline at end of file
diff --git a/juddi-gui/web/css/font-awesome.css b/juddi-gui/web/css/font-awesome.css
new file mode 100644
index 0000000..8875098
--- /dev/null
+++ b/juddi-gui/web/css/font-awesome.css
@@ -0,0 +1,540 @@
+/*!
+ *  Font Awesome 3.0.2
+ *  the iconic font designed for use with Twitter Bootstrap
+ *  -------------------------------------------------------
+ *  The full suite of pictographic icons, examples, and documentation
+ *  can be found at: http://fortawesome.github.com/Font-Awesome/
+ *
+ *  License
+ *  -------------------------------------------------------
+ *  - The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL
+ *  - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License -
+ *    http://opensource.org/licenses/mit-license.html
+ *  - The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/
+ *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
+ *    "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome"
+
+ *  Contact
+ *  -------------------------------------------------------
+ *  Email: dave@davegandy.com
+ *  Twitter: http://twitter.com/fortaweso_me
+ *  Work: Lead Product Designer @ http://kyruus.com
+ */
+@font-face {
+  font-family: 'FontAwesome';
+  src: url('../font/fontawesome-webfont.eot?v=3.0.1');
+  src: url('../font/fontawesome-webfont.eot?#iefix&v=3.0.1') format('embedded-opentype'),
+    url('../font/fontawesome-webfont.woff?v=3.0.1') format('woff'),
+    url('../font/fontawesome-webfont.ttf?v=3.0.1') format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+/*  Font Awesome styles
+    ------------------------------------------------------- */
+[class^="icon-"],
+[class*=" icon-"] {
+  font-family: FontAwesome;
+  font-weight: normal;
+  font-style: normal;
+  text-decoration: inherit;
+  -webkit-font-smoothing: antialiased;
+
+  /* sprites.less reset */
+  display: inline;
+  width: auto;
+  height: auto;
+  line-height: normal;
+  vertical-align: baseline;
+  background-image: none;
+  background-position: 0% 0%;
+  background-repeat: repeat;
+  margin-top: 0;
+}
+/* more sprites.less reset */
+.icon-white,
+.nav-pills > .active > a > [class^="icon-"],
+.nav-pills > .active > a > [class*=" icon-"],
+.nav-list > .active > a > [class^="icon-"],
+.nav-list > .active > a > [class*=" icon-"],
+.navbar-inverse .nav > .active > a > [class^="icon-"],
+.navbar-inverse .nav > .active > a > [class*=" icon-"],
+.dropdown-menu > li > a:hover > [class^="icon-"],
+.dropdown-menu > li > a:hover > [class*=" icon-"],
+.dropdown-menu > .active > a > [class^="icon-"],
+.dropdown-menu > .active > a > [class*=" icon-"],
+.dropdown-submenu:hover > a > [class^="icon-"],
+.dropdown-submenu:hover > a > [class*=" icon-"] {
+  background-image: none;
+}
+[class^="icon-"]:before,
+[class*=" icon-"]:before {
+  text-decoration: inherit;
+  display: inline-block;
+  speak: none;
+}
+/* makes sure icons active on rollover in links */
+a [class^="icon-"],
+a [class*=" icon-"] {
+  display: inline-block;
+}
+/* makes the font 33% larger relative to the icon container */
+.icon-large:before {
+  vertical-align: -10%;
+  font-size: 1.3333333333333333em;
+}
+.btn [class^="icon-"],
+.nav [class^="icon-"],
+.btn [class*=" icon-"],
+.nav [class*=" icon-"] {
+  display: inline;
+  /* keeps button heights with and without icons the same */
+
+}
+.btn [class^="icon-"].icon-large,
+.nav [class^="icon-"].icon-large,
+.btn [class*=" icon-"].icon-large,
+.nav [class*=" icon-"].icon-large {
+  line-height: .9em;
+}
+.btn [class^="icon-"].icon-spin,
+.nav [class^="icon-"].icon-spin,
+.btn [class*=" icon-"].icon-spin,
+.nav [class*=" icon-"].icon-spin {
+  display: inline-block;
+}
+.nav-tabs [class^="icon-"],
+.nav-pills [class^="icon-"],
+.nav-tabs [class*=" icon-"],
+.nav-pills [class*=" icon-"] {
+  /* keeps button heights with and without icons the same */
+
+}
+.nav-tabs [class^="icon-"],
+.nav-pills [class^="icon-"],
+.nav-tabs [class*=" icon-"],
+.nav-pills [class*=" icon-"],
+.nav-tabs [class^="icon-"].icon-large,
+.nav-pills [class^="icon-"].icon-large,
+.nav-tabs [class*=" icon-"].icon-large,
+.nav-pills [class*=" icon-"].icon-large {
+  line-height: .9em;
+}
+li [class^="icon-"],
+.nav li [class^="icon-"],
+li [class*=" icon-"],
+.nav li [class*=" icon-"] {
+  display: inline-block;
+  width: 1.25em;
+  text-align: center;
+}
+li [class^="icon-"].icon-large,
+.nav li [class^="icon-"].icon-large,
+li [class*=" icon-"].icon-large,
+.nav li [class*=" icon-"].icon-large {
+  /* increased font size for icon-large */
+
+  width: 1.5625em;
+}
+ul.icons {
+  list-style-type: none;
+  text-indent: -0.75em;
+}
+ul.icons li [class^="icon-"],
+ul.icons li [class*=" icon-"] {
+  width: .75em;
+}
+.icon-muted {
+  color: #eeeeee;
+}
+.icon-border {
+  border: solid 1px #eeeeee;
+  padding: .2em .25em .15em;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+}
+.icon-2x {
+  font-size: 2em;
+}
+.icon-2x.icon-border {
+  border-width: 2px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.icon-3x {
+  font-size: 3em;
+}
+.icon-3x.icon-border {
+  border-width: 3px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+.icon-4x {
+  font-size: 4em;
+}
+.icon-4x.icon-border {
+  border-width: 4px;
+  -webkit-border-radius: 6px;
+  -moz-border-radius: 6px;
+  border-radius: 6px;
+}
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+[class^="icon-"].pull-left,
+[class*=" icon-"].pull-left {
+  margin-right: .3em;
+}
+[class^="icon-"].pull-right,
+[class*=" icon-"].pull-right {
+  margin-left: .3em;
+}
+.btn [class^="icon-"].pull-left.icon-2x,
+.btn [class*=" icon-"].pull-left.icon-2x,
+.btn [class^="icon-"].pull-right.icon-2x,
+.btn [class*=" icon-"].pull-right.icon-2x {
+  margin-top: .18em;
+}
+.btn [class^="icon-"].icon-spin.icon-large,
+.btn [class*=" icon-"].icon-spin.icon-large {
+  line-height: .8em;
+}
+.btn.btn-small [class^="icon-"].pull-left.icon-2x,
+.btn.btn-small [class*=" icon-"].pull-left.icon-2x,
+.btn.btn-small [class^="icon-"].pull-right.icon-2x,
+.btn.btn-small [class*=" icon-"].pull-right.icon-2x {
+  margin-top: .25em;
+}
+.btn.btn-large [class^="icon-"],
+.btn.btn-large [class*=" icon-"] {
+  margin-top: 0;
+}
+.btn.btn-large [class^="icon-"].pull-left.icon-2x,
+.btn.btn-large [class*=" icon-"].pull-left.icon-2x,
+.btn.btn-large [class^="icon-"].pull-right.icon-2x,
+.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
+  margin-top: .05em;
+}
+.btn.btn-large [class^="icon-"].pull-left.icon-2x,
+.btn.btn-large [class*=" icon-"].pull-left.icon-2x {
+  margin-right: .2em;
+}
+.btn.btn-large [class^="icon-"].pull-right.icon-2x,
+.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
+  margin-left: .2em;
+}
+.icon-spin {
+  display: inline-block;
+  -moz-animation: spin 2s infinite linear;
+  -o-animation: spin 2s infinite linear;
+  -webkit-animation: spin 2s infinite linear;
+  animation: spin 2s infinite linear;
+}
+@-moz-keyframes spin {
+  0% { -moz-transform: rotate(0deg); }
+  100% { -moz-transform: rotate(359deg); }
+}
+@-webkit-keyframes spin {
+  0% { -webkit-transform: rotate(0deg); }
+  100% { -webkit-transform: rotate(359deg); }
+}
+@-o-keyframes spin {
+  0% { -o-transform: rotate(0deg); }
+  100% { -o-transform: rotate(359deg); }
+}
+@-ms-keyframes spin {
+  0% { -ms-transform: rotate(0deg); }
+  100% { -ms-transform: rotate(359deg); }
+}
+@keyframes spin {
+  0% { transform: rotate(0deg); }
+  100% { transform: rotate(359deg); }
+}
+@-moz-document url-prefix() {
+  .icon-spin {
+    height: .9em;
+  }
+  .btn .icon-spin {
+    height: auto;
+  }
+  .icon-spin.icon-large {
+    height: 1.25em;
+  }
+  .btn .icon-spin.icon-large {
+    height: .75em;
+  }
+}
+/*  Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+    readers do not read off random characters that represent icons */
+.icon-glass:before                { content: "\f000"; }
+.icon-music:before                { content: "\f001"; }
+.icon-search:before               { content: "\f002"; }
+.icon-envelope:before             { content: "\f003"; }
+.icon-heart:before                { content: "\f004"; }
+.icon-star:before                 { content: "\f005"; }
+.icon-star-empty:before           { content: "\f006"; }
+.icon-user:before                 { content: "\f007"; }
+.icon-film:before                 { content: "\f008"; }
+.icon-th-large:before             { content: "\f009"; }
+.icon-th:before                   { content: "\f00a"; }
+.icon-th-list:before              { content: "\f00b"; }
+.icon-ok:before                   { content: "\f00c"; }
+.icon-remove:before               { content: "\f00d"; }
+.icon-zoom-in:before              { content: "\f00e"; }
+
+.icon-zoom-out:before             { content: "\f010"; }
+.icon-off:before                  { content: "\f011"; }
+.icon-signal:before               { content: "\f012"; }
+.icon-cog:before                  { content: "\f013"; }
+.icon-trash:before                { content: "\f014"; }
+.icon-home:before                 { content: "\f015"; }
+.icon-file:before                 { content: "\f016"; }
+.icon-time:before                 { content: "\f017"; }
+.icon-road:before                 { content: "\f018"; }
+.icon-download-alt:before         { content: "\f019"; }
+.icon-download:before             { content: "\f01a"; }
+.icon-upload:before               { content: "\f01b"; }
+.icon-inbox:before                { content: "\f01c"; }
+.icon-play-circle:before          { content: "\f01d"; }
+.icon-repeat:before               { content: "\f01e"; }
+
+/* \f020 doesn't work in Safari. all shifted one down */
+.icon-refresh:before              { content: "\f021"; }
+.icon-list-alt:before             { content: "\f022"; }
+.icon-lock:before                 { content: "\f023"; }
+.icon-flag:before                 { content: "\f024"; }
+.icon-headphones:before           { content: "\f025"; }
+.icon-volume-off:before           { content: "\f026"; }
+.icon-volume-down:before          { content: "\f027"; }
+.icon-volume-up:before            { content: "\f028"; }
+.icon-qrcode:before               { content: "\f029"; }
+.icon-barcode:before              { content: "\f02a"; }
+.icon-tag:before                  { content: "\f02b"; }
+.icon-tags:before                 { content: "\f02c"; }
+.icon-book:before                 { content: "\f02d"; }
+.icon-bookmark:before             { content: "\f02e"; }
+.icon-print:before                { content: "\f02f"; }
+
+.icon-camera:before               { content: "\f030"; }
+.icon-font:before                 { content: "\f031"; }
+.icon-bold:before                 { content: "\f032"; }
+.icon-italic:before               { content: "\f033"; }
+.icon-text-height:before          { content: "\f034"; }
+.icon-text-width:before           { content: "\f035"; }
+.icon-align-left:before           { content: "\f036"; }
+.icon-align-center:before         { content: "\f037"; }
+.icon-align-right:before          { content: "\f038"; }
+.icon-align-justify:before        { content: "\f039"; }
+.icon-list:before                 { content: "\f03a"; }
+.icon-indent-left:before          { content: "\f03b"; }
+.icon-indent-right:before         { content: "\f03c"; }
+.icon-facetime-video:before       { content: "\f03d"; }
+.icon-picture:before              { content: "\f03e"; }
+
+.icon-pencil:before               { content: "\f040"; }
+.icon-map-marker:before           { content: "\f041"; }
+.icon-adjust:before               { content: "\f042"; }
+.icon-tint:before                 { content: "\f043"; }
+.icon-edit:before                 { content: "\f044"; }
+.icon-share:before                { content: "\f045"; }
+.icon-check:before                { content: "\f046"; }
+.icon-move:before                 { content: "\f047"; }
+.icon-step-backward:before        { content: "\f048"; }
+.icon-fast-backward:before        { content: "\f049"; }
+.icon-backward:before             { content: "\f04a"; }
+.icon-play:before                 { content: "\f04b"; }
+.icon-pause:before                { content: "\f04c"; }
+.icon-stop:before                 { content: "\f04d"; }
+.icon-forward:before              { content: "\f04e"; }
+
+.icon-fast-forward:before         { content: "\f050"; }
+.icon-step-forward:before         { content: "\f051"; }
+.icon-eject:before                { content: "\f052"; }
+.icon-chevron-left:before         { content: "\f053"; }
+.icon-chevron-right:before        { content: "\f054"; }
+.icon-plus-sign:before            { content: "\f055"; }
+.icon-minus-sign:before           { content: "\f056"; }
+.icon-remove-sign:before          { content: "\f057"; }
+.icon-ok-sign:before              { content: "\f058"; }
+.icon-question-sign:before        { content: "\f059"; }
+.icon-info-sign:before            { content: "\f05a"; }
+.icon-screenshot:before           { content: "\f05b"; }
+.icon-remove-circle:before        { content: "\f05c"; }
+.icon-ok-circle:before            { content: "\f05d"; }
+.icon-ban-circle:before           { content: "\f05e"; }
+
+.icon-arrow-left:before           { content: "\f060"; }
+.icon-arrow-right:before          { content: "\f061"; }
+.icon-arrow-up:before             { content: "\f062"; }
+.icon-arrow-down:before           { content: "\f063"; }
+.icon-share-alt:before            { content: "\f064"; }
+.icon-resize-full:before          { content: "\f065"; }
+.icon-resize-small:before         { content: "\f066"; }
+.icon-plus:before                 { content: "\f067"; }
+.icon-minus:before                { content: "\f068"; }
+.icon-asterisk:before             { content: "\f069"; }
+.icon-exclamation-sign:before     { content: "\f06a"; }
+.icon-gift:before                 { content: "\f06b"; }
+.icon-leaf:before                 { content: "\f06c"; }
+.icon-fire:before                 { content: "\f06d"; }
+.icon-eye-open:before             { content: "\f06e"; }
+
+.icon-eye-close:before            { content: "\f070"; }
+.icon-warning-sign:before         { content: "\f071"; }
+.icon-plane:before                { content: "\f072"; }
+.icon-calendar:before             { content: "\f073"; }
+.icon-random:before               { content: "\f074"; }
+.icon-comment:before              { content: "\f075"; }
+.icon-magnet:before               { content: "\f076"; }
+.icon-chevron-up:before           { content: "\f077"; }
+.icon-chevron-down:before         { content: "\f078"; }
+.icon-retweet:before              { content: "\f079"; }
+.icon-shopping-cart:before        { content: "\f07a"; }
+.icon-folder-close:before         { content: "\f07b"; }
+.icon-folder-open:before          { content: "\f07c"; }
+.icon-resize-vertical:before      { content: "\f07d"; }
+.icon-resize-horizontal:before    { content: "\f07e"; }
+
+.icon-bar-chart:before            { content: "\f080"; }
+.icon-twitter-sign:before         { content: "\f081"; }
+.icon-facebook-sign:before        { content: "\f082"; }
+.icon-camera-retro:before         { content: "\f083"; }
+.icon-key:before                  { content: "\f084"; }
+.icon-cogs:before                 { content: "\f085"; }
+.icon-comments:before             { content: "\f086"; }
+.icon-thumbs-up:before            { content: "\f087"; }
+.icon-thumbs-down:before          { content: "\f088"; }
+.icon-star-half:before            { content: "\f089"; }
+.icon-heart-empty:before          { content: "\f08a"; }
+.icon-signout:before              { content: "\f08b"; }
+.icon-linkedin-sign:before        { content: "\f08c"; }
+.icon-pushpin:before              { content: "\f08d"; }
+.icon-external-link:before        { content: "\f08e"; }
+
+.icon-signin:before               { content: "\f090"; }
+.icon-trophy:before               { content: "\f091"; }
+.icon-github-sign:before          { content: "\f092"; }
+.icon-upload-alt:before           { content: "\f093"; }
+.icon-lemon:before                { content: "\f094"; }
+.icon-phone:before                { content: "\f095"; }
+.icon-check-empty:before          { content: "\f096"; }
+.icon-bookmark-empty:before       { content: "\f097"; }
+.icon-phone-sign:before           { content: "\f098"; }
+.icon-twitter:before              { content: "\f099"; }
+.icon-facebook:before             { content: "\f09a"; }
+.icon-github:before               { content: "\f09b"; }
+.icon-unlock:before               { content: "\f09c"; }
+.icon-credit-card:before          { content: "\f09d"; }
+.icon-rss:before                  { content: "\f09e"; }
+
+.icon-hdd:before                  { content: "\f0a0"; }
+.icon-bullhorn:before             { content: "\f0a1"; }
+.icon-bell:before                 { content: "\f0a2"; }
+.icon-certificate:before          { content: "\f0a3"; }
+.icon-hand-right:before           { content: "\f0a4"; }
+.icon-hand-left:before            { content: "\f0a5"; }
+.icon-hand-up:before              { content: "\f0a6"; }
+.icon-hand-down:before            { content: "\f0a7"; }
+.icon-circle-arrow-left:before    { content: "\f0a8"; }
+.icon-circle-arrow-right:before   { content: "\f0a9"; }
+.icon-circle-arrow-up:before      { content: "\f0aa"; }
+.icon-circle-arrow-down:before    { content: "\f0ab"; }
+.icon-globe:before                { content: "\f0ac"; }
+.icon-wrench:before               { content: "\f0ad"; }
+.icon-tasks:before                { content: "\f0ae"; }
+
+.icon-filter:before               { content: "\f0b0"; }
+.icon-briefcase:before            { content: "\f0b1"; }
+.icon-fullscreen:before           { content: "\f0b2"; }
+
+.icon-group:before                { content: "\f0c0"; }
+.icon-link:before                 { content: "\f0c1"; }
+.icon-cloud:before                { content: "\f0c2"; }
+.icon-beaker:before               { content: "\f0c3"; }
+.icon-cut:before                  { content: "\f0c4"; }
+.icon-copy:before                 { content: "\f0c5"; }
+.icon-paper-clip:before           { content: "\f0c6"; }
+.icon-save:before                 { content: "\f0c7"; }
+.icon-sign-blank:before           { content: "\f0c8"; }
+.icon-reorder:before              { content: "\f0c9"; }
+.icon-list-ul:before              { content: "\f0ca"; }
+.icon-list-ol:before              { content: "\f0cb"; }
+.icon-strikethrough:before        { content: "\f0cc"; }
+.icon-underline:before            { content: "\f0cd"; }
+.icon-table:before                { content: "\f0ce"; }
+
+.icon-magic:before                { content: "\f0d0"; }
+.icon-truck:before                { content: "\f0d1"; }
+.icon-pinterest:before            { content: "\f0d2"; }
+.icon-pinterest-sign:before       { content: "\f0d3"; }
+.icon-google-plus-sign:before     { content: "\f0d4"; }
+.icon-google-plus:before          { content: "\f0d5"; }
+.icon-money:before                { content: "\f0d6"; }
+.icon-caret-down:before           { content: "\f0d7"; }
+.icon-caret-up:before             { content: "\f0d8"; }
+.icon-caret-left:before           { content: "\f0d9"; }
+.icon-caret-right:before          { content: "\f0da"; }
+.icon-columns:before              { content: "\f0db"; }
+.icon-sort:before                 { content: "\f0dc"; }
+.icon-sort-down:before            { content: "\f0dd"; }
+.icon-sort-up:before              { content: "\f0de"; }
+
+.icon-envelope-alt:before         { content: "\f0e0"; }
+.icon-linkedin:before             { content: "\f0e1"; }
+.icon-undo:before                 { content: "\f0e2"; }
+.icon-legal:before                { content: "\f0e3"; }
+.icon-dashboard:before            { content: "\f0e4"; }
+.icon-comment-alt:before          { content: "\f0e5"; }
+.icon-comments-alt:before         { content: "\f0e6"; }
+.icon-bolt:before                 { content: "\f0e7"; }
+.icon-sitemap:before              { content: "\f0e8"; }
+.icon-umbrella:before             { content: "\f0e9"; }
+.icon-paste:before                { content: "\f0ea"; }
+.icon-lightbulb:before            { content: "\f0eb"; }
+.icon-exchange:before             { content: "\f0ec"; }
+.icon-cloud-download:before       { content: "\f0ed"; }
+.icon-cloud-upload:before         { content: "\f0ee"; }
+
+.icon-user-md:before              { content: "\f0f0"; }
+.icon-stethoscope:before          { content: "\f0f1"; }
+.icon-suitcase:before             { content: "\f0f2"; }
+.icon-bell-alt:before             { content: "\f0f3"; }
+.icon-coffee:before               { content: "\f0f4"; }
+.icon-food:before                 { content: "\f0f5"; }
+.icon-file-alt:before             { content: "\f0f6"; }
+.icon-building:before             { content: "\f0f7"; }
+.icon-hospital:before             { content: "\f0f8"; }
+.icon-ambulance:before            { content: "\f0f9"; }
+.icon-medkit:before               { content: "\f0fa"; }
+.icon-fighter-jet:before          { content: "\f0fb"; }
+.icon-beer:before                 { content: "\f0fc"; }
+.icon-h-sign:before               { content: "\f0fd"; }
+.icon-plus-sign-alt:before        { content: "\f0fe"; }
+
+.icon-double-angle-left:before    { content: "\f100"; }
+.icon-double-angle-right:before   { content: "\f101"; }
+.icon-double-angle-up:before      { content: "\f102"; }
+.icon-double-angle-down:before    { content: "\f103"; }
+.icon-angle-left:before           { content: "\f104"; }
+.icon-angle-right:before          { content: "\f105"; }
+.icon-angle-up:before             { content: "\f106"; }
+.icon-angle-down:before           { content: "\f107"; }
+.icon-desktop:before              { content: "\f108"; }
+.icon-laptop:before               { content: "\f109"; }
+.icon-tablet:before               { content: "\f10a"; }
+.icon-mobile-phone:before         { content: "\f10b"; }
+.icon-circle-blank:before         { content: "\f10c"; }
+.icon-quote-left:before           { content: "\f10d"; }
+.icon-quote-right:before          { content: "\f10e"; }
+
+.icon-spinner:before              { content: "\f110"; }
+.icon-circle:before               { content: "\f111"; }
+.icon-reply:before                { content: "\f112"; }
+.icon-github-alt:before           { content: "\f113"; }
+.icon-folder-close-alt:before     { content: "\f114"; }
+.icon-folder-open-alt:before      { content: "\f115"; }
diff --git a/juddi-gui/web/css/font-awesome.min.css b/juddi-gui/web/css/font-awesome.min.css
new file mode 100644
index 0000000..d4e45b3
--- /dev/null
+++ b/juddi-gui/web/css/font-awesome.min.css
@@ -0,0 +1,33 @@
+/*!
+ *  Font Awesome 3.0.2
+ *  the iconic font designed for use with Twitter Bootstrap
+ *  -------------------------------------------------------
+ *  The full suite of pictographic icons, examples, and documentation
+ *  can be found at: http://fortawesome.github.com/Font-Awesome/
+ *
+ *  License
+ *  -------------------------------------------------------
+ *  - The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL
+ *  - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License -
+ *    http://opensource.org/licenses/mit-license.html
+ *  - The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/
+ *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
+ *    "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome"
+
+ *  Contact
+ *  -------------------------------------------------------
+ *  Email: dave@davegandy.com
+ *  Twitter: http://twitter.com/fortaweso_me
+ *  Work: Lead Product Designer @ http://kyruus.com
+ */
+
+@font-face{
+  font-family:'FontAwesome';
+  src:url('../font/fontawesome-webfont.eot?v=3.0.1');
+  src:url('../font/fontawesome-webfont.eot?#iefix&v=3.0.1') format('embedded-opentype'),
+  url('../font/fontawesome-webfont.woff?v=3.0.1') format('woff'),
+  url('../font/fontawesome-webfont.ttf?v=3.0.1') format('truetype');
+  font-weight:normal;
+  font-style:normal }
+
+[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}a [class^="icon-"],a [class*=" icon-"]{display:inline-block}.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}.btn [class^="icon-"],.nav [class^="icon-"],.btn [class*=" icon-"],.nav [class*=" icon-"]{display:inline}.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em}.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block}.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em}li [class^="icon-"],.nav li [class^="icon-"],li [class*=" icon-"],.nav li [class*=" icon-"]{display:inline-block;width:1.25em;text-align:center}li [class^="icon-"].icon-large,.nav li [class^="icon-"].icon-large,li [class*=" icon-"].icon-large,.nav li [class*=" icon-"].icon-large{width:1.5625em}ul.icons{list-style-type:none;text-indent:-0.75em}ul.icons li [class^="icon-"],ul.icons li [class*=" icon-"]{width:.75em}.icon-muted{color:#eee}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em}.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em}.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em}.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em}.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}@-moz-document url-prefix(){.icon-spin{height:.9em}.btn .icon-spin{height:auto}.icon-spin.icon-large{height:1.25em}.btn .icon-spin.icon-large{height:.75em}}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope-alt:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}
\ No newline at end of file
diff --git a/juddi-gui/web/css/ui-lightness/images/animated-overlay.gif b/juddi-gui/web/css/ui-lightness/images/animated-overlay.gif
new file mode 100644
index 0000000..d441f75
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/animated-overlay.gif
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/juddi-gui/web/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644
index 0000000..a9ca2eb
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/juddi-gui/web/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644
index 0000000..f39235f
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/juddi-gui/web/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644
index 0000000..31efa6a
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/juddi-gui/web/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100644
index 0000000..7ae83ad
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/juddi-gui/web/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644
index 0000000..33c4824
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/juddi-gui/web/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000..e851092
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/juddi-gui/web/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100644
index 0000000..ec653fe
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/juddi-gui/web/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644
index 0000000..50fa3f7
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/juddi-gui/web/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644
index 0000000..a15c944
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-icons_222222_256x240.png b/juddi-gui/web/css/ui-lightness/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000..c1cb117
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/juddi-gui/web/css/ui-lightness/images/ui-icons_228ef1_256x240.png
new file mode 100644
index 0000000..3a0140c
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-icons_228ef1_256x240.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/juddi-gui/web/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
new file mode 100644
index 0000000..036ee07
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/juddi-gui/web/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
new file mode 100644
index 0000000..8b6c058
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/juddi-gui/web/css/ui-lightness/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000..4f624bb
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.1.custom.css b/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.1.custom.css
new file mode 100644
index 0000000..4903aeb
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.1.custom.css
@@ -0,0 +1,1128 @@
+/*! jQuery UI - v1.10.1 - 2013-03-02
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tooltip.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0);
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin-top: 2px;
+	padding: .5em .5em .5em .7em;
+	min-height: 0; /* support: IE7 */
+}
+.ui-accordion .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-noicons {
+	padding-left: .7em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+	position: absolute;
+	left: .5em;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+.ui-autocomplete {
+	position: absolute;
+	top: 0;
+	left: 0;
+	cursor: default;
+}
+.ui-button {
+	display: inline-block;
+	position: relative;
+	padding: 0;
+	line-height: normal;
+	margin-right: .1em;
+	cursor: pointer;
+	vertical-align: middle;
+	text-align: center;
+	overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+	text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+	width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+	width: 2.4em;
+}
+.ui-button-icons-only {
+	width: 3.4em;
+}
+button.ui-button-icons-only {
+	width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+	display: block;
+	line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+	padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+	padding: .4em;
+	text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+	padding-left: 2.1em;
+	padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+	padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+	position: absolute;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+	left: 50%;
+	margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+	left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+	right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+	margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+	margin-left: 0;
+	margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+	border: 0;
+	padding: 0;
+}
+.ui-datepicker {
+	width: 17em;
+	padding: .2em .2em 0;
+	display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8em;
+	text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month-year {
+	width: 100%;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 49%;
+}
+.ui-datepicker table {
+	width: 100%;
+	font-size: .9em;
+	border-collapse: collapse;
+	margin: 0 0 .4em;
+}
+.ui-datepicker th {
+	padding: .7em .3em;
+	text-align: center;
+	font-weight: bold;
+	border: 0;
+}
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: .2em;
+	text-align: right;
+	text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: .7em 0 0 0;
+	padding: 0 .2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: .5em .2em .4em;
+	cursor: pointer;
+	padding: .2em .6em .3em .6em;
+	width: auto;
+	overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+.ui-dialog {
+	position: absolute;
+	top: 0;
+	left: 0;
+	padding: .2em;
+	outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+	padding: .4em 1em;
+	position: relative;
+}
+.ui-dialog .ui-dialog-title {
+	float: left;
+	margin: .1em 0;
+	white-space: nowrap;
+	width: 90%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	position: absolute;
+	right: .3em;
+	top: 50%;
+	width: 21px;
+	margin: -10px 0 0 0;
+	padding: 1px;
+	height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+	position: relative;
+	border: 0;
+	padding: .5em 1em;
+	background: none;
+	overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+	text-align: left;
+	border-width: 1px 0 0 0;
+	background-image: none;
+	margin-top: .5em;
+	padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+	margin: .5em .4em .5em 0;
+	cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+	width: 12px;
+	height: 12px;
+	right: -5px;
+	bottom: -5px;
+	background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+.ui-menu {
+	list-style: none;
+	padding: 2px;
+	margin: 0;
+	display: block;
+	outline: none;
+}
+.ui-menu .ui-menu {
+	margin-top: -3px;
+	position: absolute;
+}
+.ui-menu .ui-menu-item {
+	margin: 0;
+	padding: 0;
+	width: 100%;
+}
+.ui-menu .ui-menu-divider {
+	margin: 5px -2px 5px -2px;
+	height: 0;
+	font-size: 0;
+	line-height: 0;
+	border-width: 1px 0 0 0;
+}
+.ui-menu .ui-menu-item a {
+	text-decoration: none;
+	display: block;
+	padding: 2px .4em;
+	line-height: 1.5;
+	min-height: 0; /* support: IE7 */
+	font-weight: normal;
+}
+.ui-menu .ui-menu-item a.ui-state-focus,
+.ui-menu .ui-menu-item a.ui-state-active {
+	font-weight: normal;
+	margin: -1px;
+}
+
+.ui-menu .ui-state-disabled {
+	font-weight: normal;
+	margin: .4em 0 .2em;
+	line-height: 1.5;
+}
+.ui-menu .ui-state-disabled a {
+	cursor: default;
+}
+
+/* icon support */
+.ui-menu-icons {
+	position: relative;
+}
+.ui-menu-icons .ui-menu-item a {
+	position: relative;
+	padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+	position: absolute;
+	top: .2em;
+	left: .2em;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+	position: static;
+	float: right;
+}
+.ui-progressbar {
+	height: 2em;
+	text-align: left;
+	overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+	margin: -1px;
+	height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+	background: url("images/animated-overlay.gif");
+	height: 100%;
+	filter: alpha(opacity=25);
+	opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+	background-image: none;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background-position: 0 0;
+}
+
+/* For IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+.ui-spinner {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	padding: 0;
+	vertical-align: middle;
+}
+.ui-spinner-input {
+	border: none;
+	background: none;
+	color: inherit;
+	padding: 0;
+	margin: .2em 0;
+	vertical-align: middle;
+	margin-left: .4em;
+	margin-right: 22px;
+}
+.ui-spinner-button {
+	width: 16px;
+	height: 50%;
+	font-size: .5em;
+	padding: 0;
+	margin: 0;
+	text-align: center;
+	position: absolute;
+	cursor: default;
+	display: block;
+	overflow: hidden;
+	right: 0;
+}
+/* more specificity required here to overide default borders */
+.ui-spinner a.ui-spinner-button {
+	border-top: none;
+	border-bottom: none;
+	border-right: none;
+}
+/* vertical centre icon */
+.ui-spinner .ui-icon {
+	position: absolute;
+	margin-top: -8px;
+	top: 50%;
+	left: 0;
+}
+.ui-spinner-up {
+	top: 0;
+}
+.ui-spinner-down {
+	bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+	/* need to fix icons sprite */
+	background-position: -65px -16px;
+}
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+	-webkit-box-shadow: 0 0 5px #aaa;
+	box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+	border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+	font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #dddddd;
+	background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
+	color: #333333;
+}
+.ui-widget-content a {
+	color: #333333;
+}
+.ui-widget-header {
+	border: 1px solid #e78f08;
+	background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
+	color: #ffffff;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #ffffff;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #cccccc;
+	background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #1c94c4;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #1c94c4;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #fbcb09;
+	background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #c77405;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited {
+	color: #c77405;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #fbd850;
+	background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #eb8f00;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #eb8f00;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #fed22f;
+	background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
+	color: #363636;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #363636;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #cd0a0a;
+	background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
+	color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70);
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35);
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+	background-position: 16px 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url(images/ui-icons_222222_256x240.png);
+}
+.ui-widget-header .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-default .ui-icon {
+	background-image: url(images/ui-icons_ef8c08_256x240.png);
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url(images/ui-icons_ef8c08_256x240.png);
+}
+.ui-state-active .ui-icon {
+	background-image: url(images/ui-icons_ef8c08_256x240.png);
+}
+.ui-state-highlight .ui-icon {
+	background-image: url(images/ui-icons_228ef1_256x240.png);
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url(images/ui-icons_ffd27a_256x240.png);
+}
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
+	opacity: .5;
+	filter: Alpha(Opacity=50);
+}
+.ui-widget-shadow {
+	margin: -5px 0 0 -5px;
+	padding: 5px;
+	background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
+	opacity: .2;
+	filter: Alpha(Opacity=20);
+	border-radius: 5px;
+}
diff --git a/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.1.custom.min.css b/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.1.custom.min.css
new file mode 100644
index 0000000..5727196
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.1.custom.min.css
@@ -0,0 +1,5 @@
+/*! jQuery UI - v1.10.1 - 2013-03-02
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tooltip.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("images/animated-overlay.gif");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px;background-position:16px 16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_228ef1_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ffd27a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
\ No newline at end of file
diff --git a/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.2.custom.css b/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.2.custom.css
new file mode 100644
index 0000000..325802b
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.2.custom.css
@@ -0,0 +1,549 @@
+/*! jQuery UI - v1.10.2 - 2013-04-27
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.resizable.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0);
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+	font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #dddddd;
+	background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
+	color: #333333;
+}
+.ui-widget-content a {
+	color: #333333;
+}
+.ui-widget-header {
+	border: 1px solid #e78f08;
+	background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
+	color: #ffffff;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #ffffff;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #cccccc;
+	background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #1c94c4;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #1c94c4;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #fbcb09;
+	background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #c77405;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited {
+	color: #c77405;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #fbd850;
+	background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #eb8f00;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #eb8f00;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #fed22f;
+	background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
+	color: #363636;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #363636;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #cd0a0a;
+	background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
+	color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70);
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35);
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url(images/ui-icons_222222_256x240.png);
+}
+.ui-widget-header .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-default .ui-icon {
+	background-image: url(images/ui-icons_ef8c08_256x240.png);
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url(images/ui-icons_ef8c08_256x240.png);
+}
+.ui-state-active .ui-icon {
+	background-image: url(images/ui-icons_ef8c08_256x240.png);
+}
+.ui-state-highlight .ui-icon {
+	background-image: url(images/ui-icons_228ef1_256x240.png);
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url(images/ui-icons_ffd27a_256x240.png);
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
+	opacity: .5;
+	filter: Alpha(Opacity=50);
+}
+.ui-widget-shadow {
+	margin: -5px 0 0 -5px;
+	padding: 5px;
+	background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
+	opacity: .2;
+	filter: Alpha(Opacity=20);
+	border-radius: 5px;
+}
diff --git a/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.2.custom.min.css b/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.2.custom.min.css
new file mode 100644
index 0000000..ef6c6dd
--- /dev/null
+++ b/juddi-gui/web/css/ui-lightness/jquery-ui-1.10.2.custom.min.css
@@ -0,0 +1,5 @@
+/*! jQuery UI - v1.10.2 - 2013-04-27
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.resizable.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_228ef1_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ffd27a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
\ No newline at end of file
diff --git a/juddi-gui/web/editSubscription.jsp b/juddi-gui/web/editSubscription.jsp
new file mode 100644
index 0000000..efd4b27
--- /dev/null
+++ b/juddi-gui/web/editSubscription.jsp
@@ -0,0 +1,664 @@
+<%-- 
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+    Document   : editSubscription
+    Created on : Apr 7, 2013, 8:47:48 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.v3.client.UDDIConstants"%>
+<%@page import="java.text.SimpleDateFormat"%>
+<%@page import="java.text.DateFormat"%>
+<%@page import="java.util.Date"%>
+<%@page import="javax.xml.datatype.DatatypeFactory"%>
+<%@page import="java.util.Calendar"%>
+<%@page import="java.util.GregorianCalendar"%>
+<%@page import="org.uddi.sub_v3.SubscriptionFilter"%>
+<%@page import="org.apache.juddi.webconsole.hub.builders.SubscriptionHelper"%>
+<%@page import="java.util.List"%>
+<%@page import="org.uddi.sub_v3.Subscription"%>
+<%@page import="java.net.URLEncoder"%>
+<%@page import="org.uddi.api_v3.*"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+<%@page import="org.apache.juddi.webconsole.hub.*"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well">
+        <h1><%=ResourceLoader.GetResource(session, "navbar.subscriptions")%></h1>
+    </div>
+    <%
+        //TODO i18n
+        //TODO use this page as a subscription editor
+        Subscription sub = null;
+        boolean newitem = false;
+        UddiHub x = UddiHub.getInstance(application, session);
+        if (request.getParameter("id") != null) {
+            sub = x.GetSubscriptionDetails(request.getParameter("id"));
+        }
+        if (sub == null) {
+            if (request.getParameter("svcid") != null) {
+                //TODO handled a linked in subscription
+            }
+            if (request.getParameter("bizid") != null) {
+                //TODO handled a linked in subscription
+            }
+            if (request.getParameter("tid") != null) {
+                //TODO handled a linked in subscription
+            }
+            sub = new Subscription();
+            sub.setMaxEntities(50);
+            sub.setBrief(false);
+            GregorianCalendar gcal = new GregorianCalendar();
+            gcal.setTimeInMillis(System.currentTimeMillis());
+            gcal.add(Calendar.YEAR, 1);
+            DatatypeFactory df = DatatypeFactory.newInstance();
+            sub.setNotificationInterval(df.newDuration(1000 * 60 * 15));
+            sub.setExpiresAfter(df.newXMLGregorianCalendar(gcal));
+            sub.setSubscriptionFilter(new SubscriptionFilter());
+            newitem = true;
+        }
+
+    %>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12">
+            <%=ResourceLoader.GetResource(session, "pages.subscription.content")%>
+
+            <div class="accordion" id="accordion2">
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne">
+                            <%=ResourceLoader.GetResource(session, "pages.subscription.step1")%>
+
+                        </a>
+                    </div>
+                    <div id="collapseOne" class="accordion-body collapse in">
+                        <div class="accordion-inner">
+                            <div class="btn-group" id="alertType" data-toggle="buttons-radio">
+                                <button onclick="return toggleType1(false);" id="btn-specificitem" value="specificItem" class="btn <%
+                                    if (newitem || SubscriptionHelper.isSpecificItem(sub)) {
+                                        out.write(" active");
+                                    }
+                                        %>" >
+                                    <%=ResourceLoader.GetResource(session, "pages.subscription.step1.specific")%>
+                                </button>
+                                <button onclick="return toggleType1(false);" id="btn-searchresults" value="searchResults" class="btn <%
+                                    if (!newitem && !SubscriptionHelper.isSpecificItem(sub)) {
+                                        out.write(" active");
+                                    }
+                                        %>">
+                                    <%=ResourceLoader.GetResource(session, "pages.subscription.step1.search")%>
+                                </button>
+                            </div>
+                        </div>
+                        <script type="text/javascript">
+                            function toggleType1(firstLoad)
+                            {
+                                //window.console && console.log('hi  ' + $("#btn-specificitem").hasClass("active"));   
+                                setTimeout(function(){
+                                    if ($("#btn-specificitem").hasClass("active"))
+                                    {
+                                        $("#basedonresults").hide();
+                                        $("#specific").show();
+                                    }
+                                    else
+                                    {
+                                        $("#basedonresults").show();
+                                        $("#specific").hide();
+                                    }
+                                    if (firstLoad!=true){
+                                        $('#collapseOne').collapse('hide');
+                                        $('#collapseTwo').collapse('show');}
+                                }, 100);
+                                
+                                return false;
+                            }
+                            $(document).ready(function(){ toggleType1(true);});
+                           
+                        </script>
+                    </div>
+                </div>
+
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo">
+
+                            <%=ResourceLoader.GetResource(session, "pages.subscription.step2")%>
+                        </a>
+                    </div>
+                    <div id="collapseTwo" class="accordion-body collapse">
+                        <div class="accordion-inner">
+                            <div id="specific">
+                                A specific item:<Br>
+                                <div class="btn-group" id="alertCriteraSingleItem" data-toggle="buttons-radio">
+                                    <button onclick="javascript:clearbox(); return false;" class="btn <%=SubscriptionHelper.isBindingSpecific(sub)%>" value="binding"><%=ResourceLoader.GetResource(session, "items.bindingtemplate")%></button>
+                                    <button onclick="javascript:clearbox(); return false;" class="btn <%=SubscriptionHelper.isBusinessSpecific(sub)%>" value="business"><%=ResourceLoader.GetResource(session, "items.business")%></button>
+                                    <button onclick="javascript:clearbox(); return false;" class="btn <%=SubscriptionHelper.isServiceSpecific(sub)%>" value="service"><%=ResourceLoader.GetResource(session, "items.service")%></button>
+                                    <button onclick="javascript:clearbox(); return false;" class="btn <%=SubscriptionHelper.isTModelSpecific(sub)%>" value="tmodel"><%=ResourceLoader.GetResource(session, "items.tmodel")%></button>
+                                    <button onclick="javascript:publisherAssertionPicker(); return false;" class="btn <%=SubscriptionHelper.isPublisherAssertionSpecific(sub)%>" value="publisherAssertion"><%=ResourceLoader.GetResource(session, "items.publisherassertion.status")%></button>
+                                </div><br><br>
+                                <div id="keylistcontainer">
+                                    <a href="javascript:additem();" class="btn" ><%=ResourceLoader.GetResource(session, "actions.add")%></a>
+                                    <a href="javascript:removeitem();" class="btn" ><%=ResourceLoader.GetResource(session, "actions.remove")%></a> 
+                                    <select  id="keylist" size="5" style="width:100%">
+                                        <%=SubscriptionHelper.getItemKeySpecific(sub)%>
+                                    </select>
+
+                                </div>
+                                <script type="text/javascript">
+                                    $("#pubassertcontainer").hide();
+                                    $("#keylist").resizable();
+                                    <%
+                                        if (!SubscriptionHelper.isPublisherAssertionSpecific(sub).equals("")) {
+                                            out.write("publisherAssertionPicker();");
+                                        }
+                                    %>
+                                        function publisherAssertionPicker()
+                                        {
+                                            $("#keylistcontainer").hide();
+                                            $("#pubassertcontainer").show();
+                                            selectPublisherAssertionStatus();
+                                        }
+                                        function clearbox()
+                                        {
+                                            $("#keylist option").remove();
+                                            $("#keylistcontainer").show();
+                                            $("#pubassertcontainer").hide();
+                                            return false;
+                                        }
+                                        function additem()
+                                        {
+                                            var alertCriteraSingleItem = $("#alertCriteraSingleItem > button.btn.active").val();
+                                            if (alertCriteraSingleItem=="binding")
+                                            {
+                                                reloadBindingModal();
+                                                $.dialogBinding.confirm({
+                                                    callback: function(success, result) {
+                                                        if (success)
+                                                        {
+                                                            for (var i=0;i<result.length;i++)
+                                                                if ($("#keylist option[value='"+result[i]+"']").length == 0)
+                                                                    $("#keylist").append("<option value=\"" + result[i] + "\">" + result[i] + "</option>");
+                                                        }
+                                                    }
+                                                });
+                                            }
+                                            if (alertCriteraSingleItem=="business"){
+                                                reloadBusinessModal();
+                                                $.dialogBusiness.confirm({
+                                                    callback: function(success, result) {
+                                                        if (success)
+                                                        {
+                                                            for (var i=0;i<result.length;i++)
+                                                                if ($("#keylist option[value='"+result[i]+"']").length == 0)
+                                                                    $("#keylist").append("<option value=\"" + result[i] + "\">" + result[i] + "</option>");
+                                                        }
+                                                    }
+                                                });
+                                            }
+                                            if (alertCriteraSingleItem=="service"){
+                                                reloadServiceModal();
+    
+                                                $.dialogService.confirm({
+                                                    callback: function(success, result) {
+                                                        if (success)
+                                                        {
+                                                            for (var i=0;i<result.length;i++)
+                                                                if ($("#keylist option[value='"+result[i]+"']").length == 0)
+                                                                    $("#keylist").append("<option value=\"" + result[i] + "\">" + result[i] + "</option>");
+                                                        }
+                                                    }
+                                                });
+
+                                            }
+                                            if (alertCriteraSingleItem=="tmodel"){
+                                                reloadTmodelModal();
+                                                $.dialogTmodel.confirm({
+                                                    callback: function(success, result) {
+                                                        if (success)
+                                                        {
+                                                            for (var i=0;i<result.length;i++)
+                                                                if ($("#keylist option[value='"+result[i]+"']").length == 0)
+                                                                    $("#keylist").append("<option value=\"" + result[i] + "\">" + result[i] + "</option>");
+                                                        }
+                                                    }
+                                                });
+                                            }
+                                        }
+                                        function removeitem()
+                                        {
+                                            $("#keylist option:selected").remove();
+                                        }
+                                </script>
+                                <div id="pubassertcontainer" class="">
+                                    <div style="float:left"><%=ResourceLoader.GetResource(session, "items.key")%>: &nbsp;</div>
+                                    <div class="" id="itemKey"><%
+                                        if (!SubscriptionHelper.isPublisherAssertionSpecific(sub).equals("")) {
+                                            out.write(StringEscapeUtils.escapeHtml(SubscriptionHelper.getItemKeySpecific(sub)));
+                                        }
+                                        %></div>
+                                </div>
+                            </div>
+                            <div id="basedonresults">
+                                <%=ResourceLoader.GetResource(session, "search.results")%>:<br>
+                                <div class="btn-group" id="alertCriteraMultipleItem" data-toggle="buttons-radio">
+                                    <button onclick="return false;" class="btn" value="binding"><%=ResourceLoader.GetResource(session, "items.bindingtemplate")%></button>
+                                    <button onclick="return false;" class="btn" value="business"><%=ResourceLoader.GetResource(session, "items.business")%></button>
+                                    <button onclick="return false;" class="btn" value="service"><%=ResourceLoader.GetResource(session, "items.service")%></button>
+                                    <button onclick="return false;" class="btn" value="tmodel"><%=ResourceLoader.GetResource(session, "items.tmodel")%></button>
+                                    <button onclick="return false;" class="btn" value="relatedBusiness"><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.relatedbusinesses")%></button>
+                                </div>
+                                <br><br>
+                                <%=ResourceLoader.GetResource(session, "items.findqualifiers")%><br>
+                                <table class="table">
+                                    <tr>
+
+                                        <td><input class="fq" type="checkbox" name="<%=UDDIConstants.AND_ALL_KEYS%>" value="<%=UDDIConstants.AND_ALL_KEYS%>"> <%=UDDIConstants.AND_ALL_KEYS%></td>
+                                        <td><input class="fq" type="checkbox" name="<%=UDDIConstants.APPROXIMATE_MATCH%>" value="<%=UDDIConstants.APPROXIMATE_MATCH%>"> <%=UDDIConstants.APPROXIMATE_MATCH%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.BINARY_SORT%>" value="<%=UDDIConstants.BINARY_SORT%>"> <%=UDDIConstants.BINARY_SORT%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.BINDING_SUBSET%>" value="<%=UDDIConstants.BINDING_SUBSET%>"> <%=UDDIConstants.BINDING_SUBSET%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.CASE_INSENSITIVE_MATCH%>" value="<%=UDDIConstants.CASE_INSENSITIVE_MATCH%>"> <%=UDDIConstants.CASE_INSENSITIVE_MATCH%></td>
+                                    </tr>
+                                    <tr>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.CASE_INSENSITIVE_SORT%>" value="<%=UDDIConstants.CASE_INSENSITIVE_SORT%>"> <%=UDDIConstants.CASE_INSENSITIVE_SORT%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.CASE_SENSITIVE_MATCH%>" value="<%=UDDIConstants.CASE_SENSITIVE_MATCH%>"> <%=UDDIConstants.CASE_SENSITIVE_MATCH%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.CASE_SENSITIVE_SORT%>" value="<%=UDDIConstants.CASE_SENSITIVE_SORT%>"> <%=UDDIConstants.CASE_SENSITIVE_SORT%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.COMBINE_CATEGORY_BAGS%>" value="<%=UDDIConstants.COMBINE_CATEGORY_BAGS%>"> <%=UDDIConstants.COMBINE_CATEGORY_BAGS%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.DIACRITIC_INSENSITIVE_MATCH%>" value="<%=UDDIConstants.DIACRITIC_INSENSITIVE_MATCH%>"> <%=UDDIConstants.DIACRITIC_INSENSITIVE_MATCH%></td>
+                                    </tr>
+                                    <tr>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.DIACRITIC_SENSITIVE_MATCH%>" value="<%=UDDIConstants.DIACRITIC_SENSITIVE_MATCH%>"> <%=UDDIConstants.DIACRITIC_SENSITIVE_MATCH%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.EXACT_MATCH%>" value="<%=UDDIConstants.EXACT_MATCH%>"> <%=UDDIConstants.EXACT_MATCH%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.OR_ALL_KEYS%>" value="<%=UDDIConstants.OR_ALL_KEYS%>"> <%=UDDIConstants.OR_ALL_KEYS%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.OR_LIKE_KEYS%>" value="<%=UDDIConstants.OR_LIKE_KEYS%>"> <%=UDDIConstants.OR_LIKE_KEYS%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.SERVICE_SUBSET%>" value="<%=UDDIConstants.SERVICE_SUBSET%>"> <%=UDDIConstants.SERVICE_SUBSET%></td>
+                                    </tr>
+                                    <tr>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.SIGNATURE_PRESENT%>" value="<%=UDDIConstants.SIGNATURE_PRESENT%>"> <%=UDDIConstants.SIGNATURE_PRESENT%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.SORT_BY_DATE_ASC%>" value="<%=UDDIConstants.SORT_BY_DATE_ASC%>"> <%=UDDIConstants.SORT_BY_DATE_ASC%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.SORT_BY_DATE_DESC%>" value="<%=UDDIConstants.SORT_BY_DATE_DESC%>"> <%=UDDIConstants.SORT_BY_DATE_DESC%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.SORT_BY_NAME_ASC%>" value="<%=UDDIConstants.SORT_BY_NAME_ASC%>"> <%=UDDIConstants.SORT_BY_NAME_ASC%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.SORT_BY_NAME_DESC%>" value="<%=UDDIConstants.SORT_BY_NAME_DESC%>"> <%=UDDIConstants.SORT_BY_NAME_DESC%></td>
+                                    </tr>
+                                    <tr>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.SUPPRESS_PROJECTED_SERVICES%>" value="<%=UDDIConstants.SUPPRESS_PROJECTED_SERVICES%>"> <%=UDDIConstants.SUPPRESS_PROJECTED_SERVICES%></td>
+                                        <td><input class="fq"  type="checkbox" name="<%=UDDIConstants.UTS_10%>" value="<%=UDDIConstants.UTS_10%>"> <%=UDDIConstants.UTS_10%></td>
+                                    </tr>
+                                </table>
+
+
+
+                                <div>
+
+                                    <input type="text" placeholder="<%=ResourceLoader.GetResource(session, "items.name")%>..." id="searchcontent">
+                                    <input type="text" placeholder="<%=ResourceLoader.GetResource(session, "items.lang")%>..." id="searchlang"><br></div>
+                            </div>
+
+
+                        </div>
+
+                    </div>
+                </div>
+
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree">
+                            <%=ResourceLoader.GetResource(session, "pages.subscription.step3")%>
+                        </a>
+                    </div>
+                    <div id="collapseThree" class="accordion-body collapse">
+                        <div class="accordion-inner">
+                            <div class="btn-group" id="alertTransport" data-toggle="buttons-radio">
+                                <button id="btn-bindingTemplate" onclick="return toggleTransport1();" value="bindingTemplate" class="btn <%=(sub.getBindingKey() == null ? "" : " active")%>" 
+                                        title="<%=ResourceLoader.GetResource(session, "pages.subscription.step3.direct.tooltip")%>"><%=ResourceLoader.GetResource(session, "pages.subscription.step3.direct")%></button>
+                                <button id="btn-manual" onclick="return toggleTransport1();" value="manual" class="btn <%=(sub.getBindingKey() == null ? " active " : "")%>" 
+                                        title="<%=ResourceLoader.GetResource(session, "pages.subscription.step3.pickup.tooltip")%>"><%=ResourceLoader.GetResource(session, "pages.subscription.step3.pickup")%></button>
+                            </div><br>
+                            <div class="" id="bindingKeyDiv">
+                                <%=ResourceLoader.GetResource(session, "pages.subscription.step3.content")%>
+                                <b><%=UDDIConstants.TRANSPORT_HTTP%></b>.
+                                <input type="text" id="bindingKey" placeholder="<%=ResourceLoader.GetResource(session, "items.bindingtemplate.key")%>" style="width:360px">
+                                <button onClick="javascript:bindingModal('bindingKey', 'val'); return false;" class="btn "><%=ResourceLoader.GetResource(session, "actions.select")%></button>
+                            </div>
+                            <script type="text/javascript">
+                                function selectPublisherAssertionStatus()
+                                {
+                                    $("#assertionStatusChooser").modal('show');
+                                }
+                             
+                                function toggleTransport1()
+                                {
+                                    //window.console && console.log('hi  ' + $("#btn-specificitem").hasClass("active"));   
+                                    setTimeout(function(){
+                                        if ($("#btn-manual").hasClass("active"))
+                                        {
+                                            $("#bindingKeyDiv").hide();
+                                            //$("#specific").show();
+                                        }
+                                        else
+                                        {
+                                            $("#bindingKeyDiv").show();
+                                            // $("#specific").hide();
+                                        }
+                                        
+                                    }, 100);
+                                
+                                   
+                                    // $("#bindingKeyDiv").show();
+                                    return false;
+                                }
+                                toggleTransport1();
+                            </script>
+                        </div>
+                    </div>
+                </div>
+
+
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapse4">
+                            <%=ResourceLoader.GetResource(session, "pages.subscription.step4")%>
+
+                        </a>
+                    </div>
+                    <div id="collapse4" class="accordion-body collapse">
+                        <div class="accordion-inner">
+                            <div style="float:left"><%=ResourceLoader.GetResource(session, "items.maxrecords.callback")%>: &nbsp;</div>
+                            <div class="edit" id="maxRecords"><%
+                                if (sub.getMaxEntities() != null) {
+                                    sub.getMaxEntities().toString();
+                                }
+                                %></div>
+                            <div style="float:left"><%=ResourceLoader.GetResource(session, "items.subscriptionbrief")%>: &nbsp;</div>
+                            <div> <input type="checkbox" id="brief" 
+                                         <%
+                                             out.write(sub.isBrief() ? "checked" : "");
+                                         %> >
+                            </div><br>
+                            <%=ResourceLoader.GetResource(session, "items.expiration")%>: 
+                            <div id="datetimepicker2" class="input-append">
+                                <input data-format="MM/dd/yyyy HH:mm:ss PP" type="text" value="<%
+                                    if (sub.getExpiresAfter() != null) {
+                                        Date d = sub.getExpiresAfter().toGregorianCalendar().getTime();
+                                        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a");
+                                        String dateStr = dateFormat.format(d);
+                                        //TODO DOES NOT WORK     out.write(dateStr);
+                                    }
+                                       %>">
+
+                                <span class="add-on">
+                                    <i data-time-icon="icon-time" data-date-icon="icon-calendar">
+                                    </i>
+                                </span>
+                            </div>
+                            <script type="text/javascript">
+                                $(document).ready(function() {
+                                    $('#datetimepicker2').datetimepicker({
+                                        language: '<%=(String) session.getAttribute("locale")%>',
+                                        pick12HourFormat: true
+                                    });
+                                });
+                            </script>
+
+
+                            <div style=""><%=ResourceLoader.GetResource(session, "items.notificationinterval")%>: &nbsp;</div>
+
+                            <div class="input-append bootstrap-timepicker">
+                                <input id="timepicker2" type="text" class="input-small" placeholder="Duration of time (hh:mm:ss)" value="<%
+                                    if (sub.getNotificationInterval() != null) {
+                                        out.write(sub.getNotificationInterval().getHours() + ":"
+                                                + sub.getNotificationInterval().getMinutes() + ":"
+                                                + sub.getNotificationInterval().getSeconds());
+                                    }
+                                       %>">
+                                <span class="add-on">
+                                    <i class="icon-time"></i>
+                                </span>
+                            </div>
+
+                            <script type="text/javascript">
+                                $('#timepicker2').timepicker({
+                                    minuteStep: 1,
+                                    defaultTime: '00:05:00',
+                                    showSeconds: true,
+                                    template: 'modal',
+                                    showSeconds: true,
+                                    showMeridian: false
+                                });
+                            </script>
+                            <br>
+
+                            <div style="float:left">Subscription Key: &nbsp;</div>
+                            <div class="edit" id="subkey"><%
+                                if (sub.getSubscriptionKey() != null) {
+                                    out.write(StringEscapeUtils.escapeHtml(sub.getSubscriptionKey()));
+                                }
+                                %> </div>
+                            About Subscription Keys: You can optionally specify a subscription key. If you do, it must follow the rules for UDDI keys (uniqueness, prefixes, tModel Partitions, etc).
+                            If you do not define one, the UDDI server should generate one for you. 
+
+
+
+                        </div>
+                    </div>
+                </div>
+
+
+                <script type="text/javascript">
+                    Reedit();
+                    $("#bindingKey").resizable();
+                    function saveSubscription()
+                    {
+                        
+                        var interval = $("#interval").val();
+                        var maxRecords = $("#maxRecords").val();
+                        var brief = $("#brief").val();
+                        var datetimepicker2 = $("#datetimepicker2").val();
+                        
+                        var subkey = $("#subkey").html();
+
+                        var alertCriteraSingleItem = $("#alertCriteraSingleItem > button.btn.active").val();
+                        var alertTransport = $("#alertTransport > button.btn.active").val();
+                        var itemKey = $("#keylist option");
+                        var keys="";
+                        var first=true;
+                        $.each(itemKey, function(idx, value){
+                            if (first)
+                                keys = value.value;
+                            else
+                                keys = keys + "," + value.value;
+                            first=false;
+                        });
+                        var bindingKey = $("#bindingKey").val();
+                        var alertType = $("#alertType > button.btn.active").val();
+                        
+                        var alertCriteraMultipleItem = $("#alertCriteraMultipleItem > button.btn.active").val();
+                        var searchcontent = $("#searchcontent").val();
+                        var searchlang = $("#searchlang").val();
+                        
+                        var postbackdata = new Array();
+                        var url='ajax/subscription.jsp';
+                        itemKey = $("#itemKey").html();
+                        
+                        //  var tqs = new Array();
+                        $.each($('.fq input:checkbox'), function(index,item){
+                            var itemname = item.id;
+                            if (item.checked)
+                            {
+                                postbackdata.push({
+                                    name:"findqualifier", 
+                                    value: itemname
+                                });
+                            }
+                        });
+                        
+                        alertCriteraMultipleItem
+                        postbackdata.push({
+                            name:"alertCriteraMultipleItem", 
+                            value: alertCriteraMultipleItem
+                        });
+                        postbackdata.push({
+                            name:"searchcontent", 
+                            value: searchcontent
+                        });
+                        
+                        postbackdata.push({
+                            name:"searchlang", 
+                            value: searchlang
+                        });
+                        
+                        
+                        postbackdata.push({
+                            name:"subkey", 
+                            value: subkey
+                        });
+                        
+                        postbackdata.push({
+                            name:"expires", 
+                            value: datetimepicker2
+                        });
+                        
+                        postbackdata.push({
+                            name:"interval", 
+                            value: interval
+                        });
+                        
+                        postbackdata.push({
+                            name:"brief", 
+                            value: brief
+                        });
+                        
+                        postbackdata.push({
+                            name:"maxRecords", 
+                            value: maxRecords
+                        });
+                        
+                        
+                        postbackdata.push({
+                            name:"alertType", 
+                            value: alertType
+                        });
+                        postbackdata.push({
+                            name:"itemKey", 
+                            value: keys
+                        });
+                        
+                        postbackdata.push({
+                            name:"assertionStatus", 
+                            value: itemKey
+                        });
+                        postbackdata.push({
+                            name:"alertCriteraSingleItem", 
+                            value: alertCriteraSingleItem
+                        });
+                        postbackdata.push({
+                            name:"bindingKey", 
+                            value: bindingKey
+                        });
+                        postbackdata.push({
+                            name:"alertTransport", 
+                            value: alertTransport
+                        });
+                        postbackdata.push({
+                            name:"nonce", 
+                            value: $("#nonce").val()
+                        });
+    
+            
+                        var request=   $.ajax({
+                            url: url,
+                            type:"POST",
+                            //  dataType: "html", 
+                            cache: false, 
+                            //  processData: false,f
+                            data: postbackdata
+                        });
+                
+                
+                        request.done(function(msg) {
+                            window.console && console.log('postback done '  + url);                
+        
+                            $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+                            $("#resultBar").show();
+        
+                        });
+
+                        request.fail(function(jqXHR, textStatus) {
+                            window.console && console.log('postback failed ' + url);                                
+                            $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' +jqXHR.responseText + textStatus);
+                            $("#resultBar").show();
+        
+                        });
+                    }
+                </script>
+            </div>
+
+            <a  class="btn btn-primary" href="javascript:saveSubscription();"><i class="icon-save icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.save")%></a>
+        </div>
+    </div>
+
+
+    <div class="modal hide fade " id="assertionStatusChooser">
+        <div class="modal-header">
+            <a href="javascript:$('#assertionStatusChooser').modal('hide');" class="close" data-dismiss="modal" aria-hidden="true">&times;</a>
+            <h3><%=ResourceLoader.GetResource(session, "items.assertion.chooser")%> </h3>
+        </div>
+        <div class="modal-body">
+            <select id="assertionName" style="width:100%">
+                <%
+                    for (int i = 0; i < CompletionStatus.values().length; i++) {
+                        out.write("<option value=\""
+                                + StringEscapeUtils.escapeHtml(CompletionStatus.values()[i].toString()) + "\">"
+                                + StringEscapeUtils.escapeHtml(CompletionStatus.values()[i].toString()) + "</option>");
+                    }
+                %>
+
+            </select><br>
+            Explanation:<br>
+            <ul>
+                <%
+                    for (int i = 0; i < CompletionStatus.values().length; i++) {
+                        out.write("<li><b>" + StringEscapeUtils.escapeHtml(CompletionStatus.values()[i].toString()) + "</b> = "
+                                + ResourceLoader.GetResource(session, "items.subscription.CompletionStatus." + CompletionStatus.values()[i].toString()) + "</li>");
+                    }
+                %></ul>
+
+        </div>
+        <div class="modal-footer">
+            <a href="#" class="btn" data-dismiss="modal"><%=ResourceLoader.GetResource(session, "actions.cancel")%></a>
+            <a href="javascript:assertionSuccess();" class="btn btn-primary" ><%=ResourceLoader.GetResource(session, "actions.select")%></a>
+            <script type="text/javascript">
+                function assertionSuccess()
+                {
+                    $("#itemKey").html($('#assertionName option:selected').val());
+                    $('#assertionStatusChooser').modal('hide');
+                }
+            </script>
+        </div>
+    </div>
+
+
+    <%@include file="tmodelChooser.jsp" %>
+    <%@include file="bindingChooser.jsp" %>
+    <%@include file="businessChooser.jsp" %>
+    <%@include file="serviceChooser.jsp" %>
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/error.jsp b/juddi-gui/web/error.jsp
new file mode 100644
index 0000000..0725ffb
--- /dev/null
+++ b/juddi-gui/web/error.jsp
@@ -0,0 +1,92 @@
+<%-- 
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+    Document   : error
+    Created on : Apr 28, 2013, 4:01:43 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="javax.xml.datatype.DatatypeFactory"%>
+<%@page import="java.util.GregorianCalendar"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <title>Welcome to jUDDI</title>
+        <meta charset="utf-8">
+        <title>Welcome to Apache jUDDI</title>
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
+        <meta name="description" content="Apache jUDDI">
+        <meta name="author" content="Apache Software Foundation">
+
+        <!-- Le styles -->
+        <link href="css/bootstrap.css" rel="stylesheet">
+        <link rel="shortcut icon" href="favicon.ico" />
+        <link href="css/bootstrap-responsive.css" rel="stylesheet">
+
+        <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
+        <!--[if lt IE 9]>
+          <script src="js/html5shiv.js"></script>
+        <![endif]-->
+
+        <link rel="stylesheet" href="css/font-awesome.min.css">
+        <link rel="stylesheet" href="css/ui-lightness/jquery-ui-1.10.2.custom.min.css">
+        <!--[if IE 7]>
+        <link rel="stylesheet" href="css/font-awesome-ie7.min.css">
+        <![endif]-->
+
+
+        <link rel="shortcut icon" href="ico/favicon.png">
+        <style type="text/css">
+            body {
+                padding: 0px 0px 0px 0px;
+                margin: 0px 0px 0px 0px;
+            }
+        </style>
+
+    </head>
+    <body>
+        <div style="width:100%; height: 100%; position:absolute; text-align: center; vertical-align: middle; padding: 0px; margin: 0px; 
+             background-image: url('img/bluemarble2.jpg'); background-repeat: no-repeat; background-position-x: center;
+             background-position-y: center; background-size: cover">
+            <div style="color: black; background-color: whitesmoke; 
+                 background: rgb(235, 235, 235); /* Fall-back for browsers that don't
+                                    support rgba */
+                 background: rgba(235, 235, 235, .7);width:60%; position: relative; left:20%; top:25%; height:50%; vertical-align: middle">
+                <br><br>
+                <h1><%=ResourceLoader.GetResource(session, "error.ohno")%> <i class="icon-warning-sign icon-large"></i></h1>
+                <Br>
+                <b><%=ResourceLoader.GetResource(session, "error.occurred")%> </b><br><br>
+                <%=ResourceLoader.GetResource(session, "error.pleasereport")%> <Br>
+                <%=ResourceLoader.GetResource(session, "error.timeofevent")%>: 
+                <%
+                    GregorianCalendar gcal = new GregorianCalendar();
+                    gcal.setTimeInMillis(System.currentTimeMillis());
+                    DatatypeFactory df = DatatypeFactory.newInstance();
+                    out.write(df.newXMLGregorianCalendar(gcal).toString());
+                %><Br><Br>
+                <%=ResourceLoader.GetResource(session, "error.reportadmin")%> <Br>
+                <a class="btn btn-primary" href="https://issues.apache.org/jira/browse/JUDDI"><%=ResourceLoader.GetResource(session, "error.filereport")%> </a>.</b><br>
+
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/juddi-gui/web/favicon.ico b/juddi-gui/web/favicon.ico
new file mode 100644
index 0000000..161bcf7
--- /dev/null
+++ b/juddi-gui/web/favicon.ico
Binary files differ
diff --git a/juddi-gui/web/font/FontAwesome.otf b/juddi-gui/web/font/FontAwesome.otf
new file mode 100644
index 0000000..64049bf
--- /dev/null
+++ b/juddi-gui/web/font/FontAwesome.otf
Binary files differ
diff --git a/juddi-gui/web/font/fontawesome-webfont.eot b/juddi-gui/web/font/fontawesome-webfont.eot
new file mode 100644
index 0000000..7d81019
--- /dev/null
+++ b/juddi-gui/web/font/fontawesome-webfont.eot
Binary files differ
diff --git a/juddi-gui/web/font/fontawesome-webfont.svg b/juddi-gui/web/font/fontawesome-webfont.svg
new file mode 100644
index 0000000..ba0afe5
--- /dev/null
+++ b/juddi-gui/web/font/fontawesome-webfont.svg
@@ -0,0 +1,284 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" "  horiz-adv-x="448" />
+<glyph unicode="&#x09;" horiz-adv-x="448" />
+<glyph unicode="&#xa0;" horiz-adv-x="448" />
+<glyph unicode="&#xa8;" horiz-adv-x="1792" />
+<glyph unicode="&#xa9;" horiz-adv-x="1792" />
+<glyph unicode="&#xae;" horiz-adv-x="1792" />
+<glyph unicode="&#xb4;" horiz-adv-x="1792" />
+<glyph unicode="&#xc6;" horiz-adv-x="1792" />
+<glyph unicode="&#x2000;" horiz-adv-x="768" />
+<glyph unicode="&#x2001;" />
+<glyph unicode="&#x2002;" horiz-adv-x="768" />
+<glyph unicode="&#x2003;" />
+<glyph unicode="&#x2004;" horiz-adv-x="512" />
+<glyph unicode="&#x2005;" horiz-adv-x="384" />
+<glyph unicode="&#x2006;" horiz-adv-x="256" />
+<glyph unicode="&#x2007;" horiz-adv-x="256" />
+<glyph unicode="&#x2008;" horiz-adv-x="192" />
+<glyph unicode="&#x2009;" horiz-adv-x="307" />
+<glyph unicode="&#x200a;" horiz-adv-x="85" />
+<glyph unicode="&#x202f;" horiz-adv-x="307" />
+<glyph unicode="&#x205f;" horiz-adv-x="384" />
+<glyph unicode="&#x2122;" horiz-adv-x="1792" />
+<glyph unicode="&#x221e;" horiz-adv-x="1792" />
+<glyph unicode="&#x2260;" horiz-adv-x="1792" />
+<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
+<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h299l-299 299v-299zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544q40 0 88 -20t76 -48l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf017;" d="M1088 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-384q-13 0 -22.5 9.5t-9.5 22.5v448q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-352h288q13 0 22.5 -9.5t9.5 -22.5zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5 t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5 t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1339 729q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39zM1632 512q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-1600q-14 0 -23 9t-9 23v576q0 14 9 23 t23 9h192q14 0 23 -9t9 -23v-352h1152v352q0 14 9 23t23 9h192z" />
+<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-9 -9 -23 -9t-23 9l-320 320q-9 9 -9 23q0 13 9.5 22.5t22.5 9.5h192v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352h192q14 0 23 -9t9 -23zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5 t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5 t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01b;" d="M1120 672q0 -13 -9.5 -22.5t-22.5 -9.5h-192v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q9 9 23 9t23 -9l320 -320q9 -9 9 -23zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5 t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="&#xf01d;" d="M1152 640q0 -37 -33 -56l-512 -288q-14 -8 -31 -8t-32 9q-32 18 -32 55v576q0 37 32 55q31 20 63 1l512 -288q33 -19 33 -56zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5 t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q169 0 304 99.5t185 261.5q7 23 30 23h199 q16 0 25 -12q10 -13 7 -27q-39 -175 -147.5 -312t-266 -213t-336.5 -76q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M704 512q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5q0 -37 19 -67t51 -47l-69 -229q-5 -15 5 -28t26 -13h192q16 0 26 13t5 28l-69 229q32 17 51 47t19 67zM320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68 t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M672 1408v-1536h-64v1536h64zM1408 1408v-1536h-64v1536h64zM1568 1408v-1536h-64v1536h64zM576 1408v-1536h-64v1536h64zM1280 1408v-1536h-256v1536h256zM896 1408v-1536h-128v1536h128zM448 1408v-1536h-128v1536h128zM1792 1408v-1536h-128v1536h128zM256 1408v-1536 h-256v1536h256z" />
+<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
+<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
+<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
+<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
+<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
+<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03d;" horiz-adv-x="1920" d="M1900 1278q20 -8 20 -30v-1216q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-585 586v-307q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-307l585 586q16 15 35 7z" />
+<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="&#xf042;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM256 640q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5v1024q-104 0 -198.5 -40.5 t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
+<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
+<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf059;" d="M896 160v192q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-192q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1152 832q0 97 -58.5 172t-144.5 111.5t-181 36.5t-181 -36.5t-144.5 -111.5t-58.5 -172v-11v-13t1 -11.5t3 -11.5t5.5 -8t9 -7 t13.5 -2h192q14 0 23 9t9 23q0 12 11 27q19 31 50.5 50t66.5 19q39 0 83 -21.5t44 -57.5q0 -33 -26.5 -58t-63.5 -44t-74.5 -41.5t-64 -63.5t-26.5 -98v-11v-13t1 -11.5t3 -11.5t5.5 -8t9 -7t13.5 -2h192q17 0 24 10.5t8 24.5t13.5 33t37.5 32q60 33 70 39q62 44 98.5 108 t36.5 137zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05a;" d="M1024 160v64q0 14 -9 23t-23 9h-96v480q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h96v-384h-96q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 928v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf05c;" d="M1125 448q0 -27 -18 -45l-102 -102q-18 -18 -45 -18t-45 18l-147 147l-147 -147q-18 -18 -45 -18t-45 18l-102 102q-18 18 -18 45t18 45l147 147l-147 147q-18 18 -18 45t18 45l102 102q18 18 45 18t45 -18l147 -147l147 147q18 18 45 18t45 -18l102 -102q18 -18 18 -45 t-18 -45l-147 -147l147 -147q18 -18 18 -45zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5 t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05d;" d="M1189 768q0 -27 -18 -45l-320 -320l-102 -102q-18 -18 -45 -18t-45 18l-102 102l-192 192q-18 18 -18 45t18 45l102 102q18 18 45 18t45 -18l147 -147l275 275q18 18 45 18t45 -18l102 -102q18 -18 18 -45zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5 t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05e;" d="M1280 640q0 139 -71 260l-701 -701q121 -71 260 -71q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM327 380l701 701q-121 71 -260 71q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5q0 -139 71 -260zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="&#xf06b;" d="M928 180v716h-320v-716q0 -25 18.5 -38.5t45.5 -13.5h192q27 0 45.5 13.5t18.5 38.5zM472 1024h195l-126 161q-24 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-45 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -10 -22t-27 -10.5t-32 -2.5t-34.5 1.5t-24.5 1.5v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416q-5 0 -24.5 -1.5t-34.5 -1.5t-32 2.5t-27 10.5t-10 22v320q0 13 9.5 22.5t22.5 9.5h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5 q108 0 168 -77l128 -165l128 165q60 77 168 77q93 0 158.5 -65.5t65.5 -158.5t-65.5 -158.5t-158.5 -65.5h440q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1397 1324q0 -87 -149 -236l-240 -240l143 -746l1 -6q0 -14 -9 -23l-64 -64q-9 -9 -23 -9q-21 0 -29 18l-274 575l-245 -245q68 -238 68 -252t-9 -23l-64 -64q-9 -9 -23 -9q-18 0 -28 16l-155 280l-280 155q-17 9 -17 28q0 14 9 23l64 65q9 9 23 9t252 -68l245 245 l-575 274q-18 8 -18 29q0 14 9 23l64 64q9 9 23 9q4 0 6 -1l746 -143l240 240q149 149 236 149q32 0 52.5 -20.5t20.5 -52.5z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf081;" d="M1280 958q0 13 -9.5 22.5t-22.5 9.5q-5 0 -15 -4q20 34 20 55q0 13 -9.5 22.5t-22.5 9.5q-7 0 -17 -5q-60 -34 -97 -43q-65 63 -154 63q-98 0 -164.5 -72.5t-64.5 -169.5v-12q-107 14 -187.5 64t-156.5 139q-10 12 -28 12q-26 0 -41 -50.5t-15 -86.5q0 -62 29 -117 q-13 -2 -21.5 -11.5t-8.5 -22.5q0 -112 81 -185q-12 -8 -12 -25q0 -6 1 -9q15 -51 50.5 -91.5t84.5 -60.5q-77 -43 -165 -43q-8 0 -24 1.5t-23 1.5q-13 0 -22.5 -9.5t-9.5 -22.5q0 -17 14 -26q63 -47 150 -73.5t170 -26.5q130 0 248 58q166 79 256 232.5t88 339.5v12 q27 22 62.5 63t35.5 61zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf082;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-350q-2 0 -2 1v671h177q31 0 32 23l12 164q2 15 -8 25q-10 12 -24 12h-189v72q0 44 11.5 57t54.5 13q57 0 117 -13q13 -3 26 5q11 8 13 22l23 166q2 12 -5.5 22.5t-19.5 13.5 q-93 26 -197 26q-311 0 -311 -299v-85h-95q-13 0 -23 -10.5t-10 -24.5v-172q0 -8 5.5 -12t10 -4.5t17.5 -0.5h95v-671l10 -1h-330q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="&#xf08c;" d="M512 160v640q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-640q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM503 1028q0 51 -36 87.5t-88 36.5q-51 0 -87 -36.5t-36 -87.5t36 -87.5t87 -36.5q52 0 88 36.5t36 87.5zM1280 160v435 q0 127 -73.5 192.5t-202.5 65.5q-90 0 -158 -45q-12 -8 -14 -12q0 36 -35 36h-176q-14 0 -29.5 -7.5t-15.5 -20.5v-644q0 -13 15.5 -22.5t29.5 -9.5h182q12 0 20.5 9.5t8.5 22.5v349q0 140 114 140q49 0 63.5 -22.5t14.5 -73.5v-393q0 -13 12 -22.5t26 -9.5h186 q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf092;" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -26t19 -63zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -52 41 -77v-3q-113 -37 -113 -139q0 -60 36 -98t84 -51t107 -13q224 0 224 187q0 48 -25.5 78t-62.5 42.5t-74 21.5t-62.5 23.5t-25.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q30 7 49 13zM771 350h137q-2 20 -2 90v372q0 59 2 76h-137q3 -26 3 -79v-377 q0 -55 -3 -82zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q4 0 11.5 -0.5t11.5 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1664 480v-576q0 -13 -9.5 -22.5t-22.5 -9.5h-1600q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352h1152v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1344 832q0 -26 -19 -45t-45 -19h-256v-448 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="&#xf096;" horiz-adv-x="1664" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf099;" horiz-adv-x="1920" d="M1875 1202q0 -10 -5 -18q-64 -104 -179 -190v-33q4 -227 -100 -457q-134 -297 -397.5 -464.5t-591.5 -167.5q-265 0 -500 122q-64 33 -87 50q-15 12 -15 27q0 13 9.5 22.5t22.5 9.5q14 0 44 -2.5t45 -2.5q204 0 375 106q-103 24 -181 96t-111 173q-2 8 -2 11q0 12 9 21.5 t22 9.5q5 0 14 -2t12 -2q-89 55 -142 147t-53 196q0 15 11.5 25.5t27.5 10.5q10 0 35 -11.5t30 -13.5q-92 110 -92 256q0 51 14.5 108t40.5 95q10 16 25 16q16 0 27 -12q76 -84 110 -115q123 -111 276 -177.5t317 -80.5q-4 21 -4 49q0 167 118.5 285.5t285.5 118.5 q163 0 282 -114q95 20 209 82q8 5 16 5q13 0 22.5 -9.5t9.5 -22.5q0 -24 -28 -73t-51 -76q7 2 30 10.5t43 16t24 7.5q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M560 1125q-49 0 -62 -15.5t-13 -66.5v-88h217q16 0 27 -12q11 -13 10 -29l-14 -200q-2 -15 -12.5 -25.5t-25.5 -10.5h-202v-768q0 -16 -11 -27t-26 -11h-250q-16 0 -27 11t-11 27v768h-122q-16 0 -27 11.5t-11 27.5v200q0 16 11 27t27 11h122v103q0 177 88 263.5 t267 86.5q120 0 225 -30q14 -4 22 -16t6 -26l-27 -195q-2 -16 -16 -26q-14 -9 -30 -6q-76 16 -135 16z" />
+<glyph unicode="&#xf09b;" d="M1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5q0 -209 124.5 -378.5t323.5 -231.5v169q-54 -7 -69 -7q-110 0 -153 100q-15 38 -36 63q-5 6 -21 19t-28.5 24t-12.5 16q0 12 28 12q29 0 51.5 -14.5t38 -35 t31.5 -41.5t40.5 -35.5t56.5 -14.5q42 0 81 14q16 57 63 89q-166 16 -246 83.5t-80 224.5q0 118 73 198q-14 42 -14 84q0 58 27 109q57 0 101 -19.5t101 -60.5q76 18 169 18q80 0 153 -16q57 40 100.5 59t99.5 19q27 -51 27 -109q0 -43 -14 -83q73 -82 73 -199 q0 -157 -80 -225.5t-245 -83.5q69 -47 69 -131v-226q199 62 323.5 231.5t124.5 378.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M704 160q0 6 -15 57t-35 115.5t-20 65.5q32 16 51 47t19 67q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5q0 -36 19 -66.5t51 -47.5q0 -2 -20 -66t-35 -115t-15 -57q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1664 960v-256q0 -26 -19 -45t-45 -19 h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
+<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67 11.5t-64 38.5t-48 44t-50 55q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -46 -25 -91t-52 -72t-72 -66q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33t55 33 t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580q0 -142 -77.5 -230 t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100q3 2 17 14t21.5 19 t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ac;" d="M1193 993q11 7 25 22v-1q0 -2 -9.5 -10t-11.5 -12q-1 1 -4 1zM1187 992q-1 1 -2.5 3t-1.5 3q3 -2 10 -5q-6 -4 -6 -1zM728 1175q-16 2 -26 5q1 0 6.5 -1t10.5 -2t9 -2zM773 1212q7 4 13.5 2.5t7.5 -7.5q-5 3 -21 5zM765 1206l-3 2q-2 3 -5.5 5t-4.5 2q2 -1 21 -3 q-6 -4 -8 -6zM663 1290v2q1 -2 3 -5.5t3 -5.5zM558 1250q0 -2 -1 -2l-1 2h2zM933 206v-1v1zM768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1240 162 l5 5q-7 10 -29 12q1 12 -14 26.5t-27 15.5q0 4 -10.5 11t-17.5 8q-9 2 -27 -9q-7 -3 -4 -5q-3 3 -12 11t-16 11q-2 1 -7.5 1t-8.5 2q-1 1 -6 4.5t-7 4.5t-6.5 3t-7.5 1.5t-7.5 -2.5t-8.5 -6t-4.5 -15.5t-2.5 -14.5q-8 6 -0.5 20t1.5 20q-7 7 -21 0.5t-21 -15.5 q-1 -1 -9.5 -5.5t-11.5 -7.5q-4 -6 -9 -17.5t-6 -13.5q0 2 -2.5 6.5t-2.5 6.5q-12 -2 -16 3q5 -16 8 -17l-4 2q-1 -6 3 -15t4 -11q1 -5 -1.5 -13t-2.5 -11q0 -2 5 -11q4 -19 -2 -32q0 -1 -3.5 -7t-6.5 -11l-2 -5l-2 1q-1 1 -2 0q-1 -6 -9 -13t-10 -11q-15 -23 -9 -38 q3 -8 10 -10q3 -1 3 2q1 -9 -11 -27q1 -1 4 -3q-17 0 -10 -14q202 36 352 181h-3zM680 347q16 3 30.5 -16t22.5 -23q41 -20 59 -11q0 -9 14 -28q3 -4 6.5 -11.5t5.5 -10.5q5 -7 19 -16t19 -16q6 3 9 9q13 -35 24 -34q5 0 8 8q0 -1 -0.5 -3t-1.5 -3q7 15 5 26l6 4q5 4 5 5 q-6 6 -9 -3q-30 -14 -48 22q-2 3 -4.5 8t-5 12t-1.5 11.5t6 4.5q11 0 12.5 1.5t-2.5 6t-4 7.5q-1 4 -1.5 12.5t-1.5 12.5l-5 6q-5 6 -11.5 13.5t-7.5 9.5q-4 -10 -16.5 -8.5t-18.5 9.5q1 -2 -0.5 -6.5t-1.5 -6.5q-14 0 -17 1q1 6 3 21t4 22q1 5 5.5 13.5t8 15.5t4.5 14 t-4.5 10.5t-18.5 2.5q-20 -1 -29 -22q-1 -3 -3 -11.5t-5 -12.5t-9 -7q-8 -3 -27 -2t-26 5q-14 8 -24 30.5t-11 41.5q0 10 3 27.5t3 27t-6 26.5q3 2 10 10.5t11 11.5q2 2 5 2h5t4 2t3 6q-1 1 -4 3q-3 3 -4 3q4 -3 19 -1t19 2q0 1 22 0q17 -13 24 2q0 1 -2.5 10.5t-0.5 14.5 q5 -29 32 -10q3 -4 16.5 -6t18.5 -5q3 -2 7 -5.5t6 -5t6 -0.5t9 7q11 -17 13 -25q11 -43 20 -48q8 -2 12.5 -2t5 10.5t0 15.5t-1.5 13l-2 37q-16 3 -20 12.5t1.5 20t16.5 19.5q1 1 16.5 8t21.5 12q24 19 17 39q9 -2 11 9l-5 3q-4 3 -8 5.5t-5 1.5q11 7 2 18q5 3 8 11.5 t9 11.5q9 -14 22 -3q8 9 2 18q5 8 22 11.5t20 9.5q5 -1 7 0t2 4.5v7.5t1 8.5t3 7.5q4 6 16 10.5t14 5.5l19 12q4 4 0 4q18 -2 32 11q13 12 -5 23q2 7 -4 10.5t-16 5.5q3 1 12 0.5t12 1.5q15 11 -7 17q-20 5 -47 -13q-3 -2 -13 -12t-17 -11q15 18 5 22q8 -1 22.5 9t15.5 11 q4 2 10.5 2.5t8.5 1.5q71 25 92 -1q8 11 11 15t9.5 9t15.5 8q21 7 23 9l1 23q-12 -1 -18 8t-7 22l-6 -8q0 6 -3.5 7.5t-7.5 0.5t-9.5 -2t-7.5 0q-9 2 -19.5 15.5t-14.5 16.5q9 0 9 5q-2 5 -10 8q1 6 -2 8t-9 0q-2 12 -1 13q-6 1 -11 11t-8 10q-2 0 -4.5 -2t-5 -5.5l-5 -7 t-3.5 -5.5l-2 -2q-12 6 -24 -10q-9 1 -17 -2q15 6 2 13q-11 5 -21 2q12 5 10 14t-12 16q1 0 4 -1t4 -1q-1 5 -9.5 9.5t-19.5 9t-14 6.5q-7 5 -36 10.5t-36 1.5q-5 -3 -6 -6t1.5 -8.5t3.5 -8.5q6 -23 5 -27q-1 -3 -8.5 -8t-5.5 -12q1 -4 11.5 -10t12.5 -12q5 -13 -4 -25 q-4 -5 -15 -11t-14 -10q-5 -5 -3.5 -11.5t0.5 -9.5q1 1 1 2.5t1 2.5q0 -13 11 -22q8 -6 -16 -18q-20 -11 -20 -4q1 8 -7.5 16t-10.5 12t-3.5 19t-9.5 21q-6 4 -19 4t-18 -5q0 10 -49 30q-17 8 -58 4q7 1 0 17q-8 16 -21 12q-8 25 -4 35q2 5 9 14t9 15q1 3 15.5 6t16.5 8 q1 4 -2.5 6.5t-9.5 4.5q53 -6 63 18q5 9 3 14q0 -1 2 -1t2 -1q12 3 7 17q19 8 26 8q5 -1 11 -6t10 -5q17 -3 21.5 10t-9.5 23q7 -4 7 6q-1 13 -7 19q-3 2 -6.5 2.5t-6.5 0t-7 0.5q-1 0 -8 2q-1 -1 -2 -1h-8q-4 -2 -4 -5v-1q-1 -3 4 -6l5 -1l3 -2q-1 0 -2.5 -2.5t-2.5 -2.5 q0 -3 3 -5q-2 -1 -14 -7.5t-17 -10.5q-1 -1 -4 -2.5t-4 -2.5q-2 -1 -4 2t-4 9t-4 11.5t-4.5 10t-5.5 4.5q-12 0 -18 -17q3 10 -13 17.5t-25 7.5q20 15 -9 30l-1 1q-30 -4 -45 -7q-2 -6 3 -12q-1 -7 6 -9q0 -1 0.5 -1t0.5 -1q0 1 -0.5 1t-0.5 1q3 -1 10.5 -1.5t9.5 -1.5 q3 -1 4.5 -2l7.5 -5t5.5 -6t-2.5 -5q-2 -1 -9 -4t-12.5 -5.5t-6.5 -3.5q-3 -5 0 -16t-2 -15q-5 5 -10 18.5t-8 17.5q8 -9 -30 -6l-8 1q-4 0 -15 -2t-16 -1q-7 0 -29 6q7 17 5 25q5 0 7 2l-6 3q-3 -1 -25 -9q2 -3 8 -9.5t9 -11.5q-22 6 -27 -2q0 -1 -9 0q-25 1 -24 -7 q1 -4 9 -12q0 -9 -1 -9q-27 22 -30 23q-172 -83 -276 -248q1 -2 2.5 -11t3.5 -8.5t11 4.5q9 -9 3 -21q2 2 36 -21q56 -40 22 -53v5.5t1 6.5q-9 -1 -19 5q-3 -6 0.5 -20t11.5 -14q-8 0 -10.5 -17t-2.5 -38.5t-1 -25.5l2 -1q-3 -13 6 -37.5t24 -20.5q-4 -18 5 -21q-1 -4 0 -8 t4.5 -8.5t6 -7l7.5 -7.5l6 -6q28 -11 41 -29q4 -6 10.5 -24.5t15.5 -25.5q-2 -6 10 -21.5t11 -25.5q-1 0 -2.5 -0.5t-2.5 -0.5q3 -8 16.5 -16t16.5 -14q2 -3 2.5 -10.5t3 -12t8.5 -2.5q3 24 -26 68q-16 27 -18 31q-3 5 -5.5 16.5t-4.5 15.5q27 -9 26 -13q-5 -10 26 -52 q2 -3 10 -10t11 -12q3 -4 9.5 -14.5t10.5 -15.5q-1 0 -3 -2l-3 -3q4 -2 9 -5t8 -4.5t7.5 -5t7.5 -7.5q16 -18 20 -33q1 -4 0.5 -15.5t1.5 -16.5q2 -6 6 -11t11.5 -10t11.5 -7t14.5 -6.5t11.5 -5.5q2 -1 18 -11t25 -14q10 -4 16.5 -4.5t16 2.5t15.5 4z" />
+<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM1792 512v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 512v-128h-256v128h256zM1792 992v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
+<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
+<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
+<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
+<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
+<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+<glyph unicode="&#xf0e1;" horiz-adv-x="1379" d="M1014 961q171 0 268 -85.5t97 -254.5v-586q0 -14 -10.5 -24.5t-24.5 -10.5h-252q-14 0 -24.5 10.5t-10.5 24.5v529q0 71 -26.5 104t-95.5 33q-88 0 -123.5 -51.5t-35.5 -143.5v-471q0 -14 -10.5 -24.5t-25.5 -10.5h-246q-14 0 -24.5 10.5t-10.5 24.5v868q0 14 10.5 24.5 t24.5 10.5h239q13 0 21 -5t10.5 -18.5t3 -18t0.5 -22.5q93 87 246 87zM290 938q14 0 24.5 -10.5t10.5 -24.5v-868q0 -14 -10.5 -24.5t-24.5 -10.5h-246q-14 0 -24.5 10.5t-10.5 24.5v868q0 14 10.5 24.5t24.5 10.5h246zM167 1371q69 0 118 -49t49 -118t-49 -118t-118 -49 t-118 49t-49 118t49 118t118 49z" />
+<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-179 0 -336.5 76t-266 213t-147.5 312q-3 14 7 27q9 12 25 12h199q23 0 30 -23q50 -162 185 -261.5t304 -99.5q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5 t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
+<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
+<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h299l-299 299v-299zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544q40 0 88 -20t76 -48l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1632 800q261 -58 287 -93l1 -3q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416 h-64v32h64h160h96q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64z" />
+<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-160q0 -45 2 -76t7.5 -56.5t14.5 -40t23 -26.5t33.5 -15.5t45 -7.5t58 -2.5t72.5 0.5zM1664 192v-192h-1152v192l128 192h-97q-211 0 -313 102.5t-102 314.5v287l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf10c;" d="M1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
+<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
+<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/juddi-gui/web/font/fontawesome-webfont.ttf b/juddi-gui/web/font/fontawesome-webfont.ttf
new file mode 100644
index 0000000..d461724
--- /dev/null
+++ b/juddi-gui/web/font/fontawesome-webfont.ttf
Binary files differ
diff --git a/juddi-gui/web/font/fontawesome-webfont.woff b/juddi-gui/web/font/fontawesome-webfont.woff
new file mode 100644
index 0000000..3c89ae0
--- /dev/null
+++ b/juddi-gui/web/font/fontawesome-webfont.woff
Binary files differ
diff --git a/juddi-gui/web/header-bottom.jsp b/juddi-gui/web/header-bottom.jsp
new file mode 100644
index 0000000..9f2261d
--- /dev/null
+++ b/juddi-gui/web/header-bottom.jsp
@@ -0,0 +1,28 @@
+<%-- 
+    Document   : header-bottom
+    Created on : Feb 24, 2013, 9:08:18 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.commons.lang.StringEscapeUtils"%>
+<%@page import="java.io.IOException"%>
+<%@page import="java.util.jar.Attributes"%>
+<%@page import="java.util.jar.Manifest"%>
+<%@page import="java.io.InputStream"%>
+<%@page import="java.util.jar.JarFile"%>
+<%@page import="java.net.URL"%>
+<%@page import="java.util.Enumeration"%>
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+
+</div> <!-- /container -->
+</form>
+<div style="
+     padding: 0px 0px 0px 0px; bottom: 0px; margin: 0px 0px 0px 0px; width:100%; text-align: center; position: fixed; 
+     background-color: white; 
+     "><center><footer><span style="color: red"><b>BETA</b></span> - v<%
+     out.write(StringEscapeUtils.escapeHtml(org.apache.juddi.v3.client.Release.getRegistryVersion()));
+        %> - <a href="http://www.apache.org"><%=ResourceLoader.GetResource(session, "footer.apachecopyright")%></a</footer></center></div>
+</body>
+</html>
+
diff --git a/juddi-gui/web/header-top.jsp b/juddi-gui/web/header-top.jsp
new file mode 100644
index 0000000..921ba91
--- /dev/null
+++ b/juddi-gui/web/header-top.jsp
@@ -0,0 +1,176 @@
+<%-- 
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+    Document   : header-top
+    Created on : Feb 24, 2013, 9:08:12 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<%
+    //this is to catch someone that bookmarked a page after selecting a language
+    Cookie[] cookies2 = request.getCookies();
+    if (cookies2 != null && cookies2.length > 0) {
+        for (int i = 0; i < cookies2.length; i++) {
+            if (cookies2[i] != null && cookies2[i].getName() != null && cookies2[i].getName().equalsIgnoreCase("locale")) {
+                if (cookies2[i].getValue() != null) {
+                    session.setAttribute("locale", cookies2[i].getValue());
+                }
+            }
+        }
+    }
+    if (session.getAttribute("locale") == null) {
+        //last chance, default to english
+        session.setAttribute("locale", "en");
+    }
+%>
+<html lang="<%=(String) session.getAttribute("locale")%>" dir="<%=ResourceLoader.GetResource(session, "direction")%>">
+    <head>
+        <meta charset="utf-8">
+        <title><%=ResourceLoader.GetResource(session, "title")%></title>
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
+        <meta name="description" content="<%=ResourceLoader.GetResource(session, "description")%>">
+        <meta name="author" content="Apache Software Foundation">
+
+        <link href="css/bootstrap.min.css" rel="stylesheet">
+        <link href="css/bootstrap-datetimepicker.min.css" rel="stylesheet">
+        <link href="css/bootstrap-timepicker.min.css" rel="stylesheet">
+        <link rel="stylesheet" href="css/font-awesome.min.css">
+        <link rel="stylesheet" href="css/ui-lightness/jquery-ui-1.10.2.custom.min.css">
+        <!--[if IE 7]>
+        <link rel="stylesheet" href="css/font-awesome-ie7.min.css">
+        <![endif]-->
+
+        <link rel="shortcut icon" href="favicon.ico" />
+        <style type="text/css">
+            body {
+                padding-top: 60px;
+                padding-bottom: 40px;
+            }
+        </style>
+        <link href="css/bootstrap-responsive.min.css" rel="stylesheet">
+        <link href="css/bootstrap-modal.css" rel="stylesheet">
+
+        <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
+        <!--[if lt IE 9]>
+          <script src="js/html5shiv.js"></script>
+        <![endif]-->
+
+        <!-- Fav and touch icons -->
+
+        <link rel="shortcut icon" href="ico/favicon.png">
+        <script src="js/jquery-1.9.1.js"></script>
+        <script src="js/i18n.js.jsp"></script>
+        <script src="js/bootstrap.min.js"></script>
+        <script src="js/bootstrap-datetimepicker.min.js"></script>
+        <script src="js/bootstrap-timepicker.min.js"></script>
+        <script src="js/bootstrap-modalmanager.js"></script>
+        <script src="js/bootstrap-modal.js"></script>
+        <script src="js/jquery.jeditable.js"></script>
+        <script src="js/jquery-ui-1.10.2.custom.min.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+
+    <body>
+        <form id="uddiform">
+            <%@include  file="csrf.jsp" %>
+            <input type="hidden" name="nonce" id="nonce" value="<%=StringEscapeUtils.escapeHtml((String) session.getAttribute("nonce"))%>" />
+            <div class="alert" style="display:none; position: fixed; top:45px; width:80%; left: 10%; z-index: 1000; opacity: 1.0; background-color: #FFD530; color:black " id="resultBar">
+            </div>
+            <%
+                UddiHub hub = UddiHub.getInstance(application, session);
+            %>
+
+            <div class="navbar navbar-inverse navbar-fixed-top">
+                <div class="navbar-inner">
+                    <div class="container">
+                        <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+                            <span class="icon-bar"></span>
+                            <span class="icon-bar"></span>
+                            <span class="icon-bar"></span>
+                        </button>
+                        <a class="brand" href="home.jsp" style="padding-left:19px; padding-top:0px; padding-bottom:0px"><img src="img/logo2.png"></a>
+                        <div class="nav-collapse collapse">
+                            <ul class="nav">
+                                <li class="dropdown"><a href="home.jsp" data-toggle="dropdown" class="dropdowb-town"><i class="icon-home icon-large"></i><%=ResourceLoader.GetResource(session, "navbar.home")%><b class="caret"></b></a>
+                                    <ul class="dropdown-menu">
+                                        <li><a href="reginfo.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.create.mybiz.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.create.mybiz")%></a></li>
+                                        <li><a href="assertions.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.publisherassertions.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.publisherassertions")%></a></li>
+                                        <li><a href="transfer.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.transfer.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.transfer")%></a></li>
+                                        <li class="divider"></li>
+                                        <li><a href="viewSubscriptions.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.subscriptions.view.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.subscriptions.view")%></a></li>
+                                        <li><a href="editSubscription.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.subscriptions.create.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.subscriptions.create")%></a></li>
+                                        <li><a href="subscriptionFeed.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.subscriptions.feed.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.subscriptions.feed")%></a></li>
+                                    </ul>
+
+
+                                </li>
+                                <li class="dropdown" ><a href="#" data-toggle="dropdown" class="dropdowb-town"><i class="icon-search icon-large"></i><%=ResourceLoader.GetResource(session, "navbar.discover")%><b class="caret"></b></a>
+                                    <ul class="dropdown-menu">
+                                        <li><a href="businessBrowse.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.businesses.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.businesses")%></a></li>
+                                        <li><a href="serviceBrowse.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.services.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.services")%></a></li>
+                                        <li><a href="tmodelBrowse.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.tmodels.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.tmodels")%></a></li>
+                                        <%//                                        <li><a href="publisherBrowse.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.publishers.tooltip")">ResourceLoader.GetResource(session, "navbar.publishers")</a></li>
+%>
+                                        <li class="divider"> </li>
+
+                                        <li><a href="search.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.search.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.search")%></a></li>
+
+
+                                    </ul>
+                                </li>
+                                <li class="dropdown"><a href="#" data-toggle="dropdown" class="dropdowb-town"><i class="icon-pencil icon-large"></i><%=ResourceLoader.GetResource(session, "navbar.create")%><b class="caret"></b></a>
+                                    <ul class="dropdown-menu">
+                                        <li><a href="businessEditor2.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.create.business.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.create.business")%></a></li>
+                                        <li><a href="businessBrowse.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.create.service.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.create.service")%></a></li>
+                                        <li><a href="importFromWsdl.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.create.serviceimport.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.create.serviceimport")%></a></li>
+                                        <li><a href="tmodelEditor.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.create.tmodel.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.create.tmodel")%></a></li>
+                                        <li><a href="tmodelPartitions.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.create.tmodelkeygen.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.create.tmodelkeygen")%></a></li>
+                                    </ul>
+                                </li>
+
+                                <li class="dropdown"><a href="#" data-toggle="dropdown" class="dropdowb-town"><i class="icon-cog icon-large"></i><%=ResourceLoader.GetResource(session, "navbar.settings")%><b class="caret"></b></a>
+                                    <ul class="dropdown-menu">
+                                        <li><a href="settings.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.settings.config.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.settings.config")%></a></li>
+                                    </ul>
+                                </li>
+
+                                <li class="dropdown"><a href="#" data-toggle="dropdown" class="dropdowb-town"><i class="icon-question-sign icon-large"></i><%=ResourceLoader.GetResource(session, "navbar.help")%> <b class="caret"></b></a>
+                                    <ul class="dropdown-menu">
+                                        <li><a href="http://juddi.apache.org/docs/3.x/userguide/html/index.html" title="<%=ResourceLoader.GetResource(session, "navbar.help.userguide")%>"><%=ResourceLoader.GetResource(session, "navbar.help.userguide")%></a></li>
+                                        <li><a href="http://juddi.apache.org/docs/3.x/devguide/html/index.html" title="<%=ResourceLoader.GetResource(session, "navbar.help.devguide")%>"><%=ResourceLoader.GetResource(session, "navbar.help.devguide")%></a></li>
+                                        <li><a href="http://juddi.apache.org/docs.html" title="<%=ResourceLoader.GetResource(session, "navbar.help.api")%>"><%=ResourceLoader.GetResource(session, "navbar.help.api")%></a></li>
+                                        <li><a href="http://wiki.apache.org/juddi" title="<%=ResourceLoader.GetResource(session, "navbar.help.wiki")%>"><%=ResourceLoader.GetResource(session, "navbar.help.wiki")%></a></li>
+                                        <li><a href="http://juddi.apache.org/issue-tracking.html" title="<%=ResourceLoader.GetResource(session, "navbar.help.bugreport")%>"><%=ResourceLoader.GetResource(session, "navbar.help.bugreport")%></a></li>
+                                        <li><a href="http://juddi.apache.org/" title="<%=ResourceLoader.GetResource(session, "navbar.help.website")%>"><%=ResourceLoader.GetResource(session, "navbar.help.website")%></a></li>
+                                        <li><a href="http://www.nabble.com/jUDDI-f218.html" title="<%=ResourceLoader.GetResource(session, "navbar.help.mailinglist")%>"><%=ResourceLoader.GetResource(session, "navbar.help.mailinglist")%></a></li>
+                                        <li><a href="http://svn.apache.org/viewvc/juddi/" title="<%=ResourceLoader.GetResource(session, "navbar.help.source")%>"><%=ResourceLoader.GetResource(session, "navbar.help.source")%></a></li>
+                                        <li><a href="about.jsp" title="<%=ResourceLoader.GetResource(session, "navbar.help.about.tooltip")%>"><%=ResourceLoader.GetResource(session, "navbar.help.about")%></a></li>
+
+                                    </ul>
+                                </li>
+                            </ul>
+                            <div id="loginfield">
+                                <%@include file="login.jsp" %>
+                            </div>
+                        </div><!--/.nav-collapse -->
+                    </div>
+                </div>
+            </div>
diff --git a/juddi-gui/web/home.jsp b/juddi-gui/web/home.jsp
new file mode 100644
index 0000000..2c52cd7
--- /dev/null
+++ b/juddi-gui/web/home.jsp
@@ -0,0 +1,38 @@
+<%-- 
+    Document   : index
+    Created on : Feb 23, 2013, 2:05:35 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp"%>
+
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="hero-unit">
+        <h1>jUDDI</h1>
+        <p><%=ResourceLoader.GetResource(session, "index.juddi")%></p>
+        <p><a href="#" class="btn btn-primary btn-large"><%=ResourceLoader.GetResource(session, "learnmore")%> &raquo;</a></p>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span4">
+            <h2><%=ResourceLoader.GetResource(session, "index.browse.title")%></h2>
+            <p><%=ResourceLoader.GetResource(session, "index.browse")%></p>
+            <p><a class="btn" href="businessBrowse.jsp"><%=ResourceLoader.GetResource(session, "viewdetails")%> &raquo;</a></p>
+        </div>
+        <div class="span4">
+            <h2><%=ResourceLoader.GetResource(session, "navbar.search")%></h2>
+            <p><%=ResourceLoader.GetResource(session, "index.search")%></p>
+            <p><a class="btn" href="search.jsp"><%=ResourceLoader.GetResource(session, "viewdetails")%> &raquo;</a></p>
+        </div>
+        <div class="span4">
+            <h2><%=ResourceLoader.GetResource(session, "index.learn.title")%></h2>
+            <p><%=ResourceLoader.GetResource(session, "index.learn")%></p>
+            <p><a class="btn" href="http://uddi.org/pubs/uddi_v3.htm"><%=ResourceLoader.GetResource(session, "viewdetails")%> &raquo;</a></p>
+        </div>
+    </div>
+    <%@include file="header-bottom.jsp"%>
\ No newline at end of file
diff --git a/juddi-gui/web/img/ajax-loader.gif b/juddi-gui/web/img/ajax-loader.gif
new file mode 100644
index 0000000..4e651ed
--- /dev/null
+++ b/juddi-gui/web/img/ajax-loader.gif
Binary files differ
diff --git a/juddi-gui/web/img/bigrollergreen.gif b/juddi-gui/web/img/bigrollergreen.gif
new file mode 100644
index 0000000..6ffa152
--- /dev/null
+++ b/juddi-gui/web/img/bigrollergreen.gif
Binary files differ
diff --git a/juddi-gui/web/img/bluemarble2.jpg b/juddi-gui/web/img/bluemarble2.jpg
new file mode 100644
index 0000000..a469f92
--- /dev/null
+++ b/juddi-gui/web/img/bluemarble2.jpg
Binary files differ
diff --git a/juddi-gui/web/img/glyphicons-halflings-white.png b/juddi-gui/web/img/glyphicons-halflings-white.png
new file mode 100644
index 0000000..3bf6484
--- /dev/null
+++ b/juddi-gui/web/img/glyphicons-halflings-white.png
Binary files differ
diff --git a/juddi-gui/web/img/glyphicons-halflings.png b/juddi-gui/web/img/glyphicons-halflings.png
new file mode 100644
index 0000000..a996999
--- /dev/null
+++ b/juddi-gui/web/img/glyphicons-halflings.png
Binary files differ
diff --git a/juddi-gui/web/img/juddi_logo_v2.png b/juddi-gui/web/img/juddi_logo_v2.png
new file mode 100644
index 0000000..8d39a80
--- /dev/null
+++ b/juddi-gui/web/img/juddi_logo_v2.png
Binary files differ
diff --git a/juddi-gui/web/img/logo.png b/juddi-gui/web/img/logo.png
new file mode 100644
index 0000000..6a6b975
--- /dev/null
+++ b/juddi-gui/web/img/logo.png
Binary files differ
diff --git a/juddi-gui/web/img/logo2.png b/juddi-gui/web/img/logo2.png
new file mode 100644
index 0000000..db14f44
--- /dev/null
+++ b/juddi-gui/web/img/logo2.png
Binary files differ
diff --git a/juddi-gui/web/importFromWsdl.jsp b/juddi-gui/web/importFromWsdl.jsp
new file mode 100644
index 0000000..b00a2cb
--- /dev/null
+++ b/juddi-gui/web/importFromWsdl.jsp
@@ -0,0 +1,234 @@
+<%-- 
+    Document   : importFromWsdl
+    Created on : May 10, 2013, 6:52:05 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.util.ArrayList"%>
+<%@page import="java.util.List"%>
+<%@page import="javax.xml.datatype.XMLGregorianCalendar"%>
+<%@page import="javax.xml.ws.Holder"%>
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h1><%=ResourceLoader.GetResource(session, "navbar.create.serviceimport")%></h1>
+
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+            <%=ResourceLoader.GetResource(session, "pages.serviceimport.content")%>
+            <Br>
+            <br>
+
+            <div class="accordion" id="accordion2">
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapse1">
+                            Step 1)    WSDL Location and Credentials
+                        </a>
+                    </div>
+                    <div id="collapse1" class="accordion-body collapse in">
+                        <div class="accordion-inner">
+                            The first step is to tell us where we can find the Web Service Description Language (WSDL) document that
+                            describes your services' operations, inputs and outputs and execution URLs. If you don't know where to find it
+                            you can usually add a '?wsdl' to the end of the URL to the service. WSDLs are XML documents.<br>
+                            <input type="text" id="wsdlurl" placeholder="http://localhost:8080/services/myService?wsdl" style="width:100%" ><br>
+                            Sometimes, access to the WSDL file is restricted by a username and password, if this is the case, enter
+                            your credentials here. It won't be saved anywhere.<br>
+                            <%
+                                if (!request.isSecure()) {
+                            %>
+                            <div class="alert alert-error">
+                                <button type="button" class="close" data-dismiss="alert">&times;</button>
+                                <h4><i class="icon-warning-sign"></i> Warning!</h4>
+                                Please consider switching to a secure connection such as SSL or TLS (the address bar starts with https://), 
+                                otherwise your password may be exposed.
+                            </div>
+                            <%                                }
+                            %>
+                            <input type="text" id="wsdlusername" placeholder="username (optional)" ><br>
+                            <input type="text" id="wsdlpassword" placeholder="password (optional)" ><br>
+                            <input type="checkbox" id="wsdlignoressl" > Ignore SSL Errors<br>
+                        </div>
+                    </div>
+                </div>
+                <script type="text/javascript">
+                 
+                    //by James Padolsey
+                    //http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
+                    function parseURL(url) {
+                        var a =  document.createElement('a');
+                        a.href = url;
+                        return {
+                            source: url,
+                            protocol: a.protocol.replace(':',''),
+                            host: a.hostname,
+                            port: a.port,
+                            query: a.search,
+                            params: (function(){
+                                var ret = {},
+                                seg = a.search.replace(/^\?/,'').split('&'),
+                                len = seg.length, i = 0, s;
+                                for (;i<len;i++) {
+                                    if (!seg[i]) { continue; }
+                                    s = seg[i].split('=');
+                                    ret[s[0]] = s[1];
+                                }
+                                return ret;
+                            })(),
+                            file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
+                            hash: a.hash.replace('#',''),
+                            path: a.pathname.replace(/^([^\/])/,'/$1'),
+                            relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
+                            segments: a.pathname.replace(/^\//,'').split('/')
+                        };
+                    }
+                    
+                    //after is entered, fetch the wsdl, parse the key domain
+                    
+                    //considerations, if its an ip address? what about localhost
+                    function trigger1()
+                    {
+                        var l = parseURL($("#wsdlurl").val());
+                        $("#keydomain").val(l.host);
+                        $("#collapse1").collapse('hide');
+                        $("#collapse2").collapse('show');
+                    }
+                    
+                    function preview()
+                    {
+                        var postbackdata = new Array();
+                        var url='ajax/importFromWsdl.jsp';
+                        postbackdata.push({
+                            name:"nonce", 
+                            value: $("#nonce").val()
+                        });
+                        postbackdata.push({
+                            name:"formaction", 
+                            value: "preview"
+                        });
+                        postbackdata.push({
+                            name:"wsdlusername", 
+                            value: $("#wsdlusername").val()
+                        });
+                        postbackdata.push({
+                            name:"wsdlpassword", 
+                            value: $("#wsdlpassword").val()
+                        });
+                        postbackdata.push({
+                            name:"wsdlurl", 
+                            value: $("#wsdlurl").val()
+                        });
+                        if($('#wsdlignoressl').is(':checked')) {
+                            postbackdata.push({
+                                name:"ignoressl", 
+                                value: true
+                            });
+                        }
+                        else
+                        {
+                            postbackdata.push({
+                                name:"ignoressl", 
+                                value: false
+                            }); 
+                        }
+                        postbackdata.push({
+                            name:"businessname", 
+                            value: $("#businessname").val()
+                        });
+                        
+                        postbackdata.push({
+                            name:"keydomain", 
+                            value: $("#keydomain").val()
+                        });
+                        
+                        
+                        
+                        
+                        var request=   $.ajax({
+                            url: url,
+                            type:"POST",
+                            //  dataType: "html", 
+                            cache: false, 
+                            //  processData: false,f
+                            data: postbackdata
+                        });
+                
+                
+                        request.done(function(msg) {
+                            window.console && console.log('postback done '  + url);                
+                            $("#preview").html(msg);
+                        });
+
+                        request.fail(function(jqXHR, textStatus) {
+                            window.console && console.log('postback failed ' + url);                                
+                            $("#preview").html(jqXHR + textStatus);
+       
+                        });
+                    }
+
+                </script>
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapse2" onclick="trigger1();">
+                            Step 2)  Key Domain
+                        </a>
+                    </div>
+                    <div id="collapse2" class="accordion-body collapse">
+                        <div class="accordion-inner">
+                            Enter a key domain or select an existing tModel Key Generator. We'll make one if it doesn't exist<br>
+                            <input type="text" id="keydomain" placeholder="autofilled from the URL">
+                        </div>
+                    </div>
+                </div>
+
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapse3">
+                            Step 3)   Business Selection
+                        </a>
+                    </div>
+                    <div id="collapse3" class="accordion-body collapse">
+                        <div class="accordion-inner">
+                            Create a new one or use an existing one
+                            <br>
+                            Business Chooser or enter a new business name<br>
+
+                            <input type="text" id="businessname" placeholder="Business Key">
+                        </div>
+                    </div>
+                </div>
+
+
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapse4">
+                            Step 4) Review and Approve</a>
+                    </div>
+                    <div id="collapse4" class="accordion-body collapse">
+                        <div class="accordion-inner">
+                            Preview the new items and continue. Don't worry, you can always change these values later
+                            <Br><br>
+                            <div id="preview"></div>
+                            <a class="btn btn-info" onclick="preview();"><i class="icon-eye-open icon-large"></i> Preview</a>
+                            <a class="btn btn-primary" href="#"><i class="icon-save icon-large"></i> Approve</a>
+                        </div>
+                    </div>
+                </div>
+
+            </div>
+
+
+
+        </div>
+    </div>
+
+
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/index.jsp b/juddi-gui/web/index.jsp
new file mode 100644
index 0000000..52fae09
--- /dev/null
+++ b/juddi-gui/web/index.jsp
@@ -0,0 +1,116 @@
+<%-- 
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+    Document   : index
+    Created on : Mar 30, 2013, 10:05:37 PM
+    Author     : Alex O'Ree
+
+--%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<%
+    Cookie[] cookies = request.getCookies();
+    if (cookies != null && cookies.length > 0) {
+        for (int i = 0; i < cookies.length; i++) {
+            if (cookies[i] != null && cookies[i].getName() != null && cookies[i].getName().equalsIgnoreCase("locale")) {
+                if (cookies[i].getValue() != null) {
+                    session.setAttribute("locale", cookies[i].getValue());
+                    response.sendRedirect("home.jsp");
+                }
+            }
+        }
+    }
+    if (request.getMethod().equalsIgnoreCase("post")) {
+        String lang = request.getParameter("language");
+        String checked=request.getParameter("setcookie");
+        if (lang != null) {
+            session.setAttribute("locale", lang);
+            if (checked != null && checked.equalsIgnoreCase("on")) {
+                Cookie cookie = new Cookie("locale", lang);
+                //TODO this is for debugging purposes 
+                //this is in ms, Maxvalue represents something like 70 years
+                cookie.setMaxAge(Integer.MAX_VALUE);
+                //cookie.setDomain("/UDDIBrowser");
+                cookie.setPath("/UDDIBrowser");
+                response.addCookie(cookie);
+            }
+            response.sendRedirect("home.jsp");
+        }
+    }
+%>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <title>Welcome to jUDDI</title>
+        <meta charset="utf-8">
+        <title>Welcome to Apache jUDDI</title>
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
+        <meta name="description" content="Apache jUDDI">
+        <meta name="author" content="Apache Software Foundation">
+
+        <!-- Le styles -->
+        <link href="css/bootstrap.css" rel="stylesheet">
+        <link rel="shortcut icon" href="favicon.ico" />
+        <link href="css/bootstrap-responsive.css" rel="stylesheet">
+
+        <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
+        <!--[if lt IE 9]>
+          <script src="js/html5shiv.js"></script>
+        <![endif]-->
+
+        <!-- Fav and touch icons -->
+
+        <link rel="shortcut icon" href="ico/favicon.png">
+        <style type="text/css">
+            body {
+                padding: 0px 0px 0px 0px;
+                margin: 0px 0px 0px 0px;
+            }
+        </style>
+
+    </head>
+    <body>
+        <div style="width:100%; height: 100%; position:absolute; text-align: center; vertical-align: middle; padding: 0px; margin: 0px; 
+             background-image: url('img/bluemarble2.jpg'); background-repeat: no-repeat; background-position-x: center;
+             background-position-y: center; background-size: cover">
+            <div style="color: black; background-color: whitesmoke; 
+                 background: rgb(235, 235, 235); /* Fall-back for browsers that don't
+                                    support rgba */
+                 background: rgba(235, 235, 235, .7);width:60%; position: relative; left:20%; top:25%; height:50%; vertical-align: middle">
+                <br><br>
+                <h1>Welcome to jUDDI</h1>
+                <form method="POST">
+
+                    <select id="language" name="language" >
+                        <option value="en" selected>English</option>
+                        <option value="es" >Español</option>
+                    </select>
+                    <br>
+                    <input type="checkbox" name="setcookie" checked> Remember my decision<br>
+                    <button type="submit" value="Go" class="btn btn-primary">Go</button>
+
+                </form><br>
+                <b>We welcome help internationalizing jUDDI!</b><br>
+                <script type="text/javascript">
+                
+                </script>
+                <noscript>Your browser does not support JavaScript! Functionality will be so severely reduced, that you might as well give up, sorry!</noscript>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/juddi-gui/web/js/bindingChooser.js b/juddi-gui/web/js/bindingChooser.js
new file mode 100644
index 0000000..22cd877
--- /dev/null
+++ b/juddi-gui/web/js/bindingChooser.js
@@ -0,0 +1,180 @@
+/* 
+ * source http://stackoverflow.com/questions/6049687/jquery-ui-dialog-box-need-to-return-value-when-user-presses-button-but-not-wor 
+ * http://stackoverflow.com/questions/3560872/returning-value-from-confirmation-dialog-using-jquery-ui-dialog
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+function reloadBindingModal()
+{
+    RenderBindingListBySearch('%', offsetBinding, maxrecordsBinding, true);
+                      
+}
+
+
+
+var offsetBinding=0; //start at the begining
+var maxrecordsBinding=10;  //record 20 at a time
+var langBinding="en";  //langauge english
+var totalrecordsBinding=0;
+
+RenderBindingListBySearch('%', offsetBinding, maxrecordsBinding, true);
+
+function pagedownChooserBinding()
+{
+    offsetBinding = $("#offsetBinding").text();
+    //alert(offset);
+    var newoffset = offsetBinding - maxrecordsBinding;
+    if (newoffset < 0)
+        return;
+    //alert(newoffset);
+    if (newoffset != offsetBinding)
+        RenderBindingListBySearch('%', newoffset, maxrecordsBinding, true);
+}
+function pageupChooserBinding()
+{
+    offsetBinding = $("#offsetBinding").text();
+    //alert(offset);
+    var fetch = maxrecordsBinding;
+    if ((parseInt(offsetBinding) + parseInt(maxrecordsBinding))  > totalrecordsBinding)
+        //fetch = maxrecords - offset;
+        return;
+    else 
+        fetch = (parseInt(offsetBinding) + parseInt(maxrecordsBinding));    
+    //alert(fetch);
+    offsetBinding = fetch;
+    RenderBindingListBySearch('%', fetch, maxrecordsBinding, true);
+}
+
+
+var selectedItemBinding=null;
+
+//offset, maxrecords, keyword
+function RenderBindingListBySearch(keyword1, offset1, maxrecords1, isForChooser)
+{
+    var lang = $("#langBinding").text();
+    $("#bindinglist").html("<img src=\"img/bigrollergreen.gif\" title=\"Loading\"/>");
+    var request=   $.ajax({
+        url: 'ajax/bindingsearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang + "&chooser=" + isForChooser,
+        type:"GET",
+        cache: false
+    });
+                  
+    request.done(function(msg) {
+        window.console && console.log('postback done ');                
+        $("#bindinglist").html(msg);
+       
+    //refresh();
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ');                                
+        $("#bindinglist").html("An error occured! " + jqXHR.responseText + textStatus);
+    //refresh();
+    });
+/*
+    $.get('ajax/businesssearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang, function(data) {
+        $("#businesslist").html(data);
+        refresh();
+    });*/
+}
+
+function refreshBinding()
+{
+    var displayrecords = $("#displayrecords").text();
+    if (displayrecords == totalrecordsBinding)
+    {
+        $("#pageupBinding").addClass("disabled");
+        $("#pagedownBinding").addClass("disabled");
+    }
+    else if (offsetBinding + maxrecordsBinding > totalrecordsBinding)
+    {
+        $("#pageupBinding").addClass("disabled");    
+    }
+    else if (offsetBinding ==0)
+    {
+        $("#pagedownBinding").removeClass("disabled");        
+    }
+    else
+    {
+        $("#pagedownBinding").removeClass("disabled");        
+        $("#pageupBinding").removeClass("disabled");        
+    }
+}
+
+/**
+ *This launches the tModel model div, upon return (and if not abprted), the contents of the div parameter will be replaced with the 
+ *first selected tModel
+ */
+function bindingModal(div, type){
+    //reset the form in case it was lanucheed more than once per page view
+    reloadBindingModal();
+    
+    $.dialogBinding.confirm({
+        callback: function(success, result) {
+            if (!success)
+            {
+            //  alert("aborted!");    
+            }
+                
+            else{
+                if (type=='val')
+                    $("#" + div).val(result[0]);
+                else if (type=='html')
+                    $("#" + div).html(result[0]);
+            }
+        //     return false;
+        }
+    });
+// return false;
+}
+            
+            
+function bindingCancel()
+{
+    $(".modalableBinding").each(function()
+    {
+        $(this).prop('checked', false);
+    }); 
+    $('#bindingChooser').modal('hide');
+                
+}
+            
+/**
+ *returns an array of selected tmodel keys
+ */            
+$.dialogBinding = {
+    confirm: function(options) {
+        var $modal = $('#bindingChooser');
+        //$modal.find('.modal-body').text(options.message);
+        
+        $modal.off('click.dialog', '.btn, .close')
+        .off('hidden')
+        .on('click.dialog', '.btn, .close', function() {
+            $(this).addClass('modal-result');
+        }).on('hidden', function() {
+            var result = $(this).find('.modal-result').filter('.btn-primary').length > 0;
+            $(this).find('.modal-result').removeClass('modal-result');
+            /**
+                         * find the result from the model (the selected key)
+                         */
+            var selectedtmodels =  new Array();
+            $(".modalableBinding").each(function()
+            {
+                var id=$(this).attr("id");
+                if ($(this).is(':checked')) {
+                    selectedtmodels.push(
+                        id
+                        );
+                }
+            }); 
+            
+            options.callback(result ,selectedtmodels);
+        //  $modal.modal('hide');
+        });
+        //callback = options.callback;
+        
+        $modal.modal();
+    }        
+};
+
diff --git a/juddi-gui/web/js/bootstrap-datetimepicker.min.js b/juddi-gui/web/js/bootstrap-datetimepicker.min.js
new file mode 100644
index 0000000..92f1f89
--- /dev/null
+++ b/juddi-gui/web/js/bootstrap-datetimepicker.min.js
@@ -0,0 +1,26 @@
+/**
+ * @license
+ * =========================================================
+ * bootstrap-datetimepicker.js 
+ * http://www.eyecon.ro/bootstrap-datepicker
+ * =========================================================
+ * Copyright 2012 Stefan Petre
+ *
+ * Contributions:
+ *  - Andrew Rowls
+ *  - Thiago de Arruda
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =========================================================
+ */
+(function($){var smartPhone=window.orientation!=undefined;var DateTimePicker=function(element,options){this.id=dpgId++;this.init(element,options)};var dateToDate=function(dt){if(typeof dt==="string"){return new Date(dt)}return dt};DateTimePicker.prototype={constructor:DateTimePicker,init:function(element,options){var icon;if(!(options.pickTime||options.pickDate))throw new Error("Must choose at least one picker");this.options=options;this.$element=$(element);this.language=options.language in dates?options.language:"en";this.pickDate=options.pickDate;this.pickTime=options.pickTime;this.isInput=this.$element.is("input");this.component=false;if(this.$element.is(".input-append")||this.$element.is(".input-prepend"))this.component=this.$element.find(".add-on");this.format=options.format;if(!this.format){if(this.isInput)this.format=this.$element.data("format");else this.format=this.$element.find("input").data("format");if(!this.format)this.format="MM/dd/yyyy"}this._compileFormat();if(this.component){icon=this.component.find("i")}if(this.pickTime){if(icon&&icon.length)this.timeIcon=icon.data("time-icon");if(!this.timeIcon)this.timeIcon="icon-time";icon.addClass(this.timeIcon)}if(this.pickDate){if(icon&&icon.length)this.dateIcon=icon.data("date-icon");if(!this.dateIcon)this.dateIcon="icon-calendar";icon.removeClass(this.timeIcon);icon.addClass(this.dateIcon)}this.widget=$(getTemplate(this.timeIcon,options.pickDate,options.pickTime,options.pick12HourFormat,options.pickSeconds)).appendTo("body");this.minViewMode=options.minViewMode||this.$element.data("date-minviewmode")||0;if(typeof this.minViewMode==="string"){switch(this.minViewMode){case"months":this.minViewMode=1;break;case"years":this.minViewMode=2;break;default:this.minViewMode=0;break}}this.viewMode=options.viewMode||this.$element.data("date-viewmode")||0;if(typeof this.viewMode==="string"){switch(this.viewMode){case"months":this.viewMode=1;break;case"years":this.viewMode=2;break;default:this.viewMode=0;break}}this.startViewMode=this.viewMode;this.weekStart=options.weekStart||this.$element.data("date-weekstart")||0;this.weekEnd=this.weekStart===0?6:this.weekStart-1;this.setStartDate(options.startDate||this.$element.data("date-startdate"));this.setEndDate(options.endDate||this.$element.data("date-enddate"));this.fillDow();this.fillMonths();this.fillHours();this.fillMinutes();this.fillSeconds();this.update();this.showMode();this._attachDatePickerEvents()},show:function(e){this.widget.show();this.height=this.component?this.component.outerHeight():this.$element.outerHeight();this.place();this.$element.trigger({type:"show",date:this._date});this._attachDatePickerGlobalEvents();if(e){e.stopPropagation();e.preventDefault()}},disable:function(){this.$element.find("input").prop("disabled",true);this._detachDatePickerEvents()},enable:function(){this.$element.find("input").prop("disabled",false);this._attachDatePickerEvents()},hide:function(){var collapse=this.widget.find(".collapse");for(var i=0;i<collapse.length;i++){var collapseData=collapse.eq(i).data("collapse");if(collapseData&&collapseData.transitioning)return}this.widget.hide();this.viewMode=this.startViewMode;this.showMode();this.set();this.$element.trigger({type:"hide",date:this._date});this._detachDatePickerGlobalEvents()},set:function(){var formatted="";if(!this._unset)formatted=this.formatDate(this._date);if(!this.isInput){if(this.component){var input=this.$element.find("input");input.val(formatted);this._resetMaskPos(input)}this.$element.data("date",formatted)}else{this.$element.val(formatted);this._resetMaskPos(this.$element)}},setValue:function(newDate){if(!newDate){this._unset=true}else{this._unset=false}if(typeof newDate==="string"){this._date=this.parseDate(newDate)}else if(newDate){this._date=new Date(newDate)}this.set();this.viewDate=UTCDate(this._date.getUTCFullYear(),this._date.getUTCMonth(),1,0,0,0,0);this.fillDate();this.fillTime()},getDate:function(){if(this._unset)return null;return new Date(this._date.valueOf())},setDate:function(date){if(!date)this.setValue(null);else this.setValue(date.valueOf())},setStartDate:function(date){if(date instanceof Date){this.startDate=date}else if(typeof date==="string"){this.startDate=new UTCDate(date);if(!this.startDate.getUTCFullYear()){this.startDate=-Infinity}}else{this.startDate=-Infinity}if(this.viewDate){this.update()}},setEndDate:function(date){if(date instanceof Date){this.endDate=date}else if(typeof date==="string"){this.endDate=new UTCDate(date);if(!this.endDate.getUTCFullYear()){this.endDate=Infinity}}else{this.endDate=Infinity}if(this.viewDate){this.update()}},getLocalDate:function(){if(this._unset)return null;var d=this._date;return new Date(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate(),d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds(),d.getUTCMilliseconds())},setLocalDate:function(localDate){if(!localDate)this.setValue(null);else this.setValue(Date.UTC(localDate.getFullYear(),localDate.getMonth(),localDate.getDate(),localDate.getHours(),localDate.getMinutes(),localDate.getSeconds(),localDate.getMilliseconds()))},place:function(){var offset=this.component?this.component.offset():this.$element.offset();this.widget.css({top:offset.top+this.height,left:offset.left})},notifyChange:function(){this.$element.trigger({type:"changeDate",date:this.getDate(),localDate:this.getLocalDate()})},update:function(newDate){var dateStr=newDate;if(!dateStr){if(this.isInput){dateStr=this.$element.val()}else{dateStr=this.$element.find("input").val()}if(!dateStr){var tmp=new Date;this._date=UTCDate(tmp.getFullYear(),tmp.getMonth(),tmp.getDate(),tmp.getHours(),tmp.getMinutes(),tmp.getSeconds(),tmp.getMilliseconds())}else{this._date=this.parseDate(dateStr)}}this.viewDate=UTCDate(this._date.getUTCFullYear(),this._date.getUTCMonth(),1,0,0,0,0);this.fillDate();this.fillTime()},fillDow:function(){var dowCnt=this.weekStart;var html="<tr>";while(dowCnt<this.weekStart+7){html+='<th class="dow">'+dates[this.language].daysMin[dowCnt++%7]+"</th>"}html+="</tr>";this.widget.find(".datepicker-days thead").append(html)},fillMonths:function(){var html="";var i=0;while(i<12){html+='<span class="month">'+dates[this.language].monthsShort[i++]+"</span>"}this.widget.find(".datepicker-months td").append(html)},fillDate:function(){var year=this.viewDate.getUTCFullYear();var month=this.viewDate.getUTCMonth();var currentDate=UTCDate(this._date.getUTCFullYear(),this._date.getUTCMonth(),this._date.getUTCDate(),0,0,0,0);var startYear=typeof this.startDate==="object"?this.startDate.getUTCFullYear():-Infinity;var startMonth=typeof this.startDate==="object"?this.startDate.getUTCMonth():-1;var endYear=typeof this.endDate==="object"?this.endDate.getUTCFullYear():Infinity;var endMonth=typeof this.endDate==="object"?this.endDate.getUTCMonth():12;this.widget.find(".datepicker-days").find(".disabled").removeClass("disabled");this.widget.find(".datepicker-months").find(".disabled").removeClass("disabled");this.widget.find(".datepicker-years").find(".disabled").removeClass("disabled");this.widget.find(".datepicker-days th:eq(1)").text(dates[this.language].months[month]+" "+year);var prevMonth=UTCDate(year,month-1,28,0,0,0,0);var day=DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(),prevMonth.getUTCMonth());prevMonth.setUTCDate(day);prevMonth.setUTCDate(day-(prevMonth.getUTCDay()-this.weekStart+7)%7);if(year==startYear&&month<=startMonth||year<startYear){this.widget.find(".datepicker-days th:eq(0)").addClass("disabled")}if(year==endYear&&month>=endMonth||year>endYear){this.widget.find(".datepicker-days th:eq(2)").addClass("disabled")}var nextMonth=new Date(prevMonth.valueOf());nextMonth.setUTCDate(nextMonth.getUTCDate()+42);nextMonth=nextMonth.valueOf();var html=[];var clsName;while(prevMonth.valueOf()<nextMonth){if(prevMonth.getUTCDay()===this.weekStart){html.push("<tr>")}clsName="";if(prevMonth.getUTCFullYear()<year||prevMonth.getUTCFullYear()==year&&prevMonth.getUTCMonth()<month){clsName+=" old"}else if(prevMonth.getUTCFullYear()>year||prevMonth.getUTCFullYear()==year&&prevMonth.getUTCMonth()>month){clsName+=" new"}if(prevMonth.valueOf()===currentDate.valueOf()){clsName+=" active"}if(prevMonth.valueOf()+864e5<=this.startDate){clsName+=" disabled"}if(prevMonth.valueOf()>this.endDate){clsName+=" disabled"}html.push('<td class="day'+clsName+'">'+prevMonth.getUTCDate()+"</td>");if(prevMonth.getUTCDay()===this.weekEnd){html.push("</tr>")}prevMonth.setUTCDate(prevMonth.getUTCDate()+1)}this.widget.find(".datepicker-days tbody").empty().append(html.join(""));var currentYear=this._date.getUTCFullYear();var months=this.widget.find(".datepicker-months").find("th:eq(1)").text(year).end().find("span").removeClass("active");if(currentYear===year){months.eq(this._date.getUTCMonth()).addClass("active")}if(currentYear-1<startYear){this.widget.find(".datepicker-months th:eq(0)").addClass("disabled")}if(currentYear+1>endYear){this.widget.find(".datepicker-months th:eq(2)").addClass("disabled")}for(var i=0;i<12;i++){if(year==startYear&&startMonth>i||year<startYear){$(months[i]).addClass("disabled")}else if(year==endYear&&endMonth<i||year>endYear){$(months[i]).addClass("disabled")}}html="";year=parseInt(year/10,10)*10;var yearCont=this.widget.find(".datepicker-years").find("th:eq(1)").text(year+"-"+(year+9)).end().find("td");this.widget.find(".datepicker-years").find("th").removeClass("disabled");if(startYear>year){this.widget.find(".datepicker-years").find("th:eq(0)").addClass("disabled")}if(endYear<year+9){this.widget.find(".datepicker-years").find("th:eq(2)").addClass("disabled")}year-=1;for(var i=-1;i<11;i++){html+='<span class="year'+(i===-1||i===10?" old":"")+(currentYear===year?" active":"")+(year<startYear||year>endYear?" disabled":"")+'">'+year+"</span>";year+=1}yearCont.html(html)},fillHours:function(){var table=this.widget.find(".timepicker .timepicker-hours table");table.parent().hide();var html="";if(this.options.pick12HourFormat){var current=1;for(var i=0;i<3;i+=1){html+="<tr>";for(var j=0;j<4;j+=1){var c=current.toString();html+='<td class="hour">'+padLeft(c,2,"0")+"</td>";current++}html+="</tr>"}}else{var current=0;for(var i=0;i<6;i+=1){html+="<tr>";for(var j=0;j<4;j+=1){var c=current.toString();html+='<td class="hour">'+padLeft(c,2,"0")+"</td>";current++}html+="</tr>"}}table.html(html)},fillMinutes:function(){var table=this.widget.find(".timepicker .timepicker-minutes table");table.parent().hide();var html="";var current=0;for(var i=0;i<5;i++){html+="<tr>";for(var j=0;j<4;j+=1){var c=current.toString();html+='<td class="minute">'+padLeft(c,2,"0")+"</td>";current+=3}html+="</tr>"}table.html(html)},fillSeconds:function(){var table=this.widget.find(".timepicker .timepicker-seconds table");table.parent().hide();var html="";var current=0;for(var i=0;i<5;i++){html+="<tr>";for(var j=0;j<4;j+=1){var c=current.toString();html+='<td class="second">'+padLeft(c,2,"0")+"</td>";current+=3}html+="</tr>"}table.html(html)},fillTime:function(){if(!this._date)return;var timeComponents=this.widget.find(".timepicker span[data-time-component]");var table=timeComponents.closest("table");var is12HourFormat=this.options.pick12HourFormat;var hour=this._date.getUTCHours();var period="AM";if(is12HourFormat){if(hour>=12)period="PM";if(hour===0)hour=12;else if(hour!=12)hour=hour%12;this.widget.find(".timepicker [data-action=togglePeriod]").text(period)}hour=padLeft(hour.toString(),2,"0");var minute=padLeft(this._date.getUTCMinutes().toString(),2,"0");var second=padLeft(this._date.getUTCSeconds().toString(),2,"0");timeComponents.filter("[data-time-component=hours]").text(hour);timeComponents.filter("[data-time-component=minutes]").text(minute);timeComponents.filter("[data-time-component=seconds]").text(second)},click:function(e){e.stopPropagation();e.preventDefault();this._unset=false;var target=$(e.target).closest("span, td, th");if(target.length===1){if(!target.is(".disabled")){switch(target[0].nodeName.toLowerCase()){case"th":switch(target[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var vd=this.viewDate;var navFnc=DPGlobal.modes[this.viewMode].navFnc;var step=DPGlobal.modes[this.viewMode].navStep;if(target[0].className==="prev")step=step*-1;vd["set"+navFnc](vd["get"+navFnc]()+step);this.fillDate();this.set();break}break;case"span":if(target.is(".month")){var month=target.parent().find("span").index(target);this.viewDate.setUTCMonth(month)}else{var year=parseInt(target.text(),10)||0;this.viewDate.setUTCFullYear(year)}if(this.viewMode!==0){this._date=UTCDate(this.viewDate.getUTCFullYear(),this.viewDate.getUTCMonth(),this.viewDate.getUTCDate(),this._date.getUTCHours(),this._date.getUTCMinutes(),this._date.getUTCSeconds(),this._date.getUTCMilliseconds());this.notifyChange()}this.showMode(-1);this.fillDate();this.set();break;case"td":if(target.is(".day")){var day=parseInt(target.text(),10)||1;var month=this.viewDate.getUTCMonth();var year=this.viewDate.getUTCFullYear();if(target.is(".old")){if(month===0){month=11;year-=1}else{month-=1}}else if(target.is(".new")){if(month==11){month=0;year+=1}else{month+=1}}this._date=UTCDate(year,month,day,this._date.getUTCHours(),this._date.getUTCMinutes(),this._date.getUTCSeconds(),this._date.getUTCMilliseconds());this.viewDate=UTCDate(year,month,Math.min(28,day),0,0,0,0);this.fillDate();this.set();this.notifyChange()}break}}}},actions:{incrementHours:function(e){this._date.setUTCHours(this._date.getUTCHours()+1)},incrementMinutes:function(e){this._date.setUTCMinutes(this._date.getUTCMinutes()+1)},incrementSeconds:function(e){this._date.setUTCSeconds(this._date.getUTCSeconds()+1)},decrementHours:function(e){this._date.setUTCHours(this._date.getUTCHours()-1)},decrementMinutes:function(e){this._date.setUTCMinutes(this._date.getUTCMinutes()-1)},decrementSeconds:function(e){this._date.setUTCSeconds(this._date.getUTCSeconds()-1)},togglePeriod:function(e){var hour=this._date.getUTCHours();if(hour>=12)hour-=12;else hour+=12;this._date.setUTCHours(hour)},showPicker:function(){this.widget.find(".timepicker > div:not(.timepicker-picker)").hide();this.widget.find(".timepicker .timepicker-picker").show()},showHours:function(){this.widget.find(".timepicker .timepicker-picker").hide();this.widget.find(".timepicker .timepicker-hours").show()},showMinutes:function(){this.widget.find(".timepicker .timepicker-picker").hide();this.widget.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){this.widget.find(".timepicker .timepicker-picker").hide();this.widget.find(".timepicker .timepicker-seconds").show()},selectHour:function(e){var tgt=$(e.target);var value=parseInt(tgt.text(),10);if(this.options.pick12HourFormat){var current=this._date.getUTCHours();if(current>=12){if(value!=12)value=(value+12)%24}else{if(value===12)value=0;else value=value%12}}this._date.setUTCHours(value);this.actions.showPicker.call(this)},selectMinute:function(e){var tgt=$(e.target);var value=parseInt(tgt.text(),10);this._date.setUTCMinutes(value);this.actions.showPicker.call(this)},selectSecond:function(e){var tgt=$(e.target);var value=parseInt(tgt.text(),10);this._date.setUTCSeconds(value);this.actions.showPicker.call(this)}},doAction:function(e){e.stopPropagation();e.preventDefault();if(!this._date)this._date=UTCDate(1970,0,0,0,0,0,0);var action=$(e.currentTarget).data("action");var rv=this.actions[action].apply(this,arguments);this.set();this.fillTime();this.notifyChange();return rv},stopEvent:function(e){e.stopPropagation();e.preventDefault()},keydown:function(e){var self=this,k=e.which,input=$(e.target);if(k==8||k==46){setTimeout(function(){self._resetMaskPos(input)})}},keypress:function(e){var k=e.which;if(k==8||k==46){return}var input=$(e.target);var c=String.fromCharCode(k);var val=input.val()||"";val+=c;var mask=this._mask[this._maskPos];if(!mask){return false}if(mask.end!=val.length){return}if(!mask.pattern.test(val.slice(mask.start))){val=val.slice(0,val.length-1);while((mask=this._mask[this._maskPos])&&mask.character){val+=mask.character;this._maskPos++}val+=c;if(mask.end!=val.length){input.val(val);return false}else{if(!mask.pattern.test(val.slice(mask.start))){input.val(val.slice(0,mask.start));return false}else{input.val(val);this._maskPos++;return false}}}else{this._maskPos++}},change:function(e){var input=$(e.target);var val=input.val();if(this._formatPattern.test(val)){this.update();this.setValue(this._date.getTime());this.notifyChange();this.set()}else if(val&&val.trim()){this.setValue(this._date.getTime());if(this._date)this.set();else input.val("")}else{if(this._date){this.setValue(null);this.notifyChange();this._unset=true}}this._resetMaskPos(input)},showMode:function(dir){if(dir){this.viewMode=Math.max(this.minViewMode,Math.min(2,this.viewMode+dir))}this.widget.find(".datepicker > div").hide().filter(".datepicker-"+DPGlobal.modes[this.viewMode].clsName).show()},destroy:function(){this._detachDatePickerEvents();this._detachDatePickerGlobalEvents();this.widget.remove();this.$element.removeData("datetimepicker");this.component.removeData("datetimepicker")},formatDate:function(d){return this.format.replace(formatReplacer,function(match){var methodName,property,rv,len=match.length;if(match==="ms")len=1;property=dateFormatComponents[match].property;if(property==="Hours12"){rv=d.getUTCHours();if(rv===0)rv=12;else if(rv!==12)rv=rv%12}else if(property==="Period12"){if(d.getUTCHours()>=12)return"PM";else return"AM"}else{methodName="get"+property;rv=d[methodName]()}if(methodName==="getUTCMonth")rv=rv+1;if(methodName==="getUTCYear")rv=rv+1900-2e3;return padLeft(rv.toString(),len,"0")})},parseDate:function(str){var match,i,property,methodName,value,parsed={};if(!(match=this._formatPattern.exec(str)))return null;for(i=1;i<match.length;i++){property=this._propertiesByIndex[i];if(!property)continue;value=match[i];if(/^\d+$/.test(value))value=parseInt(value,10);parsed[property]=value}return this._finishParsingDate(parsed)},_resetMaskPos:function(input){var val=input.val();for(var i=0;i<this._mask.length;i++){if(this._mask[i].end>val.length){this._maskPos=i;break}else if(this._mask[i].end===val.length){this._maskPos=i+1;break}}},_finishParsingDate:function(parsed){var year,month,date,hours,minutes,seconds,milliseconds;year=parsed.UTCFullYear;if(parsed.UTCYear)year=2e3+parsed.UTCYear;if(!year)year=1970;if(parsed.UTCMonth)month=parsed.UTCMonth-1;else month=0;date=parsed.UTCDate||1;hours=parsed.UTCHours||0;minutes=parsed.UTCMinutes||0;seconds=parsed.UTCSeconds||0;milliseconds=parsed.UTCMilliseconds||0;if(parsed.Hours12){hours=parsed.Hours12}if(parsed.Period12){if(/pm/i.test(parsed.Period12)){if(hours!=12)hours=(hours+12)%24}else{hours=hours%12}}return UTCDate(year,month,date,hours,minutes,seconds,milliseconds)},_compileFormat:function(){var match,component,components=[],mask=[],str=this.format,propertiesByIndex={},i=0,pos=0;while(match=formatComponent.exec(str)){component=match[0];if(component in dateFormatComponents){i++;propertiesByIndex[i]=dateFormatComponents[component].property;components.push("\\s*"+dateFormatComponents[component].getPattern(this)+"\\s*");mask.push({pattern:new RegExp(dateFormatComponents[component].getPattern(this)),property:dateFormatComponents[component].property,start:pos,end:pos+=component.length})}else{components.push(escapeRegExp(component));mask.push({pattern:new RegExp(escapeRegExp(component)),character:component,start:pos,end:++pos})}str=str.slice(component.length)}this._mask=mask;this._maskPos=0;this._formatPattern=new RegExp("^\\s*"+components.join("")+"\\s*$");this._propertiesByIndex=propertiesByIndex},_attachDatePickerEvents:function(){var self=this;this.widget.on("click",".datepicker *",$.proxy(this.click,this));this.widget.on("click","[data-action]",$.proxy(this.doAction,this));this.widget.on("mousedown",$.proxy(this.stopEvent,this));if(this.pickDate&&this.pickTime){this.widget.on("click.togglePicker",".accordion-toggle",function(e){e.stopPropagation();var $this=$(this);var $parent=$this.closest("ul");var expanded=$parent.find(".collapse.in");var closed=$parent.find(".collapse:not(.in)");if(expanded&&expanded.length){var collapseData=expanded.data("collapse");if(collapseData&&collapseData.transitioning)return;expanded.collapse("hide");closed.collapse("show");$this.find("i").toggleClass(self.timeIcon+" "+self.dateIcon);self.$element.find(".add-on i").toggleClass(self.timeIcon+" "+self.dateIcon)}})}if(this.isInput){this.$element.on({focus:$.proxy(this.show,this),change:$.proxy(this.change,this)});if(this.options.maskInput){this.$element.on({keydown:$.proxy(this.keydown,this),keypress:$.proxy(this.keypress,this)})}}else{this.$element.on({change:$.proxy(this.change,this)},"input");if(this.options.maskInput){this.$element.on({keydown:$.proxy(this.keydown,this),keypress:$.proxy(this.keypress,this)},"input")}if(this.component){this.component.on("click",$.proxy(this.show,this))}else{this.$element.on("click",$.proxy(this.show,this))}}},_attachDatePickerGlobalEvents:function(){$(window).on("resize.datetimepicker"+this.id,$.proxy(this.place,this));if(!this.isInput){$(document).on("mousedown.datetimepicker"+this.id,$.proxy(this.hide,this))}},_detachDatePickerEvents:function(){this.widget.off("click",".datepicker *",this.click);this.widget.off("click","[data-action]");this.widget.off("mousedown",this.stopEvent);if(this.pickDate&&this.pickTime){this.widget.off("click.togglePicker")}if(this.isInput){this.$element.off({focus:this.show,change:this.change});if(this.options.maskInput){this.$element.off({keydown:this.keydown,keypress:this.keypress})}}else{this.$element.off({change:this.change},"input");if(this.options.maskInput){this.$element.off({keydown:this.keydown,keypress:this.keypress},"input")}if(this.component){this.component.off("click",this.show)}else{this.$element.off("click",this.show)}}},_detachDatePickerGlobalEvents:function(){$(window).off("resize.datetimepicker"+this.id);if(!this.isInput){$(document).off("mousedown.datetimepicker"+this.id)}}};$.fn.datetimepicker=function(option,val){return this.each(function(){var $this=$(this),data=$this.data("datetimepicker"),options=typeof option==="object"&&option;if(!data){$this.data("datetimepicker",data=new DateTimePicker(this,$.extend({},$.fn.datetimepicker.defaults,options)))}if(typeof option==="string")data[option](val)})};$.fn.datetimepicker.defaults={maskInput:false,pickDate:true,pickTime:true,pick12HourFormat:false,pickSeconds:true,startDate:-Infinity,endDate:Infinity};$.fn.datetimepicker.Constructor=DateTimePicker;var dpgId=0;var dates=$.fn.datetimepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}};var dateFormatComponents={dd:{property:"UTCDate",getPattern:function(){return"(0?[1-9]|[1-2][0-9]|3[0-1])\\b"}},MM:{property:"UTCMonth",getPattern:function(){return"(0?[1-9]|1[0-2])\\b"}},yy:{property:"UTCYear",getPattern:function(){return"(\\d{2})\\b"}},yyyy:{property:"UTCFullYear",getPattern:function(){return"(\\d{4})\\b"}},hh:{property:"UTCHours",getPattern:function(){return"(0?[0-9]|1[0-9]|2[0-3])\\b"}},mm:{property:"UTCMinutes",getPattern:function(){return"(0?[0-9]|[1-5][0-9])\\b"}},ss:{property:"UTCSeconds",getPattern:function(){return"(0?[0-9]|[1-5][0-9])\\b"}},ms:{property:"UTCMilliseconds",getPattern:function(){return"([0-9]{1,3})\\b"}},HH:{property:"Hours12",getPattern:function(){return"(0?[1-9]|1[0-2])\\b"}},PP:{property:"Period12",getPattern:function(){return"(AM|PM|am|pm|Am|aM|Pm|pM)\\b"}}};var keys=[];for(var k in dateFormatComponents)keys.push(k);keys[keys.length-1]+="\\b";keys.push(".");var formatComponent=new RegExp(keys.join("\\b|"));keys.pop();var formatReplacer=new RegExp(keys.join("\\b|"),"g");function escapeRegExp(str){return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function padLeft(s,l,c){if(l<s.length)return s;else return Array(l-s.length+1).join(c||" ")+s}function getTemplate(timeIcon,pickDate,pickTime,is12Hours,showSeconds){if(pickDate&&pickTime){return'<div class="bootstrap-datetimepicker-widget dropdown-menu">'+"<ul>"+'<li class="collapse in">'+'<div class="datepicker">'+DPGlobal.template+"</div>"+"</li>"+'<li class="picker-switch"><a class="accordion-toggle"><i class="'+timeIcon+'"></i></a></li>'+'<li class="collapse">'+'<div class="timepicker">'+TPGlobal.getTemplate(is12Hours,showSeconds)+"</div>"+"</li>"+"</ul>"+"</div>"}else if(pickTime){return'<div class="bootstrap-datetimepicker-widget dropdown-menu">'+'<div class="timepicker">'+TPGlobal.getTemplate(is12Hours,showSeconds)+"</div>"+"</div>"}else{return'<div class="bootstrap-datetimepicker-widget dropdown-menu">'+'<div class="datepicker">'+DPGlobal.template+"</div>"+"</div>"}}function UTCDate(){return new Date(Date.UTC.apply(Date,arguments))}var DPGlobal={modes:[{clsName:"days",navFnc:"UTCMonth",navStep:1},{clsName:"months",navFnc:"UTCFullYear",navStep:1},{clsName:"years",navFnc:"UTCFullYear",navStep:10}],isLeapYear:function(year){return year%4===0&&year%100!==0||year%400===0},getDaysInMonth:function(year,month){return[31,DPGlobal.isLeapYear(year)?29:28,31,30,31,30,31,31,30,31,30,31][month]},headTemplate:"<thead>"+"<tr>"+'<th class="prev">&lsaquo;</th>'+'<th colspan="5" class="switch"></th>'+'<th class="next">&rsaquo;</th>'+"</tr>"+"</thead>",contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>'};DPGlobal.template='<div class="datepicker-days">'+'<table class="table-condensed">'+DPGlobal.headTemplate+"<tbody></tbody>"+"</table>"+"</div>"+'<div class="datepicker-months">'+'<table class="table-condensed">'+DPGlobal.headTemplate+DPGlobal.contTemplate+"</table>"+"</div>"+'<div class="datepicker-years">'+'<table class="table-condensed">'+DPGlobal.headTemplate+DPGlobal.contTemplate+"</table>"+"</div>";var TPGlobal={hourTemplate:'<span data-action="showHours" data-time-component="hours" class="timepicker-hour"></span>',minuteTemplate:'<span data-action="showMinutes" data-time-component="minutes" class="timepicker-minute"></span>',secondTemplate:'<span data-action="showSeconds" data-time-component="seconds" class="timepicker-second"></span>'};TPGlobal.getTemplate=function(is12Hours,showSeconds){return'<div class="timepicker-picker">'+'<table class="table-condensed"'+(is12Hours?' data-hour-format="12"':"")+">"+"<tr>"+'<td><a href="#" class="btn" data-action="incrementHours"><i class="icon-chevron-up"></i></a></td>'+'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="incrementMinutes"><i class="icon-chevron-up"></i></a></td>'+(showSeconds?'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="incrementSeconds"><i class="icon-chevron-up"></i></a></td>':"")+(is12Hours?'<td class="separator"></td>':"")+"</tr>"+"<tr>"+"<td>"+TPGlobal.hourTemplate+"</td> "+'<td class="separator">:</td>'+"<td>"+TPGlobal.minuteTemplate+"</td> "+(showSeconds?'<td class="separator">:</td>'+"<td>"+TPGlobal.secondTemplate+"</td>":"")+(is12Hours?'<td class="separator"></td>'+"<td>"+'<button type="button" class="btn btn-primary" data-action="togglePeriod"></button>'+"</td>":"")+"</tr>"+"<tr>"+'<td><a href="#" class="btn" data-action="decrementHours"><i class="icon-chevron-down"></i></a></td>'+'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="decrementMinutes"><i class="icon-chevron-down"></i></a></td>'+(showSeconds?'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="decrementSeconds"><i class="icon-chevron-down"></i></a></td>':"")+(is12Hours?'<td class="separator"></td>':"")+"</tr>"+"</table>"+"</div>"+'<div class="timepicker-hours" data-action="selectHour">'+'<table class="table-condensed">'+"</table>"+"</div>"+'<div class="timepicker-minutes" data-action="selectMinute">'+'<table class="table-condensed">'+"</table>"+"</div>"+(showSeconds?'<div class="timepicker-seconds" data-action="selectSecond">'+'<table class="table-condensed">'+"</table>"+"</div>":"")}})(window.jQuery);
\ No newline at end of file
diff --git a/juddi-gui/web/js/bootstrap-modal.js b/juddi-gui/web/js/bootstrap-modal.js
new file mode 100644
index 0000000..c125bd5
--- /dev/null
+++ b/juddi-gui/web/js/bootstrap-modal.js
@@ -0,0 +1,374 @@
+/* ===========================================================
+ * bootstrap-modal.js v2.1
+ * ===========================================================
+ * Copyright 2012 Jordan Schroter
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function ($) {
+
+	"use strict"; // jshint ;_;
+
+	/* MODAL CLASS DEFINITION
+	* ====================== */
+
+	var Modal = function (element, options) {
+		this.init(element, options);
+	};
+
+	Modal.prototype = {
+
+		constructor: Modal,
+
+		init: function (element, options) {
+			this.options = options;
+
+			this.$element = $(element)
+				.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this));
+
+			this.options.remote && this.$element.find('.modal-body').load(this.options.remote);
+
+			var manager = typeof this.options.manager === 'function' ?
+				this.options.manager.call(this) : this.options.manager;
+
+			manager = manager.appendModal ?
+				manager : $(manager).modalmanager().data('modalmanager');
+
+			manager.appendModal(this);
+		},
+
+		toggle: function () {
+			return this[!this.isShown ? 'show' : 'hide']();
+		},
+
+		show: function () {
+			var e = $.Event('show');
+
+			if (this.isShown) return;
+
+			this.$element.trigger(e);
+
+			if (e.isDefaultPrevented()) return;
+
+			this.escape();
+
+			this.tab();
+
+			this.options.loading && this.loading();
+		},
+
+		hide: function (e) {
+			e && e.preventDefault();
+
+			e = $.Event('hide');
+
+			this.$element.trigger(e);
+
+			if (!this.isShown || e.isDefaultPrevented()) return (this.isShown = false);
+
+			this.isShown = false;
+
+			this.escape();
+
+			this.tab();
+
+			this.isLoading && this.loading();
+
+			$(document).off('focusin.modal');
+
+			this.$element
+				.removeClass('in')
+				.removeClass('animated')
+				.removeClass(this.options.attentionAnimation)
+				.removeClass('modal-overflow')
+				.attr('aria-hidden', true);
+
+			$.support.transition && this.$element.hasClass('fade') ?
+				this.hideWithTransition() :
+				this.hideModal();
+		},
+
+		layout: function () {
+			var prop = this.options.height ? 'height' : 'max-height',
+				value = this.options.height || this.options.maxHeight;
+
+			if (this.options.width){
+				this.$element.css('width', this.options.width);
+
+				var that = this;
+				this.$element.css('margin-left', function () {
+					if (/%/ig.test(that.options.width)){
+						return -(parseInt(that.options.width) / 2) + '%';
+					} else {
+						return -($(this).width() / 2) + 'px';
+					}
+				});
+			} else {
+				this.$element.css('width', '');
+				this.$element.css('margin-left', '');
+			}
+
+			this.$element.find('.modal-body')
+				.css('overflow', '')
+				.css(prop, '');
+
+			var modalOverflow = $(window).height() - 10 < this.$element.height();
+
+			if (value){
+				this.$element.find('.modal-body')
+					.css('overflow', 'auto')
+					.css(prop, value);
+			}
+
+			if (modalOverflow || this.options.modalOverflow) {
+				this.$element
+					.css('margin-top', 0)
+					.addClass('modal-overflow');
+			} else {
+				this.$element
+					.css('margin-top', 0 - this.$element.height() / 2)
+					.removeClass('modal-overflow');
+			}
+		},
+
+		tab: function () {
+			var that = this;
+
+			if (this.isShown && this.options.consumeTab) {
+				this.$element.on('keydown.tabindex.modal', '[data-tabindex]', function (e) {
+			    	if (e.keyCode && e.keyCode == 9){
+						var $next = $(this),
+							$rollover = $(this);
+
+						that.$element.find('[data-tabindex]:enabled:not([readonly])').each(function (e) {
+							if (!e.shiftKey){
+						 		$next = $next.data('tabindex') < $(this).data('tabindex') ?
+									$next = $(this) :
+									$rollover = $(this);
+							} else {
+								$next = $next.data('tabindex') > $(this).data('tabindex') ?
+									$next = $(this) :
+									$rollover = $(this);
+							}
+						});
+
+						$next[0] !== $(this)[0] ?
+							$next.focus() : $rollover.focus();
+
+						e.preventDefault();
+					}
+				});
+			} else if (!this.isShown) {
+				this.$element.off('keydown.tabindex.modal');
+			}
+		},
+
+		escape: function () {
+			var that = this;
+			if (this.isShown && this.options.keyboard) {
+				if (!this.$element.attr('tabindex')) this.$element.attr('tabindex', -1);
+
+				this.$element.on('keyup.dismiss.modal', function (e) {
+					e.which == 27 && that.hide();
+				});
+			} else if (!this.isShown) {
+				this.$element.off('keyup.dismiss.modal')
+			}
+		},
+
+		hideWithTransition: function () {
+			var that = this
+				, timeout = setTimeout(function () {
+					that.$element.off($.support.transition.end);
+					that.hideModal();
+				}, 500);
+
+			this.$element.one($.support.transition.end, function () {
+				clearTimeout(timeout);
+				that.hideModal();
+			});
+		},
+
+		hideModal: function () {
+			this.$element
+				.hide()
+				.trigger('hidden');
+
+			var prop = this.options.height ? 'height' : 'max-height';
+			var value = this.options.height || this.options.maxHeight;
+
+			if (value){
+				this.$element.find('.modal-body')
+					.css('overflow', '')
+					.css(prop, '');
+			}
+
+		},
+
+		removeLoading: function () {
+			this.$loading.remove();
+			this.$loading = null;
+			this.isLoading = false;
+		},
+
+		loading: function (callback) {
+			callback = callback || function () {};
+
+			var animate = this.$element.hasClass('fade') ? 'fade' : '';
+
+			if (!this.isLoading) {
+				var doAnimate = $.support.transition && animate;
+
+				this.$loading = $('<div class="loading-mask ' + animate + '">')
+					.append(this.options.spinner)
+					.appendTo(this.$element);
+
+				if (doAnimate) this.$loading[0].offsetWidth; // force reflow
+
+				this.$loading.addClass('in');
+
+				this.isLoading = true;
+
+				doAnimate ?
+					this.$loading.one($.support.transition.end, callback) :
+					callback();
+
+			} else if (this.isLoading && this.$loading) {
+				this.$loading.removeClass('in');
+
+				var that = this;
+				$.support.transition && this.$element.hasClass('fade')?
+					this.$loading.one($.support.transition.end, function () { that.removeLoading() }) :
+					that.removeLoading();
+
+			} else if (callback) {
+				callback(this.isLoading);
+			}
+		},
+
+		focus: function () {
+			var $focusElem = this.$element.find(this.options.focusOn);
+
+			$focusElem = $focusElem.length ? $focusElem : this.$element;
+
+			$focusElem.focus();
+		},
+
+		attention: function (){
+			// NOTE: transitionEnd with keyframes causes odd behaviour
+
+			if (this.options.attentionAnimation){
+				this.$element
+					.removeClass('animated')
+					.removeClass(this.options.attentionAnimation);
+
+				var that = this;
+
+				setTimeout(function () {
+					that.$element
+						.addClass('animated')
+						.addClass(that.options.attentionAnimation);
+				}, 0);
+			}
+
+
+			this.focus();
+		},
+
+
+		destroy: function () {
+			var e = $.Event('destroy');
+			this.$element.trigger(e);
+			if (e.isDefaultPrevented()) return;
+
+			this.teardown();
+		},
+
+		teardown: function () {
+			if (!this.$parent.length){
+				this.$element.remove();
+				this.$element = null;
+				return;
+			}
+
+			if (this.$parent !== this.$element.parent()){
+				this.$element.appendTo(this.$parent);
+			}
+
+			this.$element.off('.modal');
+			this.$element.removeData('modal');
+			this.$element
+				.removeClass('in')
+				.attr('aria-hidden', true);
+		}
+	};
+
+
+	/* MODAL PLUGIN DEFINITION
+	* ======================= */
+
+	$.fn.modal = function (option, args) {
+		return this.each(function () {
+			var $this = $(this),
+				data = $this.data('modal'),
+				options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option);
+
+			if (!data) $this.data('modal', (data = new Modal(this, options)));
+			if (typeof option == 'string') data[option].apply(data, [].concat(args));
+			else if (options.show) data.show()
+		})
+	};
+
+	$.fn.modal.defaults = {
+		keyboard: true,
+		backdrop: true,
+		loading: false,
+		show: true,
+		width: null,
+		height: null,
+		maxHeight: null,
+		modalOverflow: false,
+		consumeTab: true,
+		focusOn: null,
+		replace: false,
+		resize: false,
+		attentionAnimation: 'shake',
+		manager: 'body',
+		spinner: '<div class="loading-spinner" style="width: 200px; margin-left: -100px;"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>'
+	};
+
+	$.fn.modal.Constructor = Modal;
+
+
+	/* MODAL DATA-API
+	* ============== */
+
+	$(function () {
+		$(document).off('click.modal').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
+			var $this = $(this),
+				href = $this.attr('href'),
+				$target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))), //strip for ie7
+				option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data());
+
+			e.preventDefault();
+			$target
+				.modal(option)
+				.one('hide', function () {
+					$this.focus();
+				})
+		});
+	});
+
+}(window.jQuery);
diff --git a/juddi-gui/web/js/bootstrap-modalmanager.js b/juddi-gui/web/js/bootstrap-modalmanager.js
new file mode 100644
index 0000000..2859a81
--- /dev/null
+++ b/juddi-gui/web/js/bootstrap-modalmanager.js
@@ -0,0 +1,412 @@
+/* ===========================================================
+ * bootstrap-modalmanager.js v2.1
+ * ===========================================================
+ * Copyright 2012 Jordan Schroter.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+!function ($) {
+
+	"use strict"; // jshint ;_;
+
+	/* MODAL MANAGER CLASS DEFINITION
+	* ====================== */
+
+	var ModalManager = function (element, options) {
+		this.init(element, options);
+	};
+
+	ModalManager.prototype = {
+
+		constructor: ModalManager,
+
+		init: function (element, options) {
+			this.$element = $(element);
+			this.options = $.extend({}, $.fn.modalmanager.defaults, this.$element.data(), typeof options == 'object' && options);
+			this.stack = [];
+			this.backdropCount = 0;
+
+			if (this.options.resize) {
+				var resizeTimeout,
+					that = this;
+
+				$(window).on('resize.modal', function(){
+					resizeTimeout && clearTimeout(resizeTimeout);
+					resizeTimeout = setTimeout(function(){
+						for (var i = 0; i < that.stack.length; i++){
+							that.stack[i].isShown && that.stack[i].layout();
+						}
+					}, 10);
+				});
+			}
+		},
+
+		createModal: function (element, options) {
+			$(element).modal($.extend({ manager: this }, options));
+		},
+
+		appendModal: function (modal) {
+			this.stack.push(modal);
+
+			var that = this;
+
+			modal.$element.on('show.modalmanager', targetIsSelf(function (e) {
+
+				var showModal = function(){
+					modal.isShown = true;
+
+					var transition = $.support.transition && modal.$element.hasClass('fade');
+
+					that.$element
+						.toggleClass('modal-open', that.hasOpenModal())
+						.toggleClass('page-overflow', $(window).height() < that.$element.height());
+
+					modal.$parent = modal.$element.parent();
+
+					modal.$container = that.createContainer(modal);
+
+					modal.$element.appendTo(modal.$container);
+
+					that.backdrop(modal, function () {
+
+						modal.$element.show();
+
+						if (transition) {       
+							//modal.$element[0].style.display = 'run-in';       
+							modal.$element[0].offsetWidth;
+							//modal.$element.one($.support.transition.end, function () { modal.$element[0].style.display = 'block' });  
+						}
+						
+						modal.layout();
+
+						modal.$element
+							.addClass('in')
+							.attr('aria-hidden', false);
+
+						var complete = function () {
+							that.setFocus();
+							modal.$element.trigger('shown');
+						};
+
+						transition ?
+							modal.$element.one($.support.transition.end, complete) :
+							complete();
+					});
+				};
+
+				modal.options.replace ?
+					that.replace(showModal) :
+					showModal();
+			}));
+
+			modal.$element.on('hidden.modalmanager', targetIsSelf(function (e) {
+
+				that.backdrop(modal);
+
+				if (modal.$backdrop){
+					$.support.transition && modal.$element.hasClass('fade') ?
+						modal.$backdrop.one($.support.transition.end, function () { that.destroyModal(modal) }) :
+						that.destroyModal(modal);
+				} else {
+					that.destroyModal(modal);
+				}
+
+			}));
+
+			modal.$element.on('destroy.modalmanager', targetIsSelf(function (e) {
+				that.removeModal(modal);
+			}));
+
+		},
+
+		destroyModal: function (modal) {
+
+			modal.destroy();
+
+			var hasOpenModal = this.hasOpenModal();
+
+			this.$element.toggleClass('modal-open', hasOpenModal);
+
+			if (!hasOpenModal){
+				this.$element.removeClass('page-overflow');
+			}
+
+			this.removeContainer(modal);
+
+			this.setFocus();
+		},
+
+		hasOpenModal: function () {
+			for (var i = 0; i < this.stack.length; i++){
+				if (this.stack[i].isShown) return true;
+			}
+
+			return false;
+		},
+
+		setFocus: function () {
+			var topModal;
+
+			for (var i = 0; i < this.stack.length; i++){
+				if (this.stack[i].isShown) topModal = this.stack[i];
+			}
+
+			if (!topModal) return;
+
+			topModal.focus();
+
+		},
+
+		removeModal: function (modal) {
+			modal.$element.off('.modalmanager');
+			if (modal.$backdrop) this.removeBackdrop(modal);
+			this.stack.splice(this.getIndexOfModal(modal), 1);
+		},
+
+		getModalAt: function (index) {
+			return this.stack[index];
+		},
+
+		getIndexOfModal: function (modal) {
+			for (var i = 0; i < this.stack.length; i++){
+				if (modal === this.stack[i]) return i;
+			}
+		},
+
+		replace: function (callback) {
+			var topModal;
+
+			for (var i = 0; i < this.stack.length; i++){
+				if (this.stack[i].isShown) topModal = this.stack[i];
+			}
+
+			if (topModal) {
+				this.$backdropHandle = topModal.$backdrop;
+				topModal.$backdrop = null;
+
+				callback && topModal.$element.one('hidden',
+					targetIsSelf( $.proxy(callback, this) ));
+
+				topModal.hide();
+			} else if (callback) {
+				callback();
+			}
+		},
+
+		removeBackdrop: function (modal) {
+			modal.$backdrop.remove();
+			modal.$backdrop = null;
+		},
+
+		createBackdrop: function (animate) {
+			var $backdrop;
+
+			if (!this.$backdropHandle) {
+				$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
+					.appendTo(this.$element);
+			} else {
+				$backdrop = this.$backdropHandle;
+				$backdrop.off('.modalmanager');
+				this.$backdropHandle = null;
+				this.isLoading && this.removeSpinner();
+			}
+
+			return $backdrop;
+		},
+
+		removeContainer: function (modal) {
+			modal.$container.remove();
+			modal.$container = null;
+		},
+
+		createContainer: function (modal) {
+			var $container;
+
+			$container = $('<div class="modal-scrollable">')
+				.css('z-index', getzIndex( 'modal',
+					modal ? this.getIndexOfModal(modal) : this.stack.length ))
+				.appendTo(this.$element);
+
+			if (modal && modal.options.backdrop != 'static') {
+				$container.on('click.modal', targetIsSelf(function (e) {
+					modal.hide();
+				}));
+			} else if (modal) {
+				$container.on('click.modal', targetIsSelf(function (e) {
+					modal.attention();
+				}));
+			}
+
+			return $container;
+
+		},
+
+		backdrop: function (modal, callback) {
+			var animate = modal.$element.hasClass('fade') ? 'fade' : '',
+				showBackdrop = modal.options.backdrop &&
+					this.backdropCount < this.options.backdropLimit;
+
+			if (modal.isShown && showBackdrop) {
+				var doAnimate = $.support.transition && animate && !this.$backdropHandle;
+
+				modal.$backdrop = this.createBackdrop(animate);
+
+				modal.$backdrop.css('z-index', getzIndex( 'backdrop', this.getIndexOfModal(modal) ));
+
+				if (doAnimate) modal.$backdrop[0].offsetWidth; // force reflow
+
+				modal.$backdrop.addClass('in');
+
+				this.backdropCount += 1;
+
+				doAnimate ?
+					modal.$backdrop.one($.support.transition.end, callback) :
+					callback();
+
+			} else if (!modal.isShown && modal.$backdrop) {
+				modal.$backdrop.removeClass('in');
+
+				this.backdropCount -= 1;
+
+				var that = this;
+
+				$.support.transition && modal.$element.hasClass('fade')?
+					modal.$backdrop.one($.support.transition.end, function () { that.removeBackdrop(modal) }) :
+					that.removeBackdrop(modal);
+
+			} else if (callback) {
+				callback();
+			}
+		},
+
+		removeSpinner: function(){
+			this.$spinner && this.$spinner.remove();
+			this.$spinner = null;
+			this.isLoading = false;
+		},
+
+		removeLoading: function () {
+			this.$backdropHandle && this.$backdropHandle.remove();
+			this.$backdropHandle = null;
+			this.removeSpinner();
+		},
+
+		loading: function (callback) {
+			callback = callback || function () { };
+
+			this.$element
+				.toggleClass('modal-open', !this.isLoading || this.hasOpenModal())
+				.toggleClass('page-overflow', $(window).height() < this.$element.height());
+
+			if (!this.isLoading) {
+
+				this.$backdropHandle = this.createBackdrop('fade');
+
+				this.$backdropHandle[0].offsetWidth; // force reflow
+
+				this.$backdropHandle
+					.css('z-index', getzIndex('backdrop', this.stack.length))
+					.addClass('in');
+
+				var $spinner = $(this.options.spinner)
+					.css('z-index', getzIndex('modal', this.stack.length))
+					.appendTo(this.$element)
+					.addClass('in');
+
+				this.$spinner = $(this.createContainer())
+					.append($spinner)
+					.on('click.modalmanager', $.proxy(this.loading, this));
+
+				this.isLoading = true;
+
+				$.support.transition ?
+					this.$backdropHandle.one($.support.transition.end, callback) :
+					callback();
+
+			} else if (this.isLoading && this.$backdropHandle) {
+				this.$backdropHandle.removeClass('in');
+
+				var that = this;
+				$.support.transition ?
+					this.$backdropHandle.one($.support.transition.end, function () { that.removeLoading() }) :
+					that.removeLoading();
+
+			} else if (callback) {
+				callback(this.isLoading);
+			}
+		}
+	};
+
+	/* PRIVATE METHODS
+	* ======================= */
+
+	// computes and caches the zindexes
+	var getzIndex = (function () {
+		var zIndexFactor,
+			baseIndex = {};
+
+		return function (type, pos) {
+
+			if (typeof zIndexFactor === 'undefined'){
+				var $baseModal = $('<div class="modal hide" />').appendTo('body'),
+					$baseBackdrop = $('<div class="modal-backdrop hide" />').appendTo('body');
+
+				baseIndex['modal'] = +$baseModal.css('z-index');
+				baseIndex['backdrop'] = +$baseBackdrop.css('z-index');
+				zIndexFactor = baseIndex['modal'] - baseIndex['backdrop'];
+
+				$baseModal.remove();
+				$baseBackdrop.remove();
+				$baseBackdrop = $baseModal = null;
+			}
+
+			return baseIndex[type] + (zIndexFactor * pos);
+
+		}
+	}());
+
+	// make sure the event target is the modal itself in order to prevent
+	// other components such as tabsfrom triggering the modal manager.
+	// if Boostsrap namespaced events, this would not be needed.
+	function targetIsSelf(callback){
+		return function (e) {
+			if (this === e.target){
+				return callback.apply(this, arguments);
+			}
+		}
+	}
+
+
+	/* MODAL MANAGER PLUGIN DEFINITION
+	* ======================= */
+
+	$.fn.modalmanager = function (option, args) {
+		return this.each(function () {
+			var $this = $(this),
+				data = $this.data('modalmanager');
+
+			if (!data) $this.data('modalmanager', (data = new ModalManager(this, option)));
+			if (typeof option === 'string') data[option].apply(data, [].concat(args))
+		})
+	};
+
+	$.fn.modalmanager.defaults = {
+		backdropLimit: 999,
+		resize: true,
+		spinner: '<div class="loading-spinner fade" style="width: 200px; margin-left: -100px;"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>'
+	};
+
+	$.fn.modalmanager.Constructor = ModalManager
+
+}(jQuery);
diff --git a/juddi-gui/web/js/bootstrap-timepicker.min.js b/juddi-gui/web/js/bootstrap-timepicker.min.js
new file mode 100644
index 0000000..fdbb608
--- /dev/null
+++ b/juddi-gui/web/js/bootstrap-timepicker.min.js
@@ -0,0 +1,5 @@
+/*! bootstrap-timepicker v0.2.3 
+* http://jdewit.github.com/bootstrap-timepicker 
+* Copyright (c) 2013 Joris de Wit 
+* MIT License 
+*/(function(t,i,e,s){"use strict";var h=function(i,e){this.widget="",this.$element=t(i),this.defaultTime=e.defaultTime,this.disableFocus=e.disableFocus,this.isOpen=e.isOpen,this.minuteStep=e.minuteStep,this.modalBackdrop=e.modalBackdrop,this.secondStep=e.secondStep,this.showInputs=e.showInputs,this.showMeridian=e.showMeridian,this.showSeconds=e.showSeconds,this.template=e.template,this.appendWidgetTo=e.appendWidgetTo,this._init()};h.prototype={constructor:h,_init:function(){var i=this;this.$element.parent().hasClass("input-append")||this.$element.parent().hasClass("input-prepend")?(this.$element.parent(".input-append, .input-prepend").find(".add-on").on({"click.timepicker":t.proxy(this.showWidget,this)}),this.$element.on({"focus.timepicker":t.proxy(this.highlightUnit,this),"click.timepicker":t.proxy(this.highlightUnit,this),"keydown.timepicker":t.proxy(this.elementKeydown,this),"blur.timepicker":t.proxy(this.blurElement,this)})):this.template?this.$element.on({"focus.timepicker":t.proxy(this.showWidget,this),"click.timepicker":t.proxy(this.showWidget,this),"blur.timepicker":t.proxy(this.blurElement,this)}):this.$element.on({"focus.timepicker":t.proxy(this.highlightUnit,this),"click.timepicker":t.proxy(this.highlightUnit,this),"keydown.timepicker":t.proxy(this.elementKeydown,this),"blur.timepicker":t.proxy(this.blurElement,this)}),this.$widget=this.template!==!1?t(this.getTemplate()).prependTo(this.$element.parents(this.appendWidgetTo)).on("click",t.proxy(this.widgetClick,this)):!1,this.showInputs&&this.$widget!==!1&&this.$widget.find("input").each(function(){t(this).on({"click.timepicker":function(){t(this).select()},"keydown.timepicker":t.proxy(i.widgetKeydown,i)})}),this.setDefaultTime(this.defaultTime)},blurElement:function(){this.highlightedUnit=s,this.updateFromElementVal()},decrementHour:function(){if(this.showMeridian)if(1===this.hour)this.hour=12;else{if(12===this.hour)return this.hour--,this.toggleMeridian();if(0===this.hour)return this.hour=11,this.toggleMeridian();this.hour--}else 0===this.hour?this.hour=23:this.hour--;this.update()},decrementMinute:function(t){var i;i=t?this.minute-t:this.minute-this.minuteStep,0>i?(this.decrementHour(),this.minute=i+60):this.minute=i,this.update()},decrementSecond:function(){var t=this.second-this.secondStep;0>t?(this.decrementMinute(!0),this.second=t+60):this.second=t,this.update()},elementKeydown:function(t){switch(t.keyCode){case 9:switch(this.updateFromElementVal(),this.highlightedUnit){case"hour":t.preventDefault(),this.highlightNextUnit();break;case"minute":(this.showMeridian||this.showSeconds)&&(t.preventDefault(),this.highlightNextUnit());break;case"second":this.showMeridian&&(t.preventDefault(),this.highlightNextUnit())}break;case 27:this.updateFromElementVal();break;case 37:t.preventDefault(),this.highlightPrevUnit(),this.updateFromElementVal();break;case 38:switch(t.preventDefault(),this.highlightedUnit){case"hour":this.incrementHour(),this.highlightHour();break;case"minute":this.incrementMinute(),this.highlightMinute();break;case"second":this.incrementSecond(),this.highlightSecond();break;case"meridian":this.toggleMeridian(),this.highlightMeridian()}break;case 39:t.preventDefault(),this.updateFromElementVal(),this.highlightNextUnit();break;case 40:switch(t.preventDefault(),this.highlightedUnit){case"hour":this.decrementHour(),this.highlightHour();break;case"minute":this.decrementMinute(),this.highlightMinute();break;case"second":this.decrementSecond(),this.highlightSecond();break;case"meridian":this.toggleMeridian(),this.highlightMeridian()}}},formatTime:function(t,i,e,s){return t=10>t?"0"+t:t,i=10>i?"0"+i:i,e=10>e?"0"+e:e,t+":"+i+(this.showSeconds?":"+e:"")+(this.showMeridian?" "+s:"")},getCursorPosition:function(){var t=this.$element.get(0);if("selectionStart"in t)return t.selectionStart;if(e.selection){t.focus();var i=e.selection.createRange(),s=e.selection.createRange().text.length;return i.moveStart("character",-t.value.length),i.text.length-s}},getTemplate:function(){var t,i,e,s,h,n;switch(this.showInputs?(i='<input type="text" name="hour" class="bootstrap-timepicker-hour" maxlength="2"/>',e='<input type="text" name="minute" class="bootstrap-timepicker-minute" maxlength="2"/>',s='<input type="text" name="second" class="bootstrap-timepicker-second" maxlength="2"/>',h='<input type="text" name="meridian" class="bootstrap-timepicker-meridian" maxlength="2"/>'):(i='<span class="bootstrap-timepicker-hour"></span>',e='<span class="bootstrap-timepicker-minute"></span>',s='<span class="bootstrap-timepicker-second"></span>',h='<span class="bootstrap-timepicker-meridian"></span>'),n='<table><tr><td><a href="#" data-action="incrementHour"><i class="icon-chevron-up"></i></a></td><td class="separator">&nbsp;</td><td><a href="#" data-action="incrementMinute"><i class="icon-chevron-up"></i></a></td>'+(this.showSeconds?'<td class="separator">&nbsp;</td><td><a href="#" data-action="incrementSecond"><i class="icon-chevron-up"></i></a></td>':"")+(this.showMeridian?'<td class="separator">&nbsp;</td><td class="meridian-column"><a href="#" data-action="toggleMeridian"><i class="icon-chevron-up"></i></a></td>':"")+"</tr>"+"<tr>"+"<td>"+i+"</td> "+'<td class="separator">:</td>'+"<td>"+e+"</td> "+(this.showSeconds?'<td class="separator">:</td><td>'+s+"</td>":"")+(this.showMeridian?'<td class="separator">&nbsp;</td><td>'+h+"</td>":"")+"</tr>"+"<tr>"+'<td><a href="#" data-action="decrementHour"><i class="icon-chevron-down"></i></a></td>'+'<td class="separator"></td>'+'<td><a href="#" data-action="decrementMinute"><i class="icon-chevron-down"></i></a></td>'+(this.showSeconds?'<td class="separator">&nbsp;</td><td><a href="#" data-action="decrementSecond"><i class="icon-chevron-down"></i></a></td>':"")+(this.showMeridian?'<td class="separator">&nbsp;</td><td><a href="#" data-action="toggleMeridian"><i class="icon-chevron-down"></i></a></td>':"")+"</tr>"+"</table>",this.template){case"modal":t='<div class="bootstrap-timepicker-widget modal hide fade in" data-backdrop="'+(this.modalBackdrop?"true":"false")+'">'+'<div class="modal-header">'+'<a href="#" class="close" data-dismiss="modal">×</a>'+"<h3>Pick a Time</h3>"+"</div>"+'<div class="modal-content">'+n+"</div>"+'<div class="modal-footer">'+'<a href="#" class="btn btn-primary" data-dismiss="modal">OK</a>'+"</div>"+"</div>";break;case"dropdown":t='<div class="bootstrap-timepicker-widget dropdown-menu">'+n+"</div>"}return t},getTime:function(){return this.formatTime(this.hour,this.minute,this.second,this.meridian)},hideWidget:function(){this.isOpen!==!1&&(this.showInputs&&this.updateFromWidgetInputs(),this.$element.trigger({type:"hide.timepicker",time:{value:this.getTime(),hours:this.hour,minutes:this.minute,seconds:this.second,meridian:this.meridian}}),"modal"===this.template?this.$widget.modal("hide"):this.$widget.removeClass("open"),t(e).off("mousedown.timepicker"),this.isOpen=!1)},highlightUnit:function(){this.position=this.getCursorPosition(),this.position>=0&&2>=this.position?this.highlightHour():this.position>=3&&5>=this.position?this.highlightMinute():this.position>=6&&8>=this.position?this.showSeconds?this.highlightSecond():this.highlightMeridian():this.position>=9&&11>=this.position&&this.highlightMeridian()},highlightNextUnit:function(){switch(this.highlightedUnit){case"hour":this.highlightMinute();break;case"minute":this.showSeconds?this.highlightSecond():this.showMeridian?this.highlightMeridian():this.highlightHour();break;case"second":this.showMeridian?this.highlightMeridian():this.highlightHour();break;case"meridian":this.highlightHour()}},highlightPrevUnit:function(){switch(this.highlightedUnit){case"hour":this.highlightMeridian();break;case"minute":this.highlightHour();break;case"second":this.highlightMinute();break;case"meridian":this.showSeconds?this.highlightSecond():this.highlightMinute()}},highlightHour:function(){var t=this.$element.get(0);this.highlightedUnit="hour",t.setSelectionRange&&setTimeout(function(){t.setSelectionRange(0,2)},0)},highlightMinute:function(){var t=this.$element.get(0);this.highlightedUnit="minute",t.setSelectionRange&&setTimeout(function(){t.setSelectionRange(3,5)},0)},highlightSecond:function(){var t=this.$element.get(0);this.highlightedUnit="second",t.setSelectionRange&&setTimeout(function(){t.setSelectionRange(6,8)},0)},highlightMeridian:function(){var t=this.$element.get(0);this.highlightedUnit="meridian",t.setSelectionRange&&(this.showSeconds?setTimeout(function(){t.setSelectionRange(9,11)},0):setTimeout(function(){t.setSelectionRange(6,8)},0))},incrementHour:function(){if(this.showMeridian){if(11===this.hour)return this.hour++,this.toggleMeridian();12===this.hour&&(this.hour=0)}return 23===this.hour?(this.hour=0,s):(this.hour++,this.update(),s)},incrementMinute:function(t){var i;i=t?this.minute+t:this.minute+this.minuteStep-this.minute%this.minuteStep,i>59?(this.incrementHour(),this.minute=i-60):this.minute=i,this.update()},incrementSecond:function(){var t=this.second+this.secondStep-this.second%this.secondStep;t>59?(this.incrementMinute(!0),this.second=t-60):this.second=t,this.update()},remove:function(){t("document").off(".timepicker"),this.$widget&&this.$widget.remove(),delete this.$element.data().timepicker},setDefaultTime:function(t){if(this.$element.val())this.updateFromElementVal();else if("current"===t){var i=new Date,e=i.getHours(),s=Math.floor(i.getMinutes()/this.minuteStep)*this.minuteStep,h=Math.floor(i.getSeconds()/this.secondStep)*this.secondStep,n="AM";this.showMeridian&&(0===e?e=12:e>=12?(e>12&&(e-=12),n="PM"):n="AM"),this.hour=e,this.minute=s,this.second=h,this.meridian=n,this.update()}else t===!1?(this.hour=0,this.minute=0,this.second=0,this.meridian="AM"):this.setTime(t)},setTime:function(t){var i,e;this.showMeridian?(i=t.split(" "),e=i[0].split(":"),this.meridian=i[1]):e=t.split(":"),this.hour=parseInt(e[0],10),this.minute=parseInt(e[1],10),this.second=parseInt(e[2],10),isNaN(this.hour)&&(this.hour=0),isNaN(this.minute)&&(this.minute=0),this.showMeridian?(this.hour>12?this.hour=12:1>this.hour&&(this.hour=12),"am"===this.meridian||"a"===this.meridian?this.meridian="AM":("pm"===this.meridian||"p"===this.meridian)&&(this.meridian="PM"),"AM"!==this.meridian&&"PM"!==this.meridian&&(this.meridian="AM")):this.hour>=24?this.hour=23:0>this.hour&&(this.hour=0),0>this.minute?this.minute=0:this.minute>=60&&(this.minute=59),this.showSeconds&&(isNaN(this.second)?this.second=0:0>this.second?this.second=0:this.second>=60&&(this.second=59)),this.update()},showWidget:function(){if(!this.isOpen&&!this.$element.is(":disabled")){var i=this;t(e).on("mousedown.timepicker",function(e){0===t(e.target).closest(".bootstrap-timepicker-widget").length&&i.hideWidget()}),this.$element.trigger({type:"show.timepicker",time:{value:this.getTime(),hours:this.hour,minutes:this.minute,seconds:this.second,meridian:this.meridian}}),this.disableFocus&&this.$element.blur(),this.updateFromElementVal(),"modal"===this.template?this.$widget.modal("show").on("hidden",t.proxy(this.hideWidget,this)):this.isOpen===!1&&this.$widget.addClass("open"),this.isOpen=!0}},toggleMeridian:function(){this.meridian="AM"===this.meridian?"PM":"AM",this.update()},update:function(){this.$element.trigger({type:"changeTime.timepicker",time:{value:this.getTime(),hours:this.hour,minutes:this.minute,seconds:this.second,meridian:this.meridian}}),this.updateElement(),this.updateWidget()},updateElement:function(){this.$element.val(this.getTime()).change()},updateFromElementVal:function(){var t=this.$element.val();t&&this.setTime(t)},updateWidget:function(){if(this.$widget!==!1){var t=10>this.hour?"0"+this.hour:this.hour,i=10>this.minute?"0"+this.minute:this.minute,e=10>this.second?"0"+this.second:this.second;this.showInputs?(this.$widget.find("input.bootstrap-timepicker-hour").val(t),this.$widget.find("input.bootstrap-timepicker-minute").val(i),this.showSeconds&&this.$widget.find("input.bootstrap-timepicker-second").val(e),this.showMeridian&&this.$widget.find("input.bootstrap-timepicker-meridian").val(this.meridian)):(this.$widget.find("span.bootstrap-timepicker-hour").text(t),this.$widget.find("span.bootstrap-timepicker-minute").text(i),this.showSeconds&&this.$widget.find("span.bootstrap-timepicker-second").text(e),this.showMeridian&&this.$widget.find("span.bootstrap-timepicker-meridian").text(this.meridian))}},updateFromWidgetInputs:function(){if(this.$widget!==!1){var i=t("input.bootstrap-timepicker-hour",this.$widget).val()+":"+t("input.bootstrap-timepicker-minute",this.$widget).val()+(this.showSeconds?":"+t("input.bootstrap-timepicker-second",this.$widget).val():"")+(this.showMeridian?" "+t("input.bootstrap-timepicker-meridian",this.$widget).val():"");this.setTime(i)}},widgetClick:function(i){i.stopPropagation(),i.preventDefault();var e=t(i.target).closest("a").data("action");e&&this[e]()},widgetKeydown:function(i){var e=t(i.target).closest("input"),s=e.attr("name");switch(i.keyCode){case 9:if(this.showMeridian){if("meridian"===s)return this.hideWidget()}else if(this.showSeconds){if("second"===s)return this.hideWidget()}else if("minute"===s)return this.hideWidget();this.updateFromWidgetInputs();break;case 27:this.hideWidget();break;case 38:switch(i.preventDefault(),s){case"hour":this.incrementHour();break;case"minute":this.incrementMinute();break;case"second":this.incrementSecond();break;case"meridian":this.toggleMeridian()}break;case 40:switch(i.preventDefault(),s){case"hour":this.decrementHour();break;case"minute":this.decrementMinute();break;case"second":this.decrementSecond();break;case"meridian":this.toggleMeridian()}}}},t.fn.timepicker=function(i){var e=Array.apply(null,arguments);return e.shift(),this.each(function(){var s=t(this),n=s.data("timepicker"),o="object"==typeof i&&i;n||s.data("timepicker",n=new h(this,t.extend({},t.fn.timepicker.defaults,o,t(this).data()))),"string"==typeof i&&n[i].apply(n,e)})},t.fn.timepicker.defaults={defaultTime:"current",disableFocus:!1,isOpen:!1,minuteStep:15,modalBackdrop:!1,secondStep:15,showSeconds:!1,showInputs:!0,showMeridian:!0,template:"dropdown",appendWidgetTo:".bootstrap-timepicker"},t.fn.timepicker.Constructor=h})(jQuery,window,document);
\ No newline at end of file
diff --git a/juddi-gui/web/js/bootstrap.js b/juddi-gui/web/js/bootstrap.js
new file mode 100644
index 0000000..a81171b
--- /dev/null
+++ b/juddi-gui/web/js/bootstrap.js
@@ -0,0 +1,2268 @@
+/* ===================================================
+ * bootstrap-transition.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#transitions
+ * ===================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+  /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
+   * ======================================================= */
+
+  $(function () {
+
+    $.support.transition = (function () {
+
+      var transitionEnd = (function () {
+
+        var el = document.createElement('bootstrap')
+          , transEndEventNames = {
+               'WebkitTransition' : 'webkitTransitionEnd'
+            ,  'MozTransition'    : 'transitionend'
+            ,  'OTransition'      : 'oTransitionEnd otransitionend'
+            ,  'transition'       : 'transitionend'
+            }
+          , name
+
+        for (name in transEndEventNames){
+          if (el.style[name] !== undefined) {
+            return transEndEventNames[name]
+          }
+        }
+
+      }())
+
+      return transitionEnd && {
+        end: transitionEnd
+      }
+
+    })()
+
+  })
+
+}(window.jQuery);/* ==========================================================
+ * bootstrap-alert.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* ALERT CLASS DEFINITION
+  * ====================== */
+
+  var dismiss = '[data-dismiss="alert"]'
+    , Alert = function (el) {
+        $(el).on('click', dismiss, this.close)
+      }
+
+  Alert.prototype.close = function (e) {
+    var $this = $(this)
+      , selector = $this.attr('data-target')
+      , $parent
+
+    if (!selector) {
+      selector = $this.attr('href')
+      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+    }
+
+    $parent = $(selector)
+
+    e && e.preventDefault()
+
+    $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
+
+    $parent.trigger(e = $.Event('close'))
+
+    if (e.isDefaultPrevented()) return
+
+    $parent.removeClass('in')
+
+    function removeElement() {
+      $parent
+        .trigger('closed')
+        .remove()
+    }
+
+    $.support.transition && $parent.hasClass('fade') ?
+      $parent.on($.support.transition.end, removeElement) :
+      removeElement()
+  }
+
+
+ /* ALERT PLUGIN DEFINITION
+  * ======================= */
+
+  var old = $.fn.alert
+
+  $.fn.alert = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('alert')
+      if (!data) $this.data('alert', (data = new Alert(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  $.fn.alert.Constructor = Alert
+
+
+ /* ALERT NO CONFLICT
+  * ================= */
+
+  $.fn.alert.noConflict = function () {
+    $.fn.alert = old
+    return this
+  }
+
+
+ /* ALERT DATA-API
+  * ============== */
+
+  $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
+
+}(window.jQuery);/* ============================================================
+ * bootstrap-button.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* BUTTON PUBLIC CLASS DEFINITION
+  * ============================== */
+
+  var Button = function (element, options) {
+    this.$element = $(element)
+    this.options = $.extend({}, $.fn.button.defaults, options)
+  }
+
+  Button.prototype.setState = function (state) {
+    var d = 'disabled'
+      , $el = this.$element
+      , data = $el.data()
+      , val = $el.is('input') ? 'val' : 'html'
+
+    state = state + 'Text'
+    data.resetText || $el.data('resetText', $el[val]())
+
+    $el[val](data[state] || this.options[state])
+
+    // push to event loop to allow forms to submit
+    setTimeout(function () {
+      state == 'loadingText' ?
+        $el.addClass(d).attr(d, d) :
+        $el.removeClass(d).removeAttr(d)
+    }, 0)
+  }
+
+  Button.prototype.toggle = function () {
+    var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
+
+    $parent && $parent
+      .find('.active')
+      .removeClass('active')
+
+    this.$element.toggleClass('active')
+  }
+
+
+ /* BUTTON PLUGIN DEFINITION
+  * ======================== */
+
+  var old = $.fn.button
+
+  $.fn.button = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('button')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('button', (data = new Button(this, options)))
+      if (option == 'toggle') data.toggle()
+      else if (option) data.setState(option)
+    })
+  }
+
+  $.fn.button.defaults = {
+    loadingText: 'loading...'
+  }
+
+  $.fn.button.Constructor = Button
+
+
+ /* BUTTON NO CONFLICT
+  * ================== */
+
+  $.fn.button.noConflict = function () {
+    $.fn.button = old
+    return this
+  }
+
+
+ /* BUTTON DATA-API
+  * =============== */
+
+  $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
+    var $btn = $(e.target)
+    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+    $btn.button('toggle')
+  })
+
+}(window.jQuery);/* ==========================================================
+ * bootstrap-carousel.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#carousel
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* CAROUSEL CLASS DEFINITION
+  * ========================= */
+
+  var Carousel = function (element, options) {
+    this.$element = $(element)
+    this.$indicators = this.$element.find('.carousel-indicators')
+    this.options = options
+    this.options.pause == 'hover' && this.$element
+      .on('mouseenter', $.proxy(this.pause, this))
+      .on('mouseleave', $.proxy(this.cycle, this))
+  }
+
+  Carousel.prototype = {
+
+    cycle: function (e) {
+      if (!e) this.paused = false
+      if (this.interval) clearInterval(this.interval);
+      this.options.interval
+        && !this.paused
+        && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+      return this
+    }
+
+  , getActiveIndex: function () {
+      this.$active = this.$element.find('.item.active')
+      this.$items = this.$active.parent().children()
+      return this.$items.index(this.$active)
+    }
+
+  , to: function (pos) {
+      var activeIndex = this.getActiveIndex()
+        , that = this
+
+      if (pos > (this.$items.length - 1) || pos < 0) return
+
+      if (this.sliding) {
+        return this.$element.one('slid', function () {
+          that.to(pos)
+        })
+      }
+
+      if (activeIndex == pos) {
+        return this.pause().cycle()
+      }
+
+      return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
+    }
+
+  , pause: function (e) {
+      if (!e) this.paused = true
+      if (this.$element.find('.next, .prev').length && $.support.transition.end) {
+        this.$element.trigger($.support.transition.end)
+        this.cycle()
+      }
+      clearInterval(this.interval)
+      this.interval = null
+      return this
+    }
+
+  , next: function () {
+      if (this.sliding) return
+      return this.slide('next')
+    }
+
+  , prev: function () {
+      if (this.sliding) return
+      return this.slide('prev')
+    }
+
+  , slide: function (type, next) {
+      var $active = this.$element.find('.item.active')
+        , $next = next || $active[type]()
+        , isCycling = this.interval
+        , direction = type == 'next' ? 'left' : 'right'
+        , fallback  = type == 'next' ? 'first' : 'last'
+        , that = this
+        , e
+
+      this.sliding = true
+
+      isCycling && this.pause()
+
+      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
+
+      e = $.Event('slide', {
+        relatedTarget: $next[0]
+      , direction: direction
+      })
+
+      if ($next.hasClass('active')) return
+
+      if (this.$indicators.length) {
+        this.$indicators.find('.active').removeClass('active')
+        this.$element.one('slid', function () {
+          var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
+          $nextIndicator && $nextIndicator.addClass('active')
+        })
+      }
+
+      if ($.support.transition && this.$element.hasClass('slide')) {
+        this.$element.trigger(e)
+        if (e.isDefaultPrevented()) return
+        $next.addClass(type)
+        $next[0].offsetWidth // force reflow
+        $active.addClass(direction)
+        $next.addClass(direction)
+        this.$element.one($.support.transition.end, function () {
+          $next.removeClass([type, direction].join(' ')).addClass('active')
+          $active.removeClass(['active', direction].join(' '))
+          that.sliding = false
+          setTimeout(function () { that.$element.trigger('slid') }, 0)
+        })
+      } else {
+        this.$element.trigger(e)
+        if (e.isDefaultPrevented()) return
+        $active.removeClass('active')
+        $next.addClass('active')
+        this.sliding = false
+        this.$element.trigger('slid')
+      }
+
+      isCycling && this.cycle()
+
+      return this
+    }
+
+  }
+
+
+ /* CAROUSEL PLUGIN DEFINITION
+  * ========================== */
+
+  var old = $.fn.carousel
+
+  $.fn.carousel = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('carousel')
+        , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
+        , action = typeof option == 'string' ? option : options.slide
+      if (!data) $this.data('carousel', (data = new Carousel(this, options)))
+      if (typeof option == 'number') data.to(option)
+      else if (action) data[action]()
+      else if (options.interval) data.pause().cycle()
+    })
+  }
+
+  $.fn.carousel.defaults = {
+    interval: 5000
+  , pause: 'hover'
+  }
+
+  $.fn.carousel.Constructor = Carousel
+
+
+ /* CAROUSEL NO CONFLICT
+  * ==================== */
+
+  $.fn.carousel.noConflict = function () {
+    $.fn.carousel = old
+    return this
+  }
+
+ /* CAROUSEL DATA-API
+  * ================= */
+
+  $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
+    var $this = $(this), href
+      , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+      , options = $.extend({}, $target.data(), $this.data())
+      , slideIndex
+
+    $target.carousel(options)
+
+    if (slideIndex = $this.attr('data-slide-to')) {
+      $target.data('carousel').pause().to(slideIndex).cycle()
+    }
+
+    e.preventDefault()
+  })
+
+}(window.jQuery);/* =============================================================
+ * bootstrap-collapse.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#collapse
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* COLLAPSE PUBLIC CLASS DEFINITION
+  * ================================ */
+
+  var Collapse = function (element, options) {
+    this.$element = $(element)
+    this.options = $.extend({}, $.fn.collapse.defaults, options)
+
+    if (this.options.parent) {
+      this.$parent = $(this.options.parent)
+    }
+
+    this.options.toggle && this.toggle()
+  }
+
+  Collapse.prototype = {
+
+    constructor: Collapse
+
+  , dimension: function () {
+      var hasWidth = this.$element.hasClass('width')
+      return hasWidth ? 'width' : 'height'
+    }
+
+  , show: function () {
+      var dimension
+        , scroll
+        , actives
+        , hasData
+
+      if (this.transitioning || this.$element.hasClass('in')) return
+
+      dimension = this.dimension()
+      scroll = $.camelCase(['scroll', dimension].join('-'))
+      actives = this.$parent && this.$parent.find('> .accordion-group > .in')
+
+      if (actives && actives.length) {
+        hasData = actives.data('collapse')
+        if (hasData && hasData.transitioning) return
+        actives.collapse('hide')
+        hasData || actives.data('collapse', null)
+      }
+
+      this.$element[dimension](0)
+      this.transition('addClass', $.Event('show'), 'shown')
+      $.support.transition && this.$element[dimension](this.$element[0][scroll])
+    }
+
+  , hide: function () {
+      var dimension
+      if (this.transitioning || !this.$element.hasClass('in')) return
+      dimension = this.dimension()
+      this.reset(this.$element[dimension]())
+      this.transition('removeClass', $.Event('hide'), 'hidden')
+      this.$element[dimension](0)
+    }
+
+  , reset: function (size) {
+      var dimension = this.dimension()
+
+      this.$element
+        .removeClass('collapse')
+        [dimension](size || 'auto')
+        [0].offsetWidth
+
+      this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
+
+      return this
+    }
+
+  , transition: function (method, startEvent, completeEvent) {
+      var that = this
+        , complete = function () {
+            if (startEvent.type == 'show') that.reset()
+            that.transitioning = 0
+            that.$element.trigger(completeEvent)
+          }
+
+      this.$element.trigger(startEvent)
+
+      if (startEvent.isDefaultPrevented()) return
+
+      this.transitioning = 1
+
+      this.$element[method]('in')
+
+      $.support.transition && this.$element.hasClass('collapse') ?
+        this.$element.one($.support.transition.end, complete) :
+        complete()
+    }
+
+  , toggle: function () {
+      this[this.$element.hasClass('in') ? 'hide' : 'show']()
+    }
+
+  }
+
+
+ /* COLLAPSE PLUGIN DEFINITION
+  * ========================== */
+
+  var old = $.fn.collapse
+
+  $.fn.collapse = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('collapse')
+        , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
+      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.collapse.defaults = {
+    toggle: true
+  }
+
+  $.fn.collapse.Constructor = Collapse
+
+
+ /* COLLAPSE NO CONFLICT
+  * ==================== */
+
+  $.fn.collapse.noConflict = function () {
+    $.fn.collapse = old
+    return this
+  }
+
+
+ /* COLLAPSE DATA-API
+  * ================= */
+
+  $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
+    var $this = $(this), href
+      , target = $this.attr('data-target')
+        || e.preventDefault()
+        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
+      , option = $(target).data('collapse') ? 'toggle' : $this.data()
+    $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
+    $(target).collapse(option)
+  })
+
+}(window.jQuery);/* ============================================================
+ * bootstrap-dropdown.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* DROPDOWN CLASS DEFINITION
+  * ========================= */
+
+  var toggle = '[data-toggle=dropdown]'
+    , Dropdown = function (element) {
+        var $el = $(element).on('click.dropdown.data-api', this.toggle)
+        $('html').on('click.dropdown.data-api', function () {
+          $el.parent().removeClass('open')
+        })
+      }
+
+  Dropdown.prototype = {
+
+    constructor: Dropdown
+
+  , toggle: function (e) {
+      var $this = $(this)
+        , $parent
+        , isActive
+
+      if ($this.is('.disabled, :disabled')) return
+
+      $parent = getParent($this)
+
+      isActive = $parent.hasClass('open')
+
+      clearMenus()
+
+      if (!isActive) {
+        $parent.toggleClass('open')
+      }
+
+      $this.focus()
+
+      return false
+    }
+
+  , keydown: function (e) {
+      var $this
+        , $items
+        , $active
+        , $parent
+        , isActive
+        , index
+
+      if (!/(38|40|27)/.test(e.keyCode)) return
+
+      $this = $(this)
+
+      e.preventDefault()
+      e.stopPropagation()
+
+      if ($this.is('.disabled, :disabled')) return
+
+      $parent = getParent($this)
+
+      isActive = $parent.hasClass('open')
+
+      if (!isActive || (isActive && e.keyCode == 27)) {
+        if (e.which == 27) $parent.find(toggle).focus()
+        return $this.click()
+      }
+
+      $items = $('[role=menu] li:not(.divider):visible a', $parent)
+
+      if (!$items.length) return
+
+      index = $items.index($items.filter(':focus'))
+
+      if (e.keyCode == 38 && index > 0) index--                                        // up
+      if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
+      if (!~index) index = 0
+
+      $items
+        .eq(index)
+        .focus()
+    }
+
+  }
+
+  function clearMenus() {
+    $(toggle).each(function () {
+      getParent($(this)).removeClass('open')
+    })
+  }
+
+  function getParent($this) {
+    var selector = $this.attr('data-target')
+      , $parent
+
+    if (!selector) {
+      selector = $this.attr('href')
+      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+    }
+
+    $parent = selector && $(selector)
+
+    if (!$parent || !$parent.length) $parent = $this.parent()
+
+    return $parent
+  }
+
+
+  /* DROPDOWN PLUGIN DEFINITION
+   * ========================== */
+
+  var old = $.fn.dropdown
+
+  $.fn.dropdown = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('dropdown')
+      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  $.fn.dropdown.Constructor = Dropdown
+
+
+ /* DROPDOWN NO CONFLICT
+  * ==================== */
+
+  $.fn.dropdown.noConflict = function () {
+    $.fn.dropdown = old
+    return this
+  }
+
+
+  /* APPLY TO STANDARD DROPDOWN ELEMENTS
+   * =================================== */
+
+  $(document)
+    .on('click.dropdown.data-api', clearMenus)
+    .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+    .on('.dropdown-menu', function (e) { e.stopPropagation() })
+    .on('click.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)
+    .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
+
+}(window.jQuery);
+/* =========================================================
+ * bootstrap-modal.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#modals
+ * =========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================= */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* MODAL CLASS DEFINITION
+  * ====================== */
+
+  var Modal = function (element, options) {
+    this.options = options
+    this.$element = $(element)
+      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
+    this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
+  }
+
+  Modal.prototype = {
+
+      constructor: Modal
+
+    , toggle: function () {
+        return this[!this.isShown ? 'show' : 'hide']()
+      }
+
+    , show: function () {
+        var that = this
+          , e = $.Event('show')
+
+        this.$element.trigger(e)
+
+        if (this.isShown || e.isDefaultPrevented()) return
+
+        this.isShown = true
+
+        this.escape()
+
+        this.backdrop(function () {
+          var transition = $.support.transition && that.$element.hasClass('fade')
+
+          if (!that.$element.parent().length) {
+            that.$element.appendTo(document.body) //don't move modals dom position
+          }
+
+          that.$element.show()
+
+          if (transition) {
+            that.$element[0].offsetWidth // force reflow
+          }
+
+          that.$element
+            .addClass('in')
+            .attr('aria-hidden', false)
+
+          that.enforceFocus()
+
+          transition ?
+            that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
+            that.$element.focus().trigger('shown')
+
+        })
+      }
+
+    , hide: function (e) {
+        e && e.preventDefault()
+
+        var that = this
+
+        e = $.Event('hide')
+
+        this.$element.trigger(e)
+
+        if (!this.isShown || e.isDefaultPrevented()) return
+
+        this.isShown = false
+
+        this.escape()
+
+        $(document).off('focusin.modal')
+
+        this.$element
+          .removeClass('in')
+          .attr('aria-hidden', true)
+
+        $.support.transition && this.$element.hasClass('fade') ?
+          this.hideWithTransition() :
+          this.hideModal()
+      }
+
+    , enforceFocus: function () {
+        var that = this
+        $(document).on('focusin.modal', function (e) {
+          if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
+            that.$element.focus()
+          }
+        })
+      }
+
+    , escape: function () {
+        var that = this
+        if (this.isShown && this.options.keyboard) {
+          this.$element.on('keyup.dismiss.modal', function ( e ) {
+            e.which == 27 && that.hide()
+          })
+        } else if (!this.isShown) {
+          this.$element.off('keyup.dismiss.modal')
+        }
+      }
+
+    , hideWithTransition: function () {
+        var that = this
+          , timeout = setTimeout(function () {
+              that.$element.off($.support.transition.end)
+              that.hideModal()
+            }, 500)
+
+        this.$element.one($.support.transition.end, function () {
+          clearTimeout(timeout)
+          that.hideModal()
+        })
+      }
+
+    , hideModal: function () {
+        var that = this
+        this.$element.hide()
+        this.backdrop(function () {
+          that.removeBackdrop()
+          that.$element.trigger('hidden')
+        })
+      }
+
+    , removeBackdrop: function () {
+        this.$backdrop.remove()
+        this.$backdrop = null
+      }
+
+    , backdrop: function (callback) {
+        var that = this
+          , animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+        if (this.isShown && this.options.backdrop) {
+          var doAnimate = $.support.transition && animate
+
+          this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
+            .appendTo(document.body)
+
+          this.$backdrop.click(
+            this.options.backdrop == 'static' ?
+              $.proxy(this.$element[0].focus, this.$element[0])
+            : $.proxy(this.hide, this)
+          )
+
+          if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+          this.$backdrop.addClass('in')
+
+          if (!callback) return
+
+          doAnimate ?
+            this.$backdrop.one($.support.transition.end, callback) :
+            callback()
+
+        } else if (!this.isShown && this.$backdrop) {
+          this.$backdrop.removeClass('in')
+
+          $.support.transition && this.$element.hasClass('fade')?
+            this.$backdrop.one($.support.transition.end, callback) :
+            callback()
+
+        } else if (callback) {
+          callback()
+        }
+      }
+  }
+
+
+ /* MODAL PLUGIN DEFINITION
+  * ======================= */
+
+  var old = $.fn.modal
+
+  $.fn.modal = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('modal')
+        , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
+      if (!data) $this.data('modal', (data = new Modal(this, options)))
+      if (typeof option == 'string') data[option]()
+      else if (options.show) data.show()
+    })
+  }
+
+  $.fn.modal.defaults = {
+      backdrop: true
+    , keyboard: true
+    , show: true
+  }
+
+  $.fn.modal.Constructor = Modal
+
+
+ /* MODAL NO CONFLICT
+  * ================= */
+
+  $.fn.modal.noConflict = function () {
+    $.fn.modal = old
+    return this
+  }
+
+
+ /* MODAL DATA-API
+  * ============== */
+
+  $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
+    var $this = $(this)
+      , href = $this.attr('href')
+      , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
+      , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
+
+    e.preventDefault()
+
+    $target
+      .modal(option)
+      .one('hide', function () {
+        $this.focus()
+      })
+  })
+
+}(window.jQuery);
+/* ===========================================================
+ * bootstrap-tooltip.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#tooltips
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ===========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* TOOLTIP PUBLIC CLASS DEFINITION
+  * =============================== */
+
+  var Tooltip = function (element, options) {
+    this.init('tooltip', element, options)
+  }
+
+  Tooltip.prototype = {
+
+    constructor: Tooltip
+
+  , init: function (type, element, options) {
+      var eventIn
+        , eventOut
+        , triggers
+        , trigger
+        , i
+
+      this.type = type
+      this.$element = $(element)
+      this.options = this.getOptions(options)
+      this.enabled = true
+
+      triggers = this.options.trigger.split(' ')
+
+      for (i = triggers.length; i--;) {
+        trigger = triggers[i]
+        if (trigger == 'click') {
+          this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+        } else if (trigger != 'manual') {
+          eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
+          eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
+          this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+          this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+        }
+      }
+
+      this.options.selector ?
+        (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+        this.fixTitle()
+    }
+
+  , getOptions: function (options) {
+      options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
+
+      if (options.delay && typeof options.delay == 'number') {
+        options.delay = {
+          show: options.delay
+        , hide: options.delay
+        }
+      }
+
+      return options
+    }
+
+  , enter: function (e) {
+      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+
+      if (!self.options.delay || !self.options.delay.show) return self.show()
+
+      clearTimeout(this.timeout)
+      self.hoverState = 'in'
+      this.timeout = setTimeout(function() {
+        if (self.hoverState == 'in') self.show()
+      }, self.options.delay.show)
+    }
+
+  , leave: function (e) {
+      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+
+      if (this.timeout) clearTimeout(this.timeout)
+      if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+      self.hoverState = 'out'
+      this.timeout = setTimeout(function() {
+        if (self.hoverState == 'out') self.hide()
+      }, self.options.delay.hide)
+    }
+
+  , show: function () {
+      var $tip
+        , pos
+        , actualWidth
+        , actualHeight
+        , placement
+        , tp
+        , e = $.Event('show')
+
+      if (this.hasContent() && this.enabled) {
+        this.$element.trigger(e)
+        if (e.isDefaultPrevented()) return
+        $tip = this.tip()
+        this.setContent()
+
+        if (this.options.animation) {
+          $tip.addClass('fade')
+        }
+
+        placement = typeof this.options.placement == 'function' ?
+          this.options.placement.call(this, $tip[0], this.$element[0]) :
+          this.options.placement
+
+        $tip
+          .detach()
+          .css({ top: 0, left: 0, display: 'block' })
+
+        this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+
+        pos = this.getPosition()
+
+        actualWidth = $tip[0].offsetWidth
+        actualHeight = $tip[0].offsetHeight
+
+        switch (placement) {
+          case 'bottom':
+            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
+            break
+          case 'top':
+            tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
+            break
+          case 'left':
+            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
+            break
+          case 'right':
+            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
+            break
+        }
+
+        this.applyPlacement(tp, placement)
+        this.$element.trigger('shown')
+      }
+    }
+
+  , applyPlacement: function(offset, placement){
+      var $tip = this.tip()
+        , width = $tip[0].offsetWidth
+        , height = $tip[0].offsetHeight
+        , actualWidth
+        , actualHeight
+        , delta
+        , replace
+
+      $tip
+        .offset(offset)
+        .addClass(placement)
+        .addClass('in')
+
+      actualWidth = $tip[0].offsetWidth
+      actualHeight = $tip[0].offsetHeight
+
+      if (placement == 'top' && actualHeight != height) {
+        offset.top = offset.top + height - actualHeight
+        replace = true
+      }
+
+      if (placement == 'bottom' || placement == 'top') {
+        delta = 0
+
+        if (offset.left < 0){
+          delta = offset.left * -2
+          offset.left = 0
+          $tip.offset(offset)
+          actualWidth = $tip[0].offsetWidth
+          actualHeight = $tip[0].offsetHeight
+        }
+
+        this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
+      } else {
+        this.replaceArrow(actualHeight - height, actualHeight, 'top')
+      }
+
+      if (replace) $tip.offset(offset)
+    }
+
+  , replaceArrow: function(delta, dimension, position){
+      this
+        .arrow()
+        .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
+    }
+
+  , setContent: function () {
+      var $tip = this.tip()
+        , title = this.getTitle()
+
+      $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+      $tip.removeClass('fade in top bottom left right')
+    }
+
+  , hide: function () {
+      var that = this
+        , $tip = this.tip()
+        , e = $.Event('hide')
+
+      this.$element.trigger(e)
+      if (e.isDefaultPrevented()) return
+
+      $tip.removeClass('in')
+
+      function removeWithAnimation() {
+        var timeout = setTimeout(function () {
+          $tip.off($.support.transition.end).detach()
+        }, 500)
+
+        $tip.one($.support.transition.end, function () {
+          clearTimeout(timeout)
+          $tip.detach()
+        })
+      }
+
+      $.support.transition && this.$tip.hasClass('fade') ?
+        removeWithAnimation() :
+        $tip.detach()
+
+      this.$element.trigger('hidden')
+
+      return this
+    }
+
+  , fixTitle: function () {
+      var $e = this.$element
+      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
+        $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+      }
+    }
+
+  , hasContent: function () {
+      return this.getTitle()
+    }
+
+  , getPosition: function () {
+      var el = this.$element[0]
+      return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
+        width: el.offsetWidth
+      , height: el.offsetHeight
+      }, this.$element.offset())
+    }
+
+  , getTitle: function () {
+      var title
+        , $e = this.$element
+        , o = this.options
+
+      title = $e.attr('data-original-title')
+        || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
+
+      return title
+    }
+
+  , tip: function () {
+      return this.$tip = this.$tip || $(this.options.template)
+    }
+
+  , arrow: function(){
+      return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
+    }
+
+  , validate: function () {
+      if (!this.$element[0].parentNode) {
+        this.hide()
+        this.$element = null
+        this.options = null
+      }
+    }
+
+  , enable: function () {
+      this.enabled = true
+    }
+
+  , disable: function () {
+      this.enabled = false
+    }
+
+  , toggleEnabled: function () {
+      this.enabled = !this.enabled
+    }
+
+  , toggle: function (e) {
+      var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
+      self.tip().hasClass('in') ? self.hide() : self.show()
+    }
+
+  , destroy: function () {
+      this.hide().$element.off('.' + this.type).removeData(this.type)
+    }
+
+  }
+
+
+ /* TOOLTIP PLUGIN DEFINITION
+  * ========================= */
+
+  var old = $.fn.tooltip
+
+  $.fn.tooltip = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('tooltip')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.tooltip.Constructor = Tooltip
+
+  $.fn.tooltip.defaults = {
+    animation: true
+  , placement: 'top'
+  , selector: false
+  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
+  , trigger: 'hover focus'
+  , title: ''
+  , delay: 0
+  , html: false
+  , container: false
+  }
+
+
+ /* TOOLTIP NO CONFLICT
+  * =================== */
+
+  $.fn.tooltip.noConflict = function () {
+    $.fn.tooltip = old
+    return this
+  }
+
+}(window.jQuery);
+/* ===========================================================
+ * bootstrap-popover.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#popovers
+ * ===========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =========================================================== */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* POPOVER PUBLIC CLASS DEFINITION
+  * =============================== */
+
+  var Popover = function (element, options) {
+    this.init('popover', element, options)
+  }
+
+
+  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
+     ========================================== */
+
+  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
+
+    constructor: Popover
+
+  , setContent: function () {
+      var $tip = this.tip()
+        , title = this.getTitle()
+        , content = this.getContent()
+
+      $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+      $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
+
+      $tip.removeClass('fade top bottom left right in')
+    }
+
+  , hasContent: function () {
+      return this.getTitle() || this.getContent()
+    }
+
+  , getContent: function () {
+      var content
+        , $e = this.$element
+        , o = this.options
+
+      content = (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
+        || $e.attr('data-content')
+
+      return content
+    }
+
+  , tip: function () {
+      if (!this.$tip) {
+        this.$tip = $(this.options.template)
+      }
+      return this.$tip
+    }
+
+  , destroy: function () {
+      this.hide().$element.off('.' + this.type).removeData(this.type)
+    }
+
+  })
+
+
+ /* POPOVER PLUGIN DEFINITION
+  * ======================= */
+
+  var old = $.fn.popover
+
+  $.fn.popover = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('popover')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('popover', (data = new Popover(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.popover.Constructor = Popover
+
+  $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
+    placement: 'right'
+  , trigger: 'click'
+  , content: ''
+  , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+  })
+
+
+ /* POPOVER NO CONFLICT
+  * =================== */
+
+  $.fn.popover.noConflict = function () {
+    $.fn.popover = old
+    return this
+  }
+
+}(window.jQuery);
+/* =============================================================
+ * bootstrap-scrollspy.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================== */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* SCROLLSPY CLASS DEFINITION
+  * ========================== */
+
+  function ScrollSpy(element, options) {
+    var process = $.proxy(this.process, this)
+      , $element = $(element).is('body') ? $(window) : $(element)
+      , href
+    this.options = $.extend({}, $.fn.scrollspy.defaults, options)
+    this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
+    this.selector = (this.options.target
+      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+      || '') + ' .nav li > a'
+    this.$body = $('body')
+    this.refresh()
+    this.process()
+  }
+
+  ScrollSpy.prototype = {
+
+      constructor: ScrollSpy
+
+    , refresh: function () {
+        var self = this
+          , $targets
+
+        this.offsets = $([])
+        this.targets = $([])
+
+        $targets = this.$body
+          .find(this.selector)
+          .map(function () {
+            var $el = $(this)
+              , href = $el.data('target') || $el.attr('href')
+              , $href = /^#\w/.test(href) && $(href)
+            return ( $href
+              && $href.length
+              && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null
+          })
+          .sort(function (a, b) { return a[0] - b[0] })
+          .each(function () {
+            self.offsets.push(this[0])
+            self.targets.push(this[1])
+          })
+      }
+
+    , process: function () {
+        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+          , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
+          , maxScroll = scrollHeight - this.$scrollElement.height()
+          , offsets = this.offsets
+          , targets = this.targets
+          , activeTarget = this.activeTarget
+          , i
+
+        if (scrollTop >= maxScroll) {
+          return activeTarget != (i = targets.last()[0])
+            && this.activate ( i )
+        }
+
+        for (i = offsets.length; i--;) {
+          activeTarget != targets[i]
+            && scrollTop >= offsets[i]
+            && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+            && this.activate( targets[i] )
+        }
+      }
+
+    , activate: function (target) {
+        var active
+          , selector
+
+        this.activeTarget = target
+
+        $(this.selector)
+          .parent('.active')
+          .removeClass('active')
+
+        selector = this.selector
+          + '[data-target="' + target + '"],'
+          + this.selector + '[href="' + target + '"]'
+
+        active = $(selector)
+          .parent('li')
+          .addClass('active')
+
+        if (active.parent('.dropdown-menu').length)  {
+          active = active.closest('li.dropdown').addClass('active')
+        }
+
+        active.trigger('activate')
+      }
+
+  }
+
+
+ /* SCROLLSPY PLUGIN DEFINITION
+  * =========================== */
+
+  var old = $.fn.scrollspy
+
+  $.fn.scrollspy = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('scrollspy')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.scrollspy.Constructor = ScrollSpy
+
+  $.fn.scrollspy.defaults = {
+    offset: 10
+  }
+
+
+ /* SCROLLSPY NO CONFLICT
+  * ===================== */
+
+  $.fn.scrollspy.noConflict = function () {
+    $.fn.scrollspy = old
+    return this
+  }
+
+
+ /* SCROLLSPY DATA-API
+  * ================== */
+
+  $(window).on('load', function () {
+    $('[data-spy="scroll"]').each(function () {
+      var $spy = $(this)
+      $spy.scrollspy($spy.data())
+    })
+  })
+
+}(window.jQuery);/* ========================================================
+ * bootstrap-tab.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#tabs
+ * ========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================== */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* TAB CLASS DEFINITION
+  * ==================== */
+
+  var Tab = function (element) {
+    this.element = $(element)
+  }
+
+  Tab.prototype = {
+
+    constructor: Tab
+
+  , show: function () {
+      var $this = this.element
+        , $ul = $this.closest('ul:not(.dropdown-menu)')
+        , selector = $this.attr('data-target')
+        , previous
+        , $target
+        , e
+
+      if (!selector) {
+        selector = $this.attr('href')
+        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+      }
+
+      if ( $this.parent('li').hasClass('active') ) return
+
+      previous = $ul.find('.active:last a')[0]
+
+      e = $.Event('show', {
+        relatedTarget: previous
+      })
+
+      $this.trigger(e)
+
+      if (e.isDefaultPrevented()) return
+
+      $target = $(selector)
+
+      this.activate($this.parent('li'), $ul)
+      this.activate($target, $target.parent(), function () {
+        $this.trigger({
+          type: 'shown'
+        , relatedTarget: previous
+        })
+      })
+    }
+
+  , activate: function ( element, container, callback) {
+      var $active = container.find('> .active')
+        , transition = callback
+            && $.support.transition
+            && $active.hasClass('fade')
+
+      function next() {
+        $active
+          .removeClass('active')
+          .find('> .dropdown-menu > .active')
+          .removeClass('active')
+
+        element.addClass('active')
+
+        if (transition) {
+          element[0].offsetWidth // reflow for transition
+          element.addClass('in')
+        } else {
+          element.removeClass('fade')
+        }
+
+        if ( element.parent('.dropdown-menu') ) {
+          element.closest('li.dropdown').addClass('active')
+        }
+
+        callback && callback()
+      }
+
+      transition ?
+        $active.one($.support.transition.end, next) :
+        next()
+
+      $active.removeClass('in')
+    }
+  }
+
+
+ /* TAB PLUGIN DEFINITION
+  * ===================== */
+
+  var old = $.fn.tab
+
+  $.fn.tab = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('tab')
+      if (!data) $this.data('tab', (data = new Tab(this)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.tab.Constructor = Tab
+
+
+ /* TAB NO CONFLICT
+  * =============== */
+
+  $.fn.tab.noConflict = function () {
+    $.fn.tab = old
+    return this
+  }
+
+
+ /* TAB DATA-API
+  * ============ */
+
+  $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
+    e.preventDefault()
+    $(this).tab('show')
+  })
+
+}(window.jQuery);/* =============================================================
+ * bootstrap-typeahead.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#typeahead
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function($){
+
+  "use strict"; // jshint ;_;
+
+
+ /* TYPEAHEAD PUBLIC CLASS DEFINITION
+  * ================================= */
+
+  var Typeahead = function (element, options) {
+    this.$element = $(element)
+    this.options = $.extend({}, $.fn.typeahead.defaults, options)
+    this.matcher = this.options.matcher || this.matcher
+    this.sorter = this.options.sorter || this.sorter
+    this.highlighter = this.options.highlighter || this.highlighter
+    this.updater = this.options.updater || this.updater
+    this.source = this.options.source
+    this.$menu = $(this.options.menu)
+    this.shown = false
+    this.listen()
+  }
+
+  Typeahead.prototype = {
+
+    constructor: Typeahead
+
+  , select: function () {
+      var val = this.$menu.find('.active').attr('data-value')
+      this.$element
+        .val(this.updater(val))
+        .change()
+      return this.hide()
+    }
+
+  , updater: function (item) {
+      return item
+    }
+
+  , show: function () {
+      var pos = $.extend({}, this.$element.position(), {
+        height: this.$element[0].offsetHeight
+      })
+
+      this.$menu
+        .insertAfter(this.$element)
+        .css({
+          top: pos.top + pos.height
+        , left: pos.left
+        })
+        .show()
+
+      this.shown = true
+      return this
+    }
+
+  , hide: function () {
+      this.$menu.hide()
+      this.shown = false
+      return this
+    }
+
+  , lookup: function (event) {
+      var items
+
+      this.query = this.$element.val()
+
+      if (!this.query || this.query.length < this.options.minLength) {
+        return this.shown ? this.hide() : this
+      }
+
+      items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
+
+      return items ? this.process(items) : this
+    }
+
+  , process: function (items) {
+      var that = this
+
+      items = $.grep(items, function (item) {
+        return that.matcher(item)
+      })
+
+      items = this.sorter(items)
+
+      if (!items.length) {
+        return this.shown ? this.hide() : this
+      }
+
+      return this.render(items.slice(0, this.options.items)).show()
+    }
+
+  , matcher: function (item) {
+      return ~item.toLowerCase().indexOf(this.query.toLowerCase())
+    }
+
+  , sorter: function (items) {
+      var beginswith = []
+        , caseSensitive = []
+        , caseInsensitive = []
+        , item
+
+      while (item = items.shift()) {
+        if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
+        else if (~item.indexOf(this.query)) caseSensitive.push(item)
+        else caseInsensitive.push(item)
+      }
+
+      return beginswith.concat(caseSensitive, caseInsensitive)
+    }
+
+  , highlighter: function (item) {
+      var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
+      return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
+        return '<strong>' + match + '</strong>'
+      })
+    }
+
+  , render: function (items) {
+      var that = this
+
+      items = $(items).map(function (i, item) {
+        i = $(that.options.item).attr('data-value', item)
+        i.find('a').html(that.highlighter(item))
+        return i[0]
+      })
+
+      items.first().addClass('active')
+      this.$menu.html(items)
+      return this
+    }
+
+  , next: function (event) {
+      var active = this.$menu.find('.active').removeClass('active')
+        , next = active.next()
+
+      if (!next.length) {
+        next = $(this.$menu.find('li')[0])
+      }
+
+      next.addClass('active')
+    }
+
+  , prev: function (event) {
+      var active = this.$menu.find('.active').removeClass('active')
+        , prev = active.prev()
+
+      if (!prev.length) {
+        prev = this.$menu.find('li').last()
+      }
+
+      prev.addClass('active')
+    }
+
+  , listen: function () {
+      this.$element
+        .on('focus',    $.proxy(this.focus, this))
+        .on('blur',     $.proxy(this.blur, this))
+        .on('keypress', $.proxy(this.keypress, this))
+        .on('keyup',    $.proxy(this.keyup, this))
+
+      if (this.eventSupported('keydown')) {
+        this.$element.on('keydown', $.proxy(this.keydown, this))
+      }
+
+      this.$menu
+        .on('click', $.proxy(this.click, this))
+        .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
+        .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
+    }
+
+  , eventSupported: function(eventName) {
+      var isSupported = eventName in this.$element
+      if (!isSupported) {
+        this.$element.setAttribute(eventName, 'return;')
+        isSupported = typeof this.$element[eventName] === 'function'
+      }
+      return isSupported
+    }
+
+  , move: function (e) {
+      if (!this.shown) return
+
+      switch(e.keyCode) {
+        case 9: // tab
+        case 13: // enter
+        case 27: // escape
+          e.preventDefault()
+          break
+
+        case 38: // up arrow
+          e.preventDefault()
+          this.prev()
+          break
+
+        case 40: // down arrow
+          e.preventDefault()
+          this.next()
+          break
+      }
+
+      e.stopPropagation()
+    }
+
+  , keydown: function (e) {
+      this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
+      this.move(e)
+    }
+
+  , keypress: function (e) {
+      if (this.suppressKeyPressRepeat) return
+      this.move(e)
+    }
+
+  , keyup: function (e) {
+      switch(e.keyCode) {
+        case 40: // down arrow
+        case 38: // up arrow
+        case 16: // shift
+        case 17: // ctrl
+        case 18: // alt
+          break
+
+        case 9: // tab
+        case 13: // enter
+          if (!this.shown) return
+          this.select()
+          break
+
+        case 27: // escape
+          if (!this.shown) return
+          this.hide()
+          break
+
+        default:
+          this.lookup()
+      }
+
+      e.stopPropagation()
+      e.preventDefault()
+  }
+
+  , focus: function (e) {
+      this.focused = true
+    }
+
+  , blur: function (e) {
+      this.focused = false
+      if (!this.mousedover && this.shown) this.hide()
+    }
+
+  , click: function (e) {
+      e.stopPropagation()
+      e.preventDefault()
+      this.select()
+      this.$element.focus()
+    }
+
+  , mouseenter: function (e) {
+      this.mousedover = true
+      this.$menu.find('.active').removeClass('active')
+      $(e.currentTarget).addClass('active')
+    }
+
+  , mouseleave: function (e) {
+      this.mousedover = false
+      if (!this.focused && this.shown) this.hide()
+    }
+
+  }
+
+
+  /* TYPEAHEAD PLUGIN DEFINITION
+   * =========================== */
+
+  var old = $.fn.typeahead
+
+  $.fn.typeahead = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('typeahead')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.typeahead.defaults = {
+    source: []
+  , items: 8
+  , menu: '<ul class="typeahead dropdown-menu"></ul>'
+  , item: '<li><a href="#"></a></li>'
+  , minLength: 1
+  }
+
+  $.fn.typeahead.Constructor = Typeahead
+
+
+ /* TYPEAHEAD NO CONFLICT
+  * =================== */
+
+  $.fn.typeahead.noConflict = function () {
+    $.fn.typeahead = old
+    return this
+  }
+
+
+ /* TYPEAHEAD DATA-API
+  * ================== */
+
+  $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
+    var $this = $(this)
+    if ($this.data('typeahead')) return
+    $this.typeahead($this.data())
+  })
+
+}(window.jQuery);
+/* ==========================================================
+ * bootstrap-affix.js v2.3.0
+ * http://twitter.github.com/bootstrap/javascript.html#affix
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function ($) {
+
+  "use strict"; // jshint ;_;
+
+
+ /* AFFIX CLASS DEFINITION
+  * ====================== */
+
+  var Affix = function (element, options) {
+    this.options = $.extend({}, $.fn.affix.defaults, options)
+    this.$window = $(window)
+      .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
+      .on('click.affix.data-api',  $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
+    this.$element = $(element)
+    this.checkPosition()
+  }
+
+  Affix.prototype.checkPosition = function () {
+    if (!this.$element.is(':visible')) return
+
+    var scrollHeight = $(document).height()
+      , scrollTop = this.$window.scrollTop()
+      , position = this.$element.offset()
+      , offset = this.options.offset
+      , offsetBottom = offset.bottom
+      , offsetTop = offset.top
+      , reset = 'affix affix-top affix-bottom'
+      , affix
+
+    if (typeof offset != 'object') offsetBottom = offsetTop = offset
+    if (typeof offsetTop == 'function') offsetTop = offset.top()
+    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
+
+    affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
+      false    : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
+      'bottom' : offsetTop != null && scrollTop <= offsetTop ?
+      'top'    : false
+
+    if (this.affixed === affix) return
+
+    this.affixed = affix
+    this.unpin = affix == 'bottom' ? position.top - scrollTop : null
+
+    this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
+  }
+
+
+ /* AFFIX PLUGIN DEFINITION
+  * ======================= */
+
+  var old = $.fn.affix
+
+  $.fn.affix = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('affix')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('affix', (data = new Affix(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.affix.Constructor = Affix
+
+  $.fn.affix.defaults = {
+    offset: 0
+  }
+
+
+ /* AFFIX NO CONFLICT
+  * ================= */
+
+  $.fn.affix.noConflict = function () {
+    $.fn.affix = old
+    return this
+  }
+
+
+ /* AFFIX DATA-API
+  * ============== */
+
+  $(window).on('load', function () {
+    $('[data-spy="affix"]').each(function () {
+      var $spy = $(this)
+        , data = $spy.data()
+
+      data.offset = data.offset || {}
+
+      data.offsetBottom && (data.offset.bottom = data.offsetBottom)
+      data.offsetTop && (data.offset.top = data.offsetTop)
+
+      $spy.affix(data)
+    })
+  })
+
+
+}(window.jQuery);
\ No newline at end of file
diff --git a/juddi-gui/web/js/bootstrap.min.js b/juddi-gui/web/js/bootstrap.min.js
new file mode 100644
index 0000000..e05923d
--- /dev/null
+++ b/juddi-gui/web/js/bootstrap.min.js
@@ -0,0 +1,6 @@
+/*!
+* Bootstrap.js by @fat & @mdo
+* Copyright 2012 Twitter, Inc.
+* http://www.apache.org/licenses/LICENSE-2.0.txt
+*/
+!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||s.toggleClass("open"),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on(".dropdown-menu",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);if(!n.options.delay||!n.options.delay.show)return n.show();clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);
\ No newline at end of file
diff --git a/juddi-gui/web/js/businessChooser.js b/juddi-gui/web/js/businessChooser.js
new file mode 100644
index 0000000..a87817b
--- /dev/null
+++ b/juddi-gui/web/js/businessChooser.js
@@ -0,0 +1,179 @@
+/* 
+ * source http://stackoverflow.com/questions/6049687/jquery-ui-dialog-box-need-to-return-value-when-user-presses-button-but-not-wor 
+ * http://stackoverflow.com/questions/3560872/returning-value-from-confirmation-dialog-using-jquery-ui-dialog
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+function reloadBusinessModal()
+{
+    var name=$("#nameBusiness").text();
+    RenderBusinessListBySearchModal(name, offsetBusiness, maxrecordsBusiness, true);
+                      
+}
+
+
+
+var offsetBusiness=0; //start at the begining
+var maxrecordsBusiness=10;  //record 20 at a time
+var langBusiness="en";  //langauge english
+var totalrecordsBusiness=0;
+
+RenderBusinessListBySearchModal('%', offsetBusiness, maxrecordsBusiness, true);
+
+function pagedownChooserBusiness()
+{
+    offsetBusiness = $("#offsetBusiness").text();
+    //alert(offset);
+    var newoffset = offsetBusiness - maxrecordsBusiness;
+    if (newoffset < 0)
+        return;
+    //alert(newoffset);
+    if (newoffset != offsetBusiness)
+        RenderBusinessListBySearchModal($("#nameBusiness").text(), newoffset, maxrecordsBusiness, true);
+}
+function pageupChooserBusiness()
+{
+    offsetBusiness = $("#offsetBusiness").text();
+    //alert(offset);
+    var fetch = maxrecordsBusiness;
+    if ((parseInt(offsetBusiness) + parseInt(maxrecordsBusiness))  > totalrecordsBusiness)
+        //fetch = maxrecords - offset;
+        return;
+    else 
+        fetch = (parseInt(offsetBusiness) + parseInt(maxrecordsBusiness));    
+    //alert(fetch);
+    offsetBusiness = fetch;
+    RenderBusinessListBySearchModal($("#nameBusiness").text(), fetch, maxrecordsBusiness, true);
+}
+
+
+var selectedItemBusiness=null;
+
+//offset, maxrecords, keyword
+function RenderBusinessListBySearchModal(keyword1, offset1, maxrecords1, isForChooser)
+{
+    var lang = $("#langBusiness").text();
+    $("#businesslist").html("<img src=\"img/bigrollergreen.gif\" title=\"Loading\"/>");
+    var request=   $.ajax({
+        url: 'ajax/businesssearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang + "&chooser=" + isForChooser,
+        type:"GET",
+        cache: false
+    });
+                  
+    request.done(function(msg) {
+        window.console && console.log('postback done ');                
+        $("#businesslist").html(msg);
+        
+    //refresh();
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ');                                
+        $("#businesslist").html("An error occured! " + jqXHR.responseText + textStatus);
+    //refresh();
+    });
+/*
+    $.get('ajax/businesssearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang, function(data) {
+        $("#businesslist").html(data);
+        refresh();
+    });*/
+}
+
+function refreshBusiness()
+{
+    var displayrecords = $("#displayrecords").text();
+    if (displayrecords == totalrecordsBusiness)
+    {
+        $("#pageupBusiness").addClass("disabled");
+        $("#pagedownBusiness").addClass("disabled");
+    }
+    else if (offsetBusiness + maxrecordsBusiness > totalrecordsBusiness)
+    {
+        $("#pageupBusiness").addClass("disabled");    
+    }
+    else if (offsetBusiness ==0)
+    {
+        $("#pagedownBusiness").removeClass("disabled");        
+    }
+    else
+    {
+        $("#pagedownBusiness").removeClass("disabled");        
+        $("#pageupBusiness").removeClass("disabled");        
+    }
+}
+
+/**
+ *This launches the tModel model div, upon return (and if not abprted), the contents of the div parameter will be replaced with the 
+ *first selected tModel
+ */
+function businessModal(div){
+    //reset the form in case it was lanucheed more than once per page view
+    reloadBusinessModal();
+    
+    $.dialogBusiness.confirm({
+        callback: function(success, result) {
+            if (!success)
+            {
+              //  alert("aborted!");    
+            }
+                
+            else{
+               // alert('Result: ' + result.join());
+                $("#" + div).html(result[0]);
+            }
+       //     return false;
+        }
+    });
+   // return false;
+}
+            
+            
+function businessCancel()
+{
+    $(".modalableBusinessChooser").each(function()
+    {
+        $(this).prop('checked', false);
+    }); 
+    $('#businessChooser').modal('hide');
+                
+}
+            
+/**
+ *returns an array of selected tmodel keys
+ */            
+$.dialogBusiness = {
+    confirm: function(options) {
+        var $modal = $('#businessChooser');
+        //$modal.find('.modal-body').text(options.message);
+        
+        $modal.off('click.dialog', '.btn, .close')
+        .off('hidden')
+        .on('click.dialog', '.btn, .close', function() {
+            $(this).addClass('modal-result');
+        }).on('hidden', function() {
+            var result = $(this).find('.modal-result').filter('.btn-primary').length > 0;
+            $(this).find('.modal-result').removeClass('modal-result');
+            /**
+                         * find the result from the model (the selected key)
+                         */
+            var selectedtmodels =  new Array();
+            $(".modalableBusinessChooser").each(function()
+            {
+                var id=$(this).attr("id");
+                if ($(this).is(':checked')) {
+                    selectedtmodels.push(
+                        id
+                        );
+                }
+            }); 
+            
+            options.callback(result ,selectedtmodels);
+        //  $modal.modal('hide');
+        });
+        //callback = options.callback;
+        
+        $modal.modal();
+    }        
+};
+
diff --git a/juddi-gui/web/js/businessEditor.js b/juddi-gui/web/js/businessEditor.js
new file mode 100644
index 0000000..619261e
--- /dev/null
+++ b/juddi-gui/web/js/businessEditor.js
@@ -0,0 +1,430 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+function deleteBusinessByID(id)
+{
+            
+    var    url='ajax/deletebusiness.jsp?id=' + id;
+            
+    var postbackdata = new Array();
+    postbackdata.push({
+        name:"nonce", 
+        value: $("#nonce").val()
+    });
+    var request=   $.ajax({
+        url: url,
+        type:"POST",
+        //  data" + i18n_type + ": "html", 
+        cache: false, 
+        //  processData: false,f
+        data: postbackdata
+    });
+
+    request.done(function(msg) {
+        window.console && console.log('postback done '  + url);                
+        
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+        $("#resultBar").show();
+        $("#" + escapeJquerySelector(id)).remove();
+        
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ' + url);                                
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' + jqXHR.responseText + textStatus );
+        //$(".alert").alert();
+        $("#resultBar").show();
+        
+    });
+}
+
+
+
+function AddName()
+{
+    currentNameEntries++;
+    var i =  currentNameEntries;         
+    $("<div id=\"Name" + i + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('Name" + i 
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"Name" + i + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_lang + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"Name" + i + "Lang\"></div>"
+        +"</div>").prependTo("#nameContainer");
+    Reedit();
+}
+
+//primarily used in edit service binding templates
+function AddDescriptionSpecific(div)
+{
+    //javascript:Remove('bindingTemplate0Description0'); 
+    currentDescriptionSpecific++;
+    var i = currentDescriptionSpecific;
+    $("<div id=\""+ div + i + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + div + i 
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"" + div + i + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_lang + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"" + div + i + "Lang\"></div>"
+        +"</div>").prependTo("#" + div);
+    Reedit();
+}
+
+
+function AddDescription()
+{
+    currentDescriptionEntries++;
+    var i = currentDescriptionEntries;
+    $("<div id=\"Description" + i + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('Description" + i 
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"Description" + i + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_lang + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"Description" + i + "Lang\"></div>"
+        +"</div>").prependTo("#Description");
+    Reedit();
+}
+
+
+function AddDisco()
+{
+    currentDisco++;
+    var i=currentDisco;
+    
+    $("<div id=\"disco" + i + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('disco" + i 
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"disco" + i + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_type + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"disco" + i + "Type\"></div>"
+        +"</div>").prependTo("#discoContainer");
+    
+    
+    Reedit();
+}
+
+
+
+function AddContact()
+{
+    currentContacts++;
+    var i=currentContacts;
+    
+    $("<div id=\"contact" + i + "\" style=\"border-width:2px; border-style:solid; border-color:red\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('contact" + i 
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_contactType+ ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + i + "Type\">" + i18n_contactTypeDefault + "</div>"
+        +"<a href=\"javascript:AddContactName('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>" + i18n_name + " &nbsp"
+        +"<a href=\"javascript:AddContactEmail('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>" + i18n_email + " &nbsp"
+        +"<a href=\"javascript:AddContactDescription('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>"+i18n_description+" &nbsp"
+        +"<a href=\"javascript:AddContactPhone('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>" + i18n_phone + " &nbsp"
+        +"<a href=\"javascript:AddContactAddress('" + i + "');\"><i class=\"icon-plus-sign icon-large\"></i></a>" + i18n_address + " &nbsp"
+     
+        +"</div>").prependTo("#contactsContainer");
+    
+    
+    Reedit();
+}
+var contactname=0;
+function AddContactName(contactid)
+{
+    $("<div id=\"contact" + contactid + "Name" + contactname + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('contact" + contactid + "Name" + contactname
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_name + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Name" + contactname + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_lang + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Name" + contactname + "Lang\"></div>"
+        +"</div>").appendTo("#contact" + contactid);
+    Reedit();
+    contactname++;
+}
+
+var contactemail=0;
+function AddContactEmail(contactid)
+{
+    $("<div id=\"contact" + contactid + "Email" + contactemail + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('contact" + contactid + "Email" + contactemail
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_type + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Email" + contactemail + "Type\">" + i18n_email+ "</div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Email" + contactemail + "Value\"></div>"
+        +"</div>").appendTo("#contact" + contactid);
+    Reedit();
+    contactemail++;
+}
+
+var contactdescription=0;
+function AddContactDescription(contactid)
+{
+    $("<div id=\"contact" + contactid + "Description" + contactdescription + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('contact" + contactid + "Description" + contactdescription
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_description + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Description" + contactdescription + "Value\">"+i18n_contactPrimary+"</div>"
+        +"<div style=\"float:left\">" + i18n_lang + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Description" + contactdescription + "Lang\"></div>"
+        +"</div>").appendTo("#contact" + contactid);
+    Reedit();
+    contactdescription++;
+}
+var contactphone=0;
+function AddContactPhone(contactid)
+{
+    $("<div id=\"contact" + contactid + "Phone" + contactphone + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('contact" + contactid + "Phone" + contactphone
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_phone + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Phone" + contactphone + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_type + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Phone" + contactphone + "Type\">" + i18n_phoneType + "</div>"
+        +"</div>").appendTo("#contact" + contactid);
+    Reedit();
+    contactphone++;
+}
+
+var contactaddress=0;
+function AddContactAddress(contactid)
+{
+    $("<div id=\"contact" + contactid + "Address" + contactaddress + "\" style=\"border-width:1px; border-style:solid\" >" 
+        
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('contact" + contactid + "Address" + contactaddress
+        +"');\"><i class=\"icon-trash icon-large\"></i></a>" + i18n_address + "</div><br>"
+        +"<div style=\"float:left\">" + i18n_lang + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Address" + contactaddress + "Lang\"></div>"
+        +"<div style=\"float:left\">" + i18n_addressSortCode + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Address" + contactaddress + "Sortcode\">" + contactaddress +"</div>"
+        +"<div style=\"float:left\">" + i18n_type + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Address" + contactaddress + "Type\">" + i18n_addressDefaultType + "</div>"
+        +"<div style=\"float:left\">" + i18n_tmodelkey + " (<a href=\"javascript:tModelModal('" + 
+        "contact" + contactid + "Address" + contactaddress  + "KeyName')\" ><i class=\"icon-list-alt icon-large\"></i>" + il8n_picker + "</a>): &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "Address" + contactaddress + "KeyName\"></div>"
+        +"<div><a href=\"javascript:AddContactAddressLine('" + contactid+ "Address" + 
+        contactaddress+"');\"><i class=\"icon-plus-sign icon-large\"></i></a> " + i18n_addressLineAdd + "</div>"
+        +"</div>").appendTo("#contact" + contactid);
+    Reedit();
+    contactaddress++;
+}
+
+var contactaddresslines=0;
+function AddContactAddressLine(contactid)
+{
+    $("<div id=\"contact" + contactid +  "addressLine" +contactaddresslines + 
+        "\" style=\"border-width:1px; border-style:solid\" >" 
+        
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('contact" + contactid + "addressLine" +contactaddresslines 
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_addressValue + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "addressLine" + contactaddresslines + "Value\"></div>"
+        +"<div style=\"float:left\">" +i18n_keyname_optional + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "addressLine" + contactaddresslines + "KeyName\"></div>"
+        +"<div style=\"float:left\">" + i18n_keyvalue_optional + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"contact" + contactid + "addressLine" + contactaddresslines + "KeyValue\"></div>"
+    
+        +"</div>").appendTo("#contact" + contactid);
+    Reedit();
+    contactaddress++;
+}
+
+
+function AddCategoryKeyReference()
+{
+    currentcatkeyref++;
+    var i=currentcatkeyref;
+    
+    $("<div id=\"catbagkeyref" + i + "\" style=\"border-width:1px; border-style:solid\">"+
+        "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('catbagkeyref" + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"+
+        // <div style=\"float:left\">" + s.key") + ": <a href=\"javascript:tModelModal('" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.VALUE + "')\" class=\"btn btn-mini\">Picker</a> &nbsp;</div>"
+        "<div style=\"float:left\">" + i18n_key +" (<a href=\"javascript:tModelModal('catbagkeyref" + i + "Value')\" ><i class=\"icon-list-alt icon-large\"></i>" + il8n_picker + "</a>): &nbsp;</div>"
+        + "<div class=\"edit\" id=\"catbagkeyref" + i + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_name + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\"catbagkeyref" + i + "KeyName\"></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\"catbagkeyref" + i + "KeyValue\"></div>"
+        +"</div>").appendTo("#catContainer");
+    Reedit();
+}
+
+function AddCategoryKeyReferenceGroup()
+{
+    currentcatkeyrefgrp++;
+    var i=currentcatkeyrefgrp;
+    
+    $("<div id=\"catbaggrpkeyref" + i + "\" style=\"border-width:2px; border-style:solid\">"+
+        "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('catbaggrpkeyref" + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"+
+        "<div style=\"float:left\">" + i18n_key + " (<a href=\"javascript:tModelModal('catbaggrpkeyref" + i + "Value')\"><i class=\"icon-list-alt icon-large\"></i>" + il8n_picker + "</a>): &nbsp;</div>"
+        + "<div class=\"edit\" id=\"catbaggrpkeyref" + i + "Value\"></div>"
+        
+        + "<div id=\"catbaggrpkeyref" + i + "keyref\" style=\"border-width:1px; border-style:solid\">"
+        + "<div style=\"float:left;height:100%\"><a href=\"javascript:AddCategoryKeyReferenceGroupKeyRef('catbaggrpkeyref" + i + "keyref');\"><i class=\"icon-plus-sign icon-large\"></i></a></div>"
+    
+        +i18n_addrefcat
+        + "</div>"
+    
+        +"</div>").appendTo("#catContainerGrp");
+    Reedit();
+}
+var currentcatkeyrefgrpitems=0;
+function AddCategoryKeyReferenceGroupKeyRef(div)
+{
+    var i=currentcatkeyrefgrp;
+    currentcatkeyrefgrpitems++;
+    var k=currentcatkeyrefgrpitems;
+    
+    $("<div id=\"" + div + "keyref" + k + "\" style=\"border-width:1px; border-style:solid\">"+
+        "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + div  + "keyref" + k+  
+        "');\"><i class=\"icon-trash icon-large\"></i></a></div>"+
+        "<div style=\"float:left\">" + i18n_key + " (<a href=\"javascript:tModelModal('" + div  +"keyref" + k+ "Value')\"><i class=\"icon-list-alt icon-large\"></i>" + il8n_picker + "</a>): &nbsp;</div>"
+        + "<div class=\"edit\" id=\"" + div  +"keyref" + k+ "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_name + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\"" + div  +"keyref" + k+ "KeyName\"></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\""+ div  +"keyref" + k+ "KeyValue\"></div>"
+        +"</div>").appendTo("#" + div);
+    Reedit();
+}
+function AddIdentKeyReference()
+{
+    currentident++;
+    var i=currentident;
+    
+    $("<div id=\"identbagkeyref" + i + "\" style=\"border-width:1px; border-style:solid\">"+
+        "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('identbagkeyref" + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"+
+        "<div style=\"float:left\">" + i18n_key + " (<a href=\"javascript:tModelModal('identbagkeyref" + i + "Value')\"><i class=\"icon-list-alt icon-large\"></i>" + il8n_picker + "</a>): &nbsp;</div>"
+        + "<div class=\"edit\" id=\"identbagkeyref" + i + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_name + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\"identbagkeyref" + i + "KeyName\"></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\"identbagkeyref" + i + "KeyValue\"></div>"
+        +"</div>").insertAfter("#identContainer");
+    Reedit();
+}
+
+function RemoveName(id)
+{
+    var x=$("#" + id).remove();
+//   if (x.length > 0)
+//       currentNameEntries--;
+}
+
+
+function Remove(id)
+{
+    $("#" + id).remove();
+}
+
+
+
+function deleteBusiness()
+{
+    //businessKey
+    var bizid=$("#businessKey").text();
+    var url='ajax/deletebusiness.jsp?id=' + bizid;
+    var postbackdata = new Array();
+    postbackdata.push({
+        name:"nonce", 
+        value: $("#nonce").val()
+    });
+    var request=   $.ajax({
+        url: url,
+        type:"POST",
+        //  data" + i18n_type + ": "html", 
+        cache: false, 
+        //  processData: false,f
+        data: postbackdata
+    });
+
+    request.done(function(msg) {
+        window.console && console.log('postback done '  + url);                
+        
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+        $("#resultBar").show();
+        
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ' + url);                                
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' + jqXHR.responseText + textStatus );
+        //$(".alert").alert();
+        $("#resultBar").show();
+        
+    });
+}
+
+
+function saveBusiness()
+{
+    var url='ajax/savebusiness.jsp';
+    var postbackdata = new Array();
+    $("div.edit").each(function()
+    {
+
+        var id=$(this).attr("id");
+        var value=$(this).text();
+        postbackdata.push({
+            name: id, 
+            value: value
+        });
+    }); 
+    postbackdata.push({
+        name:"nonce", 
+        value: $("#nonce").val()
+    });
+    $("div.noedit").each(function()
+    {
+        var id=$(this).attr("id");
+        var value=$(this).text();
+        postbackdata.push({
+            name: id, 
+            value: value
+        });
+    }); 
+    
+    
+    var request=   $.ajax({
+        url: url,
+        type:"POST",
+        //  data" + i18n_type + ": "html", 
+        cache: false, 
+        //  processData: false,f
+        data: postbackdata
+    });
+                
+                
+    request.done(function(msg) {
+        window.console && console.log('postback done '  + url);                
+        
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+        $("#resultBar").show();
+        
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ' + url);                                
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' +jqXHR.responseText + textStatus );
+        //$(".alert").alert();
+        $("#resultBar").show();
+        
+    });
+}
\ No newline at end of file
diff --git a/juddi-gui/web/js/businesssearch.js b/juddi-gui/web/js/businesssearch.js
new file mode 100644
index 0000000..32e1e63
--- /dev/null
+++ b/juddi-gui/web/js/businesssearch.js
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+var offsetBusiness=0; //start at the begining
+var maxrecordsBusiness=10;  //record 20 at a time
+var totalrecordsBusiness=0;
+
+RenderBusinessListBySearch('%', offsetBusiness, maxrecordsBusiness);
+
+function pagedownBusiness()
+{
+    offset = $("#offsetBusiness").text();
+    //alert(offset);
+    var newoffset = offsetBusiness - maxrecordsBusiness;
+    if (newoffset < 0)
+        return;
+    //alert(newoffset);
+    if (newoffset != offsetBusiness)
+        RenderBusinessListBySearch('%', newoffset, maxrecordsBusiness);
+}
+function refreshBusinessList()
+{
+    RenderBusinessListBySearch('%', offsetBusiness, maxrecordsBusiness);
+}
+function pageupBusiness()
+{
+    offsetBusiness = $("#offsetBusiness").text();
+    //alert(offset);
+    var fetch = maxrecordsBusiness;
+    if ((parseInt(offsetBusiness) + parseInt(maxrecordsBusiness))  > totalrecordsBusiness)
+        //fetch = maxrecords - offset;
+        return;
+    else 
+        fetch = (parseInt(offsetBusiness) + parseInt(maxrecordsBusiness));    
+    //alert(fetch);
+    offsetBusiness = fetch;
+    RenderBusinessListBySearch('%', fetch, maxrecordsBusiness);
+}
+
+//offset, maxrecords, keyword
+function RenderBusinessListBySearch(keyword1, offset1, maxrecords1)
+{
+    var lang = $("#lang").text();
+    $("#businesslist").html("<img src=\"img/bigrollergreen.gif\" title=\"Loading\"/>");
+    var request=   $.ajax({
+        url: 'ajax/businesssearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang,
+        type:"GET",
+        cache: false
+    });
+                  
+    request.done(function(msg) {
+        window.console && console.log('postback done ');                
+        $("#businesslist").html(msg);
+    //refresh();
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ');                                
+        $("#businesslist").html("An error occured! " + jqXHR.responseText + textStatus);
+    //refresh();
+    });
+/*
+    $.get('ajax/businesssearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang, function(data) {
+        $("#businesslist").html(data);
+        refresh();
+    });*/
+}
+
+
+
+function refresh()
+{
+    var displayrecords = $("#displayrecordsBusiness").text();
+    if (displayrecords == totalrecordsBusiness)
+    {
+        $("#pageupBusiness").addClass("disabled");
+        $("#pagedownBusiness").addClass("disabled");
+    }
+    else if (offsetBusiness + maxrecordsBusiness > totalrecordsBusiness)
+    {
+        $("#pageupBusiness").addClass("disabled");    
+    }
+    else if (offsetBusiness ==0)
+    {
+        $("#pagedownBusiness").removeClass("disabled");        
+    }
+    else
+    {
+        $("#pagedownBusiness").removeClass("disabled");        
+        $("#pageupBusiness").removeClass("disabled");        
+    }
+}
\ No newline at end of file
diff --git a/juddi-gui/web/js/i18n.js.jsp b/juddi-gui/web/js/i18n.js.jsp
new file mode 100644
index 0000000..e168bf0
--- /dev/null
+++ b/juddi-gui/web/js/i18n.js.jsp
@@ -0,0 +1,87 @@
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%-- 
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+    Document   : i18n.js
+    Created on : Apr 6, 2013, 11:42:48 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page contentType="application/javascript" pageEncoding="UTF-8"%>
+//<script type="text/javascript">
+    var i18n_clicktoedit="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.clicktoedit"))%>";
+    var i18n_loading="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.loading"))%>";
+    var i18n_login="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "navbar.login.button"))%>";
+    var il8n_picker="<%= org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.picker"))%>";
+    var i18n_name="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.name"))%>";
+    var i18n_value="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.value"))%>";
+    var i18n_key="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.key"))%>";
+    var i18n_lang="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.lang"))%>";
+    var i18n_email="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.email"))%>";
+    var i18n_type="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.type"))%>";
+    
+    var i18n_descriptionAdd="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.description.add"))%>";
+    var i18n_description="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.description"))%>";
+    var i18n_contactPrimary="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.contact.primary"))%>";
+    var i18n_contactType="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.contact.type"))%>";
+    var i18n_contactTypeDefault="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.contact.default"))%>";
+    var i18n_address="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.address"))%>";
+    var i18n_addressValue="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.addressvalue"))%>";
+    var i18n_addressDefaultType="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.addresstype.default"))%>";
+    var i18n_addressLineAdd="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.addressline.add"))%>";
+    
+    var i18n_keyname_optional="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.keyname.optional"))%>";
+    var i18n_keyvalue_optional="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.keyvalue.optional"))%>";
+    
+    var i18n_addrefcat="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.keyrefcat.add"))%>"; 
+    
+    var i18n_addressSortCode="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.sortcode"))%>";
+    var i18n_phone="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.phone"))%>";
+    
+    var i18n_phoneType="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.phone.types"))%>";
+    
+    
+    var i18n_bindingTemplateKey="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.bindingtemplate.key"))%>";
+    var i18n_bindingTemplateDescriptionAdd="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.bindingtemplate.description.add"))%>";
+    var i18n_accesspoint="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.accesspoint"))%>";
+    var i18n_accesspointType="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.accesspoint.type"))%>";
+    var i18n_accesspointValue="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.accesspoint.value"))%>";
+    
+    var i18n_tmodelinstanceinfo="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.tmodelinstance.info"))%>";
+    var i18n_tmodelinstanceinfoDescription="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.tmodelinstance.info.desc"))%>";
+    var i18n_tmodelinstanceinfoAdd="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.tmodelinstance.add"))%>";
+    var i18n_bindingTemplateKeyRefCat="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.bindingtemplate.keyrefcat"))%>";
+    var i18n_bindingTemplateKeyRefCatGrp="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.bindingtemplate.keyrefgrp"))%>";
+    
+    var i18n_keyRefGrpAdd="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.keyrefgroup.add"))%>";
+    var i18n_accesspointDescription="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.accesspoint.description"))%>";
+    var i18n_tmodelkey="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.tmodel.key"))%>";
+    var i18n_tmodelInstanceParams="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.tmodelinstance.parameters"))%>";
+    var i18n_tmodelInstanceDescription="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.tmodelinstance.description"))%>"; 
+    var i18n_tmodelInstanceDescription2="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.tmodelinstance.description2"))%>"; 
+    var i18n_tmodelInstanceDescriptionAdd="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.tmodelinstance.description.add"))%>"; 
+    
+    var i18n_overviewdoc="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.overviewurl"))%>"; 
+    var i18n_overviewdocDescription="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.overviewurl.description"))%>"; 
+    var i18n_overviewdocadd="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(ResourceLoader.GetResource(session, "items.overviewurl.add"))%>"; 
+    //items.overviewurl.description.add
+    //items.name.add
+    //items.overviewurl.description.add
+    //items.bindingtemplate.add
+    //items.bindingtemplate.description.add
+//</script>
\ No newline at end of file
diff --git a/juddi-gui/web/js/jquery-1.9.1.js b/juddi-gui/web/js/jquery-1.9.1.js
new file mode 100644
index 0000000..e2c203f
--- /dev/null
+++ b/juddi-gui/web/js/jquery-1.9.1.js
@@ -0,0 +1,9597 @@
+/*!
+ * jQuery JavaScript Library v1.9.1
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-2-4
+ */
+(function( window, undefined ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//"use strict";
+var
+	// The deferred used on DOM ready
+	readyList,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// Support: IE<9
+	// For `typeof node.method` instead of `node.method !== undefined`
+	core_strundefined = typeof undefined,
+
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+	location = window.location,
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// [[Class]] -> type pairs
+	class2type = {},
+
+	// List of deleted data cache ids, so we can reuse them
+	core_deletedIds = [],
+
+	core_version = "1.9.1",
+
+	// Save a reference to some core methods
+	core_concat = core_deletedIds.concat,
+	core_push = core_deletedIds.push,
+	core_slice = core_deletedIds.slice,
+	core_indexOf = core_deletedIds.indexOf,
+	core_toString = class2type.toString,
+	core_hasOwn = class2type.hasOwnProperty,
+	core_trim = core_version.trim,
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Used for matching numbers
+	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+
+	// Used for splitting on whitespace
+	core_rnotwhite = /\S+/g,
+
+	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	},
+
+	// The ready event handler
+	completed = function( event ) {
+
+		// readyState === "complete" is good enough for us to call the dom ready in oldIE
+		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+			detach();
+			jQuery.ready();
+		}
+	},
+	// Clean-up method for dom ready events
+	detach = function() {
+		if ( document.addEventListener ) {
+			document.removeEventListener( "DOMContentLoaded", completed, false );
+			window.removeEventListener( "load", completed, false );
+
+		} else {
+			document.detachEvent( "onreadystatechange", completed );
+			window.detachEvent( "onload", completed );
+		}
+	};
+
+jQuery.fn = jQuery.prototype = {
+	// The current version of jQuery being used
+	jquery: core_version,
+
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+
+					// scripts is true for back-compat
+					jQuery.merge( this, jQuery.parseHTML(
+						match[1],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return core_slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Add the callback
+		jQuery.ready.promise().done( fn );
+
+		return this;
+	},
+
+	slice: function() {
+		return this.pushStack( core_slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: core_push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var src, copyIsArray, copy, name, options, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( !document.body ) {
+			return setTimeout( jQuery.ready );
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.trigger ) {
+			jQuery( document ).trigger("ready").off("ready");
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	isWindow: function( obj ) {
+		return obj != null && obj == obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return String( obj );
+		}
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ core_toString.call(obj) ] || "object" :
+			typeof obj;
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!core_hasOwn.call(obj, "constructor") &&
+				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+				return false;
+			}
+		} catch ( e ) {
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || core_hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	// data: string of html
+	// context (optional): If specified, the fragment will be created in this context, defaults to document
+	// keepScripts (optional): If true, will include scripts passed in the html string
+	parseHTML: function( data, context, keepScripts ) {
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		if ( typeof context === "boolean" ) {
+			keepScripts = context;
+			context = false;
+		}
+		context = context || document;
+
+		var parsed = rsingleTag.exec( data ),
+			scripts = !keepScripts && [];
+
+		// Single tag
+		if ( parsed ) {
+			return [ context.createElement( parsed[1] ) ];
+		}
+
+		parsed = jQuery.buildFragment( [ data ], context, scripts );
+		if ( scripts ) {
+			jQuery( scripts ).remove();
+		}
+		return jQuery.merge( [], parsed.childNodes );
+	},
+
+	parseJSON: function( data ) {
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		if ( data === null ) {
+			return data;
+		}
+
+		if ( typeof data === "string" ) {
+
+			// Make sure leading/trailing whitespace is removed (IE can't handle it)
+			data = jQuery.trim( data );
+
+			if ( data ) {
+				// Make sure the incoming data is actual JSON
+				// Logic borrowed from http://json.org/json2.js
+				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+					.replace( rvalidtokens, "]" )
+					.replace( rvalidbraces, "")) ) {
+
+					return ( new Function( "return " + data ) )();
+				}
+			}
+		}
+
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	parseXML: function( data ) {
+		var xml, tmp;
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		try {
+			if ( window.DOMParser ) { // Standard
+				tmp = new DOMParser();
+				xml = tmp.parseFromString( data , "text/xml" );
+			} else { // IE
+				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+				xml.async = "false";
+				xml.loadXML( data );
+			}
+		} catch( e ) {
+			xml = undefined;
+		}
+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && jQuery.trim( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var value,
+			i = 0,
+			length = obj.length,
+			isArray = isArraylike( obj );
+
+		if ( args ) {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+		function( text ) {
+			return text == null ?
+				"" :
+				core_trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				( text + "" ).replace( rtrim, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArraylike( Object(arr) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				core_push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		var len;
+
+		if ( arr ) {
+			if ( core_indexOf ) {
+				return core_indexOf.call( arr, elem, i );
+			}
+
+			len = arr.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+				// Skip accessing in sparse arrays
+				if ( i in arr && arr[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var l = second.length,
+			i = first.length,
+			j = 0;
+
+		if ( typeof l === "number" ) {
+			for ( ; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var retVal,
+			ret = [],
+			i = 0,
+			length = elems.length;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value,
+			i = 0,
+			length = elems.length,
+			isArray = isArraylike( elems ),
+			ret = [];
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return core_concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var args, proxy, tmp;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = core_slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Multifunctional method to get and set values of a collection
+	// The value/s can optionally be executed if it's a function
+	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+		var i = 0,
+			length = elems.length,
+			bulk = key == null;
+
+		// Sets many values
+		if ( jQuery.type( key ) === "object" ) {
+			chainable = true;
+			for ( i in key ) {
+				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+			}
+
+		// Sets one value
+		} else if ( value !== undefined ) {
+			chainable = true;
+
+			if ( !jQuery.isFunction( value ) ) {
+				raw = true;
+			}
+
+			if ( bulk ) {
+				// Bulk operations run against the entire set
+				if ( raw ) {
+					fn.call( elems, value );
+					fn = null;
+
+				// ...except when executing function values
+				} else {
+					bulk = fn;
+					fn = function( elem, key, value ) {
+						return bulk.call( jQuery( elem ), value );
+					};
+				}
+			}
+
+			if ( fn ) {
+				for ( ; i < length; i++ ) {
+					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+				}
+			}
+		}
+
+		return chainable ?
+			elems :
+
+			// Gets
+			bulk ?
+				fn.call( elems ) :
+				length ? fn( elems[0], key ) : emptyGet;
+	},
+
+	now: function() {
+		return ( new Date() ).getTime();
+	}
+});
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+		// we once tried to use readyState "interactive" here, but it caused issues like the one
+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			setTimeout( jQuery.ready );
+
+		// Standards-based browsers support DOMContentLoaded
+		} else if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", completed, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", completed, false );
+
+		// If IE event model is used
+		} else {
+			// Ensure firing before onload, maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", completed );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", completed );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var top = false;
+
+			try {
+				top = window.frameElement == null && document.documentElement;
+			} catch(e) {}
+
+			if ( top && top.doScroll ) {
+				(function doScrollCheck() {
+					if ( !jQuery.isReady ) {
+
+						try {
+							// Use the trick by Diego Perini
+							// http://javascript.nwbox.com/IEContentLoaded/
+							top.doScroll("left");
+						} catch(e) {
+							return setTimeout( doScrollCheck, 50 );
+						}
+
+						// detach all dom ready events
+						detach();
+
+						// and execute any waiting functions
+						jQuery.ready();
+					}
+				})();
+			}
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+	var length = obj.length,
+		type = jQuery.type( obj );
+
+	if ( jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	if ( obj.nodeType === 1 && length ) {
+		return true;
+	}
+
+	return type === "array" || type !== "function" &&
+		( length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+		// Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+						}
+					});
+				}
+				return this;
+			},
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				args = args || [];
+				args = [ context, args.slice ? args.slice() : args ];
+				if ( list && ( !fired || stack ) ) {
+					if ( firing ) {
+						stack.push( args );
+					} else {
+						fire( args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var tuples = [
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks("memory") ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var action = tuple[ 0 ],
+								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[1] ](function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.done( newDefer.resolve )
+										.fail( newDefer.reject )
+										.progress( newDefer.notify );
+								} else {
+									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+								}
+							});
+						});
+						fns = null;
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[1] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(function() {
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[0] ] = function() {
+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[0] + "With" ] = list.fireWith;
+		});
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = core_slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+					if( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject )
+						.progress( updateFunc( i, progressContexts, progressValues ) );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// if we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+});
+jQuery.support = (function() {
+
+	var support, all, a,
+		input, select, fragment,
+		opt, eventName, isSupported, i,
+		div = document.createElement("div");
+
+	// Setup
+	div.setAttribute( "className", "t" );
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+	// Support tests won't run in some limited or non-browser environments
+	all = div.getElementsByTagName("*");
+	a = div.getElementsByTagName("a")[ 0 ];
+	if ( !all || !a || !all.length ) {
+		return {};
+	}
+
+	// First batch of tests
+	select = document.createElement("select");
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName("input")[ 0 ];
+
+	a.style.cssText = "top:1px;float:left;opacity:.5";
+	support = {
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: div.firstChild.nodeType === 3,
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: a.getAttribute("href") === "/a",
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.5/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+		checkOn: !!input.value,
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Tests for enctype support on a form (#6743)
+		enctype: !!document.createElement("form").enctype,
+
+		// Makes sure cloning an html5 element does not cause problems
+		// Where outerHTML is undefined, this still works
+		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+		boxModel: document.compatMode === "CSS1Compat",
+
+		// Will be defined later
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true,
+		boxSizingReliable: true,
+		pixelPosition: false
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE<9
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	// Check if we can trust getAttribute("value")
+	input = document.createElement("input");
+	input.setAttribute( "value", "" );
+	support.input = input.getAttribute( "value" ) === "";
+
+	// Check if an input maintains its value after becoming a radio
+	input.value = "t";
+	input.setAttribute( "type", "radio" );
+	support.radioValue = input.value === "t";
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	input.setAttribute( "checked", "t" );
+	input.setAttribute( "name", "t" );
+
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( input );
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<9
+	// Opera does not clone events (and typeof div.attachEvent === undefined).
+	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+	if ( div.attachEvent ) {
+		div.attachEvent( "onclick", function() {
+			support.noCloneEvent = false;
+		});
+
+		div.cloneNode( true ).click();
+	}
+
+	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
+	for ( i in { submit: true, change: true, focusin: true }) {
+		div.setAttribute( eventName = "on" + i, "t" );
+
+		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+	}
+
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	// Run tests that need a body at doc ready
+	jQuery(function() {
+		var container, marginDiv, tds,
+			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+			body = document.getElementsByTagName("body")[0];
+
+		if ( !body ) {
+			// Return for frameset docs that don't have a body
+			return;
+		}
+
+		container = document.createElement("div");
+		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+
+		body.appendChild( container ).appendChild( div );
+
+		// Support: IE8
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+		tds = div.getElementsByTagName("td");
+		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+		tds[ 0 ].style.display = "";
+		tds[ 1 ].style.display = "none";
+
+		// Support: IE8
+		// Check if empty table cells still have offsetWidth/Height
+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+		// Check box-sizing and margin behavior
+		div.innerHTML = "";
+		div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+		support.boxSizing = ( div.offsetWidth === 4 );
+		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+		// Use window.getComputedStyle because jsdom on node.js will break without it.
+		if ( window.getComputedStyle ) {
+			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+			// Check if div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container. (#3333)
+			// Fails in WebKit before Feb 2011 nightlies
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			marginDiv = div.appendChild( document.createElement("div") );
+			marginDiv.style.cssText = div.style.cssText = divReset;
+			marginDiv.style.marginRight = marginDiv.style.width = "0";
+			div.style.width = "1px";
+
+			support.reliableMarginRight =
+				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+		}
+
+		if ( typeof div.style.zoom !== core_strundefined ) {
+			// Support: IE<8
+			// Check if natively block-level elements act like inline-block
+			// elements when setting their display to 'inline' and giving
+			// them layout
+			div.innerHTML = "";
+			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+			// Support: IE6
+			// Check if elements with layout shrink-wrap their children
+			div.style.display = "block";
+			div.innerHTML = "<div></div>";
+			div.firstChild.style.width = "5px";
+			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+			if ( support.inlineBlockNeedsLayout ) {
+				// Prevent IE 6 from affecting layout for positioned elements #11048
+				// Prevent IE from shrinking the body in IE 7 mode #12869
+				// Support: IE<8
+				body.style.zoom = 1;
+			}
+		}
+
+		body.removeChild( container );
+
+		// Null elements to avoid leaks in IE
+		container = div = tds = marginDiv = null;
+	});
+
+	// Null elements to avoid leaks in IE
+	all = select = fragment = opt = a = input = null;
+
+	return support;
+})();
+
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var thisCache, ret,
+		internalKey = jQuery.expando,
+		getByName = typeof name === "string",
+
+		// We have to handle DOM nodes and JS objects differently because IE6-7
+		// can't GC object references properly across the DOM-JS boundary
+		isNode = elem.nodeType,
+
+		// Only DOM nodes need the global jQuery cache; JS object data is
+		// attached directly to the object so GC can occur automatically
+		cache = isNode ? jQuery.cache : elem,
+
+		// Only defining an ID for JS objects if its cache already exists allows
+		// the code to shortcut on the same path as a DOM node with no cache
+		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+	// Avoid doing any more work than we need to when trying to get data on an
+	// object that has no data at all
+	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+		return;
+	}
+
+	if ( !id ) {
+		// Only DOM nodes need a new unique ID for each element since their data
+		// ends up in the global cache
+		if ( isNode ) {
+			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+		} else {
+			id = internalKey;
+		}
+	}
+
+	if ( !cache[ id ] ) {
+		cache[ id ] = {};
+
+		// Avoids exposing jQuery metadata on plain JS objects when the object
+		// is serialized using JSON.stringify
+		if ( !isNode ) {
+			cache[ id ].toJSON = jQuery.noop;
+		}
+	}
+
+	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+	// shallow copied over onto the existing cache
+	if ( typeof name === "object" || typeof name === "function" ) {
+		if ( pvt ) {
+			cache[ id ] = jQuery.extend( cache[ id ], name );
+		} else {
+			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+		}
+	}
+
+	thisCache = cache[ id ];
+
+	// jQuery data() is stored in a separate object inside the object's internal data
+	// cache in order to avoid key collisions between internal data and user-defined
+	// data.
+	if ( !pvt ) {
+		if ( !thisCache.data ) {
+			thisCache.data = {};
+		}
+
+		thisCache = thisCache.data;
+	}
+
+	if ( data !== undefined ) {
+		thisCache[ jQuery.camelCase( name ) ] = data;
+	}
+
+	// Check for both converted-to-camel and non-converted data property names
+	// If a data property was specified
+	if ( getByName ) {
+
+		// First Try to find as-is property data
+		ret = thisCache[ name ];
+
+		// Test for null|undefined property data
+		if ( ret == null ) {
+
+			// Try to find the camelCased property
+			ret = thisCache[ jQuery.camelCase( name ) ];
+		}
+	} else {
+		ret = thisCache;
+	}
+
+	return ret;
+}
+
+function internalRemoveData( elem, name, pvt ) {
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var i, l, thisCache,
+		isNode = elem.nodeType,
+
+		// See jQuery.data for more information
+		cache = isNode ? jQuery.cache : elem,
+		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+	// If there is already no cache entry for this object, there is no
+	// purpose in continuing
+	if ( !cache[ id ] ) {
+		return;
+	}
+
+	if ( name ) {
+
+		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+		if ( thisCache ) {
+
+			// Support array or space separated string names for data keys
+			if ( !jQuery.isArray( name ) ) {
+
+				// try the string as a key before any manipulation
+				if ( name in thisCache ) {
+					name = [ name ];
+				} else {
+
+					// split the camel cased version by spaces unless a key with the spaces exists
+					name = jQuery.camelCase( name );
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+						name = name.split(" ");
+					}
+				}
+			} else {
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+			}
+
+			for ( i = 0, l = name.length; i < l; i++ ) {
+				delete thisCache[ name[i] ];
+			}
+
+			// If there is no data left in the cache, we want to continue
+			// and let the cache object itself get destroyed
+			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+				return;
+			}
+		}
+	}
+
+	// See jQuery.data for more information
+	if ( !pvt ) {
+		delete cache[ id ].data;
+
+		// Don't destroy the parent cache unless the internal data object
+		// had been the only thing left in it
+		if ( !isEmptyDataObject( cache[ id ] ) ) {
+			return;
+		}
+	}
+
+	// Destroy the cache
+	if ( isNode ) {
+		jQuery.cleanData( [ elem ], true );
+
+	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+		delete cache[ id ];
+
+	// When all else fails, null
+	} else {
+		cache[ id ] = null;
+	}
+}
+
+jQuery.extend({
+	cache: {},
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return internalData( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		return internalRemoveData( elem, name );
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return internalData( elem, name, data, true );
+	},
+
+	_removeData: function( elem, name ) {
+		return internalRemoveData( elem, name, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		// Do not set data on non-element because it will not be cleared (#8335).
+		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
+			return false;
+		}
+
+		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+		// nodes accept data unless otherwise specified; rejection can be conditional
+		return !noData || noData !== true && elem.getAttribute("classid") === noData;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var attrs, name,
+			elem = this[0],
+			i = 0,
+			data = null;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = jQuery.data( elem );
+
+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+					attrs = elem.attributes;
+					for ( ; i < attrs.length; i++ ) {
+						name = attrs[i].name;
+
+						if ( !name.indexOf( "data-" ) ) {
+							name = jQuery.camelCase( name.slice(5) );
+
+							dataAttr( elem, name, data[ name ] );
+						}
+					}
+					jQuery._data( elem, "parsedAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		return jQuery.access( this, function( value ) {
+
+			if ( value === undefined ) {
+				// Try to fetch any internally stored data first
+				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+			}
+
+			this.each(function() {
+				jQuery.data( this, key, value );
+			});
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+						data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	var name;
+	for ( name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray(data) ) {
+					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		hooks.cur = fn;
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// not intended for public consumption - generates a queueHooks object, or returns the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+			empty: jQuery.Callbacks("once memory").add(function() {
+				jQuery._removeData( elem, type + "queue" );
+				jQuery._removeData( elem, key );
+			})
+		});
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function( next, hooks ) {
+			var timeout = setTimeout( next, time );
+			hooks.stop = function() {
+				clearTimeout( timeout );
+			};
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while( i-- ) {
+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+});
+var nodeHook, boolHook,
+	rclass = /[\t\r\n]/g,
+	rreturn = /\r/g,
+	rfocusable = /^(?:input|select|textarea|button|object)$/i,
+	rclickable = /^(?:a|area)$/i,
+	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
+	ruseDefault = /^(?:checked|selected)$/i,
+	getSetAttribute = jQuery.support.getSetAttribute,
+	getSetInput = jQuery.support.input;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+
+	prop: function( name, value ) {
+		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call( this, j, this.className ) );
+			});
+		}
+
+		if ( proceed ) {
+			// The disjunction here is for better compressibility (see removeClass)
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					" "
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+					elem.className = jQuery.trim( cur );
+
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = arguments.length === 0 || typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+			});
+		}
+		if ( proceed ) {
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					""
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+					elem.className = value ? jQuery.trim( cur ) : "";
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.match( core_rnotwhite ) || [];
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space separated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			// Toggle whole class name
+			} else if ( type === core_strundefined || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// If the element has a class name or if we're passed "false",
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var ret, hooks, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var val,
+				self = jQuery(this);
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// oldIE doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+							// Don't return options that are disabled or in a disabled optgroup
+							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attr: function( elem, name, value ) {
+		var hooks, notxml, ret,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === core_strundefined ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( notxml ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+
+			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, value + "" );
+				return value;
+			}
+
+		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+
+			// In IE9+, Flash objects don't have .getAttribute (#12945)
+			// Support: IE9+
+			if ( typeof elem.getAttribute !== core_strundefined ) {
+				ret =  elem.getAttribute( name );
+			}
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret == null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( core_rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( (name = attrNames[i++]) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( rboolean.test( name ) ) {
+					// Set corresponding property to false for boolean attributes
+					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
+					if ( !getSetAttribute && ruseDefault.test( name ) ) {
+						elem[ jQuery.camelCase( "default-" + name ) ] =
+							elem[ propName ] = false;
+					} else {
+						elem[ propName ] = false;
+					}
+
+				// See #9699 for explanation of this approach (setting first, then removal)
+				} else {
+					jQuery.attr( elem, name, "" );
+				}
+
+				elem.removeAttribute( getSetAttribute ? name : propName );
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to default in case type is set after value during creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return ( elem[ name ] = value );
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabindex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	}
+});
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		var
+			// Use .prop to determine if this attribute is understood as boolean
+			prop = jQuery.prop( elem, name ),
+
+			// Fetch it accordingly
+			attr = typeof prop === "boolean" && elem.getAttribute( name ),
+			detail = typeof prop === "boolean" ?
+
+				getSetInput && getSetAttribute ?
+					attr != null :
+					// oldIE fabricates an empty string for missing boolean attributes
+					// and conflates checked/selected into attroperties
+					ruseDefault.test( name ) ?
+						elem[ jQuery.camelCase( "default-" + name ) ] :
+						!!attr :
+
+				// fetch an attribute node for properties not recognized as boolean
+				elem.getAttributeNode( name );
+
+		return detail && detail.value !== false ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+			// IE<8 needs the *property* name
+			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+		// Use defaultChecked and defaultSelected for oldIE
+		} else {
+			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+		}
+
+		return name;
+	}
+};
+
+// fix oldIE value attroperty
+if ( !getSetInput || !getSetAttribute ) {
+	jQuery.attrHooks.value = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return jQuery.nodeName( elem, "input" ) ?
+
+				// Ignore the value *property* by using defaultValue
+				elem.defaultValue :
+
+				ret && ret.specified ? ret.value : undefined;
+		},
+		set: function( elem, value, name ) {
+			if ( jQuery.nodeName( elem, "input" ) ) {
+				// Does not return so that setAttribute is also used
+				elem.defaultValue = value;
+			} else {
+				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+				return nodeHook && nodeHook.set( elem, value, name );
+			}
+		}
+	};
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
+				ret.value :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				elem.setAttributeNode(
+					(ret = elem.ownerDocument.createAttribute( name ))
+				);
+			}
+
+			ret.value = value += "";
+
+			// Break association with cloned elements by also using setAttribute (#9646)
+			return name === "value" || value === elem.getAttribute( name ) ?
+				value :
+				undefined;
+		}
+	};
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		get: nodeHook.get,
+		set: function( elem, value, name ) {
+			nodeHook.set( elem, value === "" ? false : value, name );
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+}
+
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret == null ? undefined : ret;
+			}
+		});
+	});
+
+	// href/src property should get the full normalized URL (#10299/#12915)
+	jQuery.each([ "href", "src" ], function( i, name ) {
+		jQuery.propHooks[ name ] = {
+			get: function( elem ) {
+				return elem.getAttribute( name, 4 );
+			}
+		};
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+			// .cssText, that would destroy case senstitivity in URL's, like in "background"
+			return elem.style.cssText || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = value + "" );
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	});
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	});
+});
+var rformElems = /^(?:input|select|textarea)$/i,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+		var tmp, events, t, handleObjIn,
+			special, eventHandle, handleObj,
+			handlers, type, namespaces, origType,
+			elemData = jQuery._data( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !(events = elemData.events) ) {
+			events = elemData.events = {};
+		}
+		if ( !(eventHandle = elemData.handle) ) {
+			eventHandle = elemData.handle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !(handlers = events[ type ]) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+		var j, handleObj, tmp,
+			origCount, t, events,
+			special, handlers, type,
+			namespaces, origType,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery._removeData( elem, "events" );
+		}
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		var handle, ontype, cur,
+			bubbleType, special, tmp, i,
+			eventPath = [ elem || document ],
+			type = core_hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf(":") < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		event.isTrigger = true;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === (elem.ownerDocument || document) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+				event.preventDefault();
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					try {
+						elem[ type ]();
+					} catch ( e ) {
+						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+					}
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, ret, handleObj, matched, j,
+			handlerQueue = [],
+			args = core_slice.call( arguments ),
+			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( (event.result = ret) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var sel, handleObj, matches, i,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+			for ( ; cur != this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) >= 0 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, handlers: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+		}
+
+		return handlerQueue;
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop, copy,
+			type = event.type,
+			originalEvent = event,
+			fixHook = this.fixHooks[ type ];
+
+		if ( !fixHook ) {
+			this.fixHooks[ type ] = fixHook =
+				rmouseEvent.test( type ) ? this.mouseHooks :
+				rkeyEvent.test( type ) ? this.keyHooks :
+				{};
+		}
+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: IE<9
+		// Fix target property (#1925)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Support: Chrome 23+, Safari?
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Support: IE<9
+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+		event.metaKey = !!event.metaKey;
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var body, eventDoc, doc,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	special: {
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+					this.click();
+					return false;
+				}
+			}
+		},
+		focus: {
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== document.activeElement && this.focus ) {
+					try {
+						this.focus();
+						return false;
+					} catch ( e ) {
+						// Support: IE<9
+						// If we error on focus to hidden element (#1486, #12518),
+						// let .trigger() run the handlers
+					}
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === document.activeElement && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Even when returnValue equals to undefined Firefox will still show alert
+				if ( event.result !== undefined ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{ type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		var name = "on" + type;
+
+		if ( elem.detachEvent ) {
+
+			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+			if ( typeof elem[ name ] === core_strundefined ) {
+				elem[ name ] = null;
+			}
+
+			elem.detachEvent( name, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+		if ( !e ) {
+			return;
+		}
+
+		// If preventDefault exists, run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// Support: IE
+		// Otherwise set the returnValue property of the original event to false
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+		if ( !e ) {
+			return;
+		}
+		// If stopPropagation exists, run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+
+		// Support: IE
+		// Set the cancelBubble property of the original event to true
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						event._submit_bubble = true;
+					});
+					jQuery._data( form, "submitBubbles", true );
+				}
+			});
+			// return undefined since we don't need an event listener
+		},
+
+		postDispatch: function( event ) {
+			// If form was submitted by the user, bubble the event up the tree
+			if ( event._submit_bubble ) {
+				delete event._submit_bubble;
+				if ( this.parentNode && !event.isTrigger ) {
+					jQuery.event.simulate( "submit", this.parentNode, event, true );
+				}
+			}
+		},
+
+		teardown: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._just_changed = true;
+						}
+					});
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._just_changed && !event.isTrigger ) {
+							this._just_changed = false;
+						}
+						// Allow triggered, simulated change events (#11500)
+						jQuery.event.simulate( "change", this, event, true );
+					});
+				}
+				return false;
+			}
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event, true );
+						}
+					});
+					jQuery._data( elem, "changeBubbles", true );
+				}
+			});
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return !rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0,
+			handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var type, origFn;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) {
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[0];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://sizzlejs.com/
+ */
+(function( window, undefined ) {
+
+var i,
+	cachedruns,
+	Expr,
+	getText,
+	isXML,
+	compile,
+	hasDuplicate,
+	outermostContext,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsXML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+	sortOrder,
+
+	// Instance-specific data
+	expando = "sizzle" + -(new Date()),
+	preferredDoc = window.document,
+	support = {},
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+
+	// General-purpose constants
+	strundefined = typeof undefined,
+	MAX_NEGATIVE = 1 << 31,
+
+	// Array methods
+	arr = [],
+	pop = arr.pop,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf if we can't use a native one
+	indexOf = arr.indexOf || function( elem ) {
+		var i = 0,
+			len = this.length;
+		for ( ; i < len; i++ ) {
+			if ( this[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+
+	// Regular expressions
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+	operators = "([*^$|!~]?=)",
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+	// Prefer arguments quoted,
+	//   then not containing pseudos/brackets,
+	//   then attribute selectors/non-parenthetical expressions,
+	//   then anything else
+	// These preferences are here to reduce the number of selectors
+	//   needing tokenize in the PSEUDO preFilter
+	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rsibling = /[\x20\t\r\n\f]*[+~]/,
+
+	rnative = /^[^{]+\{\s*\[native code/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rescape = /'|\\/g,
+	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
+	funescape = function( _, escaped ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		return high !== high ?
+			escaped :
+			// BMP codepoint
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	};
+
+// Use a stripped-down slice if we can't use a native one
+try {
+	slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
+} catch ( e ) {
+	slice = function( i ) {
+		var elem,
+			results = [];
+		while ( (elem = this[i++]) ) {
+			results.push( elem );
+		}
+		return results;
+	};
+}
+
+/**
+ * For feature detection
+ * @param {Function} fn The function to test for native support
+ */
+function isNative( fn ) {
+	return rnative.test( fn + "" );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var cache,
+		keys = [];
+
+	return (cache = function( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key += " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key ] = value);
+	});
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// release memory in IE
+		div = null;
+	}
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var match, elem, m, nodeType,
+		// QSA vars
+		i, groups, old, nid, newContext, newSelector;
+
+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+		setDocument( context );
+	}
+
+	context = context || document;
+	results = results || [];
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+		return [];
+	}
+
+	if ( !documentIsXML && !seed ) {
+
+		// Shortcuts
+		if ( (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
+				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+				return results;
+			}
+		}
+
+		// QSA path
+		if ( support.qsa && !rbuggyQSA.test(selector) ) {
+			old = true;
+			nid = expando;
+			newContext = context;
+			newSelector = nodeType === 9 && selector;
+
+			// qSA works strangely on Element-rooted queries
+			// We can work around this by specifying an extra ID on the root
+			// and working up from there (Thanks to Andrew Dupont for the technique)
+			// IE 8 doesn't work on object elements
+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+				groups = tokenize( selector );
+
+				if ( (old = context.getAttribute("id")) ) {
+					nid = old.replace( rescape, "\\$&" );
+				} else {
+					context.setAttribute( "id", nid );
+				}
+				nid = "[id='" + nid + "'] ";
+
+				i = groups.length;
+				while ( i-- ) {
+					groups[i] = nid + toSelector( groups[i] );
+				}
+				newContext = rsibling.test( selector ) && context.parentNode || context;
+				newSelector = groups.join(",");
+			}
+
+			if ( newSelector ) {
+				try {
+					push.apply( results, slice.call( newContext.querySelectorAll(
+						newSelector
+					), 0 ) );
+					return results;
+				} catch(qsaError) {
+				} finally {
+					if ( !old ) {
+						context.removeAttribute("id");
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Detect xml
+ * @param {Element|Object} elem An element or a document
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// If no document and documentElement is available, return
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Set our document
+	document = doc;
+	docElem = doc.documentElement;
+
+	// Support tests
+	documentIsXML = isXML( doc );
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.tagNameNoComments = assert(function( div ) {
+		div.appendChild( doc.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Check if attributes should be retrieved by attribute nodes
+	support.attributes = assert(function( div ) {
+		div.innerHTML = "<select></select>";
+		var type = typeof div.lastChild.getAttribute("multiple");
+		// IE8 returns a string for some attributes even when not present
+		return type !== "boolean" && type !== "string";
+	});
+
+	// Check if getElementsByClassName can be trusted
+	support.getByClassName = assert(function( div ) {
+		// Opera can't find a second classname (in 9.6)
+		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+			return false;
+		}
+
+		// Safari 3.2 caches class attributes and doesn't catch changes
+		div.lastChild.className = "e";
+		return div.getElementsByClassName("e").length === 2;
+	});
+
+	// Check if getElementById returns elements by name
+	// Check if getElementsByName privileges form controls or returns elements by ID
+	support.getByName = assert(function( div ) {
+		// Inject content
+		div.id = expando + 0;
+		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+		docElem.insertBefore( div, docElem.firstChild );
+
+		// Test
+		var pass = doc.getElementsByName &&
+			// buggy browsers will return fewer than the correct 2
+			doc.getElementsByName( expando ).length === 2 +
+			// buggy browsers will return more than the correct 0
+			doc.getElementsByName( expando + 0 ).length;
+		support.getIdNotName = !doc.getElementById( expando );
+
+		// Cleanup
+		docElem.removeChild( div );
+
+		return pass;
+	});
+
+	// IE6/7 return modified attributes
+	Expr.attrHandle = assert(function( div ) {
+		div.innerHTML = "<a href='#'></a>";
+		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+			div.firstChild.getAttribute("href") === "#";
+	}) ?
+		{} :
+		{
+			"href": function( elem ) {
+				return elem.getAttribute( "href", 2 );
+			},
+			"type": function( elem ) {
+				return elem.getAttribute("type");
+			}
+		};
+
+	// ID find and filter
+	if ( support.getIdNotName ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+
+				return m ?
+					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.tagNameNoComments ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== strundefined ) {
+				return context.getElementsByTagName( tag );
+			}
+		} :
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Name
+	Expr.find["NAME"] = support.getByName && function( tag, context ) {
+		if ( typeof context.getElementsByName !== strundefined ) {
+			return context.getElementsByName( name );
+		}
+	};
+
+	// Class
+	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21),
+	// no need to also add to buggyMatches since matches checks buggyQSA
+	// A support test would require too much code (would include document ready)
+	rbuggyQSA = [ ":focus" ];
+
+	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explictly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			div.innerHTML = "<select><option selected=''></option></select>";
+
+			// IE8 - Some boolean attributes are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+		});
+
+		assert(function( div ) {
+
+			// Opera 10-12/IE8 - ^= $= *= and empty values
+			// Should not select anything
+			div.innerHTML = "<input type='hidden' i=''/>";
+			if ( div.querySelectorAll("[i^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.webkitMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
+
+	// Element contains another
+	// Purposefully does not implement inclusive descendent
+	// As in, an element does not contain itself
+	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	// Document order sorting
+	sortOrder = docElem.compareDocumentPosition ?
+	function( a, b ) {
+		var compare;
+
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
+			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
+				if ( a === doc || contains( preferredDoc, a ) ) {
+					return -1;
+				}
+				if ( b === doc || contains( preferredDoc, b ) ) {
+					return 1;
+				}
+				return 0;
+			}
+			return compare & 4 ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition ? -1 : 1;
+	} :
+	function( a, b ) {
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Parentless nodes are either documents or disconnected
+		} else if ( !aup || !bup ) {
+			return a === doc ? -1 :
+				b === doc ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	// Always assume the presence of duplicates if sort doesn't
+	// pass them to our comparison function (as in Google Chrome).
+	hasDuplicate = false;
+	[0, 0].sort( sortOrder );
+	support.detectDuplicates = hasDuplicate;
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	// rbuggyQSA always contains :focus, so no need for an existence check
+	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch(e) {}
+	}
+
+	return Sizzle( expr, document, null, [elem] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	var val;
+
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	if ( !documentIsXML ) {
+		name = name.toLowerCase();
+	}
+	if ( (val = Expr.attrHandle[ name ]) ) {
+		return val( elem );
+	}
+	if ( documentIsXML || support.attributes ) {
+		return elem.getAttribute( name );
+	}
+	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
+		name :
+		val && val.specified ? val.value : null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+// Document sorting and removing duplicates
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		i = 1,
+		j = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		for ( ; (elem = results[i]); i++ ) {
+			if ( elem === results[ i - 1 ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	return results;
+};
+
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+// Returns a function to use in pseudos for input types
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for buttons
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for positionals
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		for ( ; (node = elem[i]); i++ ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (see #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[5] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[4] ) {
+				match[2] = match[4];
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeName ) {
+			if ( nodeName === "*" ) {
+				return function() { return true; };
+			}
+
+			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+			};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, outerCache, node, diff, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+							// Seek `elem` from a previously-cached index
+							outerCache = parent[ expando ] || (parent[ expando ] = {});
+							cache = outerCache[ type ] || [];
+							nodeIndex = cache[0] === dirruns && cache[1];
+							diff = cache[0] === dirruns && cache[2];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						// Use previously-cached element index if available
+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+							diff = cache[1];
+
+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+						} else {
+							// Use the same loop as above to seek `elem` from the start
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+									// Cache the index of each encountered element
+									if ( useCache ) {
+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+									}
+
+									if ( node === elem ) {
+										break;
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf.call( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifider
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsXML ?
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
+						elem.lang) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+			//   not comment, processing instructions, or others
+			// Thanks to Diego Perini for the nodeName shortcut
+			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+function tokenize( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( tokens = [] );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push( {
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			} );
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push( {
+					value: matched,
+					type: type,
+					matches: match
+				} );
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+}
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var data, cache, outerCache,
+				dirkey = dirruns + " " + doneName;
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+							if ( (data = cache[1]) === true || data === cachedruns ) {
+								return data === true;
+							}
+						} else {
+							cache = outerCache[ dir ] = [ dirkey ];
+							cache[1] = matcher( elem, context, xml ) || cachedruns;
+							if ( cache[1] === true ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf.call( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	// A counter to specify which element is currently being matched
+	var matcherCachedRuns = 0,
+		bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, expandContext ) {
+			var elem, j, matcher,
+				setMatched = [],
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				outermost = expandContext != null,
+				contextBackup = outermostContext,
+				// We must always have either seed elements or context
+				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+				cachedruns = matcherCachedRuns;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+			for ( ; (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+						cachedruns = ++matcherCachedRuns;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !group ) {
+			group = tokenize( selector );
+		}
+		i = group.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( group[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+	}
+	return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function select( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		match = tokenize( selector );
+
+	if ( !seed ) {
+		// Try to minimize operations if there is only one group
+		if ( match.length === 1 ) {
+
+			// Take a shortcut and set the context if the root selector is an ID
+			tokens = match[0] = match[0].slice( 0 );
+			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+					context.nodeType === 9 && !documentIsXML &&
+					Expr.relative[ tokens[1].type ] ) {
+
+				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
+				if ( !context ) {
+					return results;
+				}
+
+				selector = selector.slice( tokens.shift().value.length );
+			}
+
+			// Fetch a seed set for right-to-left matching
+			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+			while ( i-- ) {
+				token = tokens[i];
+
+				// Abort if we hit a combinator
+				if ( Expr.relative[ (type = token.type) ] ) {
+					break;
+				}
+				if ( (find = Expr.find[ type ]) ) {
+					// Search, expanding context for leading sibling combinators
+					if ( (seed = find(
+						token.matches[0].replace( runescape, funescape ),
+						rsibling.test( tokens[0].type ) && context.parentNode || context
+					)) ) {
+
+						// If seed is empty or no tokens remain, we can return early
+						tokens.splice( i, 1 );
+						selector = seed.length && toSelector( tokens );
+						if ( !selector ) {
+							push.apply( results, slice.call( seed, 0 ) );
+							return results;
+						}
+
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function
+	// Provide `match` to avoid retokenization if we modified the selector above
+	compile( selector, match )(
+		seed,
+		context,
+		documentIsXML,
+		results,
+		rsibling.test( selector )
+	);
+	return results;
+}
+
+// Deprecated
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Easy API for creating new setFilters
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+// Initialize with the default document
+setDocument();
+
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	rneedsContext = jQuery.expr.match.needsContext,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i, ret, self,
+			len = this.length;
+
+		if ( typeof selector !== "string" ) {
+			self = this;
+			return this.pushStack( jQuery( selector ).filter(function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			}) );
+		}
+
+		ret = [];
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, this[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
+		return ret;
+	},
+
+	has: function( target ) {
+		var i,
+			targets = jQuery( target, this ),
+			len = targets.length;
+
+		return this.filter(function() {
+			for ( i = 0; i < len; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false) );
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true) );
+	},
+
+	is: function( selector ) {
+		return !!selector && (
+			typeof selector === "string" ?
+				// If this is a positional/relative selector, check membership in the returned set
+				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+				rneedsContext.test( selector ) ?
+					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+					jQuery.filter( selector, this ).length > 0 :
+				this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			ret = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+				}
+				cur = cur.parentNode;
+			}
+		}
+
+		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[0], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( jQuery.unique(all) );
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+function sibling( cur, dir ) {
+	do {
+		cur = cur[ dir ];
+	} while ( cur && cur.nodeType !== 1 );
+
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( this.length > 1 && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem ) {
+			return ( elem === qualifier ) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem ) {
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+	});
+}
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+		safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style|link)/i,
+	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /^$|\/(?:java|ecma)script/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+	// We have to close these tags to support XHTML (#13200)
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		area: [ 1, "<map>", "</map>" ],
+		param: [ 1, "<object>", "</object>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+		// unless wrapped in a div with non-breaking characters in front of it.
+		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+	},
+	safeFragment = createSafeFragment( document ),
+	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return jQuery.access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+		}, null, value, arguments.length );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function(i) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		});
+	},
+
+	after: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		});
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( getAll( elem ) );
+				}
+
+				if ( elem.parentNode ) {
+					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+						setGlobalEval( getAll( elem, "script" ) );
+					}
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem, false ) );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+
+			// If this is a select, ensure that it displays empty (#12336)
+			// Support: IE<9
+			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+				elem.options.length = 0;
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return jQuery.access( this, function( value ) {
+			var elem = this[0] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined ) {
+				return elem.nodeType === 1 ?
+					elem.innerHTML.replace( rinlinejQuery, "" ) :
+					undefined;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for (; i < l; i++ ) {
+						// Remove element nodes and prevent memory leaks
+						elem = this[i] || {};
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch(e) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function( value ) {
+		var isFunc = jQuery.isFunction( value );
+
+		// Make sure that the elements are removed from the DOM before they are inserted
+		// this can help fix replacing a parent with child elements
+		if ( !isFunc && typeof value !== "string" ) {
+			value = jQuery( value ).not( this ).detach();
+		}
+
+		return this.domManip( [ value ], true, function( elem ) {
+			var next = this.nextSibling,
+				parent = this.parentNode;
+
+			if ( parent ) {
+				jQuery( this ).remove();
+				parent.insertBefore( elem, next );
+			}
+		});
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+
+		// Flatten any nested arrays
+		args = core_concat.apply( [], args );
+
+		var first, node, hasScripts,
+			scripts, doc, fragment,
+			i = 0,
+			l = this.length,
+			set = this,
+			iNoClone = l - 1,
+			value = args[0],
+			isFunction = jQuery.isFunction( value );
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+			return this.each(function( index ) {
+				var self = set.eq( index );
+				if ( isFunction ) {
+					args[0] = value.call( this, index, table ? self.html() : undefined );
+				}
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( l ) {
+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+			first = fragment.firstChild;
+
+			if ( fragment.childNodes.length === 1 ) {
+				fragment = first;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+				hasScripts = scripts.length;
+
+				// Use the original fragment for the last item instead of the first because it can end up
+				// being emptied incorrectly in certain situations (#8070).
+				for ( ; i < l; i++ ) {
+					node = fragment;
+
+					if ( i !== iNoClone ) {
+						node = jQuery.clone( node, true, true );
+
+						// Keep references to cloned scripts for later restoration
+						if ( hasScripts ) {
+							jQuery.merge( scripts, getAll( node, "script" ) );
+						}
+					}
+
+					callback.call(
+						table && jQuery.nodeName( this[i], "table" ) ?
+							findOrAppend( this[i], "tbody" ) :
+							this[i],
+						node,
+						i
+					);
+				}
+
+				if ( hasScripts ) {
+					doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+					// Reenable scripts
+					jQuery.map( scripts, restoreScript );
+
+					// Evaluate executable scripts on first document insertion
+					for ( i = 0; i < hasScripts; i++ ) {
+						node = scripts[ i ];
+						if ( rscriptType.test( node.type || "" ) &&
+							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+							if ( node.src ) {
+								// Hope ajax is available...
+								jQuery.ajax({
+									url: node.src,
+									type: "GET",
+									dataType: "script",
+									async: false,
+									global: false,
+									"throws": true
+								});
+							} else {
+								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+							}
+						}
+					}
+				}
+
+				// Fix #11809: Avoid leaking memory
+				fragment = first = null;
+			}
+		}
+
+		return this;
+	}
+});
+
+function findOrAppend( elem, tag ) {
+	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	var attr = elem.getAttributeNode("type");
+	elem.type = ( attr && attr.specified ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+	if ( match ) {
+		elem.type = match[1];
+	} else {
+		elem.removeAttribute("type");
+	}
+	return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var elem,
+		i = 0;
+	for ( ; (elem = elems[i]) != null; i++ ) {
+		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+	}
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type, events[ type ][ i ] );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function fixCloneNodeIssues( src, dest ) {
+	var nodeName, e, data;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 copies events bound via attachEvent when using cloneNode.
+	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+		data = jQuery._data( dest );
+
+		for ( e in data.events ) {
+			jQuery.removeEvent( dest, e, data.handle );
+		}
+
+		// Event data gets referenced instead of copied if the expando gets copied too
+		dest.removeAttribute( jQuery.expando );
+	}
+
+	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+	if ( nodeName === "script" && dest.text !== src.text ) {
+		disableScript( dest ).text = src.text;
+		restoreScript( dest );
+
+	// IE6-10 improperly clones children of object elements using classid.
+	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+	} else if ( nodeName === "object" ) {
+		if ( dest.parentNode ) {
+			dest.outerHTML = src.outerHTML;
+		}
+
+		// This path appears unavoidable for IE9. When cloning an object
+		// element in IE9, the outerHTML strategy above is not sufficient.
+		// If the src has innerHTML and the destination does not,
+		// copy the src.innerHTML into the dest.innerHTML. #10324
+		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+			dest.innerHTML = src.innerHTML;
+		}
+
+	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+
+		dest.defaultChecked = dest.checked = src.checked;
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.defaultSelected = dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			i = 0,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone(true);
+			jQuery( insert[i] )[ original ]( elems );
+
+			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+			core_push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+function getAll( context, tag ) {
+	var elems, elem,
+		i = 0,
+		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
+			undefined;
+
+	if ( !found ) {
+		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+				found.push( elem );
+			} else {
+				jQuery.merge( found, getAll( elem, tag ) );
+			}
+		}
+	}
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], found ) :
+		found;
+}
+
+// Used in buildFragment, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( manipulation_rcheckableType.test( elem.type ) ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var destElements, node, clone, i, srcElements,
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+			clone = elem.cloneNode( true );
+
+		// IE<=8 does not properly clone detached, unknown element nodes
+		} else {
+			fragmentDiv.innerHTML = elem.outerHTML;
+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+		}
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			// Fix all IE cloning issues
+			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[i] ) {
+					fixCloneNodeIssues( node, destElements[i] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+					cloneCopyEvent( node, destElements[i] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		destElements = srcElements = node = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	buildFragment: function( elems, context, scripts, selection ) {
+		var j, elem, contains,
+			tmp, tag, tbody, wrap,
+			l = elems.length,
+
+			// Ensure a safe fragment
+			safe = createSafeFragment( context ),
+
+			nodes = [],
+			i = 0;
+
+		for ( ; i < l; i++ ) {
+			elem = elems[ i ];
+
+			if ( elem || elem === 0 ) {
+
+				// Add nodes directly
+				if ( jQuery.type( elem ) === "object" ) {
+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+				// Convert non-html into a text node
+				} else if ( !rhtml.test( elem ) ) {
+					nodes.push( context.createTextNode( elem ) );
+
+				// Convert html into DOM nodes
+				} else {
+					tmp = tmp || safe.appendChild( context.createElement("div") );
+
+					// Deserialize a standard representation
+					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+					wrap = wrapMap[ tag ] || wrapMap._default;
+
+					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+
+					// Descend through wrappers to the right content
+					j = wrap[0];
+					while ( j-- ) {
+						tmp = tmp.lastChild;
+					}
+
+					// Manually add leading whitespace removed by IE
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						elem = tag === "table" && !rtbody.test( elem ) ?
+							tmp.firstChild :
+
+							// String was a bare <thead> or <tfoot>
+							wrap[1] === "<table>" && !rtbody.test( elem ) ?
+								tmp :
+								0;
+
+						j = elem && elem.childNodes.length;
+						while ( j-- ) {
+							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+								elem.removeChild( tbody );
+							}
+						}
+					}
+
+					jQuery.merge( nodes, tmp.childNodes );
+
+					// Fix #12392 for WebKit and IE > 9
+					tmp.textContent = "";
+
+					// Fix #12392 for oldIE
+					while ( tmp.firstChild ) {
+						tmp.removeChild( tmp.firstChild );
+					}
+
+					// Remember the top-level container for proper cleanup
+					tmp = safe.lastChild;
+				}
+			}
+		}
+
+		// Fix #11356: Clear elements from fragment
+		if ( tmp ) {
+			safe.removeChild( tmp );
+		}
+
+		// Reset defaultChecked for any radios and checkboxes
+		// about to be appended to the DOM in IE 6/7 (#8060)
+		if ( !jQuery.support.appendChecked ) {
+			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+		}
+
+		i = 0;
+		while ( (elem = nodes[ i++ ]) ) {
+
+			// #4087 - If origin and destination elements are the same, and this is
+			// that element, do not do anything
+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+				continue;
+			}
+
+			contains = jQuery.contains( elem.ownerDocument, elem );
+
+			// Append to fragment
+			tmp = getAll( safe.appendChild( elem ), "script" );
+
+			// Preserve script evaluation history
+			if ( contains ) {
+				setGlobalEval( tmp );
+			}
+
+			// Capture executables
+			if ( scripts ) {
+				j = 0;
+				while ( (elem = tmp[ j++ ]) ) {
+					if ( rscriptType.test( elem.type || "" ) ) {
+						scripts.push( elem );
+					}
+				}
+			}
+		}
+
+		tmp = null;
+
+		return safe;
+	},
+
+	cleanData: function( elems, /* internal */ acceptData ) {
+		var elem, type, id, data,
+			i = 0,
+			internalKey = jQuery.expando,
+			cache = jQuery.cache,
+			deleteExpando = jQuery.support.deleteExpando,
+			special = jQuery.event.special;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+
+			if ( acceptData || jQuery.acceptData( elem ) ) {
+
+				id = elem[ internalKey ];
+				data = id && cache[ id ];
+
+				if ( data ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Remove cache only if it was not already removed by jQuery.event.remove
+					if ( cache[ id ] ) {
+
+						delete cache[ id ];
+
+						// IE does not allow us to delete expando properties from nodes,
+						// nor does it have a removeAttribute function on Document nodes;
+						// we must handle all of these cases
+						if ( deleteExpando ) {
+							delete elem[ internalKey ];
+
+						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
+							elem.removeAttribute( internalKey );
+
+						} else {
+							elem[ internalKey ] = null;
+						}
+
+						core_deletedIds.push( id );
+					}
+				}
+			}
+		}
+	}
+});
+var iframe, getStyles, curCSS,
+	ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity\s*=\s*([^)]*)/,
+	rposition = /^(top|right|bottom|left)$/,
+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rmargin = /^margin/,
+	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+	elemdisplay = { BODY: "block" },
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: 0,
+		fontWeight: 400
+	},
+
+	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+	// shortcut for names that are not vendor prefixed
+	if ( name in style ) {
+		return name;
+	}
+
+	// check for vendor prefixed names
+	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+		origName = name,
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in style ) {
+			return name;
+		}
+	}
+
+	return origName;
+}
+
+function isHidden( elem, el ) {
+	// isHidden might be called from jQuery#filter function;
+	// in that case, element will be second argument
+	elem = el || elem;
+	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+	var display, elem, hidden,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		values[ index ] = jQuery._data( elem, "olddisplay" );
+		display = elem.style.display;
+		if ( show ) {
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+			}
+		} else {
+
+			if ( !values[ index ] ) {
+				hidden = isHidden( elem );
+
+				if ( display && display !== "none" || !hidden ) {
+					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+				}
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend({
+	css: function( name, value ) {
+		return jQuery.access( this, function( elem, name, value ) {
+			var len, styles,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		var bool = typeof state === "boolean";
+
+		return this.each(function() {
+			if ( bool ? state : isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"columnCount": true,
+		"fillOpacity": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( value == null || type === "number" && isNaN( value ) ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+			// but it would mean to define eight (for every problematic property) identical functions
+			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var num, val, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		//convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+		}
+		return val;
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback, args ) {
+		var ret, name,
+			old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		ret = callback.apply( elem, args || [] );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+
+		return ret;
+	}
+});
+
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+	getStyles = function( elem ) {
+		return window.getComputedStyle( elem, null );
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var width, minWidth, maxWidth,
+			computed = _computed || getStyles( elem ),
+
+			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+			style = elem.style;
+
+		if ( computed ) {
+
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+
+			// A tribute to the "awesome hack by Dean Edwards"
+			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+				// Remember the original values
+				width = style.width;
+				minWidth = style.minWidth;
+				maxWidth = style.maxWidth;
+
+				// Put in the new values to get a computed value out
+				style.minWidth = style.maxWidth = style.width = ret;
+				ret = computed.width;
+
+				// Revert the changed values
+				style.width = width;
+				style.minWidth = minWidth;
+				style.maxWidth = maxWidth;
+			}
+		}
+
+		return ret;
+	};
+} else if ( document.documentElement.currentStyle ) {
+	getStyles = function( elem ) {
+		return elem.currentStyle;
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var left, rs, rsLeft,
+			computed = _computed || getStyles( elem ),
+			ret = computed ? computed[ name ] : undefined,
+			style = elem.style;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret == null && style && style[ name ] ) {
+			ret = style[ name ];
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		// but not position css attributes, as those are proportional to the parent element instead
+		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rs = elem.runtimeStyle;
+			rsLeft = rs && rs.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				rs.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ret;
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				rs.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+		// If we already have the right measurement, avoid augmentation
+		4 :
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+		// both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// at this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+			// at this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// at this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test(val) ) {
+			return val;
+		}
+
+		// we need the check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+			// Use the already-created iframe if possible
+			iframe = ( iframe ||
+				jQuery("<iframe frameborder='0' width='0' height='0'/>")
+				.css( "cssText", "display:block !important" )
+			).appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+			doc.write("<!doctype html><html><body>");
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+
+// Called ONLY from within css_defaultDisplay
+function actualDisplay( name, doc ) {
+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+		display = jQuery.css( elem[0], "display" );
+	elem.remove();
+	return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+				// certain elements can have dimension info if we invisibly show them
+				// however, it must have a current display style that would benefit from this
+				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+					jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					}) :
+					getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var styles = extra && getStyles( elem );
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				) : 0
+			);
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+			// if value === "", then remove inline opacity #12685
+			if ( ( value >= 1 || value === "" ) &&
+					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+					style.removeAttribute ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there is no filter style applied in a css rule or unset inline opacity, we are done
+				if ( value === "" || currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+					// Work around by temporarily setting element display to inline-block
+					return jQuery.swap( elem, { "display": "inline-block" },
+						curCSS, [ elem, "marginRight" ] );
+				}
+			}
+		};
+	}
+
+	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+	// getComputedStyle returns percent when specified for top/left/bottom/right
+	// rather than make the css module depend on the offset module, we just check for it here
+	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+		jQuery.each( [ "top", "left" ], function( i, prop ) {
+			jQuery.cssHooks[ prop ] = {
+				get: function( elem, computed ) {
+					if ( computed ) {
+						computed = curCSS( elem, prop );
+						// if curCSS returns percentage, fallback to offset
+						return rnumnonpx.test( computed ) ?
+							jQuery( elem ).position()[ prop ] + "px" :
+							computed;
+					}
+				}
+			};
+		});
+	}
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		// Support: Opera <= 12.12
+		// Opera reports offsetWidths and offsetHeights less than zero on some elements
+		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+});
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+jQuery.fn.extend({
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map(function(){
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		})
+		.filter(function(){
+			var type = this.type;
+			// Use .is(":disabled") so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !manipulation_rcheckableType.test( type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		});
+
+	} else {
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+});
+
+jQuery.fn.hover = function( fnOver, fnOut ) {
+	return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+};
+var
+	// Document location
+	ajaxLocParts,
+	ajaxLocation,
+	ajax_nonce = jQuery.now(),
+
+	ajax_rquery = /\?/,
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+			// For each dataType in the dataTypeExpression
+			while ( (dataType = dataTypes[i++]) ) {
+				// Prepend if requested
+				if ( dataType[0] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+				// Otherwise append
+				} else {
+					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		});
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var deep, key,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, response, type,
+		self = this,
+		off = url.indexOf(" ");
+
+	if ( off >= 0 ) {
+		selector = url.slice( off, url.length );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax({
+			url: url,
+
+			// if "type" variable is undefined, then "GET" method will be used
+			type: type,
+			dataType: "html",
+			data: params
+		}).done(function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		}).complete( callback && function( jqXHR, status ) {
+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+		});
+	}
+
+	return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+	jQuery.fn[ type ] = function( fn ){
+		return this.on( type, fn );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		});
+	};
+});
+
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		type: "GET",
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // Cross-domain detection vars
+			parts,
+			// Loop variable
+			i,
+			// URL without anti-cache param
+			cacheURL,
+			// Response headers as string
+			responseHeadersString,
+			// timeout handle
+			timeoutTimer,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			transport,
+			// Response headers
+			responseHeaders,
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+				jQuery( callbackContext ) :
+				jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks("once memory"),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// The jqXHR state
+			state = 0,
+			// Default abort message
+			strAbort = "canceled",
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( (match = rheaders.exec( responseHeadersString )) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger("ajaxStart");
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout(function() {
+					jqXHR.abort("timeout");
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader("Last-Modified");
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader("etag");
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 ) {
+					isSuccess = true;
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					isSuccess = true;
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					isSuccess = ajaxConvert( s, response );
+					statusText = isSuccess.state;
+					success = isSuccess.data;
+					error = isSuccess.error;
+					isSuccess = !error;
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger("ajaxStop");
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	}
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+	var firstDataType, ct, finalDataType, type,
+		contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields;
+
+	// Fill responseXXX fields
+	for ( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+	var conv2, current, conv, tmp,
+		converters = {},
+		i = 0,
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice(),
+		prev = dataTypes[ 0 ];
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	// Convert to each sequential dataType, tolerating list modification
+	for ( ; (current = dataTypes[++i]); ) {
+
+		// There's only work to do if current dataType is non-auto
+		if ( current !== "*" ) {
+
+			// Convert response if prev dataType is non-auto and differs from current
+			if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split(" ");
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.splice( i--, 0, current );
+								}
+
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s["throws"] ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+						}
+					}
+				}
+			}
+
+			// Update prev for next iteration
+			prev = current;
+		}
+	}
+
+	return { state: "success", data: response };
+}
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /(?:java|ecma)script/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || jQuery("head")[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement("script");
+
+				script.async = true;
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( script.parentNode ) {
+							script.parentNode.removeChild( script );
+						}
+
+						// Dereference the script
+						script = null;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+
+				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( undefined, true );
+				}
+			}
+		};
+	}
+});
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always(function() {
+			// Restore preexisting value
+			window[ callbackName ] = overwritten;
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		});
+
+		// Delegate to script
+		return "script";
+	}
+});
+var xhrCallbacks, xhrSupported,
+	xhrId = 0,
+	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject && function() {
+		// Abort all pending requests
+		var key;
+		for ( key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( undefined, true );
+		}
+	};
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject("Microsoft.XMLHTTP");
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+xhrSupported = jQuery.ajaxSettings.xhr();
+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = jQuery.support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var handle, i,
+						xhr = s.xhr();
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers["X-Requested-With"] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( err ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+						var status, responseHeaders, statusText, responses;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occurred
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									responses = {};
+									status = xhr.status;
+									responseHeaders = xhr.getAllResponseHeaders();
+
+									// When requesting binary data, IE6-9 will throw an exception
+									// on any attempt to access responseText (#11426)
+									if ( typeof xhr.responseText === "string" ) {
+										responses.text = xhr.responseText;
+									}
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					if ( !s.async ) {
+						// if we're in sync mode we fire the callback
+						callback();
+					} else if ( xhr.readyState === 4 ) {
+						// (IE6 & IE7) if it's in cache and has been
+						// retrieved directly we need to fire the callback
+						setTimeout( callback );
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback( undefined, true );
+					}
+				}
+			};
+		}
+	});
+}
+var fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+	rrun = /queueHooks$/,
+	animationPrefilters = [ defaultPrefilter ],
+	tweeners = {
+		"*": [function( prop, value ) {
+			var end, unit,
+				tween = this.createTween( prop, value ),
+				parts = rfxnum.exec( value ),
+				target = tween.cur(),
+				start = +target || 0,
+				scale = 1,
+				maxIterations = 20;
+
+			if ( parts ) {
+				end = +parts[2];
+				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+				// We need to compute starting value
+				if ( unit !== "px" && start ) {
+					// Iteratively approximate from a nonzero starting point
+					// Prefer the current property, because this process will be trivial if it uses the same units
+					// Fallback to end or a simple constant
+					start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+					do {
+						// If previous iteration zeroed out, double until we get *something*
+						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+						scale = scale || ".5";
+
+						// Adjust and apply
+						start = start / scale;
+						jQuery.style( tween.elem, prop, start + unit );
+
+					// Update scale, tolerating zero or NaN from tween.cur()
+					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+				}
+
+				tween.unit = unit;
+				tween.start = start;
+				// If a +=/-= token was provided, we're doing a relative animation
+				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+			}
+			return tween;
+		}]
+	};
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout(function() {
+		fxNow = undefined;
+	});
+	return ( fxNow = jQuery.now() );
+}
+
+function createTweens( animation, props ) {
+	jQuery.each( props, function( prop, value ) {
+		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+			index = 0,
+			length = collection.length;
+		for ( ; index < length; index++ ) {
+			if ( collection[ index ].call( animation, prop, value ) ) {
+
+				// we're done with this property
+				return;
+			}
+		}
+	});
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = animationPrefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+			// don't match elem in the :animated selector
+			delete tick.elem;
+		}),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise({
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+					// if we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// resolve when we played the last frame
+				// otherwise, reject
+				if ( gotoEnd ) {
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		}),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			return result;
+		}
+	}
+
+	createTweens( animation, props );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		})
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+	var value, name, index, easing, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// not quite $.extend, this wont overwrite keys already present.
+			// also - reusing 'index' from above because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.split(" ");
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			tweeners[ prop ] = tweeners[ prop ] || [];
+			tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			animationPrefilters.unshift( callback );
+		} else {
+			animationPrefilters.push( callback );
+		}
+	}
+});
+
+function defaultPrefilter( elem, props, opts ) {
+	/*jshint validthis:true */
+	var prop, index, length,
+		value, dataShow, toggle,
+		tween, hooks, oldfire,
+		anim = this,
+		style = elem.style,
+		orig = {},
+		handled = [],
+		hidden = elem.nodeType && isHidden( elem );
+
+	// handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always(function() {
+			// doing this makes sure that the complete handler will be called
+			// before this completes
+			anim.always(function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			});
+		});
+	}
+
+	// height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE does not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		if ( jQuery.css( elem, "display" ) === "inline" &&
+				jQuery.css( elem, "float" ) === "none" ) {
+
+			// inline-level elements accept inline-block;
+			// block-level elements need to be inline with layout
+			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+				style.display = "inline-block";
+
+			} else {
+				style.zoom = 1;
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		if ( !jQuery.support.shrinkWrapBlocks ) {
+			anim.always(function() {
+				style.overflow = opts.overflow[ 0 ];
+				style.overflowX = opts.overflow[ 1 ];
+				style.overflowY = opts.overflow[ 2 ];
+			});
+		}
+	}
+
+
+	// show/hide pass
+	for ( index in props ) {
+		value = props[ index ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ index ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+				continue;
+			}
+			handled.push( index );
+		}
+	}
+
+	length = handled.length;
+	if ( length ) {
+		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+		if ( "hidden" in dataShow ) {
+			hidden = dataShow.hidden;
+		}
+
+		// store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done(function() {
+				jQuery( elem ).hide();
+			});
+		}
+		anim.done(function() {
+			var prop;
+			jQuery._removeData( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		});
+		for ( index = 0 ; index < length ; index++ ) {
+			prop = handled[ index ];
+			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+	}
+}
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || "swing";
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			if ( tween.elem[ tween.prop ] != null &&
+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails
+			// so, simple values such as "10px" are parsed to Float.
+			// complex values such as "rotate(1rad)" are returned as is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+			// use step hook for back compat - use cssHook if its there - use .style if its
+			// available and use plain properties where available
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+});
+
+jQuery.fn.extend({
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// animate to the value specified
+			.end().animate({ opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+				doAnimation.finish = function() {
+					anim.stop( true );
+				};
+				// Empty animations, or finishing resolves immediately
+				if ( empty || jQuery._data( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each(function() {
+			var index,
+				data = jQuery._data( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// enable finishing flag on private data
+			data.finish = true;
+
+			// empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.cur && hooks.cur.finish ) {
+				hooks.cur.finish.call( this );
+			}
+
+			// look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// turn off finishing flag
+			delete data.finish;
+		});
+	}
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		attrs = { height: type },
+		i = 0;
+
+	// if we include width, step value is 1 to do all cssExpand values,
+	// if we don't include width, step value is 2 to skip over Left and Right
+	includeWidth = includeWidth? 1 : 0;
+	for( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show"),
+	slideUp: genFx("hide"),
+	slideToggle: genFx("toggle"),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p*Math.PI ) / 2;
+	}
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+	var timer,
+		timers = jQuery.timers,
+		i = 0;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	if ( timer() && jQuery.timers.push( timer ) ) {
+		jQuery.fx.start();
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+	// Default speed
+	_default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+jQuery.fn.offset = function( options ) {
+	if ( arguments.length ) {
+		return options === undefined ?
+			this :
+			this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+	}
+
+	var docElem, win,
+		box = { top: 0, left: 0 },
+		elem = this[ 0 ],
+		doc = elem && elem.ownerDocument;
+
+	if ( !doc ) {
+		return;
+	}
+
+	docElem = doc.documentElement;
+
+	// Make sure it's not a disconnected DOM node
+	if ( !jQuery.contains( docElem, elem ) ) {
+		return box;
+	}
+
+	// If we don't have gBCR, just use 0,0 rather than error
+	// BlackBerry 5, iOS 3 (original iPhone)
+	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
+		box = elem.getBoundingClientRect();
+	}
+	win = getWindow( doc );
+	return {
+		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+	};
+};
+
+jQuery.offset = {
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			parentOffset = { top: 0, left: 0 },
+			elem = this[ 0 ];
+
+		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+			// we assume that getBoundingClientRect is available when computed position is fixed
+			offset = elem.getBoundingClientRect();
+		} else {
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		return {
+			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.documentElement;
+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent || document.documentElement;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+	var top = /Y/.test( prop );
+
+	jQuery.fn[ method ] = function( val ) {
+		return jQuery.access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? (prop in win) ? win[ prop ] :
+					win.document.documentElement[ method ] :
+					elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : jQuery( win ).scrollLeft(),
+					top ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+		// margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return jQuery.access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	});
+});
+// Limit scope pollution from any deprecated API
+// (function() {
+
+// })();
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+	define( "jquery", [], function () { return jQuery; } );
+}
+
+})( window );
diff --git a/juddi-gui/web/js/jquery-ui-1.10.2.custom.min.js b/juddi-gui/web/js/jquery-ui-1.10.2.custom.min.js
new file mode 100644
index 0000000..52b7cb5
--- /dev/null
+++ b/juddi-gui/web/js/jquery-ui-1.10.2.custom.min.js
@@ -0,0 +1,6 @@
+/*! jQuery UI - v1.10.2 - 2013-04-27
+* http://jqueryui.com
+* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.resizable.js
+* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+
+(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);
\ No newline at end of file
diff --git a/juddi-gui/web/js/jquery.jeditable.js b/juddi-gui/web/js/jquery.jeditable.js
new file mode 100644
index 0000000..4506960
--- /dev/null
+++ b/juddi-gui/web/js/jquery.jeditable.js
@@ -0,0 +1,545 @@
+/*
+ * MODIFIED by Juddi to support i18n
+ * 
+ * Jeditable - jQuery in place edit plugin
+ *
+ * Copyright (c) 2006-2009 Mika Tuupola, Dylan Verheul
+ *
+ * Licensed under the MIT license:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *
+ * Project home:
+ *   http://www.appelsiini.net/projects/jeditable
+ *
+ * Based on editable by Dylan Verheul <dylan_at_dyve.net>:
+ *    http://www.dyve.net/jquery/?editable
+ *
+ */
+
+/**
+  * Version 1.7.1
+  *
+  * ** means there is basic unit tests for this parameter. 
+  *
+  * @name  Jeditable
+  * @type  jQuery
+  * @param String  target             (POST) URL or function to send edited content to **
+  * @param Hash    options            additional options 
+  * @param String  options[method]    method to use to send edited content (POST or PUT) **
+  * @param Function options[callback] Function to run after submitting edited content **
+  * @param String  options[name]      POST parameter name of edited content
+  * @param String  options[id]        POST parameter name of edited div id
+  * @param Hash    options[submitdata] Extra parameters to send when submitting edited content.
+  * @param String  options[type]      text, textarea or select (or any 3rd party input type) **
+  * @param Integer options[rows]      number of rows if using textarea ** 
+  * @param Integer options[cols]      number of columns if using textarea **
+  * @param Mixed   options[height]    'auto', 'none' or height in pixels **
+  * @param Mixed   options[width]     'auto', 'none' or width in pixels **
+  * @param String  options[loadurl]   URL to fetch input content before editing **
+  * @param String  options[loadtype]  Request type for load url. Should be GET or POST.
+  * @param String  options[loadtext]  Text to display while loading external content.
+  * @param Mixed   options[loaddata]  Extra parameters to pass when fetching content before editing.
+  * @param Mixed   options[data]      Or content given as paramameter. String or function.**
+  * @param String  options[indicator] indicator html to show when saving
+  * @param String  options[tooltip]   optional tooltip text via title attribute **
+  * @param String  options[event]     jQuery event such as 'click' of 'dblclick' **
+  * @param String  options[submit]    submit button value, empty means no button **
+  * @param String  options[cancel]    cancel button value, empty means no button **
+  * @param String  options[cssclass]  CSS class to apply to input form. 'inherit' to copy from parent. **
+  * @param String  options[style]     Style to apply to input form 'inherit' to copy from parent. **
+  * @param String  options[select]    true or false, when true text is highlighted ??
+  * @param String  options[placeholder] Placeholder text or html to insert when element is empty. **
+  * @param String  options[onblur]    'cancel', 'submit', 'ignore' or function ??
+  *             
+  * @param Function options[onsubmit] function(settings, original) { ... } called before submit
+  * @param Function options[onreset]  function(settings, original) { ... } called before reset
+  * @param Function options[onerror]  function(settings, original, xhr) { ... } called on error
+  *             
+  * @param Hash    options[ajaxoptions]  jQuery Ajax options. See docs.jquery.com.
+  *             
+  */
+
+(function($) {
+
+    $.fn.editable = function(target, options) {
+            
+        if ('disable' == target) {
+            $(this).data('disabled.editable', true);
+            return;
+        }
+        if ('enable' == target) {
+            $(this).data('disabled.editable', false);
+            return;
+        }
+        if ('destroy' == target) {
+            $(this)
+                .unbind($(this).data('event.editable'))
+                .removeData('disabled.editable')
+                .removeData('event.editable');
+            return;
+        }
+        
+        var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options);
+        
+        /* setup some functions */
+        var plugin   = $.editable.types[settings.type].plugin || function() { };
+        var submit   = $.editable.types[settings.type].submit || function() { };
+        var buttons  = $.editable.types[settings.type].buttons 
+                    || $.editable.types['defaults'].buttons;
+        var content  = $.editable.types[settings.type].content 
+                    || $.editable.types['defaults'].content;
+        var element  = $.editable.types[settings.type].element 
+                    || $.editable.types['defaults'].element;
+        var reset    = $.editable.types[settings.type].reset 
+                    || $.editable.types['defaults'].reset;
+        var callback = settings.callback || function() { };
+        var onedit   = settings.onedit   || function() { }; 
+        var onsubmit = settings.onsubmit || function() { };
+        var onreset  = settings.onreset  || function() { };
+        var onerror  = settings.onerror  || reset;
+          
+        /* show tooltip */
+        if (settings.tooltip) {
+            $(this).attr('title', settings.tooltip);
+        }
+        
+        settings.autowidth  = 'auto' == settings.width;
+        settings.autoheight = 'auto' == settings.height;
+        
+        return this.each(function() {
+                        
+            /* save this to self because this changes when scope changes */
+            var self = this;  
+                   
+            /* inlined block elements lose their width and height after first edit */
+            /* save them for later use as workaround */
+            var savedwidth  = $(self).width();
+            var savedheight = $(self).height();
+            
+            /* save so it can be later used by $.editable('destroy') */
+            $(this).data('event.editable', settings.event);
+            
+            /* if element is empty add something clickable (if requested) */
+            if (!$.trim($(this).html())) {
+                $(this).html(settings.placeholder);
+            }
+            
+            $(this).bind(settings.event, function(e) {
+                
+                /* abort if disabled for this element */
+                if (true === $(this).data('disabled.editable')) {
+                    return;
+                }
+                
+                /* prevent throwing an exeption if edit field is clicked again */
+                if (self.editing) {
+                    return;
+                }
+                
+                /* abort if onedit hook returns false */
+                if (false === onedit.apply(this, [settings, self])) {
+                   return;
+                }
+                
+                /* prevent default action and bubbling */
+                e.preventDefault();
+                e.stopPropagation();
+                
+                /* remove tooltip */
+                if (settings.tooltip) {
+                    $(self).removeAttr('title');
+                }
+                
+                /* figure out how wide and tall we are, saved width and height */
+                /* are workaround for http://dev.jquery.com/ticket/2190 */
+                if (0 == $(self).width()) {
+                    //$(self).css('visibility', 'hidden');
+                    settings.width  = savedwidth;
+                    settings.height = savedheight;
+                } else {
+                    if (settings.width != 'none') {
+                        settings.width = 
+                            settings.autowidth ? $(self).width()  : settings.width;
+                    }
+                    if (settings.height != 'none') {
+                        settings.height = 
+                            settings.autoheight ? $(self).height() : settings.height;
+                    }
+                }
+                //$(this).css('visibility', '');
+                
+                /* remove placeholder text, replace is here because of IE */
+                if ($(this).html().toLowerCase().replace(/(;|")/g, '') == 
+                    settings.placeholder.toLowerCase().replace(/(;|")/g, '')) {
+                        $(this).html('');
+                }
+                                
+                self.editing    = true;
+                self.revert     = $(self).html();
+                $(self).html('');
+
+                /* create the form object */
+                var form = $('<form />');
+                
+                /* apply css or style or both */
+                if (settings.cssclass) {
+                    if ('inherit' == settings.cssclass) {
+                        form.attr('class', $(self).attr('class'));
+                    } else {
+                        form.attr('class', settings.cssclass);
+                    }
+                }
+
+                if (settings.style) {
+                    if ('inherit' == settings.style) {
+                        form.attr('style', $(self).attr('style'));
+                        /* IE needs the second line or display wont be inherited */
+                        form.css('display', $(self).css('display'));                
+                    } else {
+                        form.attr('style', settings.style);
+                    }
+                }
+
+                /* add main input element to form and store it in input */
+                var input = element.apply(form, [settings, self]);
+
+                /* set input content via POST, GET, given data or existing value */
+                var input_content;
+                
+                if (settings.loadurl) {
+                    var t = setTimeout(function() {
+                        input.disabled = true;
+                        content.apply(form, [settings.loadtext, settings, self]);
+                    }, 100);
+
+                    var loaddata = {};
+                    loaddata[settings.id] = self.id;
+                    if ($.isFunction(settings.loaddata)) {
+                        $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings]));
+                    } else {
+                        $.extend(loaddata, settings.loaddata);
+                    }
+                    $.ajax({
+                       type : settings.loadtype,
+                       url  : settings.loadurl,
+                       data : loaddata,
+                       async : false,
+                       success: function(result) {
+                          window.clearTimeout(t);
+                          input_content = result;
+                          input.disabled = false;
+                       }
+                    });
+                } else if (settings.data) {
+                    input_content = settings.data;
+                    if ($.isFunction(settings.data)) {
+                        input_content = settings.data.apply(self, [self.revert, settings]);
+                    }
+                } else {
+                    input_content = self.revert; 
+                }
+                content.apply(form, [input_content, settings, self]);
+
+                input.attr('name', settings.name);
+        
+                /* add buttons to the form */
+                buttons.apply(form, [settings, self]);
+         
+                /* add created form to self */
+                $(self).append(form);
+         
+                /* attach 3rd party plugin if requested */
+                plugin.apply(form, [settings, self]);
+
+                /* focus to first visible form element */
+                $(':input:visible:enabled:first', form).focus();
+
+                /* highlight input contents when requested */
+                if (settings.select) {
+                    input.select();
+                }
+        
+                /* discard changes if pressing esc */
+                input.keydown(function(e) {
+                    if (e.keyCode == 27) {
+                        e.preventDefault();
+                        //self.reset();
+                        reset.apply(form, [settings, self]);
+                    }
+                });
+
+                /* discard, submit or nothing with changes when clicking outside */
+                /* do nothing is usable when navigating with tab */
+                var t;
+                if ('cancel' == settings.onblur) {
+                    input.blur(function(e) {
+                        /* prevent canceling if submit was clicked */
+                        t = setTimeout(function() {
+                            reset.apply(form, [settings, self]);
+                        }, 500);
+                    });
+                } else if ('submit' == settings.onblur) {
+                    input.blur(function(e) {
+                        /* prevent double submit if submit was clicked */
+                        t = setTimeout(function() {
+                            form.submit();
+                        }, 200);
+                    });
+                } else if ($.isFunction(settings.onblur)) {
+                    input.blur(function(e) {
+                        settings.onblur.apply(self, [input.val(), settings]);
+                    });
+                } else {
+                    input.blur(function(e) {
+                      /* TODO: maybe something here */
+                    });
+                }
+
+                form.submit(function(e) {
+
+                    if (t) { 
+                        clearTimeout(t);
+                    }
+
+                    /* do no submit */
+                    e.preventDefault(); 
+            
+                    /* call before submit hook. */
+                    /* if it returns false abort submitting */                    
+                    if (false !== onsubmit.apply(form, [settings, self])) { 
+                        /* custom inputs call before submit hook. */
+                        /* if it returns false abort submitting */
+                        if (false !== submit.apply(form, [settings, self])) { 
+
+                          /* check if given target is function */
+                          if ($.isFunction(settings.target)) {
+                              var str = settings.target.apply(self, [input.val(), settings]);
+                              $(self).html(str);
+                              self.editing = false;
+                              callback.apply(self, [self.innerHTML, settings]);
+                              /* TODO: this is not dry */                              
+                              if (!$.trim($(self).html())) {
+                                  $(self).html(settings.placeholder);
+                              }
+                          } else {
+                              /* add edited content and id of edited element to POST */
+                              var submitdata = {};
+                              submitdata[settings.name] = input.val();
+                              submitdata[settings.id] = self.id;
+                              /* add extra data to be POST:ed */
+                              if ($.isFunction(settings.submitdata)) {
+                                  $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings]));
+                              } else {
+                                  $.extend(submitdata, settings.submitdata);
+                              }
+
+                              /* quick and dirty PUT support */
+                              if ('PUT' == settings.method) {
+                                  submitdata['_method'] = 'put';
+                              }
+
+                              /* show the saving indicator */
+                              $(self).html(settings.indicator);
+                              
+                              /* defaults for ajaxoptions */
+                              var ajaxoptions = {
+                                  type    : 'POST',
+                                  data    : submitdata,
+                                  dataType: 'html',
+                                  url     : settings.target,
+                                  success : function(result, status) {
+                                      if (ajaxoptions.dataType == 'html') {
+                                        $(self).html(result);
+                                      }
+                                      self.editing = false;
+                                      callback.apply(self, [result, settings]);
+                                      if (!$.trim($(self).html())) {
+                                          $(self).html(settings.placeholder);
+                                      }
+                                  },
+                                  error   : function(xhr, status, error) {
+                                      onerror.apply(form, [settings, self, xhr]);
+                                  }
+                              };
+                              
+                              /* override with what is given in settings.ajaxoptions */
+                              $.extend(ajaxoptions, settings.ajaxoptions);   
+                              $.ajax(ajaxoptions);          
+                              
+                            }
+                        }
+                    }
+                    
+                    /* show tooltip again */
+                    $(self).attr('title', settings.tooltip);
+                    
+                    return false;
+                });
+            });
+            
+            /* privileged methods */
+            this.reset = function(form) {
+                /* prevent calling reset twice when blurring */
+                if (this.editing) {
+                    /* before reset hook, if it returns false abort reseting */
+                    if (false !== onreset.apply(form, [settings, self])) { 
+                        $(self).html(self.revert);
+                        self.editing   = false;
+                        if (!$.trim($(self).html())) {
+                            $(self).html(settings.placeholder);
+                        }
+                        /* show tooltip again */
+                        if (settings.tooltip) {
+                            $(self).attr('title', settings.tooltip);                
+                        }
+                    }                    
+                }
+            };            
+        });
+
+    };
+
+
+    $.editable = {
+        types: {
+            defaults: {
+                element : function(settings, original) {
+                    var input = $('<input type="hidden"></input>');                
+                    $(this).append(input);
+                    return(input);
+                },
+                content : function(string, settings, original) {
+                    $(':input:first', this).val(string);
+                },
+                reset : function(settings, original) {
+                  original.reset(this);
+                },
+                buttons : function(settings, original) {
+                    var form = this;
+                    if (settings.submit) {
+                        /* if given html string use that */
+                        if (settings.submit.match(/>$/)) {
+                            var submit = $(settings.submit).click(function() {
+                                if (submit.attr("type") != "submit") {
+                                    form.submit();
+                                }
+                            });
+                        /* otherwise use button with given string as text */
+                        } else {
+                            var submit = $('<button type="submit" />');
+                            submit.html(settings.submit);                            
+                        }
+                        $(this).append(submit);
+                    }
+                    if (settings.cancel) {
+                        /* if given html string use that */
+                        if (settings.cancel.match(/>$/)) {
+                            var cancel = $(settings.cancel);
+                        /* otherwise use button with given string as text */
+                        } else {
+                            var cancel = $('<button type="cancel" />');
+                            cancel.html(settings.cancel);
+                        }
+                        $(this).append(cancel);
+
+                        $(cancel).click(function(event) {
+                            //original.reset();
+                            if ($.isFunction($.editable.types[settings.type].reset)) {
+                                var reset = $.editable.types[settings.type].reset;                                                                
+                            } else {
+                                var reset = $.editable.types['defaults'].reset;                                
+                            }
+                            reset.apply(form, [settings, original]);
+                            return false;
+                        });
+                    }
+                }
+            },
+            text: {
+                element : function(settings, original) {
+                    var input = $('<input />');
+                    if (settings.width  != 'none') { input.width(settings.width);  }
+                    if (settings.height != 'none') { input.height(settings.height); }
+                    /* https://bugzilla.mozilla.org/show_bug.cgi?id=236791 */
+                    //input[0].setAttribute('autocomplete','off');
+                    input.attr('autocomplete','off');
+                    $(this).append(input);
+                    return(input);
+                }
+            },
+            textarea: {
+                element : function(settings, original) {
+                    var textarea = $('<textarea />');
+                    if (settings.rows) {
+                        textarea.attr('rows', settings.rows);
+                    } else if (settings.height != "none") {
+                        textarea.height(settings.height);
+                    }
+                    if (settings.cols) {
+                        textarea.attr('cols', settings.cols);
+                    } else if (settings.width != "none") {
+                        textarea.width(settings.width);
+                    }
+                    $(this).append(textarea);
+                    return(textarea);
+                }
+            },
+            select: {
+               element : function(settings, original) {
+                    var select = $('<select />');
+                    $(this).append(select);
+                    return(select);
+                },
+                content : function(data, settings, original) {
+                    /* If it is string assume it is json. */
+                    if (String == data.constructor) {      
+                        eval ('var json = ' + data);
+                    } else {
+                    /* Otherwise assume it is a hash already. */
+                        var json = data;
+                    }
+                    for (var key in json) {
+                        if (!json.hasOwnProperty(key)) {
+                            continue;
+                        }
+                        if ('selected' == key) {
+                            continue;
+                        } 
+                        var option = $('<option />').val(key).append(json[key]);
+                        $('select', this).append(option);    
+                    }                    
+                    /* Loop option again to set selected. IE needed this... */ 
+                    $('select', this).children().each(function() {
+                        if ($(this).val() == json['selected'] || 
+                            $(this).text() == $.trim(original.revert)) {
+                                $(this).attr('selected', 'selected');
+                        }
+                    });
+                }
+            }
+        },
+
+        /* Add new input type */
+        addInputType: function(name, input) {
+            $.editable.types[name] = input;
+        }
+    };
+
+    // publicly accessible defaults
+    $.fn.editable.defaults = {
+        name       : 'value',
+        id         : 'id',
+        type       : 'text',
+        width      : 'auto',
+        height     : 'auto',
+        event      : 'click.editable',
+        onblur     : 'cancel',
+        loadtype   : 'GET',
+        loadtext   : i18n_loading,
+        placeholder: i18n_clicktoedit,
+        loaddata   : {},
+        submitdata : {},
+        ajaxoptions: {}
+    };
+
+})(jQuery);
diff --git a/juddi-gui/web/js/main.js b/juddi-gui/web/js/main.js
new file mode 100644
index 0000000..240c56c
--- /dev/null
+++ b/juddi-gui/web/js/main.js
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+var loggedin=false;
+
+var tagsToReplace = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;'
+};
+
+function replaceTag(tag) {
+    return tagsToReplace[tag] || tag;
+}
+
+function safe_tags_replace(str) {
+    return str.replace(/[&<>]/g, replaceTag);
+}
+
+function escapeJquerySelector(str)
+{
+    if (str)
+        return str.replace(/([ #;?&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1');
+    return str;
+}
+
+  
+function Reedit()
+{
+    window.console && console.log('Reedit');                
+    $('.edit').editable(function(value, settings) { 
+                
+        window.console && console.log(this);
+        window.console && console.log(value);
+        window.console && console.log(settings);
+        //replace tags with escaped characters to prevent XSS
+        return(safe_tags_replace(value));
+    }, { 
+        type    : 'text',
+        submit  : 'OK'
+    });
+ 
+}
+
+Reedit();
+
+
+function Login()
+{
+    
+    $("#loginbutton").addClass("disabled");
+    $("#loginbutton").text(i18n_loading);
+    
+    var form = $("#uddiform");
+    var d = form.serializeArray();
+    var request=   $.ajax({
+        url: 'ajax/loginpost.jsp',
+        type:"POST",
+        //  dataType: "html", 
+        cache: false, 
+        //  processData: false,f
+        data: d
+    });
+                  
+    request.done(function(msg) {
+        window.console && console.log('postback done ');                
+        $("#loginbutton").text(i18n_login);
+        RefreshLoginPage();
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ');                                
+        //TODO handle expired nonce values?
+        RefreshLoginPage();
+        $("#loginbutton").text(i18n_login);
+    });
+}
+
+function logout()
+{
+    
+    $.get('logout.jsp', function(data) {
+        window.location = "index.jsp";
+    });
+}
+
+function RefreshLoginPage()
+{
+    $.get('login.jsp', function(data) {
+        $('#loginfield').html(data);
+    });
+}
+
+// Escapes special characters and returns a valid jQuery selector
+//source http://totaldev.com/content/escaping-characters-get-valid-jquery-id
+function jqSelector(str)
+{
+    return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
+}
+
+function ShowServicesByBusinessKey(bizid)
+{
+    window.console && console.log('fetching service list for business ' + bizid);                
+    var request=   $.ajax({
+        url: 'ajax/servicelist.jsp?id=' + bizid,
+        type:"GET",
+        cache: false
+    });
+                  
+    request.done(function(msg) {
+        window.console && console.log(msg);                
+        window.console && console.log('postback done to div ' + bizid);                
+        $("#" + jqSelector(bizid)).html(msg);
+    //refresh();
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ');                                
+        $("#" + jqSelector(bizid)).html("An error occured! " + jqXHR.responseText + textStatus);
+    //refresh();
+    });
+
+}
+
+function ShowBusinssDetails(bizid)
+{
+    $.get('ajax/businessdetails.jsp?id=' + bizid, function(data) {
+        $('#servicelist').html(data);
+    });
+}
+
+function GetServiceDetails(svcid)
+{
+    $.get('ajax/servicedetails.jsp?id=' + svcid, function(data) {
+        $('#servicelist').html(data);
+        $('.editable').editable('ajax/saveservicedetails.jsp');
+    });
+}
+
+
+function hideAlert()
+{
+    $("#resultBar").hide();
+}
\ No newline at end of file
diff --git a/juddi-gui/web/js/serviceBrowse.js b/juddi-gui/web/js/serviceBrowse.js
new file mode 100644
index 0000000..47f64e1
--- /dev/null
+++ b/juddi-gui/web/js/serviceBrowse.js
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+var offseServicet=0; //start at the begining
+var maxrecordsService=20;  //record 20 at a time
+var totalrecordsService=0;
+
+function refreshServiceList()
+{
+    RenderServiceListBySearch('%', offsetService, maxrecordsService);    
+}
+RenderServiceListBySearch('%', offsetService, maxrecordsService);
+//offset += maxrecords;
+function pagedownService()
+{
+    offsetService = $("#offsetService").text();
+    //alert(offset);
+    var newoffset = offsetService - maxrecordsService;
+    if (newoffset < 0)
+        return;
+    //alert(newoffset);
+    if (newoffset != offsetService)
+        RenderServiceListBySearch('%', newoffset, maxrecordsService);
+}
+function pageupService()
+{
+    offsetService = $("#offsetService").text();
+    //alert(offset);
+    var fetch = maxrecordsService;
+    if ((parseInt(offsetService) + parseInt(maxrecordsService))  > totalrecordsService)
+        //fetch = maxrecords - offset;
+        return;
+    else 
+        fetch = (parseInt(offsetService) + parseInt(maxrecordsService));    
+    //alert(fetch);
+    offsetService = fetch;
+    RenderServiceListBySearch('%', fetch, maxrecordsService);
+}
+
+function RenderServiceListBySearch(keyword, offset, maxrecords)
+{
+    var lang = $("#lang").text();
+    $("#serviceBrowserListing").html("<img src=\"img/bigrollergreen.gif\" title=\"Loading\"/>");
+    var request=   $.ajax({
+        url: 'ajax/servicesearch.jsp?keyword=' + keyword + "&offset=" + offset + "&maxrecords=" + maxrecords + "&lang=" + lang,
+        type:"GET",
+        //  dataType: "html", 
+        cache: false
+    //  processData: false,f
+    //data: d
+    });
+                  
+    request.done(function(msg) {
+        window.console && console.log('postback done ');                
+        $("#serviceBrowserListings").html(msg);
+    //refresh();
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ');                                
+        $("#serviceBrowserListings").html("An error occured! " + jqXHR.responseText + textStatus);
+    //refresh();
+    });
+/*
+    $.get('ajax/servicesearch.jsp?keyword=' + keyword + "&offset=" + offset + "&maxrecords=" + maxrecords, function(data) {
+        $("#serviceBrowserListings").html(data);
+        refresh();
+    });*/
+}
+
+function refresh()
+{
+    var displayrecords = $("#displayrecordsService").text();
+    if (displayrecords == totalrecordsService)
+    {
+        $("#pageupService").addClass("disabled");
+        $("#pagedownService").addClass("disabled");
+    }
+    else if (offsetService + maxrecordsService > totalrecordsService)
+    {
+        $("#pageupService").addClass("disabled");    
+    }
+    else if (offsetService ==0)
+    {
+        $("#pagedownService").removeClass("disabled");        
+    }
+    else
+    {
+        $("#pagedownService").removeClass("disabled");        
+        $("#pageupService").removeClass("disabled");        
+    }
+}
\ No newline at end of file
diff --git a/juddi-gui/web/js/serviceChooser.js b/juddi-gui/web/js/serviceChooser.js
new file mode 100644
index 0000000..499648b
--- /dev/null
+++ b/juddi-gui/web/js/serviceChooser.js
@@ -0,0 +1,179 @@
+/* 
+ * source http://stackoverflow.com/questions/6049687/jquery-ui-dialog-box-need-to-return-value-when-user-presses-button-but-not-wor 
+ * http://stackoverflow.com/questions/3560872/returning-value-from-confirmation-dialog-using-jquery-ui-dialog
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+function reloadServiceModal()
+{
+    var name=$("#nameService").text();
+    RenderServiceListBySearchModal(name, offsetService, maxrecordsService, true);
+                      
+}
+
+
+
+var offsetService=0; //start at the begining
+var maxrecordsService=10;  //record 20 at a time
+var langService="en";  //langauge english
+var totalrecordsService=0;
+
+RenderServiceListBySearchModal('%', offsetService, maxrecordsService, true);
+
+function pagedownChooserService()
+{
+    offsetService = $("#offsetService").text();
+    //alert(offset);
+    var newoffset = offsetService - maxrecordsService;
+    if (newoffset < 0)
+        return;
+    //alert(newoffset);
+    if (newoffset != offsetService)
+        RenderServiceListBySearchModal($("#nameService").text(), newoffset, maxrecordsService, true);
+}
+function pageupChooserService()
+{
+    offsetService = $("#offsetService").text();
+    //alert(offset);
+    var fetch = maxrecordsService;
+    if ((parseInt(offsetService) + parseInt(maxrecordsService))  > totalrecordsService)
+        //fetch = maxrecords - offset;
+        return;
+    else 
+        fetch = (parseInt(offsetService) + parseInt(maxrecordsService));    
+    //alert(fetch);
+    offsetService = fetch;
+    RenderServiceListBySearchModal($("#nameService").text(), fetch, maxrecordsService, true);
+}
+
+
+var selectedItemService=null;
+
+//offset, maxrecords, keyword
+function RenderServiceListBySearchModal(keyword1, offset1, maxrecords1, isForChooser)
+{
+    var lang = $("#langService").text();
+    $("#servicelist").html("<img src=\"img/bigrollergreen.gif\" title=\"Loading\"/>");
+    var request=   $.ajax({
+        url: 'ajax/servicesearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang + "&chooser=" + isForChooser,
+        type:"GET",
+        cache: false
+    });
+                  
+    request.done(function(msg) {
+        window.console && console.log('postback done ');                
+        $("#servicelist").html(msg);
+        
+    //refresh();
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ');                                
+        $("#servicelist").html("An error occured! " + jqXHR.responseText + textStatus);
+    //refresh();
+    });
+/*
+    $.get('ajax/businesssearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang, function(data) {
+        $("#businesslist").html(data);
+        refresh();
+    });*/
+}
+
+function refreshService()
+{
+    var displayrecords = $("#displayrecords").text();
+    if (displayrecords == totalrecordsService)
+    {
+        $("#pageupService").addClass("disabled");
+        $("#pagedownService").addClass("disabled");
+    }
+    else if (offsetService + maxrecordsService > totalrecordsService)
+    {
+        $("#pageupService").addClass("disabled");    
+    }
+    else if (offsetService ==0)
+    {
+        $("#pagedownService").removeClass("disabled");        
+    }
+    else
+    {
+        $("#pagedownService").removeClass("disabled");        
+        $("#pageupService").removeClass("disabled");        
+    }
+}
+
+/**
+ *This launches the tModel model div, upon return (and if not abprted), the contents of the div parameter will be replaced with the 
+ *first selected tModel
+ */
+function serviceModal(div){
+    //reset the form in case it was lanucheed more than once per page view
+    reloadServiceModal();
+    
+    $.dialogService.confirm({
+        callback: function(success, result) {
+            if (!success)
+            {
+              //  alert("aborted!");    
+            }
+                
+            else{
+               // alert('Result: ' + result.join());
+                $("#" + div).html(result[0]);
+            }
+       //     return false;
+        }
+    });
+   // return false;
+}
+            
+            
+function serviceCancel()
+{
+    $(".modalableServiceChooser").each(function()
+    {
+        $(this).prop('checked', false);
+    }); 
+    $('#serviceChooser').modal('hide');
+                
+}
+            
+/**
+ *returns an array of selected tmodel keys
+ */            
+$.dialogService = {
+    confirm: function(options) {
+        var $modal = $('#serviceChooser');
+        //$modal.find('.modal-body').text(options.message);
+        
+        $modal.off('click.dialog', '.btn, .close')
+        .off('hidden')
+        .on('click.dialog', '.btn, .close', function() {
+            $(this).addClass('modal-result');
+        }).on('hidden', function() {
+            var result = $(this).find('.modal-result').filter('.btn-primary').length > 0;
+            $(this).find('.modal-result').removeClass('modal-result');
+            /**
+                         * find the result from the model (the selected key)
+                         */
+            var selectedtmodels =  new Array();
+            $(".modalableServiceChooser").each(function()
+            {
+                var id=$(this).attr("id");
+                if ($(this).is(':checked')) {
+                    selectedtmodels.push(
+                        id
+                        );
+                }
+            }); 
+            
+            options.callback(result ,selectedtmodels);
+        //  $modal.modal('hide');
+        });
+        //callback = options.callback;
+        
+        $modal.modal();
+    }        
+};
+
diff --git a/juddi-gui/web/js/serviceEditor.js b/juddi-gui/web/js/serviceEditor.js
new file mode 100644
index 0000000..6df5fbd
--- /dev/null
+++ b/juddi-gui/web/js/serviceEditor.js
@@ -0,0 +1,239 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+//init the editable fields
+Reedit();
+
+function AddCategoryKeyReferenceSpecificBT (div)
+{
+    currentcatkeyrefBT++;
+    var i=currentcatkeyrefBT;
+    
+    $("<div id=\""+div + i + "\" style=\"border-width:1px; border-style:solid\">"+
+        "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('"+div + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"+
+        "<div style=\"float:left\">" + i18n_key +" (<a href=\"javascript:tModelModal('"+div + i + "Value')\" ><i class=\"icon-list-alt icon-large\"></i>" + il8n_picker + "</a>): &nbsp;</div>"
+        + "<div class=\"edit\" id=\""+ div + i + "Value\"></div>"
+        + "<div style=\"float:left\">" + i18n_name + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\""+ div + i + "KeyName\"></div>"
+        + "<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\"" +div + i + "KeyValue\"></div>"
+        +"</div>").appendTo("#"+div);
+    Reedit();
+}
+
+
+function AddCategoryKeyReferenceGroupSpecificBT(div)
+{
+    currentcatkeyrefgrpBT++;
+    var i=currentcatkeyrefgrpBT;
+    
+    $("<div id=\""+div + i + "\" style=\"border-width:2px; border-style:solid\">"+
+        "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('"+div + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>"+
+        "<div style=\"float:left\">" + i18n_key + " (<a href=\"javascript:tModelModal('"+div + i + "Value')\" ><i class=\"icon-list-alt icon-large\"></i>" + il8n_picker + "</a>): &nbsp;</div>"
+        + "<div class=\"edit\" id=\"" +div+ i + "Value\"></div>"
+        
+        + "<div id=\""+div + i + "keyref\" style=\"border-width:1px; border-style:solid\">"
+        + "<div style=\"float:left;height:100%\"><a href=\"javascript:AddCategoryKeyReferenceGroupKeyRef('"+div + i
+        + "keyref');\"><i class=\"icon-plus-sign icon-large\"></i></a></div>"
+        +i18n_addrefcat
+        + "</div>"
+    
+        +"</div>").appendTo("#"+div);
+    Reedit();
+}
+
+function AddCategoryKeyReferenceGroupKeyRefBT(div)
+{
+    var i=currentcatkeyrefgrp;
+    currentcatkeyrefgrpitems++;
+    var k=currentcatkeyrefgrpitems;
+    
+    $("<div id=\""+div + i + "keyref" + k + "\" style=\"border-width:1px; border-style:solid\">"+
+        "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('"+div + i + "keyref" + k+  
+        "');\"><i class=\"icon-trash icon-large\"></i></a></div>"+
+        "<div style=\"float:left\">" + i18n_key + " (<a href=\"javascript:tModelModal('"+div + i +"keyref" + k+ "Value')\"><i class=\"icon-list-alt icon-large\"></i>" + il8n_picker + "</a>): &nbsp;</div>"
+        + "<div class=\"edit\" id=\""+div + i +"keyref" + k+ "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_name + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\""+div + i +"keyref" + k+ "KeyName\"></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        + "<div class=\"edit\" id=\""+div + i +"keyref" + k+ "KeyValue\"></div>"
+        +"</div>").appendTo("#" + div);
+    Reedit();
+}
+
+function AddOverviewDocumentSpecific(div)
+{
+    currentOverviewDocs++;
+    var i = currentOverviewDocs;
+    $("<div id=\"" + div + i + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + div + i 
+        +"');\"><i class=\"icon-trash icon-large\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"" +div+ i + "Value\"></div>"
+        +"<div style=\"float:left\">Use " + i18n_type + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"" + div + i + "Type\"></div>"
+        //descriptions
+        +"<a href=\"javascript:AddDescriptionSpecific('" + div + i + "Description');\">"
+        +"<i class=\"icon-plus-sign icon-large\"></i></a> " + i18n_descriptionAdd
+        + ("<div id=\"" + div + i + "Description\" style=\"border-width:1px; border-style:dotted\"></div>")
+    
+        +"</div>").prependTo("#" + div);
+    Reedit();
+}
+
+function AddBindingTemplate()
+{
+    
+
+    currentbindingtemplates++;
+    var i =  currentbindingtemplates;         
+      
+    $("<br><div id=\"bindingTemplate" + i + "\" style=\"border-width: 2px; border-style: dashed;; border-color: lightseagreen\"><div style=\"float:left\"><a href=\"javascript:Remove('bindingTemplate"+i+"');\"><i class=\"icon-trash icon-large\"></i></a>" + i18n_bindingTemplateKey + ": &nbsp;</div><div class=\"edit\" id=\"bindingTemplate"+i+"Value\">"
+        +"</div><br><a href=\"javascript:AddDescriptionSpecific('bindingTemplate"+i+"Description');\"><i class=\"icon-plus-sign icon-large\"></i></a>"
+        +i18n_bindingTemplateDescriptionAdd
+        +"<br>"
+        +"<div id=\"bindingTemplate"+i+"Description\" style=\"border-width: 1px; border-style: dotted;\"></div>"
+        +"<b>" + i18n_accesspoint + "</b> - " + i18n_accesspointDescription +"<br>"
+        +"<div style=\"float:left\">" + i18n_accesspointType + ": &nbsp;</div><div class=\"edit\" id=\"bindingTemplate"+i+"accessPointType\"></div><div style=\"float:left\">" + i18n_accesspointValue + ": &nbsp;</div><div class=\"edit\" id=\"bindingTemplate"+i+"accessPointValue\"></div></div>"
+        +"<br><b>" + i18n_tmodelinstanceinfo + "</b> - " + i18n_tmodelinstanceinfoDescription + "<br>"
+        +"<a href=\"javascript:AddTmodelInstance('bindingTemplate"+i+"tmodelInstance');\"><i class=\"icon-plus-sign icon-large\"></i></a> " + i18n_tmodelinstanceinfoAdd 
+        + "<br>"
+        +"<div id=\"bindingTemplate"+i+"tmodelInstance\" style=\"border-width: 1px; border-style: solid; border-color: red\"></div><br>"
+        +"<b>" + i18n_bindingTemplateKeyRefCat + ":</b><br><a href=\"javascript:AddCategoryKeyReferenceSpecific('bindingTemplate"+i+"catbagkeyref');\"><i class=\"icon-plus-sign icon-large\"></i></a> " + i18n_addrefcat + "<br>"
+        +"<div id=\"bindingTemplate"+i+"catbagkeyref\" style=\"border-width: 1px; border-style: dotted;\"></div><br>"
+        +"<b>" + i18n_bindingTemplateKeyRefCatGrp + "</b><br>"
+        +"<a href=\"javascript:AddCategoryKeyReferenceGroupSpecificBT('bindingTemplate"+i+"catbaggrpkeyref');\"><i class=\"icon-plus-sign icon-large\"></i></a> " + i18n_keyRefGrpAdd + "<br>"
+        +"<div id=\"bindingTemplate"+i+"catbaggrpkeyref\" style=\"border-width: 1px; border-style: dotted;\"></div></div>").appendTo("#bindingTemplatesContainer");
+
+    Reedit();
+}
+
+
+function AddTmodelInstance(div)
+{
+    currentbindingtemplatesInstance++;
+    var i =  currentbindingtemplatesInstance;         
+    currentOverviewDocs++;
+    var k = currentOverviewDocs;
+    $("<div id=\"" + div + i + "\" style=\"border-width: 2px; border-style: dashed; border-color: red\">"        
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + div + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div><div style=\"float:left\">"
+        +"<b>" + i18n_tmodelkey + "</b> (<a href=\"javascript:tModelModal('"+div + i + "KeyName\')\" ><i class=\"icon-list-alt icon-large\"></i>" + il8n_picker + "</a>): &nbsp;</div><div class=\"edit\" id=\"" + div + i + "KeyName\"></div>"
+        +"<br><div style=\"float:left\"><b>" + i18n_tmodelInstanceParams + ":</b> &nbsp;</div><div class=\"edit\" id=\"" + div + i + "instanceValue\"></div>"
+        +"<br><b>" + i18n_tmodelInstanceDescription + "</b> - " + i18n_tmodelInstanceDescription2 + "<br>"
+        +"<a href=\"javascript:AddDescriptionSpecific('" + div + i + "instanceDescription');\"><i class=\"icon-plus-sign icon-large\"></i></a> "
+        +i18n_tmodelInstanceDescriptionAdd+"<br>"
+        +"<div id=\"" + div + i + "instanceDescription\" style=\"border-width: 1px; border-style: groove;\">"
+        //issue
+
+        +"<div><br><b>" + i18n_overviewdoc + "</b> - " + i18n_overviewdocDescription + "<br>"
+        +"<a href=\"javascript:AddOverviewDocumentSpecific('" + div + i + 
+        "instanceoverviewDoc" + k + "Description');\"><i class=\"icon-plus-sign icon-large\"></i></a> "+ i18n_overviewdocadd + "<br>"
+        +"<div id=\"" + div + i + "overviewDoc\" style=\"border-width: 1px; border-style: groove;\"></div></div></div></div></div>").appendTo("#"+div);
+    Reedit();
+}
+
+
+function saveService()
+{
+    var url='ajax/saveservicedetails.jsp';
+    var postbackdata = new Array();
+    $("div.edit").each(function()
+    {
+      
+        var id=$(this).attr("id");
+        var value=$(this).text();
+        postbackdata.push({
+            name: id, 
+            value: value
+        });
+    }); 
+    postbackdata.push({
+        name:"nonce", 
+        value: $("#nonce").val()
+    });
+    $("div.noedit").each(function()
+    {
+        var id=$(this).attr("id");
+        var value=$(this).text();
+        postbackdata.push({
+            name: id, 
+            value: value
+        });
+    }); 
+    
+    
+    var request=   $.ajax({
+        url: url,
+        type:"POST",
+        //  data" + i18n_type + ": "html", 
+        cache: false, 
+        //  processData: false,f
+        data: postbackdata
+    });
+                
+                
+    request.done(function(msg) {
+        window.console && console.log('postback done '  + url);                
+        
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+        $("#resultBar").show();
+        
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ' + url);                                
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' +jqXHR.responseText + textStatus );
+        //$(".alert").alert();
+        $("#resultBar").show();
+        
+    });
+}
+function deleteService()
+{
+    var bizid=$("#serviceKey").text();
+    var url='ajax/deleteservice.jsp?id=' + bizid;
+    var postbackdata = new Array();
+    postbackdata.push({
+        name:"nonce", 
+        value: $("#nonce").val()
+    });
+    var request=   $.ajax({
+        url: url,
+        type:"POST",
+        //  data" + i18n_type + ": "html", 
+        cache: false, 
+        //  processData: false,f
+        data: postbackdata
+    });
+
+    request.done(function(msg) {
+        window.console && console.log('postback done '  + url);                
+        
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+        $("#resultBar").show();
+        
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ' + url);                                
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' + jqXHR.responseText + textStatus );
+        //$(".alert").alert();
+        $("#resultBar").show();
+        
+    });
+}
\ No newline at end of file
diff --git a/juddi-gui/web/js/tmodelChooser.js b/juddi-gui/web/js/tmodelChooser.js
new file mode 100644
index 0000000..22d21b1
--- /dev/null
+++ b/juddi-gui/web/js/tmodelChooser.js
@@ -0,0 +1,88 @@
+/* 
+ * source http://stackoverflow.com/questions/6049687/jquery-ui-dialog-box-need-to-return-value-when-user-presses-button-but-not-wor 
+ * http://stackoverflow.com/questions/3560872/returning-value-from-confirmation-dialog-using-jquery-ui-dialog
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+function reloadTmodelModal()
+{
+    RenderTmodelListBySearch('%', offset, maxrecords, true);
+                      
+}
+
+
+/**
+ *This launches the tModel model div, upon return (and if not abprted), the contents of the div parameter will be replaced with the 
+ *first selected tModel
+ */
+function tModelModal(div){
+    //reset the form in case it was lanucheed more than once per page view
+    reloadTmodelModal();
+    
+    $.dialogTmodel.confirm({
+        callback: function(success, result) {
+            if (!success)
+            {
+                //alert("aborted!");    
+            }
+                
+            else{
+                //alert('Result: ' + result.join());
+                $("#" + div).html(result[0]);
+            }
+        //    return false;
+        }
+    });
+   // return false;
+}
+            
+            
+function tModelCancel()
+{
+    $(".modalableTmodel").each(function()
+    {
+        $(this).prop('checked', false);
+    }); 
+    $('#tmodelChooser').modal('hide');
+                
+}
+            
+/**
+ *returns an array of selected tmodel keys
+ */            
+$.dialogTmodel = {
+    confirm: function(options) {
+        var $modal = $('#tmodelChooser');
+        //$modal.find('.modal-body').text(options.message);
+        
+        $modal.off('click.dialog', '.btn, .close')
+        .off('hidden')
+        .on('click.dialog', '.btn, .close', function() {
+            $(this).addClass('modal-result');
+        }).on('hidden', function() {
+            var result = $(this).find('.modal-result').filter('.btn-primary').length > 0;
+            $(this).find('.modal-result').removeClass('modal-result');
+            /**
+                         * find the result from the model (the selected key)
+                         */
+            var selectedtmodels =  new Array();
+            $(".modalableTmodel").each(function()
+            {
+                var id=$(this).attr("id");
+                if ($(this).is(':checked')) {
+                    selectedtmodels.push(
+                        id
+                        );
+                }
+            }); 
+            
+            options.callback(result ,selectedtmodels);
+        //  $modal.modal('hide');
+        });
+        //callback = options.callback;
+        
+        $modal.modal();
+    }        
+};
+
diff --git a/juddi-gui/web/js/tmodeledit.js b/juddi-gui/web/js/tmodeledit.js
new file mode 100644
index 0000000..8b9eb36
--- /dev/null
+++ b/juddi-gui/web/js/tmodeledit.js
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+function AddOverviewDocument()
+{
+    currentOverviewDocs++;
+    var i = currentOverviewDocs;
+    $("<div id=\"overviewDoc" + i + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('overviewDoc" + i 
+        +"');\"><i class=\"icon-trash\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"overviewDoc" + i + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_type + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"overviewDoc" + i + "Type\"></div>"
+        //descriptions
+        +"<a href=\"javascript:AddDescriptionSpecific('overviewDoc" + i + "Description');\">"
+        +"<i class=\"icon-plus-sign\"></i></a> " + i18n_descriptionAdd
+        + ("<div id=\"overviewDoc" + i + "Description\" style=\"border-width:1px; border-style:dotted\"></div>")
+    
+        +"</div>").prependTo("#overviewDoc");
+    Reedit();
+}
+
+
+function AddDescriptionOverviewSpecific(div)
+{
+    //javascript:Remove('bindingTemplate0Description0'); 
+    currentDescriptionSpecific++;
+    var i = currentDescriptionSpecific;
+    $("<div id=\""+ div + i + "\" style=\"border-width:1px; border-style:solid\" >" 
+        +"<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + div + i 
+        +"');\"><i class=\"icon-trash\"></i></a></div>"
+        +"<div style=\"float:left\">" + i18n_value + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"" + div + "Description" + i + "Value\"></div>"
+        +"<div style=\"float:left\">" + i18n_lang + ": &nbsp;</div>"
+        +"<div class=\"edit\" id=\"" + div + "Description" + i + "Lang\"></div>"
+        +"</div>").appendTo("#" + div);
+    Reedit();
+}
+
+
+function savetModel()
+{
+    var url='ajax/savetmodel.jsp';
+    var postbackdata = new Array();
+    $("div.edit").each(function()
+    {
+        //TODO filter out (click to edit) values
+        var id=$(this).attr("id");
+        var value=$(this).text();
+        postbackdata.push({
+            name: id, 
+            value: value
+        });
+    }); 
+    
+    $("#isDeleted")
+    if ($('#isDeleted').is(':checked')) {
+         postbackdata.push({
+            name: "isDeleted", 
+            value: "checked"
+        });
+    } else {
+       
+    } 
+    postbackdata.push({
+        name:"nonce", 
+        value: $("#nonce").val()
+    });
+    $("div.noedit").each(function()
+    {
+        var id=$(this).attr("id");
+        var value=$(this).text();
+        postbackdata.push({
+            name: id, 
+            value: value
+        });
+    }); 
+    
+    
+    var request=   $.ajax({
+        url: url,
+        type:"POST",
+        //  data" + i18n_type + ": "html", 
+        cache: false, 
+        //  processData: false,f
+        data: postbackdata
+    });
+                
+                
+    request.done(function(msg) {
+        window.console && console.log('postback done '  + url);                
+        
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+        $("#resultBar").show();
+        
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ' + url);                                
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' +jqXHR.responseText + textStatus );
+        //$(".alert").alert();
+        $("#resultBar").show();
+        
+    });
+}
+
+function deletetModel()
+{
+    //businessKey
+    var bizid=$("#serviceKey").text();
+    var url='ajax/deletetmodel.jsp?id=' + bizid;
+    var postbackdata = new Array();
+    postbackdata.push({
+        name:"nonce", 
+        value: $("#nonce").val()
+    });
+    var request=   $.ajax({
+        url: url,
+        type:"POST",
+        //  data" + i18n_type + ": "html", 
+        cache: false, 
+        //  processData: false,f
+        data: postbackdata
+    });
+
+    request.done(function(msg) {
+        window.console && console.log('postback done '  + url);                
+        
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+        $("#resultBar").show();
+        
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ' + url);                                
+        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' + jqXHR.responseText + textStatus);
+        //$(".alert").alert();
+        $("#resultBar").show();
+        
+    });
+}
\ No newline at end of file
diff --git a/juddi-gui/web/js/tmodelsearch.js b/juddi-gui/web/js/tmodelsearch.js
new file mode 100644
index 0000000..c848989
--- /dev/null
+++ b/juddi-gui/web/js/tmodelsearch.js
@@ -0,0 +1,116 @@
+
+var offset=0; //start at the begining
+var maxrecords=10;  //record 20 at a time
+var lang="en";  //langauge english
+var totalrecords=0;
+
+RenderTmodelListBySearch('%', offset, maxrecords);
+
+function pagedownChooserTmodel()
+{
+    offset = $("#offset").text();
+    //alert(offset);
+    var newoffset = offset - maxrecords;
+    if (newoffset < 0)
+        return;
+    //alert(newoffset);
+    if (newoffset != offset)
+        RenderTmodelListBySearch('%', newoffset, maxrecords, true);
+}
+function pageupChooserTmodel()
+{
+    offset = $("#offset").text();
+    //alert(offset);
+    var fetch = maxrecords;
+    if ((parseInt(offset) + parseInt(maxrecords))  > totalrecords)
+        //fetch = maxrecords - offset;
+        return;
+    else 
+        fetch = (parseInt(offset) + parseInt(maxrecords));    
+    //alert(fetch);
+    offset = fetch;
+    RenderTmodelListBySearch('%', fetch, maxrecords, true);
+}
+
+
+function pagedown()
+{
+    offset = $("#offset").text();
+    //alert(offset);
+    var newoffset = offset - maxrecords;
+    if (newoffset < 0)
+        return;
+    //alert(newoffset);
+    if (newoffset != offset)
+        RenderTmodelListBySearch('%', newoffset, maxrecords, false);
+}
+function pageup()
+{
+    offset = $("#offset").text();
+    //alert(offset);
+    var fetch = maxrecords;
+    if ((parseInt(offset) + parseInt(maxrecords))  > totalrecords)
+        //fetch = maxrecords - offset;
+        return;
+    else 
+        fetch = (parseInt(offset) + parseInt(maxrecords));    
+    //alert(fetch);
+    offset = fetch;
+    RenderTmodelListBySearch('%', fetch, maxrecords, false);
+}
+var selectedItem=null;
+
+//offset, maxrecords, keyword
+function RenderTmodelListBySearch(keyword1, offset1, maxrecords1, isForChooser)
+{
+    var lang = $("#lang").text();
+    $("#tmodellist").html("<img src=\"img/bigrollergreen.gif\" title=\"Loading\"/>");
+    var request=   $.ajax({
+        url: 'ajax/tmodelsearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang + "&chooser=" + isForChooser,
+        type:"GET",
+        cache: false
+    });
+                  
+    request.done(function(msg) {
+        window.console && console.log('postback done ');                
+        $("#tmodellist").html(msg);
+        $('.modalable').click(function(){
+            selectedItem =$(this).attr("id");
+        });
+    //refresh();
+    });
+
+    request.fail(function(jqXHR, textStatus) {
+        window.console && console.log('postback failed ');                                
+        $("#tmodellist").html("An error occured! " + jqXHR.responseText + textStatus);
+    //refresh();
+    });
+/*
+    $.get('ajax/businesssearch.jsp?keyword=' + keyword1 + "&offset=" + offset1 + "&maxrecords=" + maxrecords1 + "&lang=" + lang, function(data) {
+        $("#businesslist").html(data);
+        refresh();
+    });*/
+}
+
+function refresh()
+{
+    var displayrecords = $("#displayrecords").text();
+    if (displayrecords == totalrecords)
+    {
+        $("#pageup").addClass("disabled");
+        $("#pagedown").addClass("disabled");
+    }
+    else if (offset + maxrecords > totalrecords)
+    {
+        $("#pageup").addClass("disabled");    
+    }
+    else if (offset ==0)
+    {
+        $("#pagedown").removeClass("disabled");        
+    }
+    else
+    {
+        $("#pagedown").removeClass("disabled");        
+        $("#pageup").removeClass("disabled");        
+    }
+}
\ No newline at end of file
diff --git a/juddi-gui/web/login.jsp b/juddi-gui/web/login.jsp
new file mode 100644
index 0000000..f816417
--- /dev/null
+++ b/juddi-gui/web/login.jsp
@@ -0,0 +1,59 @@
+<%-- 
+    Document   : login
+    Created on : Feb 24, 2013, 9:08:02 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.commons.lang.StringEscapeUtils"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+
+<div class="navbar-form pull-right">
+
+    <%
+        if (session.getAttribute("username") != null && session.getAttribute("password") != null
+                && ((String) session.getAttribute("username")).length() > 0 && ((String) session.getAttribute("password")).length() > 0) {
+            //we're probably logged in
+
+    %>
+    <script type="text/javascript">
+        loggedin = true;
+    </script>
+    <a class="btn" title="<%=ResourceLoader.GetResource(session, "navbar.login.logout")%>" href="javascript:logout();">
+        <%
+                if (!request.isSecure()) {
+            %>
+            <i class="icon-warning-sign" title="<%=ResourceLoader.GetResource(session, "warning.ssl")%>"></i>
+            <%
+                }
+            %>
+        
+        <i class="icon-user"></i>
+        <%
+            out.write(ResourceLoader.GetResource(session, "items.welcome") + " " + StringEscapeUtils.escapeHtml((String) session.getAttribute("username")) + "</a>");
+
+        } else {
+        %>
+
+        <script type="text/javascript">
+            loggedin = false;
+        </script>
+
+        <input class="span2" type="text" placeholder="<%=ResourceLoader.GetResource(session, "navbar.login.username")%>" name="username" id="username">
+        <input class="span2" type="password" placeholder="<%=ResourceLoader.GetResource(session, "navbar.login.password")%>" name="password" id="password">
+        <button type="button" onclick="javascript:Login();" class="btn" id="loginbutton">
+            <%
+                if (!request.isSecure()) {
+            %>
+            <i class="icon-warning-sign" title="<%=ResourceLoader.GetResource(session, "warning.ssl")%>"></i>
+            <%
+                }
+            %>
+            <%=ResourceLoader.GetResource(session, "navbar.login.button")%>
+        </button>
+        <%
+            }
+        %>
+
+
+</div>
diff --git a/juddi-gui/web/logout.jsp b/juddi-gui/web/logout.jsp
new file mode 100644
index 0000000..260ecdd
--- /dev/null
+++ b/juddi-gui/web/logout.jsp
@@ -0,0 +1,18 @@
+<%-- 
+    Document   : logout page
+    Created on : Feb 25, 2013, 10:25:48 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%
+    UddiHub hub = UddiHub.getInstance(application, session);
+    UddiHub.reset(session);
+    hub.die();
+    session.removeAttribute("username");
+    session.removeAttribute("password");
+    // session.invalidate();
+    // response.sendRedirect("index.jsp");
+//do not invalidate the session, this will cause the form nonce to clear until the browser url changes
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/reginfo.jsp b/juddi-gui/web/reginfo.jsp
new file mode 100644
index 0000000..bbff199
--- /dev/null
+++ b/juddi-gui/web/reginfo.jsp
@@ -0,0 +1,117 @@
+<%-- 
+    Document   : settings
+    Created on : Feb 23, 2013, 2:05:35 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.util.concurrent.atomic.AtomicReference"%>
+<%@page import="java.net.URLEncoder"%>
+<%@page import="org.apache.juddi.webconsole.hub.builders.Printers"%>
+<%@page import="org.uddi.api_v3.RegisteredInfo"%>
+<%@page import="java.util.Iterator"%>
+<%@page import="java.util.Map.Entry"%>
+<%@page import="java.util.Set"%>
+<%@page import="java.util.Properties"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well">
+        <h1><%=ResourceLoader.GetResource(session, "navbar.create.mybiz")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12">
+            <%=ResourceLoader.GetResource(session, "navbar.create.mybiz.content")%>
+            <br><Br>
+            <%
+                UddiHub x = UddiHub.getInstance(application, session);
+                AtomicReference<String> msg = new AtomicReference<String>();
+                RegisteredInfo info = x.GetNodeInformation(msg);
+                if (msg != null && msg.get() != null) {
+                    out.write(UddiHub.ToErrorAlert(msg.get()));
+                } else if (info == null || info.getBusinessInfos() == null || info.getBusinessInfos().getBusinessInfo().isEmpty()) {
+                    out.write(UddiHub.ToErrorAlert(ResourceLoader.GetResource(session, "errors.nodatareturned")));
+                } else {
+                    //TODO i18n
+            %>
+
+            <table class="table table-hover">
+                <tr><th><%=ResourceLoader.GetResource(session, "items.key")%></th><th><%=ResourceLoader.GetResource(session, "items.name")%></th>
+                    <th><%=ResourceLoader.GetResource(session, "items.actions")%></th></tr>
+
+                <%
+                    for (int i = 0; i < info.getBusinessInfos().getBusinessInfo().size(); i++) {
+                        out.write("<tr id=\"" + StringEscapeUtils.escapeHtml(info.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey()) + "\"><td>");
+                        out.write("<a href=\"businessEditor2.jsp?id=" + URLEncoder.encode(info.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey(), "UTF-8") + "\">");
+                        out.write(StringEscapeUtils.escapeHtml(info.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey()));
+                        out.write(" <i class=\"icon-edit icon-large\"></i></a>");
+                        out.write("</td><td>");
+                        out.write(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(info.getBusinessInfos().getBusinessInfo().get(i).getName())));
+                        out.write("</td><td>");
+                %>
+                <div class="btn-group">
+                    <button class="btn">Actions</button>
+                    <button class="btn dropdown-toggle" data-toggle="dropdown">
+                        <span class="caret"></span>
+                    </button>
+                    <ul class="dropdown-menu">
+                        <!-- dropdown menu links -->
+                        <li>
+                            <a class="btn btn-danger " href="javascript:deleteBusinessByID('<%=URLEncoder.encode(info.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey(), "UTF-8")%>');"><%=ResourceLoader.GetResource(session, "actions.delete")%></a></li>
+                        <li><a class="btn btn-success " href="signer.jsp?id=<%=URLEncoder.encode(info.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey(), "UTF-8")%>&type=business"><%=ResourceLoader.GetResource(session, "actions.sign")%></a></li>
+                        <li><a class="btn btn-info " href="#" title="<%=ResourceLoader.GetResource(session, "actions.subscribe.description")%>"><%=ResourceLoader.GetResource(session, "actions.subscribe")%></a></li>
+                        <li><a class="btn btn-warning " href="#" title="<%=ResourceLoader.GetResource(session, "actions.transfer.description")%>"><%=ResourceLoader.GetResource(session, "actions.transfer")%></a></li>
+                        <li><a class="btn "  href="javascript:ViewAsXML('<%=StringEscapeUtils.escapeJavaScript(info.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())%>');"><%=ResourceLoader.GetResource(session, "actions.asxml")%></a></li>
+                    </ul>
+                </div>
+
+                <%
+                        //    out.write("Edit, Delete, Transfer, Sign, Subscribe, Create Relationship");
+                        out.write("</td></tr>");
+                    }
+                %>
+            </table>
+            <%
+                }
+            %>
+        </div>
+
+        <div class="modal hide fade" id="viewAsXml">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                <h3><%=ResourceLoader.GetResource(session, "actions.asxml")%></h3>
+            </div>
+            <div class="modal-body" id="viewAsXmlContent">
+
+
+            </div>
+            <div class="modal-footer">
+                <a href="javascript:$('#viewAsXml').modal('hide');" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+            </div>
+        </div>
+
+    </div>
+    <script type="text/javascript" src="js/businessEditor.js"></script>
+    <script type="text/javascript">
+        
+                       
+    
+        
+        function ViewAsXML(bizid)
+        {
+            $.get("ajax/toXML.jsp?id=" + bizid + "&type=business", function(data){
+                window.console && console.log('asXml success');                
+                  
+                $("#viewAsXmlContent").html(
+                "<a href=\"ajax/toXML.jsp?id=" + bizid + "&type=business\" class=\"btn btn-primary\">Popout</a>  " 
+                    +safe_tags_replace(data) + "<br>" 
+            );
+                $( "#viewAsXml" ).modal('show');
+            });
+                       
+        }
+    </script>
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/search.jsp b/juddi-gui/web/search.jsp
new file mode 100644
index 0000000..a3dd7e6
--- /dev/null
+++ b/juddi-gui/web/search.jsp
@@ -0,0 +1,224 @@
+<%-- 
+    Document   : search
+    Created on : Feb 24, 2013, 9:14:01 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.v3.client.UDDIConstants"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h1><%= ResourceLoader.GetResource(session, "navbar.search")%> </h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+
+
+            <%
+                UddiHub x = UddiHub.getInstance(application, request.getSession());
+
+            %>
+            <div class="accordion" id="accordion2">
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne">
+                            <b><%= ResourceLoader.GetResource(session, "navbar.search")%> !</b>
+                        </a>
+                    </div>
+                    <div id="collapseOne" class="accordion-body collapse in">
+                        <div class="accordion-inner">
+                            <%= ResourceLoader.GetResource(session, "search.wrylf")%><Br>
+                            <div class="btn-group" id="searchfor" data-toggle="buttons-radio">
+                                <button type="button" class="btn active" value="business"><%= ResourceLoader.GetResource(session, "items.business")%></button>
+                                <!--<button type="button" class="btn " >Related Business</button>-->
+                                <button type="button" class="btn " value="service"><%= ResourceLoader.GetResource(session, "items.service")%></button>
+                                <button type="button" class="btn " value="bindingTemplate"><%= ResourceLoader.GetResource(session, "items.bindingtemplate")%></button>
+                                <button type="button" class="btn " value="tModel"><%= ResourceLoader.GetResource(session, "items.tmodel")%></button>
+                                <% 
+                                //if (x.IsJuddiRegistry()) {
+                              
+                                //<button type="button" class="btn " ><%= ResourceLoader.GetResource(session, "items.publisher")% ></button>
+
+                                //}
+                                %>
+                            </div><br><Br>
+                            <%= ResourceLoader.GetResource(session, "search.criteria")%><br>
+                            <div class="btn-group" id="searchcriteria" data-toggle="buttons-radio">
+                                <button type="button" class="btn active" value="name"><%= ResourceLoader.GetResource(session, "search.criteria.byname")%></button>
+                                <button type="button" class="btn " value="category"><%= ResourceLoader.GetResource(session, "search.criteria.bycategory")%></button>
+                                <button type="button" class="btn " value="key"><%= ResourceLoader.GetResource(session, "search.criteria.bykey")%></button>
+                                <button type="button" class="btn " value="tmodel"><%= ResourceLoader.GetResource(session, "search.criteria.bytmodel")%></button>
+                            </div><br>
+                            <%=ResourceLoader.GetResource(session, "items.findqualifiers")%><br>
+
+                            <div style=" float:left; padding: 2px">
+
+                            <div ><input type="checkbox" name="<%=UDDIConstants.AND_ALL_KEYS%>" value="<%=UDDIConstants.AND_ALL_KEYS%>"> <%=UDDIConstants.AND_ALL_KEYS%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.APPROXIMATE_MATCH%>" value="<%=UDDIConstants.APPROXIMATE_MATCH%>"> <%=UDDIConstants.APPROXIMATE_MATCH%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.BINARY_SORT%>" value="<%=UDDIConstants.BINARY_SORT%>"> <%=UDDIConstants.BINARY_SORT%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.BINDING_SUBSET%>" value="<%=UDDIConstants.BINDING_SUBSET%>"> <%=UDDIConstants.BINDING_SUBSET%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.CASE_INSENSITIVE_MATCH%>" value="<%=UDDIConstants.CASE_INSENSITIVE_MATCH%>"> <%=UDDIConstants.CASE_INSENSITIVE_MATCH%></div>
+                            </div>
+                            <div style=" float:left; padding: 2px">
+                            <div ><input type="checkbox" name="<%=UDDIConstants.CASE_INSENSITIVE_SORT%>" value="<%=UDDIConstants.CASE_INSENSITIVE_SORT%>"> <%=UDDIConstants.CASE_INSENSITIVE_SORT%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.CASE_SENSITIVE_MATCH%>" value="<%=UDDIConstants.CASE_SENSITIVE_MATCH%>"> <%=UDDIConstants.CASE_SENSITIVE_MATCH%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.CASE_SENSITIVE_SORT%>" value="<%=UDDIConstants.CASE_SENSITIVE_SORT%>"> <%=UDDIConstants.CASE_SENSITIVE_SORT%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.COMBINE_CATEGORY_BAGS%>" value="<%=UDDIConstants.COMBINE_CATEGORY_BAGS%>"> <%=UDDIConstants.COMBINE_CATEGORY_BAGS%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.DIACRITIC_INSENSITIVE_MATCH%>" value="<%=UDDIConstants.DIACRITIC_INSENSITIVE_MATCH%>"> <%=UDDIConstants.DIACRITIC_INSENSITIVE_MATCH%></div>
+                            </div>
+                            <div style=" float:left; padding: 2px">
+                            <div ><input type="checkbox" name="<%=UDDIConstants.DIACRITIC_SENSITIVE_MATCH%>" value="<%=UDDIConstants.DIACRITIC_SENSITIVE_MATCH%>"> <%=UDDIConstants.DIACRITIC_SENSITIVE_MATCH%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.EXACT_MATCH%>" value="<%=UDDIConstants.EXACT_MATCH%>"> <%=UDDIConstants.EXACT_MATCH%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.OR_ALL_KEYS%>" value="<%=UDDIConstants.OR_ALL_KEYS%>"> <%=UDDIConstants.OR_ALL_KEYS%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.OR_LIKE_KEYS%>" value="<%=UDDIConstants.OR_LIKE_KEYS%>"> <%=UDDIConstants.OR_LIKE_KEYS%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.SERVICE_SUBSET%>" value="<%=UDDIConstants.SERVICE_SUBSET%>"> <%=UDDIConstants.SERVICE_SUBSET%></div>
+                            </div>
+                            <div style=" float:left; padding: 2px">
+                            <div ><input type="checkbox" name="<%=UDDIConstants.SIGNATURE_PRESENT%>" value="<%=UDDIConstants.SIGNATURE_PRESENT%>"> <%=UDDIConstants.SIGNATURE_PRESENT%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.SORT_BY_DATE_ASC%>" value="<%=UDDIConstants.SORT_BY_DATE_ASC%>"> <%=UDDIConstants.SORT_BY_DATE_ASC%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.SORT_BY_DATE_DESC%>" value="<%=UDDIConstants.SORT_BY_DATE_DESC%>"> <%=UDDIConstants.SORT_BY_DATE_DESC%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.SORT_BY_NAME_ASC%>" value="<%=UDDIConstants.SORT_BY_NAME_ASC%>"> <%=UDDIConstants.SORT_BY_NAME_ASC%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.SORT_BY_NAME_DESC%>" value="<%=UDDIConstants.SORT_BY_NAME_DESC%>"> <%=UDDIConstants.SORT_BY_NAME_DESC%></div>
+                            </div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.SUPPRESS_PROJECTED_SERVICES%>" value="<%=UDDIConstants.SUPPRESS_PROJECTED_SERVICES%>"> <%=UDDIConstants.SUPPRESS_PROJECTED_SERVICES%></div>
+                            <div ><input type="checkbox" name="<%=UDDIConstants.UTS_10%>" value="<%=UDDIConstants.UTS_10%>"> <%=UDDIConstants.UTS_10%></div>
+
+                            <Br>
+                            <br>
+                            <div>
+                                <br><Br>
+                                <input type="text" placeholder="Type something…" id="searchcontent">
+                                <input type="text" placeholder="Language" id="lang"><br>
+                                <%= ResourceLoader.GetResource(session, "search.tip")%>
+                                <br>
+                                <a href="javascript:search();" class="btn btn-primary btn-large"><%= ResourceLoader.GetResource(session, "navbar.search")%> </a>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="accordion-group">
+                    <div class="accordion-heading">
+                        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo">
+                             <%= ResourceLoader.GetResource(session, "search.results")%>
+                        </a>
+                    </div>
+                    <div id="collapseTwo" class="accordion-body collapse">
+                        <div class="accordion-inner" id="resultdivs">
+                             <%= ResourceLoader.GetResource(session, "search.searchfirst")%>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+        </div>
+    </div>
+    <script type="text/javascript">
+        var offset=0;
+        var maxrecords=20;
+        function search()
+        {
+         /*   
+            $.each($('input:checkbox'), function(index,item){
+                var itemname = item.name;
+                if (item.checked)
+                {
+                    fqs+=itemname+",";
+                }
+            });
+           */ 
+            //var fqs = $('input:checkbox').length ? $('input:checked').val() : '';
+            //alert (fqs);
+            var selection = $("#searchcriteria > button.btn.active").val();
+            //alert(selection);
+                                    
+            //var findqualifier = $("#findqualifier").val();
+            //alert(findqualifier);
+            var searchfor = $("#searchfor  > button.btn.active").val();
+            //alert(searchfor);
+            var searchcontent = $("#searchcontent").val();
+            //alert(searchcontent );
+            var url='ajax/search.jsp';
+            
+            $("#collapseTwo").collapse("show");
+            $("#collapseOne").collapse("hide");
+            
+            var postbackdata = new Array();
+           
+            postbackdata.push({
+                name:"selection", 
+                value: selection
+            });
+            
+            postbackdata.push({
+                name:"searchcontent", 
+                value: searchcontent
+            });
+            
+            postbackdata.push({
+                name:"lang", 
+                value: $("#lang").val()
+            });
+            
+            
+            $.each($('input:checkbox'), function(index,item){
+                var itemname = item.name;
+                if (item.checked)
+                {
+                    postbackdata.push({
+                        name:"findqualifier", 
+                        value: itemname
+                    });
+                }
+            });
+            
+            
+            postbackdata.push({
+                name:"searchfor", 
+                value: searchfor
+            });
+            
+            postbackdata.push({
+                name:"nonce", 
+                value: $("#nonce").val()
+            });
+            
+            var request=   $.ajax({
+                url: url,
+                type:"POST",
+                //  dataType: "html", 
+                cache: false, 
+                //  processData: false,f
+                data: postbackdata
+            });
+                
+                
+            request.done(function(msg) {
+                window.console && console.log('postback done '  + url);                
+        
+                $("#resultdivs").html(msg);
+                
+        
+            });
+
+            request.fail(function(jqXHR, textStatus) {
+                window.console && console.log('postback failed ' + url);                                
+                $("#resultdivs").html(jqXHR.responseText  + textStatus);
+                //$(".alert").alert();
+                
+        
+            });
+                                    
+        }
+                                
+    </script>
+    
+    <%@include file="tmodelChooser.jsp" %>
+    
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/serviceBrowse.jsp b/juddi-gui/web/serviceBrowse.jsp
new file mode 100644
index 0000000..5064050
--- /dev/null
+++ b/juddi-gui/web/serviceBrowse.jsp
@@ -0,0 +1,52 @@
+<%-- 
+    Document   : Service Browser
+    Created on : Feb 24, 2013, 9:14:01 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h1><%=ResourceLoader.GetResource(session, "navbar.search")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+            <div id="businesslist">
+                <%=ResourceLoader.GetResource(session, "totals.records")%>: <span id="totalrecordsService"></span><br>
+                <%=ResourceLoader.GetResource(session, "totals.recordsreturned")%>: <span id="displayrecordsService"></span><br>
+                <%=ResourceLoader.GetResource(session, "totals.offset")%> : <span id="offsetService">0</span><br>
+                <%=ResourceLoader.GetResource(session, "items.lang")%>: <span id="lang" class="edit"></span><br>
+
+                <a href="javascript:pagedownService();"><i class="icon-circle-arrow-left icon-2x" id="pageupService"></i></a>
+                <a href="javascript:refreshServiceList();"><i class="icon-refresh icon-2x" id="refresh"></i></a>
+                <a href="javascript:pageupService();"><i class="icon-circle-arrow-right  icon-2x" id="pagedownService"></i></a>
+
+                <div id="serviceBrowserListings">
+                    <img src="img/bigrollergreen.gif" title="Loading"/>
+                </div>
+                <script src="js/serviceBrowse.js"></script>
+                <script type="text/javascript">
+                
+                    $('.edit').editable(function(value, settings) { 
+                        console.log(this);
+                        console.log(value);
+                        console.log(settings);
+                        RenderServiceListBySearch('%', offset, maxrecords);
+                        return(value);
+                    }, { 
+                        type    : 'text',
+                        submit  : 'OK'
+                    });
+                </script>
+            </div>
+
+        </div>
+    </div>
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/serviceChooser.jsp b/juddi-gui/web/serviceChooser.jsp
new file mode 100644
index 0000000..3f041d8
--- /dev/null
+++ b/juddi-gui/web/serviceChooser.jsp
@@ -0,0 +1,60 @@
+<%-- 
+    Document   : serviceChooser
+    Created on : Apr 28, 2013, 7:11:19 PM
+    Author     : Alex O'Ree
+--%>
+
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<div class="modal hide fade container " id="serviceChooser">
+    <div class="modal-header">
+        <a href="javascript:$('#serviceChooser').modal('hide');" class="close" data-dismiss="modal" aria-hidden="true">&times;</a>
+        <h3><%=ResourceLoader.GetResource(session, "items.service.chooser")%> </h3>
+    </div>
+    <div class="modal-body">
+
+        <%=ResourceLoader.GetResource(session, "totals.records")%>: <span id="totalrecordsService"></span><br>
+        <%=ResourceLoader.GetResource(session, "totals.recordsreturned")%>: <span id="displayrecordsService"></span><br>
+        <%=ResourceLoader.GetResource(session, "totals.offset")%> : <span id="offsetService">0</span><br>
+        <%=ResourceLoader.GetResource(session, "items.lang")%>: <span id="langService" class="edit"></span><br>
+        <%=ResourceLoader.GetResource(session, "items.name")%>: <span id="nameService" class="edit">%</span><br>
+
+        <a href="javascript:pagedownChooserService();"><i class="icon-circle-arrow-left disabled icon-2x" id="pageupService"></i></a>
+        <a href="javascript:reloadService();"><i class="icon-refresh icon-2x"></i></a>
+        <a href="javascript:pageupChooserService();"><i class="icon-circle-arrow-right disabled icon-2x" id="pagedownService"></i></a>
+
+        <div id="servicelist">
+            <img src="img/bigrollergreen.gif" title="Loading"/>
+        </div>
+        <script src="js/serviceChooser.js"></script>
+        <script type="text/javascript">
+                    
+            $('.edit').editable(function(value, settings) { 
+                console.log(this);
+                console.log(value);
+                console.log(settings);
+                reloadServiceModal();
+                //  RenderTmodelListBySearch('%', offset, maxrecords);
+                return(value);
+            }, { 
+                type    : 'text',
+                submit  : 'OK'
+            });
+            //only init the data when required reloadTmodelModal();
+        </script>
+
+    </div>
+    <div class="modal-footer">
+        <a href="#" class="btn" data-dismiss="modal"><%=ResourceLoader.GetResource(session, "actions.cancel")%></a>
+        <a href="javascript:$('#serviceChooser').modal('hide');" class="btn btn-primary" data-dismiss="modal"><%=ResourceLoader.GetResource(session, "actions.select")%></a>
+    </div>
+</div>
+<%
+//<a href="javascript:tModelCancel();" class="close" class="btn btn-danger">Cancel</a>
+//<a href="javascript:tModelModal();" class="btn" >Pick a tModel</a>
+
+
+//<a href="javascript:$('#bindingChooser').modal();" class="btn btn-primary" data-dismiss="modal">< %=ResourceLoader.GetResource(session, "actions.select")% ></a>
+%>
+
diff --git a/juddi-gui/web/serviceEditor.jsp b/juddi-gui/web/serviceEditor.jsp
new file mode 100644
index 0000000..1a2e6f1
--- /dev/null
+++ b/juddi-gui/web/serviceEditor.jsp
@@ -0,0 +1,729 @@
+<%-- 
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+    Document   : service editor
+    Created on : Feb 24, 2013, 3:31:39 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.net.URLEncoder"%>
+<%@page import="org.uddi.api_v3.*"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+
+
+<%
+//@include file="csrf.jsp" 
+    boolean newitem = false;
+    String serviceid = request.getParameter("id");
+    String businessid = request.getParameter("bizid");
+    if (serviceid == null && businessid == null) {
+        response.sendRedirect("index.jsp");
+    }
+    if (serviceid == null || serviceid.length() == 0) {
+        //response.sendRedirect("browse.jsp");
+        if (businessid != null && businessid.length() > 0) {
+            newitem = true;
+        } else {
+            response.sendRedirect("index.jsp");
+        }
+
+    }
+
+    UddiHub x = UddiHub.getInstance(application, request.getSession());
+
+    BusinessService bd = null;
+    if (!newitem) {
+        bd = x.GetServiceDetail(serviceid);
+    } else {
+        bd = new BusinessService();
+        bd.setBusinessKey(businessid);
+        BusinessEntity be = x.GetBusinessDetails(businessid);
+        if (be == null) {
+            //incase an invalid business id was passed in
+            response.sendRedirect("index.jsp");
+        } else {
+            bd.setBusinessKey(be.getBusinessKey());
+        }
+    }
+
+    if (bd == null) {
+
+        //we can't make a new service without a business to reference
+        response.sendRedirect("error.jsp");
+    }
+%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h1><%=ResourceLoader.GetResource(session, "pages.serviceeditor.title")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+
+            <div id="businesseditor">
+                <%
+
+
+
+                    int totalBTDescriptions = 0;
+                %>
+
+                <i class="icon-lock icon-large"></i>
+
+                <b><%=ResourceLoader.GetResource(session, "pages.businesskey")%></b>-
+                <%=ResourceLoader.GetResource(session, "pages.businesskey.description")%>
+
+                <br>
+                <div style="border-width: 2px; border-style: solid;" class="noedit" id="<%=PostBackConstants.BUSINESSKEY%>">
+                    <%
+                        out.write("<a href=\"businessEditor2.jsp?id=" + StringEscapeUtils.escapeHtml(bd.getBusinessKey()) + "\">");
+                        out.write(StringEscapeUtils.escapeHtml(bd.getBusinessKey()));
+                        out.write("</a>");
+                        if (bd.getCategoryBag() == null) {
+                            bd.setCategoryBag(new CategoryBag());
+                        }
+
+                    %>
+                </div>
+                <br>
+                <%
+                    if (!newitem) {
+                        out.write("<i class=\"icon-lock icon-large\"></i>");
+                    }
+                %>
+                <b><%=ResourceLoader.GetResource(session, "items.service.key")%> </b>-
+                <%=ResourceLoader.GetResource(session, "items.service.key.description")%><br>
+                <div style="border-width: 2px; border-style: solid;" <%
+                    if (!newitem) {
+                        out.write("class=\"noedit\"");
+                    } else {
+                        out.write("class=\"edit\"");
+                    }
+                     %>
+                     id="<%=PostBackConstants.SERVICEKEY%>">
+                    <%
+                        if (!newitem) {
+                            out.write(StringEscapeUtils.escapeHtml(bd.getServiceKey()));
+                        }
+
+                        if (bd.getCategoryBag() == null) {
+                            bd.setCategoryBag(new CategoryBag());
+                        }
+
+                        if (bd.getBindingTemplates() == null) {
+                            bd.setBindingTemplates(new BindingTemplates());
+                        }
+                        int currentcatkeyrefBT = 0;
+                        int currentcatkeyrefgrpBT = 0;
+                        int currentbindingtemplatesInstance = 0;
+                        int currentOverviewDocs = 0;
+                        for (int i = 0; i < bd.getBindingTemplates().getBindingTemplate().size(); i++) {
+                            if (bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag() != null) {
+                                currentcatkeyrefBT += bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReference().size();
+                                currentcatkeyrefgrpBT += bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReferenceGroup().size();
+                            }
+
+                            if (bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails() != null) {
+                                currentbindingtemplatesInstance = bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().size();
+                            }
+                            if (bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails() != null) {
+                                for (int k = 0; k < bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().size(); k++) {
+                                    if (bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails() != null) {
+                                        currentOverviewDocs += bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getOverviewDoc().size();
+                                    }
+                                }
+                            }
+                        }
+
+
+
+                    %>
+                </div>
+                <br>
+
+                <script type="text/javascript">
+                    var currentNameEntries=<%= bd.getName().size() - 1%>;
+                    var currentbindingtemplatesInstance =<%=currentbindingtemplatesInstance%>;
+                    var currentDescriptionEntries=<%= bd.getDescription().size() - 1%>;
+                    var currentcatkeyrefBT=<%=currentcatkeyrefBT%>;
+                    var currentcatkeyref=<%=bd.getCategoryBag().getKeyedReference().size()%>;
+                    var currentcatkeyrefgrpBT=<%=currentcatkeyrefgrpBT%>;
+                    var currentcatkeyrefgrp=<%=bd.getCategoryBag().getKeyedReferenceGroup().size()%>;
+                    var currentbindingtemplates = <%=bd.getBindingTemplates().getBindingTemplate().size()%>;
+                    var currentOverviewDocs = <%=currentOverviewDocs%>;
+                </script> 
+
+                <ul class="nav nav-tabs" id="myTab">
+                    <li class="active"><a  href="#general"><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.general")%></a></li>
+
+                    <li><a href="#categories" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.categories")%></a></li>
+
+                    <li><a href="#bindingtemplates" ><%=ResourceLoader.GetResource(session, "items.bindingtemplate")%></a></li>
+
+                    <li><a href="#signatures"  id="sigtagheader"><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.signatures")%></a></li>
+
+                    <li><a href="#opinfo" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.opinfo")%></a></li>
+                </ul>
+                <script>
+                    $(function () {
+                        $('#myTab').tab;//('show');
+                    })
+                    $('#myTab a[href=#general]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#categories]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#bindingtemplates]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#signatures]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    $('#myTab a[href=#opinfo]').click(function (e) {
+                        e.preventDefault();
+                        $(this).tab('show');
+                    });
+                    
+                </script>
+                <div class="tab-content">
+                    <div class="tab-pane active" id="general">
+
+
+
+
+                        <b><%=ResourceLoader.GetResource(session, "items.name")%> </b>- 
+                        <%=ResourceLoader.GetResource(session, "items.name.description")%><br>
+                        <a href="javascript:AddName();"><i class="icon-plus-sign icon-large"></i></a><%=ResourceLoader.GetResource(session, "items.name.add")%>
+                        <div id="nameContainer" style="border-width: 2px; border-style: solid;" >
+                            <%
+                                for (int i = 0; i < bd.getName().size(); i++) {
+                                    out.write("<div id=\"" + PostBackConstants.NAME + i + "\" style=\"border-width:1px; border-style:solid\" >");
+                                    out.write("<div style=\"float:left; height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.NAME + i + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + ":&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.NAME + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getName().get(i).getValue()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ":&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.NAME + i + PostBackConstants.LANG + "\">");
+                                    if (bd.getName().get(i).getLang() != null) {
+                                        out.write(StringEscapeUtils.escapeHtml(bd.getName().get(i).getLang()));
+                                    }
+                                    out.write("</div>");
+
+                                    out.write("</div>");
+                                    //confirmed one to one div tags
+                                }
+                            %></div>
+                        <Br>
+                        <b><%=ResourceLoader.GetResource(session, "items.description")%> </b>- 
+                        <%=ResourceLoader.GetResource(session, "items.services.description")%><br>
+                        <a href="javascript:AddDescription('Description');"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.description.add")%>
+
+                        <div id="Description" style="border-width: 2px; border-style: solid;" >
+                            <%
+                                for (int i = 0; i < bd.getDescription().size(); i++) {
+                                    out.write("<div id=\"" + PostBackConstants.DESCRIPTION + i + "\" style=\"border-width:1px; border-style:solid\">");
+                                    out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('Description" + i + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + ":&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.DESCRIPTION + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getDescription().get(i).getValue()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ":&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.DESCRIPTION + i + PostBackConstants.LANG + "\">"
+                                            + (bd.getDescription().get(i).getLang() == null ? "" : StringEscapeUtils.escapeHtml(bd.getDescription().get(i).getLang()))
+                                            + "</div>");
+
+                                    out.write("</div>");
+                                    //confirmed 1:1
+                                }
+
+                            %>
+                        </div>
+                        <br>
+                    </div>
+                    <div class="tab-pane" id="categories">
+
+                        <b><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.categories")%> </b>- 
+                        <%=ResourceLoader.GetResource(session, "items.categories.description")%>
+                        <br><br>
+                        <b><%=ResourceLoader.GetResource(session, "items.keyrefcats")%>:</b><br>
+                        <a href="javascript:AddCategoryKeyReference();"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.keyrefcat.add")%> <Br>
+                        <div id="catContainer" style="border-width: 2px; border-style: solid;" >
+                            <%
+                                if (bd.getCategoryBag() == null) {
+                                    bd.setCategoryBag(new CategoryBag());
+                                }
+                                //                        out.write("Keyed Reference Categories:");
+                                for (int i = 0; i < bd.getCategoryBag().getKeyedReference().size(); i++) {
+
+                                    out.write("<div id=\"" + PostBackConstants.CATBAG_KEY_REF + i + "\" style=\"border-width:2px; border-style:solid\">");
+                                    out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CATBAG_KEY_REF + i + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.VALUE + "')\" ><i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReference().get(i).getTModelKey()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ": &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.KEYNAME + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReference().get(i).getKeyName()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.KEYVALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReference().get(i).getKeyValue()) + "</div>");
+                                    out.write("</div>");
+                                }
+                            %>
+                        </div>
+                        <br>
+                        <b><%=ResourceLoader.GetResource(session, "items.keyrefgroup")%></b><br>
+                        <a href="javascript:AddCategoryKeyReferenceGroup();"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.keyrefgroup.add")%><br>
+                        <div id="catContainerGrp" style="border-width: 2px; border-style: solid;" >
+
+
+                            <%
+                                //div count good so far
+                                for (int i = 0; i < bd.getCategoryBag().getKeyedReferenceGroup().size(); i++) {
+
+                                    out.write("<div id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + "\" style=\"border-width:2px; border-style:solid\">"
+                                            + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('catbaggrpkeyref" + i + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>"
+                                            + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.VALUE + "')\" ><i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.VALUE + "\">"
+                                            + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReferenceGroup().get(i).getTModelKey())
+                                            + "</div>"
+                                            + "<div id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + "\" style=\"border-width:1px; border-style:solid\">"
+                                            + "<div style=\"float:left;height:100%\"><a href=\"javascript:AddCategoryKeyReferenceGroupKeyRef('" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + "');\"><i class=\"icon-plus-sign icon-large\"></i></a></div>"
+                                            + ResourceLoader.GetResource(session, "items.keyrefcat.add")
+                                            + "</div>");
+
+
+                                    for (int k = 0; k < bd.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) {
+
+                                        out.write("<div id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + "keyref" + k + "\" style=\"border-width:1px; border-style:solid\">");
+                                        out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + PostBackConstants.VALUE + "')\" ><i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getTModelKey()) + "</div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + PostBackConstants.KEYNAME + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getKeyName()) + "</div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF + k + PostBackConstants.KEYVALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getKeyValue()) + "</div>");
+                                        out.write("</div>");
+                                    }
+
+                                    out.write("</div>"); //this ends the group container for key ref PostBackConstants.CATBAG_KEY_REF_GRP + i + PostBackConstants.KEY_REF
+                                }
+
+
+                            %>
+                        </div>
+                        <br>
+                    </div>
+
+                    <div class="tab-pane" id="bindingtemplates">
+                        <b><%=ResourceLoader.GetResource(session, "items.bindingtemplate")%> </b>- <%=ResourceLoader.GetResource(session, "items.bindingtemplate.description")%> <br>
+                        <a href="javascript:AddBindingTemplate();"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.bindingtemplate.add")%> <Br>
+                        <div id="bindingTemplatesContainer" style="border-width: 2px; border-style: solid">
+                            <%
+                                for (int i = 0; i < bd.getBindingTemplates().getBindingTemplate().size(); i++) {
+                                    out.write("<div id=\"bindingTemplate" + i + "\"  style=\"border-width: 2px; border-style: dashed;; border-color: lightseagreen\" >");
+                                    out.write("<div style=\"float:left\">"
+                                            + "<a href=\"javascript:Remove('" + PostBackConstants.BINDINGTEMPLATE + i + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a>"
+                                            + ResourceLoader.GetResource(session, "items.bindingtemplate.key") + ": &nbsp;</div>"
+                                            + "<div class=\"");
+                                    if (!newitem) {
+                                        out.write("no");
+                                    }
+                                    out.write("edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.VALUE + "\">");
+                                    if (!newitem) {
+                                        out.write(StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getBindingKey()));
+                                    }
+                                    out.write("</div>");    //end of binding template key section
+                            %>          
+                            <br>
+                            <a href="javascript:AddDescriptionSpecific('<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.DESCRIPTION%>');">
+                                <i class="icon-plus-sign icon-large"></i></a><%=ResourceLoader.GetResource(session, "items.bindingtemplate.description.add")%> <Br>
+
+                            <div id="<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.DESCRIPTION%>" style="border-width: 1px; border-style: dotted;" >
+                                <%
+                                    for (int k = 0; k < bd.getBindingTemplates().getBindingTemplate().get(i).getDescription().size(); k++) {
+                                        out.write("<div id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.DESCRIPTION + k + "\" style=\"border-width:1px; border-style:solid\">");
+                                        out.write("<div style=\"float:left;height:100%\">"
+                                                + "<a href=\"javascript:Remove('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.DESCRIPTION + k + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                        out.write("<div style=\"float:left\">Value:&nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.DESCRIPTION + k + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getDescription().get(k).getValue()) + "</div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ":&nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.DESCRIPTION + k + PostBackConstants.LANG + "\">"
+                                                + (bd.getBindingTemplates().getBindingTemplate().get(i).getDescription().get(k).getLang() == null ? " " : StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getDescription().get(k).getLang()))
+                                                + "</div>");
+                                        out.write("</div>");
+                                        totalBTDescriptions++;
+
+                                    }
+
+                                    //1:1
+                                %>
+                            </div>
+                            <b><%=ResourceLoader.GetResource(session, "items.accesspoint")%></b> - <%=ResourceLoader.GetResource(session, "items.accesspoint.description")%><br>
+                            <%
+
+
+//items.hostingredirector
+
+                                //TODO need an html select in here?
+                                if (bd.getBindingTemplates().getBindingTemplate().get(i).getHostingRedirector() != null) {
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.hostingredirector") + ": &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.HOSTINGREDIRECTOR + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getHostingRedirector().getBindingKey()) + "</div>");
+                                }
+                                if (bd.getBindingTemplates().getBindingTemplate().get(i).getAccessPoint() != null) {
+
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.accesspoint.type") + ": &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.ACCESSPOINT_TYPE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getAccessPoint().getUseType()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.accesspoint.value") + ": &nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.ACCESSPOINT_VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getAccessPoint().getValue()) + "</div>");
+                                    // this was an unbalanced divout.write("</div>");
+                                }
+                            %>
+
+                            <br>
+                            <b><%=ResourceLoader.GetResource(session, "items.tmodelinstance.info")%></b> - <%=ResourceLoader.GetResource(session, "items.tmodelinstance.info.desc")%> <br>
+                            <a href="javascript:AddTmodelInstance('<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE%>');"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.tmodelinstance.add")%><br>
+                            <div id="<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE%>" style="border-width: 1px; border-style: solid; border-color: red" >        
+                                <%
+                                    if (bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails() != null) {
+                                        for (int k = 0; k < bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().size(); k++) {
+                                %>
+                                <div id="<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k%>" style="border-width: 2px; border-style: dashed; border-color: red" >        
+                                    <%
+                                        out.write("<div style=\"float:left;height:100%\">"
+                                                + "<a href=\"javascript:Remove('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+
+                                        out.write("<div style=\"float:left\"><b>" + ResourceLoader.GetResource(session, "items.tmodel.key") + " </b> (<a href=\"javascript:tModelModal('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.KEYNAME + "')\" ><i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.KEYNAME + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getTModelKey()) + "</div>");
+                                        //  out.write("<div style=\"float:left\"><span title=\"Instance Params\">Value</span>:&nbsp;</div>"
+                                        //          + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.VALUE + "\">" + ((bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails() != null) ? StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getInstanceParms()) : "") + "</div>");
+                                    %>
+                                    <br>
+                                    <%
+
+                                        out.write("<div style=\"float:left\"><b>" + ResourceLoader.GetResource(session, "items.tmodelinstance.parameters") + ":</b> &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.VALUE + "\">");
+                                        if (bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails() != null
+                                                && bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getInstanceParms() != null) {
+
+                                            out.write(StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getInstanceParms()));
+                                        }
+                                        out.write("</div>");
+                                    %>
+                                    <br>
+
+                                    <b>
+                                        <%=ResourceLoader.GetResource(session, "items.tmodelinstance.description")%>
+                                    </b> - <%=ResourceLoader.GetResource(session, "items.tmodelinstance.description2")%> <br>
+                                    <a href="javascript:AddDescriptionSpecific('<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION%>');"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.tmodelinstance.description.add")%><br>
+                                    <div id="<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION%>" style="border-width: 1px; border-style: groove;" >
+                                        <%
+                                            for (int j = 0; j < bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getDescription().size(); j++) {
+                                                out.write("<div id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION + j + "\" style=\"border-width:1px; border-style:solid\">");
+                                                out.write("<div style=\"float:left;height:100%\">"
+                                                        + "<a href=\"javascript:Remove('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION + j + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                                out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ":&nbsp;</div>"
+                                                        + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION + j + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getDescription().get(j).getValue()) + "</div>");
+                                                out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ":&nbsp;</div>"
+                                                        + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.DESCRIPTION + j + PostBackConstants.LANG + "\">"
+                                                        + (bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getDescription().get(j).getLang() == null ? " " : StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getDescription().get(j).getLang()))
+                                                        + "</div>");
+                                                out.write("</div>");
+                                            }
+
+                                        %>
+                                    </div>
+
+                                    <div><br>
+                                        <b><%=ResourceLoader.GetResource(session, "items.overviewurl")%></b> - <%=ResourceLoader.GetResource(session, "items.overviewurl.description")%> <br>
+                                        <a href="javascript:AddOverviewDocumentSpecific('<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW%>');"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.overviewurl.add")%><br>
+                                        <div id="<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW%>" style="border-width: 1px; border-style: groove;" >
+                                            <%
+                                                //  out.write("<div id=\"" + PostBackConstants.OVERVIEW + "\" style=\"border-width:2px; border-style:solid\">");
+                                                if (bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails() != null)
+                                                    for (int j = 0; j < bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getOverviewDoc().size(); j++) {
+                                                        out.write("<div id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + "\" style=\"border-width:1px; border-style:solid\">");
+                                                        out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ":&nbsp;</div>"
+                                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getOverviewDoc().get(j).getOverviewURL().getValue()) + "</div>");
+                                                        out.write("<div style=\"float:left\">Use type:&nbsp;</div>"
+                                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + PostBackConstants.TYPE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getOverviewDoc().get(j).getOverviewURL().getUseType()) + "</div>");
+                                            %>
+                                            <br><b><%=ResourceLoader.GetResource(session, "items.overviewdocument.description")%> </b><br>
+                                            <a href="javascript:AddDescriptionSpecific('<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + PostBackConstants.DESCRIPTION%>');"><i class="icon-plus-sign icon-large"></i></a><%=ResourceLoader.GetResource(session, "items.overviewurl.description.add")%>
+                                            <div id="<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + PostBackConstants.DESCRIPTION%>" style="border-width: 1px; border-style: groove;" >
+                                                <%
+                                                    //  out.write("<div id=\"" + PostBackConstants.OVERVIEW + "\" style=\"border-width:2px; border-style:solid\">");
+                                                    for (int h = 0; h < bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getOverviewDoc().get(j).getDescription().size(); h++) {
+                                                        out.write("<div id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + PostBackConstants.DESCRIPTION + h + "\" style=\"border-width:1px; border-style:solid\">");
+                                                        out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + PostBackConstants.DESCRIPTION + h + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ":&nbsp;</div>"
+                                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + PostBackConstants.DESCRIPTION + h + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getOverviewDoc().get(j).getDescription().get(h).getValue()) + "</div>");
+                                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ":&nbsp;</div>"
+                                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.TMODELINSTANCE + k + PostBackConstants.INSTANCE + PostBackConstants.OVERVIEW + j + PostBackConstants.DESCRIPTION + h + PostBackConstants.LANG + "\">"
+                                                                + (bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getOverviewDoc().get(j).getDescription().get(h).getLang() == null ? "" : StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getTModelInstanceDetails().getTModelInstanceInfo().get(k).getInstanceDetails().getOverviewDoc().get(j).getDescription().get(h).getLang())) + "</div>");
+                                                        out.write("</div>");
+                                                    }
+                                                %>
+                                            </div>
+                                            <%
+                                                    out.write("</div>");
+                                                }
+                                            %>
+
+                                        </div>
+
+                                    </div>
+
+                                </div>
+
+                                <%    } //end of instance details
+                                %>
+
+                                <%
+                                    }
+                                %>
+                            </div> <!-- tmodel instance info -->                                        
+                            <Br>
+                            <b><%=ResourceLoader.GetResource(session, "items.bindingtemplate.keyrefcat")%></b><Br>
+
+                            <a href="javascript:AddCategoryKeyReferenceSpecific('<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF%>');"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.keyrefcat.add")%> <Br>
+                            <div id="<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF%>" style="border-width: 1px; border-style: dotted;" >
+                                <%
+                                    if (bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag() == null) {
+                                        bd.getBindingTemplates().getBindingTemplate().get(i).setCategoryBag(new CategoryBag());
+                                    }
+                                    for (int k = 0; k < bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReference().size(); k++) {
+                                        out.write("<div id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF + k + "\" style=\"border-width:2px; border-style:solid\">");
+                                        out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF + k + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF + k + PostBackConstants.VALUE + "')\" ><i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF + k + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReference().get(k).getTModelKey()) + "</div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF + k + PostBackConstants.KEYNAME + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReference().get(k).getKeyName()) + "</div>");
+                                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF + k + PostBackConstants.KEYVALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReference().get(k).getKeyValue()) + "</div>");
+                                        out.write("</div>");    //end key ref
+                                    }
+
+                                %>
+                            </div>
+                            <br>    
+                            <b><%=ResourceLoader.GetResource(session, "items.bindingtemplate.keyrefgrp")%></b><br>
+                            <a href="javascript:AddCategoryKeyReferenceGroupSpecificBT('<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP%>');"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.keyrefgroup.add")%><br>
+                            <div id="<%=PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP%>" style="border-width: 1px; border-style: dotted;" >
+
+                                <%
+                                    for (int z = 0; z < bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReferenceGroup().size(); z++) {
+
+                                        out.write("<div id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + "\" style=\"border-width:2px; border-style:solid\">"
+                                                + "<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>"
+                                                + "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + PostBackConstants.VALUE + "')\" ><i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>):  &nbsp;</div>"
+                                                + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + PostBackConstants.VALUE + "\">"
+                                                + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReferenceGroup().get(i).getTModelKey())
+                                                + "</div>"
+                                                + "<div id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + PostBackConstants.KEY_REF + "\" style=\"border-width:1px; border-style:solid\">"
+                                                + "<div style=\"float:left;height:100%\"><a href=\"javascript:AddCategoryKeyReferenceSpecificBT('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + "keyref');\"><i class=\"icon-plus-sign icon-large\"></i></a></div>"
+                                                + ResourceLoader.GetResource(session, "items.keyrefcat.add")
+                                                + "</div>");
+                                        for (int k = 0; k < bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReferenceGroup().get(z).getKeyedReference().size(); k++) {
+
+                                            out.write("<div id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + PostBackConstants.KEY_REF + k + "\" style=\"border-width:1px; border-style:solid\">");
+                                            out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + "keyref" + k + "');\"><i class=\"icon-trash icon-large\"></i>&nbsp;</a></div>");
+                                            out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + PostBackConstants.KEY_REF + k + PostBackConstants.VALUE + "')\" ><i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                                    + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + PostBackConstants.KEY_REF + k + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReferenceGroup().get(z).getKeyedReference().get(k).getTModelKey()) + "</div>");
+                                            out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ": &nbsp;</div>"
+                                                    + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + PostBackConstants.KEY_REF + k + PostBackConstants.KEYNAME + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReferenceGroup().get(z).getKeyedReference().get(k).getKeyName()) + "</div>");
+                                            out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                                    + "<div class=\"edit\" id=\"" + PostBackConstants.BINDINGTEMPLATE + i + PostBackConstants.CATBAG_KEY_REF_GRP + z + PostBackConstants.KEY_REF + k + PostBackConstants.KEYVALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getBindingTemplates().getBindingTemplate().get(i).getCategoryBag().getKeyedReferenceGroup().get(z).getKeyedReference().get(k).getKeyValue()) + "</div>");
+                                            out.write("</div>");
+                                        }
+                                        out.write("</div>");    //end key refer group
+                                    }
+                                %>
+                            </div><!-- catbag keyref group -->
+                        </div><!-- end of a specific bt -->
+                        <%
+
+                            } //end of binding templates loop
+                        %>
+                    </div> <!-- binding template container-->
+
+
+                    <br>
+                </div><!-- binding template tab pane -->
+
+
+
+
+
+
+                <div class="tab-pane" id="signatures"><b><%=ResourceLoader.GetResource(session, "items.dsigs")%></b>
+                    <br>
+                    <%
+                        if (bd.getSignature().isEmpty()) {
+                            out.write(ResourceLoader.GetResource(session, "items.signed.not"));
+                        } else {
+                            out.write(ResourceLoader.GetResource(session, "items.signed") + " " + bd.getSignature().size());
+                    %>
+                    <table class="table table-hover">
+                        <tr><th>#</th><th>Signed by</th><th></th><th>Signature Status</th></tr>
+
+                        <%
+                            for (int k = 0; k < bd.getSignature().size(); k++) {
+                                out.write("<tr><td>" + k + "</td><td>");
+                                out.write(x.SignatureToReadable(bd.getSignature().get(k)));
+                                out.write("</td><td>");
+                                out.write("<a href=\"ajax/getCert.jsp?type=service&id=" + URLEncoder.encode(bd.getServiceKey(), "UTF-8") + "&index=" + k + "\">" + ResourceLoader.GetResource(session, "items.signed.viewcert") + "</a>");
+                                out.write("</td><td><div id=\"digsig" + k + "\">" + ResourceLoader.GetResource(session, "items.loading") + "</div>");
+                        %>
+                        <script type="text/javascript">
+                            $.get("ajax/validateSignature.jsp?type=service&id=<%=StringEscapeUtils.escapeJavaScript(bd.getServiceKey())%>", function(data){
+                                $("#digsig<%=k%>").html(data);
+                                if (data.indexOf("invalid") !== -1 )
+                                {
+                                    $("#sigtagheader").html($("#sigtagheader").html() + "<i class=\"icon-thumbs-down icon-large\" style=\"color:red\"></i>");
+                                }
+                                else
+                                {
+                                    $("#sigtagheader").html($("#sigtagheader").html() + "<i class=\"icon-thumbs-up icon-large\" style=\"color:green\"></i>");
+                                }
+                            } )
+                        </script>
+                        <%
+                                out.write("</td></tr>");
+                            }
+                        %>
+                    </table>
+                    <%
+                        }
+                    %>
+                    <br><Br>
+                </div>
+
+                <div class="tab-pane" id="opinfo">
+                    <%
+                        if (!newitem) {
+
+                    %>
+                    <script type="text/javascript">
+                        $.get("ajax/opInfo.jsp?id=<%=StringEscapeUtils.escapeJavaScript(bd.getServiceKey())%>", function(data){
+                            $("#opinfodiv").html(data);
+                        } )
+                    </script>
+                    <div id="opinfodiv"></div>
+                    <%
+                        }
+                    %>
+                    <Br>
+                </div><!-- end opinfo-->
+            </div><!-- tab content -->
+        </div><!-- end business editor -->
+
+
+        <script type="text/javascript">
+            var currentDescriptionSpecific=<%=totalBTDescriptions%>;
+        </script>
+        <Br><br>
+        <%
+            if (bd.getSignature().isEmpty()) {
+        %>
+        <a class="btn btn-primary " href="javascript:saveService();"><i class="icon-save icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.save")%></a>
+
+
+        <%  } else {
+        %>
+        <a href="#confirmDialog" role="button" class="btn btn-primary" data-toggle="modal"><i class="icon-save icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.save")%></a> |
+
+        <%        }
+            if (!newitem) {
+        %>
+
+
+        <a class="btn btn-danger " href="javascript:deleteService();"><i class="icon-trash icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.delete")%></a> |
+        <a class="btn btn-success " href="signer.jsp?id=<%=URLEncoder.encode(bd.getServiceKey(), "UTF-8")%>&type=service"><i class="icon-pencil icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.sign")%></a> |
+        <a class="btn btn-info " href="#" title="<%=ResourceLoader.GetResource(session, "actions.subscribe.description")%>"><i class="icon-rss icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.subscribe")%></a> |
+        <a class="btn btn-warning " href="transfer.jsp?biz=<%=URLEncoder.encode(bd.getBusinessKey(), "UTF-8")%>" title="<%=ResourceLoader.GetResource(session, "actions.transfer.description")%>"><i class="icon-exchange icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.transfer")%></a> |
+        <a class="btn "  href="javascript:ViewAsXML();"><i class="icon-screenshot icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.asxml")%></a>
+        <script type="text/javascript">
+            function ViewAsXML()
+            {
+                $.get("ajax/toXML.jsp?id=<%=URLEncoder.encode(serviceid, "UTF-8")%>&type=service", function(data){
+                    window.console && console.log('asXml success');                
+                    $("#viewAsXmlContent").html(safe_tags_replace(data));
+                    $( "#viewAsXml" ).modal('show');
+                });
+                       
+            }
+        </script>
+        <%
+            }
+        %>
+    </div> <!-- end of the row -->
+
+    <script type="text/javascript" src="js/businessEditor.js"></script>
+    <script type="text/javascript" src="js/serviceEditor.js"></script>
+</div> <!-- span12-->
+
+<div class="modal hide fade container" id="confirmDialog">
+    <div class="modal-header">
+        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+        <h3><%=ResourceLoader.GetResource(session, "modal.digitalsignaturewarning.title")%></h3>
+    </div>
+    <div class="modal-body">
+        <p><%=ResourceLoader.GetResource(session, "modal.digitalsignaturewarning.body")%></p>
+    </div>
+    <div class="modal-footer">
+        <a href="#" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+        <a href="javascript:saveService();$('#confirmDialog').modal('hide');" class="btn btn-primary">
+            <%=ResourceLoader.GetResource(session, "modal.savechanges")%></a>
+    </div>
+</div>
+<%
+    if (!newitem) {
+
+%>
+<div class="modal hide fade container" id="viewAsXml">
+    <div class="modal-header">
+        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+        <h3><%=ResourceLoader.GetResource(session, "actions.asxml")%> </h3>
+    </div>
+    <script type="text/javascript">
+        function closeXmlPop(modaldiv)
+        {
+            $('#' + modaldiv).modal('hide');
+        }
+    </script>
+    <div class="modal-body" id="viewAsXmlContent">
+
+
+    </div>
+    <div class="modal-footer">
+        <a href="ajax/toXML.jsp?id=<%=URLEncoder.encode(bd.getServiceKey(), "UTF-8")%>&type=service" class="btn btn-primary" target="_blank">Popout</a> 
+        <a href="javascript:closeXmlPop('viewAsXml');" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+    </div>
+</div>
+<%
+    }
+%>
+<!-- container div is in header bottom-->
+<%@include file="tmodelChooser.jsp" %>
+<%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/settings.jsp b/juddi-gui/web/settings.jsp
new file mode 100644
index 0000000..60d155a
--- /dev/null
+++ b/juddi-gui/web/settings.jsp
@@ -0,0 +1,107 @@
+<%-- 
+    Document   : settings
+    Created on : Feb 23, 2013, 2:05:35 PM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.util.Iterator"%>
+<%@page import="java.util.Map.Entry"%>
+<%@page import="java.util.Set"%>
+<%@page import="java.util.Properties"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well">
+        <h1><%=ResourceLoader.GetResource(session, "navbar.settings")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12">
+            <h2><%=ResourceLoader.GetResource(session, "navbar.settings")%></h2>
+            <p><%=ResourceLoader.GetResource(session, "items.settings.description")%></p>
+
+            <table class="table table-hover">
+                <tr><th>Key</th><th>Value</th></tr>
+                <%
+
+                    UddiHub x = UddiHub.getInstance(application, session);
+                    Properties p = x.GetRawConfiguration();
+                    Set<Entry<Object, Object>> set = p.entrySet();
+                    Iterator<Entry<Object, Object>> it = set.iterator();
+                    while (it.hasNext()) {
+                        out.write("<tr><td>");
+                        Entry<Object, Object> item = (Entry<Object, Object>) it.next();
+                        String key = (String) item.getKey();
+                        String value = (String) item.getValue();
+                        out.write(StringEscapeUtils.escapeHtml(key));
+                        out.write("</td><td><div class=\"edit\" id=\"" + StringEscapeUtils.escapeHtml(key) + "\">");
+                        out.write(StringEscapeUtils.escapeHtml(value));
+                        out.write("</div></td></tr>");
+                    }
+                %>
+            </table>
+            <a class="btn btn-primary " href="javascript:saveSettings();"><i class="icon-large icon-save"></i><%=ResourceLoader.GetResource(session, "actions.save")%></a>
+            <script type="text/javascript">
+                
+                Reedit();
+                function saveSettings()
+                {
+                    var url='ajax/settings.jsp';
+                    var postbackdata = new Array();
+                    $("div.edit").each(function()
+                    {
+                        var id=$(this).attr("id");
+                        var value=$(this).text();
+                        postbackdata.push({
+                            name: id, 
+                            value: value
+                        });
+                    }); 
+                    postbackdata.push({
+                        name:"nonce", 
+                        value: $("#nonce").val()
+                    });
+                    $("div.noedit").each(function()
+                    {
+                        var id=$(this).attr("id");
+                        var value=$(this).text();
+                        postbackdata.push({
+                            name: id, 
+                            value: value
+                        });
+                    }); 
+    
+    
+                    var request=   $.ajax({
+                        url: url,
+                        type:"POST",
+                        //  data" + i18n_type + ": "html", 
+                        cache: false, 
+                        //  processData: false,f
+                        data: postbackdata
+                    });
+                
+                
+                    request.done(function(msg) {
+                        window.console && console.log('postback done '  + url);                
+        
+                        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+                        $("#resultBar").show();
+        
+                    });
+
+                    request.fail(function(jqXHR, textStatus) {
+                        window.console && console.log('postback failed ' + url);                                
+                        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' +jqXHR.responseText );
+                        //$(".alert").alert();
+                        $("#resultBar").show();
+        
+                    });
+                }
+            </script>
+        </div>
+    </div>
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/signer.jsp b/juddi-gui/web/signer.jsp
new file mode 100644
index 0000000..ae8d03c
--- /dev/null
+++ b/juddi-gui/web/signer.jsp
@@ -0,0 +1,143 @@
+<%-- 
+    Document   : signer
+    Created on : Mar 24, 2013, 8:23:30 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well">
+        <h1>
+            <%=ResourceLoader.GetResource(session, "items.dsigs")%>
+        </h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12">
+            <%=ResourceLoader.GetResource(session, "items.dsigs.description")%><br>
+            <%
+                //figure out what we are signing
+                //fetch the xml from ajex/toXml and fill the text area
+                String id = request.getParameter("id");
+                String itemtype = request.getParameter("type");
+
+            %>
+
+            You're about to digitally sign the <b><%=StringEscapeUtils.escapeHtml(itemtype)%></b> identified by the key <b><%=StringEscapeUtils.escapeHtml(id)%></b>.<br>
+            By electronically signing this UDDI entry, other users will then be able to verify that this entry hasn't been modified.<br>
+
+            <applet code="org.apache.juddi.gui.dsig.XmlSignatureApplet" archive="applets/juddi-gui-dsig.jar"></applet> 
+            <script type="text/javascript">
+                $.get("ajax/toXML.jsp?id=<%=id%>&type=<%=itemtype%>", function(data){
+                    $("#data").val(data);
+                });
+                /**
+                 * Called by the applet to obtaining the xml to be signed
+                 */
+                function getXml()
+                {
+                    return $("#data").val();
+                }
+                    
+                function go()
+                {
+                        
+                    var form = $("#uddiform");
+                    var d = form.serializeArray();
+                    var request=   $.ajax({
+                        url: 'ajax/saveFromXML.jsp?id=<%=id%>&type=<%=itemtype%>',
+                        type:"POST",
+                        cache: false, 
+
+                        data: d
+                    });
+                  
+                    request.done(function(msg) {
+                        window.console && console.log('postback done ');                
+                        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+                        $("#resultBar").show();
+                        //TODO timer to auto redirect to the
+                        window.setTimeout(function(){
+                <%
+                    if (itemtype == "business") {
+                        out.write("window.location=\"businessEditor2.jsp?id=" + StringEscapeUtils.escapeJavaScript(id) + "\";");
+                    }
+                    if (itemtype == "service") {
+                        out.write("window.location=\"serviceEditor.jsp?id=" + StringEscapeUtils.escapeJavaScript(id) + "\";");
+                    }
+                    if (itemtype == "tmodel") {
+                        out.write("window.location=\"tmodelEditor.jsp?id=" + StringEscapeUtils.escapeJavaScript(id) + "\";");
+                    }
+                 
+                %>
+                            }, 5000);
+                        });
+
+                        request.fail(function(jqXHR, textStatus) {
+                            window.console && console.log('postback failed ');                                
+                            $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' +jqXHR.responseText + textStatus);
+                            $("#resultBar").show();
+                        });
+                    }
+				 
+                    /**
+                     * called by the applet to refresh the page with the signed data
+                     */	 
+                    function writeXml(data)
+                    {
+                        $("#data").val(data);
+                        //post back to the publishing thread
+                        
+                        var form = $("#uddiform");
+                        var d = form.serializeArray();
+                        var request=   $.ajax({
+                            url: 'ajax/saveFromXML.jsp?id=<%=id%>&type=<%=itemtype%>',
+                            type:"POST",
+                            cache: false, 
+
+                            data: d
+                        });
+                  
+                        request.done(function(msg) {
+                            window.console && console.log('postback done ');                
+                            $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+                            $("#resultBar").show();
+                        });
+
+                        request.fail(function(jqXHR, textStatus) {
+                            window.console && console.log('postback failed ');                                
+                            $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' +jqXHR.responseText + textStatus);
+                            $("#resultBar").show();
+                        });
+                    }
+				
+                    function getBrowserName()
+                    {
+                        return navigator.appName;
+                    }
+                    function getOsName()
+                    {
+                        var OSName="unknown OS";
+                        if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
+                        if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
+                        if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
+                        if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";
+                        return OSName;
+                    }
+                    function getObjectType()
+                    {
+                        return "<%=StringEscapeUtils.escapeJavaScript(itemtype)%>";
+                    }
+                    //
+                    //display:none  <a class="btn" href="javascript:go();">Go</a>
+            </script>
+
+            <textarea name="data" rows="15" cols="80" id="data" style="">Loading....</textarea>
+        </div>
+
+    </div>
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/subscriptionFeed.jsp b/juddi-gui/web/subscriptionFeed.jsp
new file mode 100644
index 0000000..491c371
--- /dev/null
+++ b/juddi-gui/web/subscriptionFeed.jsp
@@ -0,0 +1,48 @@
+<%-- 
+    Document   : subscriptionFeed
+    Created on : Apr 14, 2013, 7:45:24 PM
+    Author     : Alex O'Ree
+--%>
+
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp"%>
+
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well">
+        <h1><%=ResourceLoader.GetResource(session, "navbar.subscriptions.feed")%></h1>
+
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12">
+            <p><%=ResourceLoader.GetResource(session, "navbar.subscriptions.feed.content")%>.</p>
+            <div id="feedcontent"></div>
+            <script type="text/javascript">
+                $("#feedcontent").html("<img src=\"img/bigrollergreen.gif\" title=\"Loading\"/>");
+                var request=   $.ajax({
+                    url: 'ajax/subscriptionFeed.jsp',
+                    type:"GET",
+                    cache: false
+                });
+                  
+                request.done(function(msg) {
+                    window.console && console.log('postback done ');                
+                    $("#feedcontent").html(msg);
+                    //refresh();
+                });
+
+                request.fail(function(jqXHR, textStatus) {
+                    window.console && console.log('postback failed ');                                
+                    $("#feedcontent").html("An error occured! " + textStatus + jqXHR);
+                    //refresh();
+                });
+            </script>
+        </div>
+
+    </div>
+    <%@include file="header-bottom.jsp"%>
\ No newline at end of file
diff --git a/juddi-gui/web/tmodelBrowse.jsp b/juddi-gui/web/tmodelBrowse.jsp
new file mode 100644
index 0000000..dadd9e0
--- /dev/null
+++ b/juddi-gui/web/tmodelBrowse.jsp
@@ -0,0 +1,55 @@
+<%-- 
+    Document   : tmodel browser
+    Created on : Feb 24, 2013, 9:14:01 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h2><%=ResourceLoader.GetResource(session, "items.tmodel.browser")%></h2>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+            <%=ResourceLoader.GetResource(session, "totals.records")%>: <span id="totalrecords"></span><br>
+            <%=ResourceLoader.GetResource(session, "totals.recordsreturned")%>: <span id="displayrecords"></span><br>
+            <%=ResourceLoader.GetResource(session, "totals.offset")%> : <span id="offset">0</span><br>
+            <%=ResourceLoader.GetResource(session, "items.lang")%>: <span id="lang" class="edit"></span><br>
+
+            <a href="javascript:pagedown();"><i class="icon-circle-arrow-left icon-2x" id="pageup"></i></a>
+            <a href="javascript:reload();"><i class="icon-refresh icon-2x"></i></a>
+            <a href="javascript:pageup();"><i class="icon-circle-arrow-right icon-2x" id="pagedown"></i></a>
+
+            <div id="tmodellist">
+                <img src="img/bigrollergreen.gif" title="Loading"/>
+            </div>
+            <script src="js/tmodelsearch.js"></script>
+            <script type="text/javascript">
+                
+                function reload()
+                {
+                    RenderTmodelListBySearch('%', offset, maxrecords, false);
+                }
+                $('.edit').editable(function(value, settings) { 
+                    console.log(this);
+                    console.log(value);
+                    console.log(settings);
+                    reload();
+                    //  RenderTmodelListBySearch('%', offset, maxrecords);
+                    return(value);
+                }, { 
+                    type    : 'text',
+                    submit  : 'OK'
+                });
+                reload();
+            </script>
+        </div>
+    </div>
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/tmodelChooser.jsp b/juddi-gui/web/tmodelChooser.jsp
new file mode 100644
index 0000000..c467983
--- /dev/null
+++ b/juddi-gui/web/tmodelChooser.jsp
@@ -0,0 +1,56 @@
+<%-- 
+    Document   : tmodelChooser
+    Created on : Apr 17, 2013, 6:25:00 PM
+    Author     : Alex O'Ree
+this page is meant to be included via jsp:include
+--%>
+
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<div class="modal hide fade container" id="tmodelChooser">
+    <div class="modal-header">
+        <a href="javascript:$('#tmodelChooser').modal('hide');" class="close" data-dismiss="modal" aria-hidden="true">&times;</a>
+        <h3><%=ResourceLoader.GetResource(session, "items.tmodel.chooser")%></h3>
+    </div>
+    <div class="modal-body">
+
+        <%=ResourceLoader.GetResource(session, "totals.records")%>: <span id="totalrecords"></span><br>
+        <%=ResourceLoader.GetResource(session, "totals.recordsreturned")%>: <span id="displayrecords"></span><br>
+        <%=ResourceLoader.GetResource(session, "totals.offset")%> : <span id="offset">0</span><br>
+        <%=ResourceLoader.GetResource(session, "items.lang")%>: <span id="lang" class="edit"></span><br>
+
+        <a href="javascript:pagedownChooserTmodel();"><i class="icon-circle-arrow-left disabled icon-2x" id="pageup"></i></a>
+        <a href="javascript:reload();"><i class="icon-refresh icon-large"></i></a>
+        <a href="javascript:pageupChooserTmodel();"><i class="icon-circle-arrow-right disabled icon-2x" id="pagedown"></i></a>
+
+        <div id="tmodellist">
+            <img src="img/bigrollergreen.gif" title="Loading"/>
+        </div>
+        <script src="js/tmodelsearch.js"></script>
+        <script src="js/tmodelChooser.js"></script>
+        <script type="text/javascript">
+                    
+            $('.edit').editable(function(value, settings) { 
+                console.log(this);
+                console.log(value);
+                console.log(settings);
+                reloadTmodelModal();
+                //  RenderTmodelListBySearch('%', offset, maxrecords);
+                return(value);
+            }, { 
+                type    : 'text',
+                submit  : 'OK'
+            });
+           //only init the data when required reloadTmodelModal();
+        </script>
+
+    </div>
+    <div class="modal-footer">
+        <a href="#" class="btn" data-dismiss="modal"><%=ResourceLoader.GetResource(session, "actions.cancel")%></a>
+        <a href="javascript:$('#tmodelChooser').modal('hide');" class="btn btn-primary" data-dismiss="modal"><%=ResourceLoader.GetResource(session, "actions.select")%></a>
+    </div>
+</div>
+<%
+//<a href="javascript:tModelCancel();" class="close" class="btn btn-danger">Cancel</a>
+//<a href="javascript:tModelModal();" class="btn" >Pick a tModel</a>
+%>
\ No newline at end of file
diff --git a/juddi-gui/web/tmodelEditor.jsp b/juddi-gui/web/tmodelEditor.jsp
new file mode 100644
index 0000000..7257b21
--- /dev/null
+++ b/juddi-gui/web/tmodelEditor.jsp
@@ -0,0 +1,405 @@
+<%-- 
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+    Document   : tmodelEditor
+    Created on : Feb 27, 2013, 9:31:19 PM
+    Author     : Alex O'Ree
+--%>
+
+
+
+<%@page import="java.net.URLEncoder"%>
+<%@page import="org.uddi.api_v3.*"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+<%@page import="org.apache.juddi.webconsole.hub.*"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well">
+        <h1><%=ResourceLoader.GetResource(session, "pages.tmodeleditor.title")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12">
+            <p>
+                <%
+                    UddiHub x = UddiHub.getInstance(application, session);
+                    TModel bd = hub.getTmodelDetails(request.getParameter("id"));
+                    boolean newitem = false;
+                    if (bd == null) {
+                        bd = new TModel();
+                        newitem = true;
+                    }
+                %>
+
+            <ul class="nav nav-tabs" id="myTab">
+                <li class="active"><a  href="#general"><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.general")%></a></li>
+
+                <li><a href="#discovery" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.overview")%></a></li>
+
+                <li><a href="#categories" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.categories")%></a></li>
+
+                <li><a href="#identifiers" ><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.identifiers")%></a></li>
+
+                <li><a href="#signatures"  id="sigtagheader"><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.signatures")%></a></li>
+            </ul>
+            <script type="text/javascript">
+                $(function () {
+                    $('#myTab').tab;//('show');
+                })
+                $('#myTab a[href=#general]').click(function (e) {
+                    e.preventDefault();
+                    $(this).tab('show');
+                });
+                $('#myTab a[href=#discovery]').click(function (e) {
+                    e.preventDefault();
+                    $(this).tab('show');
+                });
+                
+                $('#myTab a[href=#categories]').click(function (e) {
+                    e.preventDefault();
+                    $(this).tab('show');
+                });
+                $('#myTab a[href=#identifiers]').click(function (e) {
+                    e.preventDefault();
+                    $(this).tab('show');
+                });
+
+                $('#myTab a[href=#signatures]').click(function (e) {
+                    e.preventDefault();
+                    $(this).tab('show');
+                });
+                    
+                var currentDescriptionEntries=<%=bd.getDescription().size()%>;
+                var currentOverviewDocs=<%=bd.getOverviewDoc().size()%>;
+                <%
+                    int currentDescriptionSpecific = 0;
+                    for (int i = 0; i < bd.getOverviewDoc().size(); i++) {
+                        currentDescriptionSpecific += bd.getOverviewDoc().get(i).getDescription().size();
+                    }
+
+                    int currentcatkeyref = 0;
+                    if (bd.getCategoryBag() != null) {
+                        currentcatkeyref = bd.getCategoryBag().getKeyedReference().size();
+                    }
+                    int currentident = 0;
+                    if (bd.getIdentifierBag() != null) {
+                        currentident = bd.getIdentifierBag().getKeyedReference().size();
+                    }
+                %>
+                    var currentcatkeyref =<%=currentcatkeyref%>;
+                    var currentDescriptionSpecific=<%=currentDescriptionSpecific%>;
+                    var currentident=<%=currentident%>;
+            </script>
+            <div class="tab-content">
+                <div class="tab-pane active" id="general">
+                    <%
+                        if (!newitem) {
+                            out.write("<i class=\"icon-lock icon-large\"></i>");
+                        }
+                    %>
+                    <%= ResourceLoader.GetResource(session, "items.tmodel.key.description")%>
+
+                    <div style="border-width: 2px; border-style: solid;" <%
+                        if (!newitem) {
+                            out.write("class=\"noedit\"");
+                        } else {
+                            out.write("class=\"edit\"");
+                        }
+                         %>
+                         id="<%=PostBackConstants.SERVICEKEY%>"><%
+                             if (!newitem) {
+                                 out.write(StringEscapeUtils.escapeHtml(bd.getTModelKey()));
+                             }
+                        %></div><br>
+
+
+                    <%=ResourceLoader.GetResource(session, "items.tmodel.name")%>
+
+                    <%
+
+                        if (bd.getName() == null) {
+                            bd.setName(new Name());
+                        }
+                        out.write("<div id=\"" + PostBackConstants.NAME + "\" style=\"border-width:2px; border-style:solid\" >");
+                        out.write("<div style=\"float:left; height:100%\"><a href=\"javascript:Remove('Name');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ":&nbsp;</div>"
+                                + "<div class=\"edit\" id=\"" + PostBackConstants.NAME + PostBackConstants.VALUE + "\">" + (bd.getName().getValue() == null ? " " : StringEscapeUtils.escapeHtml(bd.getName().getValue())) + "</div>");
+                        out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ":&nbsp;</div>"
+                                + "<div class=\"edit\" id=\"" + PostBackConstants.NAME + PostBackConstants.LANG + "\">"
+                                + ((bd.getName().getLang() == null ? " " : StringEscapeUtils.escapeHtml(bd.getName().getLang())))
+                                + "</div>");
+
+                        out.write("</div>");
+
+                    %>
+
+                    <Br>
+                    <a href="javascript:AddDescription();"><i class="icon-plus-sign icon-large"></i></a><b><%=ResourceLoader.GetResource(session, "items.description")%> </b> - <%=ResourceLoader.GetResource(session, "items.tmodel.description")%>
+                    <div id="Description" style="border-width: 2px; border-style: solid;" >
+                        <%
+                            if (bd.getDescription() != null) //bd.(new Description());
+                            {
+                                for (int i = 0; i < bd.getDescription().size(); i++) {
+                                    out.write("<div id=\"" + PostBackConstants.DESCRIPTION + i + "\" style=\"border-width:1px; border-style:solid\">");
+                                    out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('Description" + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ":&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.DESCRIPTION + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getDescription().get(i).getValue()) + "</div>");
+                                    out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ":&nbsp;</div>"
+                                            + "<div class=\"edit\" id=\"" + PostBackConstants.DESCRIPTION + i + PostBackConstants.LANG + "\">"
+                                            + (bd.getDescription().get(i).getLang() != null
+                                            ? StringEscapeUtils.escapeHtml(bd.getDescription().get(i).getLang()) : "")
+                                            + "</div>");
+
+                                    out.write("</div>");
+                                }
+                            }
+                        %>
+                    </div>
+
+                    <input type="checkbox" id="<%=PostBackConstants.TMODEL_DELETED%>" class="noedit" <%
+                        if (bd.isDeleted()) {
+                            out.write("checked=checked");
+                        }
+                           %>> Is this tModel Deleted? (not available for future use).<br>
+                </div>
+
+                <div class="tab-pane " id="discovery">
+                    <a href="javascript:AddOverviewDocument();"><i class="icon-plus-sign icon-large"></i></a><%=ResourceLoader.GetResource(session, "pages.editor.tabnav.overview")%> - <%=ResourceLoader.GetResource(session, "pages.editor.tabnav.overview.description")%>
+                    <%
+                        out.write("<div id=\"" + PostBackConstants.OVERVIEW + "\" style=\"border-width:2px; border-style:solid\">");
+                        for (int i = 0; i < bd.getOverviewDoc().size(); i++) {
+                            out.write("<div id=\"" + PostBackConstants.OVERVIEW + i + "\" style=\"border-width:1px; border-style:solid\">");
+                            out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.OVERVIEW + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                            out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ":&nbsp;</div>"
+                                    + "<div class=\"edit\" id=\"" + PostBackConstants.OVERVIEW + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getOverviewDoc().get(i).getOverviewURL().getValue()) + "</div>");
+                            out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.type") + ":&nbsp;</div>"
+                                    + "<div class=\"edit\" id=\"" + PostBackConstants.OVERVIEW + i + PostBackConstants.TYPE + "\">" + StringEscapeUtils.escapeHtml(bd.getOverviewDoc().get(i).getOverviewURL().getUseType()) + "</div>");
+
+                    %>
+
+                    <a href="javascript:AddDescriptionSpecific('<%=PostBackConstants.OVERVIEW + i + PostBackConstants.DESCRIPTION%>');"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.description.add")%>
+                    <%
+                            out.write("<div id=\"" + PostBackConstants.OVERVIEW + i + PostBackConstants.DESCRIPTION + "\" style=\"border-width:1px; border-style:dotted\">");
+                            for (int k = 0; k < bd.getOverviewDoc().get(i).getDescription().size(); k++) {
+                                out.write("<div id=\"" + PostBackConstants.OVERVIEW + i + PostBackConstants.DESCRIPTION + k + "\" style=\"border-width:1px; border-style:solid\">");
+                                out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.OVERVIEW + i + PostBackConstants.DESCRIPTION + k + "');\"><i class=\"icon-trash\"></i></a></div>");
+                                out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ":&nbsp;</div>"
+                                        + "<div class=\"edit\" id=\"" + PostBackConstants.OVERVIEW + i + PostBackConstants.DESCRIPTION + k + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getOverviewDoc().get(i).getDescription().get(k).getValue()) + "</div>");
+                                out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.lang") + ":&nbsp;</div>"
+                                        + "<div class=\"edit\" id=\"" + PostBackConstants.OVERVIEW + i + PostBackConstants.DESCRIPTION + k + PostBackConstants.LANG + "\">" + StringEscapeUtils.escapeHtml(bd.getOverviewDoc().get(i).getDescription().get(k).getLang()) + "</div>");
+                                out.write("</div>"); //end of this instance of overview doc description
+                            }
+                            out.write("</div>");//end description
+                            out.write("</div>");//end this block
+                        }
+                        out.write("</div>");//end of overview
+                    %>
+
+                </div>
+
+                <div class="tab-pane " id="categories">
+
+
+                    <a href="javascript:AddCategoryKeyReference();"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.keyrefcat.add")%> <Br>
+                    <div id="catContainer" style="border-width: 2px; border-style: solid;" >
+                        <%
+                            if (bd.getCategoryBag() == null) {
+                                bd.setCategoryBag(new CategoryBag());
+                            }
+                            //                        out.write("Keyed Reference Categories:");
+                            for (int i = 0; i < bd.getCategoryBag().getKeyedReference().size(); i++) {
+
+                                out.write("<div id=\"" + PostBackConstants.CATBAG_KEY_REF + i + "\" style=\"border-width:2px; border-style:solid\">");
+                                out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.CATBAG_KEY_REF + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                                out.write(//"<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + ": &nbsp;</div>"
+                                        "<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + " (<a href=\"javascript:tModelModal('" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.VALUE + "')\" >" + "<i class=\"icon-list-alt icon-large\"></i>" + ResourceLoader.GetResource(session, "items.picker") + "</a>): &nbsp;</div>"
+                                        + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.VALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReference().get(i).getTModelKey()) + "</div>");
+                                out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ": &nbsp;</div>"
+                                        + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.KEYNAME + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReference().get(i).getKeyName()) + "</div>");
+                                out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                        + "<div class=\"edit\" id=\"" + PostBackConstants.CATBAG_KEY_REF + i + PostBackConstants.KEYVALUE + "\">" + StringEscapeUtils.escapeHtml(bd.getCategoryBag().getKeyedReference().get(i).getKeyValue()) + "</div>");
+                                out.write("</div>");
+                            }
+                        %>
+                    </div>
+
+                </div>
+                <div class="tab-pane " id="identifiers">
+                    <b><%=ResourceLoader.GetResource(session, "items.identifiers")%></b> - <%=ResourceLoader.GetResource(session, "items.identifiers.description")%><Br>
+                    <a href="javascript:AddIdentKeyReference();"><i class="icon-plus-sign icon-large"></i></a> <%=ResourceLoader.GetResource(session, "items.keyrefcat.add")%><Br>
+                    <div id="identContainer" style="border-width: 2px; border-style: solid;" >
+                        <%
+                            if (bd.getIdentifierBag() == null) {
+                                bd.setIdentifierBag(new IdentifierBag());
+                            }
+                            for (int i = 0; i < bd.getIdentifierBag().getKeyedReference().size(); i++) {
+                                out.write("<div id=\"" + PostBackConstants.IDENT_KEY_REF + i + "\" style=\"border-width:2px; border-style:solid\">");
+                                out.write("<div style=\"float:left;height:100%\"><a href=\"javascript:Remove('" + PostBackConstants.IDENT_KEY_REF + i + "');\"><i class=\"icon-trash icon-large\"></i></a></div>");
+                                out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.key") + ": &nbsp;</div>"
+                                        + "<div class=\"edit\" id=\"" + PostBackConstants.IDENT_KEY_REF + i + "Value\">" + StringEscapeUtils.escapeHtml(bd.getIdentifierBag().getKeyedReference().get(i).getTModelKey()) + "</div>");
+                                out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.name") + ": &nbsp;</div>"
+                                        + "<div class=\"edit\" id=\"" + PostBackConstants.IDENT_KEY_REF + i + "KeyName\">" + StringEscapeUtils.escapeHtml(bd.getIdentifierBag().getKeyedReference().get(i).getKeyName()) + "</div>");
+                                out.write("<div style=\"float:left\">" + ResourceLoader.GetResource(session, "items.value") + ": &nbsp;</div>"
+                                        + "<div class=\"edit\" id=\"" + PostBackConstants.IDENT_KEY_REF + i + "KeyValue\">" + StringEscapeUtils.escapeHtml(bd.getIdentifierBag().getKeyedReference().get(i).getKeyValue()) + "</div>");
+                                out.write("</div>");
+                            }
+                        %>
+                    </div>
+                </div>
+                <div class="tab-pane " id="signatures">
+
+                    <%
+                        if (bd.getSignature().isEmpty()) {
+                            out.write("This item is not digitally signed.");
+                        } else {
+                            out.write("This item is digitally signed " + bd.getSignature().size());
+                    %>
+                    <table class="table table-hover">
+                        <tr><th>#</th><th>Signed by</th><th></th><th>Signature Status</th></tr>
+
+                        <%
+                            for (int k = 0; k < bd.getSignature().size(); k++) {
+                                out.write("<tr><td>" + k + "</td><td>");
+                                out.write(x.SignatureToReadable(bd.getSignature().get(k)));
+                                out.write("</td><td>");
+                                out.write("<a href=\"ajax/getCert.jsp?type=tmodel&id=" + URLEncoder.encode(bd.getTModelKey(), "UTF-8") + "&index=" + k + "\">" + ResourceLoader.GetResource(session, "items.signed.viewcert") + "</a>");
+                                out.write("</td><td><div id=\"digsig" + k + "\">" + ResourceLoader.GetResource(session, "items.loading") + "</div>");
+                        %>
+                        <script type="text/javascript">
+                            $.get("ajax/validateSignature.jsp?type=tmodel&id=<%=StringEscapeUtils.escapeJavaScript(bd.getTModelKey())%>", function(data){
+                                $("#digsig<%=k%>").html(data);
+                                if (data.indexOf("invalid") !== -1 )
+                                {
+                                    $("#sigtagheader").html($("#sigtagheader").html() + "<i class=\"icon-thumbs-down icon-large\" style=\"color:red\"></i>");
+                                }
+                                else
+                                {
+                                    $("#sigtagheader").html($("#sigtagheader").html() + "<i class=\"icon-thumbs-up icon-large\" style=\"color:green\"></i>");
+                                }
+                            } )
+                        </script>
+                        <%
+                                out.write("</td></tr>");
+                            }
+                        %>
+                    </table>
+                    <%
+                        }
+                    %>
+                </div>
+                <div><br>
+                    <%
+                        if (bd.getSignature().isEmpty()) {
+                    %>
+                    <a class="btn btn-primary " href="javascript:savetModel();"><i class="icon-save icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.save")%></a>
+                    <%  } else {
+                    %>
+                    <a href="#confirmDialog" role="button" class="btn btn-primary" data-toggle="modal"><i class="icon-save icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.save")%></a>
+
+                    <%        }
+                    %>
+
+
+
+                    <%
+                        if (!newitem) {
+                    %> |
+                    <a class="btn btn-danger " href="javascript:deletetModel();"><i class="icon-trash icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.delete")%></a> |
+                    <a class="btn btn-success " href="signer.jsp?id=<%=URLEncoder.encode(bd.getTModelKey(), "UTF-8")%>&type=tmodel"><i class="icon-pencil icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.sign")%></a> |
+                    <a class="btn btn-info " href="#" title="<%=ResourceLoader.GetResource(session, "actions.subscribe.description")%>"><i class="icon-rss icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.subscribe")%></a> |
+                    <a class="btn btn-warning " href="transfer.jsp?biz=<%=URLEncoder.encode(bd.getTModelKey(), "UTF-8")%>"  title="<%=ResourceLoader.GetResource(session, "actions.transfer.description")%>"><i class="icon-exchange icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.transfer")%></a> |
+                    <a class="btn "  href="javascript:ViewAsXML();"><i class="icon-screenshot icon-large"></i> <%=ResourceLoader.GetResource(session, "actions.asxml")%></a>
+                    <%
+                        }
+                    %>
+
+
+                </div>
+            </div>
+            <script src="js/tmodeledit.js"></script>
+            <script src="js/businessEditor.js"></script>
+            <script type="text/javascript">
+                Reedit();
+                <%
+                    if (!newitem) {
+                %>
+                
+                    function ViewAsXML()
+                    {
+                        $.get("ajax/toXML.jsp?id=<%=URLEncoder.encode(bd.getTModelKey(), "UTF-8")%>&type=tmodel", function(data){
+                            window.console && console.log('asXml success');                
+                            $("#viewAsXmlContent").html(safe_tags_replace(data));
+                            $( "#viewAsXml" ).modal('show');
+                        });
+                       
+                    }
+                <%
+                    }
+                %>
+            </script>
+
+
+        </div>
+
+        <div class="modal hide fade container" id="confirmDialog">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                <h3><%=ResourceLoader.GetResource(session, "modal.digitalsignaturewarning.title")%></h3>
+            </div>
+            <div class="modal-body">
+                <p><%=ResourceLoader.GetResource(session, "modal.digitalsignaturewarning.body")%></p>
+            </div>
+            <div class="modal-footer">
+                <a href="#" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+                <a href="javascript:savetModel();$('#confirmDialog').modal('hide');" class="btn btn-primary">
+                    <%=ResourceLoader.GetResource(session, "modal.savechanges")%></a>
+            </div>
+        </div>
+    </div>
+    <%
+        if (!newitem) {
+
+    %>
+    <div class="modal hide fade container" id="viewAsXml">
+        <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <h3><%=ResourceLoader.GetResource(session, "actions.asxml")%></h3>
+        </div>
+        <div class="modal-body" id="viewAsXmlContent">
+
+
+        </div>
+        <script type="text/javascript">
+            function closeXmlPop(modaldiv)
+            {
+                $('#' + modaldiv).modal('hide');
+            }
+        </script>
+        <div class="modal-footer">
+            <a href="ajax/toXML.jsp?id=<%=URLEncoder.encode(bd.getTModelKey(), "UTF-8")%>&type=tmodel" class="btn btn-primary" target="_blank">Popout</a> 
+            <a href="javascript:closeXmlPop('viewAsXml');" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+        </div>
+    </div>
+    <%
+        }
+    %>
+    <%@include file="tmodelChooser.jsp" %>
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/tmodelPartitions.jsp b/juddi-gui/web/tmodelPartitions.jsp
new file mode 100644
index 0000000..e4158c0
--- /dev/null
+++ b/juddi-gui/web/tmodelPartitions.jsp
@@ -0,0 +1,57 @@
+<%-- 
+    Document   : tmodelPartitions
+    Created on : Feb 28, 2013, 8:21:25 AM
+    Author     : Alex O'Ree
+--%>
+
+
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h1><%=ResourceLoader.GetResource(session, "pages.tmodelpart.title")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+            
+            <div id="container">
+                <%=ResourceLoader.GetResource(session, "pages.tmodelpart.content")%>
+                <br><br>
+                <div class="alert alert-info">
+                <i class="icon-info-sign  icon-large"></i><%=ResourceLoader.GetResource(session, "pages.tmodelpart.juddinote")%></div>
+                <br><Br>
+                <table class="table">
+                    <tr><td><%=ResourceLoader.GetResource(session, "pages.tmodelpart.key")%></td><td><input type="text" value="uddi:www.mycompany.com:keyGenerator" id="keyGeneratorKey"  style="width:100%"></td></tr>
+                    <tr><td><%=ResourceLoader.GetResource(session, "pages.thmodepart.name")%></td><td><input type="text" value="My business's key generator" id="keyGeneratorName" style="width:100%"></td></tr>
+                    <tr><td><%=ResourceLoader.GetResource(session, "items.lang")%></td><td><input type="text" value="<%=ResourceLoader.GetResource(session, "language")%>" id="keyGeneratorLang" style="width:100%"></td></tr>
+                </table>
+                                
+                <a class="btn btn-primary" title="Save" id="savekeygen" onclick="javascript:savekeygen();">
+                   <i class="icon-save icon-large"></i> 
+                    <%=ResourceLoader.GetResource(session, "actions.save")%></a>
+            </div>
+            <div id="results"></div>
+            <script type="text/javascript">
+                function savekeygen()
+                {
+                     $("#results").html("<img src=\"img");
+                    $("#savekeygen").addClass("disabled");
+                    var keygen=$("#keyGeneratorKey").val();
+                    var keyname=$("#keyGeneratorName").val();
+                    var keylang=$("#keyGeneratorLang").val();
+                    $.get("ajax/tmodel.jsp?action=createKeyGen&key=" + keygen + "&name=" + keyname + "&lang=" + keylang,
+                    function(data) {
+                        $("#results").html(data);
+                        $("#savekeygen").removeClass("disabled");
+                    });
+                }
+            </script>
+
+        </div>
+    </div>
+    <%@include file="header-bottom.jsp" %>
diff --git a/juddi-gui/web/transfer.jsp b/juddi-gui/web/transfer.jsp
new file mode 100644
index 0000000..ead6fa3
--- /dev/null
+++ b/juddi-gui/web/transfer.jsp
@@ -0,0 +1,296 @@
+<%-- 
+    Document   : transfer
+    Created on : Apr 27, 2013, 8:52:12 AM
+    Author     : Alex O'Ree
+--%>
+
+<%@page import="java.util.ArrayList"%>
+<%@page import="java.util.List"%>
+<%@page import="javax.xml.datatype.XMLGregorianCalendar"%>
+<%@page import="javax.xml.ws.Holder"%>
+<%@page import="org.apache.juddi.webconsole.resources.ResourceLoader"%>
+<%@page import="org.apache.juddi.webconsole.hub.UddiHub"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well" >
+        <h1><%=ResourceLoader.GetResource(session, "actions.transfer")%></h1>
+
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12" >
+            <%=ResourceLoader.GetResource(session, "pages.transfer.content")%>
+            <Br>
+            <br>
+
+
+            <ul class="nav nav-tabs" id="myTab">
+                <li class="active"><a  href="#general"><%=ResourceLoader.GetResource(session, "pages.transfer.createtoken")%></a></li>
+
+                <li><a href="#discard" ><%=ResourceLoader.GetResource(session, "pages.transfer.discardtoken")%></a></li>
+
+                <li><a href="#accept" ><%=ResourceLoader.GetResource(session, "pages.transfer.accepttransfer")%></a></li>
+
+            </ul>
+            <script>
+                $(function () {
+                    $('#myTab').tab;//('show');
+                })
+                $('#myTab a[href=#general]').click(function (e) {
+                    e.preventDefault();
+                    $(this).tab('show');
+                });
+                $('#myTab a[href=#discard]').click(function (e) {
+                    e.preventDefault();
+                    $(this).tab('show');
+                });
+                $('#myTab a[href=#accept]').click(function (e) {
+                    e.preventDefault();
+                    $(this).tab('show');
+                });
+                    
+            </script>
+            <div class="tab-content">
+                <div class="tab-pane active" id="general">
+
+                    <%=ResourceLoader.GetResource(session, "pages.transfer.createtoken.content")%><br>
+                    <a href="javascript:refreshBusinessList()"><i class="icon-refresh icon-2x"></i> 
+                        <big><%=ResourceLoader.GetResource(session, "actions.refresh")%></big></a><br>
+
+                    <div id="data">
+
+                        <img src="img/bigrollergreen.gif">
+                    </div>
+
+                    <div>
+                        <a href="javascript:getToken();" class="btn btn-primary btn-large" style="width:95%">
+                            <i class="icon-asterisk  icon-large"></i><%=ResourceLoader.GetResource(session, "pages.transfer.gettoken")%></a>
+                        
+                    </div>
+                    <script type="text/javascript">
+                        function refreshBusinessList()
+                        { 
+                            $('#data').html("<img src=\"img/ajax-loader.gif\">");
+                            $.get('ajax/businessAsSelect.jsp', function(data) {
+                                $('#data').html(data);
+                                //  $('#tmodellist').resizable();
+                                //  $('#businesslist').resizable();
+                                $('#tmodellist').css("width", "49%");
+                                $('#businesslist').css("width", "49%");
+                            });
+                            
+                        }
+                        $("#transferto").resizable();
+                        refreshBusinessList();
+                        
+                        
+                        
+                        function getToken()
+                        {
+                            var url='ajax/getTransferToken.jsp';
+                            var postbackdata = new Array();
+                            var keys = new Array();
+                            $(".transferable").each(function()
+                            {
+                                var id=$(this).attr("id");
+                                if ($(this).is(':checked')) {
+                                    keys.push(
+                                    id);
+                                    window.console && console.log('adding ' + id);                                
+                                }
+                            }); 
+                            postbackdata.push({
+                                name: "keylist", 
+                                value: keys.join()
+                            });
+                                  
+                            postbackdata.push({
+                                name:"transferto", 
+                                value: $("#transferto").val()
+                            });
+                            
+                            postbackdata.push({
+                                name:"nonce", 
+                                value: $("#nonce").val()
+                            });
+    
+                            var request=   $.ajax({
+                                url: url,
+                                type:"POST",
+                                //  data" + i18n_type + ": "html", 
+                                cache: false, 
+                                //  processData: false,f
+                                data: postbackdata
+                            });
+                
+                
+                            request.done(function(msg) {
+                                window.console && console.log('postback done '  + url);                
+        
+                                //$("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' +
+                               //     safe_tags_replace(msg));
+                                //$("#resultBar").show();
+                                $("#transfercontent").html(UndoBreaks(safe_tags_replace(msg)));
+                                $("#tranfermodal").modal("show");
+        
+                            });
+
+                            request.fail(function(jqXHR, textStatus) {
+                                window.console && console.log('postback failed ' + url);                                
+                                $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' +jqXHR.responseText + " " + textStatus );
+                                //$(".alert").alert();
+                                $("#resultBar").show();
+        
+                            });
+                        }
+                        
+                        function UndoBreaks(content)
+                        {
+                           // var repl ="/"+ safe_tags_replace("<br>") + "/g";
+                            
+                            return content.replace(/BREAK/g, "<br>");;
+                        }
+                        
+                        function discardToken()
+                        {
+                            var url='ajax/abortTransferToken.jsp';
+                            var postbackdata = new Array();
+
+                           
+                            postbackdata.push({
+                                name:"tokenxml", 
+                                value: $("#tokenxml").val()
+                            });
+                            
+                            postbackdata.push({
+                                name:"nonce", 
+                                value: $("#nonce").val()
+                            });
+    
+                            var request=   $.ajax({
+                                url: url,
+                                type:"POST",
+                                //  data" + i18n_type + ": "html", 
+                                cache: false, 
+                                //  processData: false,f
+                                data: postbackdata
+                            });
+                
+                
+                            request.done(function(msg) {
+                                window.console && console.log('postback done '  + url);                
+        
+                                $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+                                $("#resultBar").show();
+        
+                            });
+
+                            request.fail(function(jqXHR, textStatus) {
+                                window.console && console.log('postback failed ' + url);                                
+                                $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' +jqXHR.responseText + textStatus );
+                                //$(".alert").alert();
+                                $("#resultBar").show();
+        
+                            });
+                        }
+                        
+                        
+                        function closeXmlPop(div)
+                        {
+                                $("#" + div).modal("hide");
+                        }
+                        
+                        
+                        function acceptToken()
+                        {
+                            var url='ajax/acceptTransferToken.jsp';
+                            var postbackdata = new Array();
+
+                           
+                            postbackdata.push({
+                                name:"tokenxml", 
+                                value: $("#accepttoken").val()
+                            });
+                            
+                            
+                            postbackdata.push({
+                                name:"keybag", 
+                                value: $("#keybag").val()
+                            });
+                            
+                            postbackdata.push({
+                                name:"nonce", 
+                                value: $("#nonce").val()
+                            });
+    
+                            var request=   $.ajax({
+                                url: url,
+                                type:"POST",
+                                //  data" + i18n_type + ": "html", 
+                                cache: false, 
+                                //  processData: false,f
+                                data: postbackdata
+                            });
+                
+                
+                            request.done(function(msg) {
+                                window.console && console.log('postback done '  + url);                
+                                
+                                $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+                                $("#resultBar").show();
+        
+                            });
+
+                            request.fail(function(jqXHR, textStatus) {
+                                window.console && console.log('postback failed ' + url);                                
+                                $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;' + '</a>' +jqXHR.responseText + " " + textStatus );
+                                //$(".alert").alert();
+                                $("#resultBar").show();
+        
+                            });
+                        }
+                    </script>
+                </div>
+                <div class="tab-pane" id="accept">
+                    <%=ResourceLoader.GetResource(session, "pages.transfer.accepttransfer")%><Br>
+                    <%=ResourceLoader.GetResource(session, "pages.transfer.accepttransfer.content")%>
+                    <br>
+
+                    <%=ResourceLoader.GetResource(session, "items.token")%>: <textarea  id="accepttoken" placeholder="Token XML"></textarea> <br>
+                    <%=ResourceLoader.GetResource(session, "items.key")%>: <textarea  id="keybag" placeholder="Key Bag XML"></textarea> <br>
+                    <a href="javascript:acceptToken();" class="btn btn-info btn-large" style="width:95%"><i class="icon-large icon-plus"></i> 
+                      <%=ResourceLoader.GetResource(session, "actions.accept")%>  </a>
+                </div>
+
+                <div class="tab-pane" id="discard">
+                    <%=ResourceLoader.GetResource(session, "pages.transfer.discardtoken")%><Br>
+                    <%=ResourceLoader.GetResource(session, "pages.transfer.discardtoken.content")%><br>
+                    <br>
+
+                     <%=ResourceLoader.GetResource(session, "items.token")%>: <textarea id="tokenxml" placeholder="Token XML"></textarea> <br>
+                    <a href="javascript:discardToken();" class="btn btn-danger btn-large" style="width:95%"><i class="icon-large icon-trash"></i> <%=ResourceLoader.GetResource(session, "pages.transfer.discardtoken")%></a>
+                </div>
+            </div>
+        </div>
+    </div>
+
+
+    <div class="modal hide fade container" id="tranfermodal">
+        <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <h3><%=ResourceLoader.GetResource(session, "pages.transfer.createtoken")%></h3>
+        </div>
+        <div class="modal-body" id="transfercontent">
+            
+        </div>
+        <div class="modal-footer">
+
+            <a href="javascript:closeXmlPop('tranfermodal');" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+        </div>
+    </div>
+         
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-gui/web/viewSubscriptions.jsp b/juddi-gui/web/viewSubscriptions.jsp
new file mode 100644
index 0000000..ac99e54
--- /dev/null
+++ b/juddi-gui/web/viewSubscriptions.jsp
@@ -0,0 +1,179 @@
+<%-- 
+/*
+ * Copyright 2001-2013 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+    Document   : view subscriptions
+    Created on : March 28, 2013, 9:31:19 PM
+    Author     : Alex O'Ree
+--%>
+
+
+
+<%@page import="java.util.List"%>
+<%@page import="org.uddi.sub_v3.Subscription"%>
+<%@page import="java.net.URLEncoder"%>
+<%@page import="org.uddi.api_v3.*"%>
+<%@page import="org.apache.juddi.webconsole.PostBackConstants"%>
+<%@page import="org.apache.juddi.webconsole.hub.*"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@include file="header-top.jsp" %>
+<div class="container">
+
+    <!-- Main hero unit for a primary marketing message or call to action -->
+    <div class="well">
+        <h1><%=ResourceLoader.GetResource(session, "navbar.subscriptions")%></h1>
+    </div>
+
+    <!-- Example row of columns -->
+    <div class="row">
+        <div class="span12">
+            <p>
+                <%=ResourceLoader.GetResource(session, "pages.viewsubscriptions.content")%>
+
+            </p>
+            <%
+                UddiHub x = UddiHub.getInstance(application, session);
+
+                List<Subscription> list = x.GetSubscriptions();
+                if (list == null) {
+                    out.write(UddiHub.ToErrorAlert(ResourceLoader.GetResource(session, "errors.notsignedin")));
+                }
+                if (list != null) {
+                    if (!list.isEmpty()) {
+            %>
+            <table class="table table-hover">
+                <tr><th><%=ResourceLoader.GetResource(session, "items.key")%></th>
+                    <th><%=ResourceLoader.GetResource(session, "items.expires")%></th>
+                    <th><%=ResourceLoader.GetResource(session, "items.bindingtemplate.key")%></th>
+                    <th><%=ResourceLoader.GetResource(session, "items.actions")%></th></tr>
+
+                <%
+                    for (int i = 0; i < list.size(); i++) {
+                        out.write("<tr id=\"" + StringEscapeUtils.escapeHtml(list.get(i).getSubscriptionKey()) + "\"><td>");
+                        out.write(StringEscapeUtils.escapeHtml(list.get(i).getSubscriptionKey()));
+                        out.write("</td><td>");
+                        out.write(StringEscapeUtils.escapeHtml(list.get(i).getExpiresAfter().toString()));
+                        out.write("</td><td>");
+                        out.write(StringEscapeUtils.escapeHtml(list.get(i).getBindingKey()));
+                        out.write("</td><td>");
+
+
+                        out.write("<a href=\"editSubscription.jsp?id=" + URLEncoder.encode(list.get(i).getSubscriptionKey(), "UTF8") + "\"><i class=\"icon-edit icon-2x\"></i></a> ");
+                        out.write("<a href=\"javascript:deleteSub('" + StringEscapeUtils.escapeJavaScript(list.get(i).getSubscriptionKey()) + "');\"><i class=\"icon-trash icon-2x\"></i></a> ");
+                        out.write("<a href=\"javascript:ViewAsXML('" + StringEscapeUtils.escapeJavaScript(list.get(i).getSubscriptionKey()) + "');\"><i class=\"icon-zoom-in icon-2x\"></i></a> ");
+
+                        out.write(list.get(i).getBindingKey());
+                        if (list.get(i).getMaxEntities() != null) {
+                            out.write(list.get(i).getMaxEntities().toString());
+                        }
+                        if (list.get(i).getNotificationInterval() != null) {
+                            out.write(list.get(i).getNotificationInterval().toString());
+                        }
+//out.write(list.get(i).getSubscriptionFilter());
+                        out.write("</td></tr>");
+                        //  out.write("<tr><td colspan=\"3\"><div id=\"" + StringEscapeUtils.escapeHtml(list.get(i).getSubscriptionKey()) + "\"></div></td></tr>");
+                    }
+                %>
+            </table>
+            <%
+                    } else
+                        out.write(ResourceLoader.GetResource(session, "pages.viewsubscriptions.nosubs"));
+
+                }
+            %>
+
+            <script type="text/javascript">
+                function deleteSub(key)
+                {
+                    var postbackdata = new Array();
+                    var url='ajax/subscription.jsp';
+                        
+                              
+                    postbackdata.push({
+                        name:"nonce", 
+                        value: $("#nonce").val()
+                    });
+    
+                        
+                    postbackdata.push({
+                        name:"DELETE", 
+                        value: key
+                    });
+            
+                    var request=   $.ajax({
+                        url: url,
+                        type:"POST",
+                        //  dataType: "html", 
+                        cache: false, 
+                        //  processData: false,f
+                        data: postbackdata
+                    });
+                
+                
+                    request.done(function(msg) {
+                        window.console && console.log('postback done '  + url);                
+        
+                        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' + msg);
+                        $("#resultBar").show();
+                        $("#" + escapeJquerySelector(key)).remove();
+        
+                    });
+
+                    request.fail(function(jqXHR, textStatus) {
+                        window.console && console.log('postback failed ' + url);                                
+                        $("#resultBar").html('<a class="close" data-dismiss="alert" href="javascript:hideAlert();">&times;'  + '</a>' +jqXHR.responseText + textStatus);
+                        $("#resultBar").show();
+        
+                    });
+                }
+            </script>
+        </div>
+    </div>
+
+
+
+    <div class="modal hide fade container" id="viewAsXml">
+        <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <h3><%=ResourceLoader.GetResource(session, "actions.asxml")%></h3>
+        </div>
+        <div class="modal-body" id="viewAsXmlContent">
+
+
+        </div>
+        <div class="modal-footer">
+            <a href="javascript:closeXmlPop('viewAsXml');" class="btn"><%=ResourceLoader.GetResource(session, "modal.close")%></a>
+        </div>
+    </div>
+    <script type="text/javascript">
+         
+        function ViewAsXML(id)
+        {
+            $.get("ajax/toXML.jsp?id=" + id + "&type=subscription", function(data){
+                window.console && console.log('asXml success');                
+                  
+                $("#viewAsXmlContent").html(safe_tags_replace(data));
+                $( "#viewAsXml" ).modal('show');
+            });
+                       
+        }
+                   
+        function closeXmlPop(modaldiv)
+        {
+            $('#' + modaldiv).modal('hide');
+        }
+    </script>
+    <%@include file="header-bottom.jsp" %>
\ No newline at end of file
diff --git a/juddi-tomcat/build.xml b/juddi-tomcat/build.xml
index b3b91a8..39b3d38 100644
--- a/juddi-tomcat/build.xml
+++ b/juddi-tomcat/build.xml
@@ -15,6 +15,7 @@
 		<copy file="${basedir}/catalina.sh" todir="${basedir}/target/tomcat/apache-tomcat-${apache.tomcat.version}/bin" overwrite="true"/>
 		<copy file="${basedir}/context.xml" todir="${webapps.dir}/juddiv3/META-INF" overwrite="true"/>
 		<copy file="${basedir}/server.xml" todir="${conf.dir}" overwrite="true"/>
+		<copy file="${basedir}/keystore.jks" todir="${conf.dir}" overwrite="true"/>
  		<copy file="${dependency.mysql.jar}" todir="${lib.dir}"/>
 		<copy file="${dependency.postgres.jar}" todir="${lib.dir}"/>
 		<copy file="${dependency.log4j.jar}" todir="${lib.dir}"/>
diff --git a/juddi-tomcat/keystore.jks b/juddi-tomcat/keystore.jks
new file mode 100644
index 0000000..dd97095
--- /dev/null
+++ b/juddi-tomcat/keystore.jks
Binary files differ
diff --git a/juddi-tomcat/server.xml b/juddi-tomcat/server.xml
index 1d033b4..d00f397 100644
--- a/juddi-tomcat/server.xml
+++ b/juddi-tomcat/server.xml
@@ -78,12 +78,13 @@
          This connector uses the JSSE configuration, when using APR, the 
          connector should be using the OpenSSL style configuration
          described in the APR documentation -->
-    <!--
+    
     <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
                maxThreads="150" scheme="https" secure="true"
-               clientAuth="false" sslProtocol="TLS" />
-    -->
-
+               clientAuth="false" sslProtocol="TLS" 
+			   keystoreFile="conf/keystore.jks" keystorePass="password"
+			   />
+    
     <!-- Define an AJP 1.3 Connector on port 8009 -->
     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 
diff --git a/juddiv3-war/src/main/webapp/WEB-INF/classes/juddiv3.properties b/juddiv3-war/src/main/webapp/WEB-INF/classes/juddiv3.properties
index 97460b4..400ef5e 100644
--- a/juddiv3-war/src/main/webapp/WEB-INF/classes/juddiv3.properties
+++ b/juddiv3-war/src/main/webapp/WEB-INF/classes/juddiv3.properties
@@ -129,4 +129,9 @@
 
 #juddi.mail.smtp.password
 ##Password used to authenticate to the SMTP server
-##used only if juddi.mail.smtp.auth is true
\ No newline at end of file
+##used only if juddi.mail.smtp.auth is true
+
+
+
+#Since 3.1.5 the maxium ammount of returned subscription entities allowed
+juddi.subscription.maxentities = 1000
\ No newline at end of file
diff --git a/juddiv3-war/src/main/webapp/mbeans.jsp b/juddiv3-war/src/main/webapp/mbeans.jsp
new file mode 100644
index 0000000..43c892c
--- /dev/null
+++ b/juddiv3-war/src/main/webapp/mbeans.jsp
@@ -0,0 +1,71 @@
+<%-- 
+    Document   : mbeans
+    Created on : May 6, 2013, 9:07:43 PM
+    Author     : Alex O'Ree
+--%><%@page import="java.util.HashMap"%><%@page import="java.util.Map"%><%@page import="javax.management.AttributeList"%><%@page import="java.util.Map.Entry"%><%@page import="java.util.Hashtable"%><%@page import="java.util.Iterator"%><%@page import="javax.management.ObjectName"%><%@page import="java.util.Set"%><%@page import="javax.management.MBeanServerFactory"%><%@page import="java.util.ArrayList"%><%@page import="javax.management.MBeanServer"%><%@page import="java.lang.management.MemoryPoolMXBean"%><%@page import="java.lang.management.ManagementFactory"%><%@page import="java.util.List"%><%@page contentType="application/json" pageEncoding="UTF-8"%><%
+
+    HashMap data = new HashMap<String, String>();
+    data.put("timestamp", Long.toString(System.currentTimeMillis()));
+    MBeanServer mbserver = null;
+
+    ArrayList mbservers = MBeanServerFactory.findMBeanServer(null);
+
+    if (mbservers.size() > 0) {
+        mbserver = (MBeanServer) mbservers.get(0);
+    }
+    if (mbserver != null) {
+    } else {
+        mbserver = MBeanServerFactory.createMBeanServer();
+    }
+    if (mbserver == null) {
+        out.write("null ref<br>");
+    } else {
+        long totalsuccess = 0;
+        long totalfailures = 0;
+        String[] domains = mbserver.getDomains();
+        for (int i = 0; i < domains.length; i++) {
+            //              out.write(domains[i] + "<br>");
+        }
+        ObjectName juddi = new ObjectName("apache.juddi:counter=*");
+        juddi.setMBeanServer(mbserver);
+        Set<ObjectName> beans = mbserver.queryNames(juddi, null);
+        Iterator<ObjectName> it = beans.iterator();
+        while (it.hasNext()) {
+            ObjectName n = it.next();
+            //   out.write(n.getCanonicalName() + " ");
+            //                out.write(n.getKeyPropertyListString() + "<Br>");
+            Hashtable<String, String> props = n.getKeyPropertyList();
+            Iterator<Entry<String, String>> it2 = props.entrySet().iterator();
+            while (it2.hasNext()) {
+                Entry<String, String> e = it2.next();
+//                        out.write("key = " + e.getKey() + "<br>");
+                //                      out.write("value = " + e.getValue() + "<br>");
+            }
+            AttributeList j = (AttributeList) mbserver.getAttributes(n, new String[]{"counter"});
+            for (int k = 0; k < j.size(); k++) {
+                String attr = j.get(k).toString();
+                String[] kv = attr.split("=");
+                //out.write("attr = " + kv[0] + " value = " + kv[1] + "<br>");
+                data.put(kv[0], kv[1]);
+                if (kv[0].toLowerCase().contains("success")) {
+                   totalsuccess+= Long.parseLong(kv[1].trim());
+                }
+                  if (kv[0].toLowerCase().contains("fail")) {
+                   totalfailures+= Long.parseLong(kv[1].trim());
+                }
+            }
+
+            // out.write(j.getClass().getCanonicalName() + "<br>");
+        }
+        data.put("totalsuccess", totalsuccess);
+        data.put("totalfailures", totalfailures);
+    }
+    //  out.write("<br>");
+    //  out.write("<br>");
+    //    out.write("<br>");
+    //  List<MemoryPoolMXBean> memPoolBeans = ManagementFactory.getMemoryPoolMXBeans();
+    // for (MemoryPoolMXBean mpb : memPoolBeans) {
+    //    out.write("Memory Pool: " + mpb.getName() + "<br>");
+    //}
+    out.write(new org.json.JSONObject(data).toString());
+%>
\ No newline at end of file
diff --git a/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSubscription.java b/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSubscription.java
index 9a0b736..cc7aaed 100644
--- a/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSubscription.java
+++ b/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSubscription.java
@@ -284,6 +284,10 @@
 		try {
 			Subscription subIn = (Subscription)EntityCreator.buildFromDoc(subscriptionXML, "org.uddi.sub_v3");
 			List<Subscription> subscriptionList = new ArrayList<Subscription>();
+                        subIn.setSubscriptionKey(subscriptionKey);
+                        if (subIn.getBindingKey()!=null && subIn.getBindingKey().length()==0){
+                                subIn.setBindingKey(null);
+                        }
 			subscriptionList.add(subIn);
 			Holder<List<Subscription>> subscriptionHolder = new Holder<List<Subscription>>();
 			subscriptionHolder.value = subscriptionList;
diff --git a/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription1.xml b/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription1.xml
index 7686223..1f740c1 100644
--- a/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription1.xml
+++ b/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription1.xml
@@ -33,7 +33,7 @@
       </categoryBag>
     </find_service>
   </subscriptionFilter>
-  <bindingKey xmlns="urn:uddi-org:api_v3">bindingKeyOfTheClientsNotifySubscriptionListenerService</bindingKey>
+  <bindingKey xmlns="urn:uddi-org:api_v3"></bindingKey>
   <notificationInterval>P5D</notificationInterval>
   <maxEntities>1000</maxEntities>
 </subscription>
\ No newline at end of file
diff --git a/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription2.xml b/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription2.xml
index 655e6c9..f362921 100644
--- a/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription2.xml
+++ b/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription2.xml
@@ -24,7 +24,7 @@
       <businessKey>uddi:www.this.key.doesnot.exist</businessKey>
     </get_businessDetail>
   </subscriptionFilter>
-  <bindingKey xmlns="urn:uddi-org:api_v3">bindingKeyOfTheClientsNotifySubscriptionListenerService</bindingKey>
+  <bindingKey xmlns="urn:uddi-org:api_v3"></bindingKey>
   <notificationInterval>P5D</notificationInterval>
   <maxEntities>1000</maxEntities>
 </subscription>
\ No newline at end of file
diff --git a/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription3.xml b/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription3.xml
index 8ab4287..f7c19a7 100644
--- a/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription3.xml
+++ b/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription3.xml
@@ -25,7 +25,7 @@
       </categoryBag>
      </find_tModel>
   </subscriptionFilter>
-  <bindingKey xmlns="urn:uddi-org:api_v3">bindingKeyOfTheClientsNotifySubscriptionListenerService</bindingKey>
+  <bindingKey xmlns="urn:uddi-org:api_v3"></bindingKey>
   <notificationInterval>P5D</notificationInterval>
   <maxEntities>3</maxEntities>
 </subscription>
\ No newline at end of file
diff --git a/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription4.xml b/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription4.xml
index 1536bbd..678b45a 100644
--- a/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription4.xml
+++ b/uddi-tck-base/src/main/resources/uddi_data/subscription/subscription4.xml
@@ -51,7 +51,7 @@
       <tModelKey>uddi:garbage.key.7</tModelKey>
      </get_tModelDetail>
   </subscriptionFilter>
-  <bindingKey xmlns="urn:uddi-org:api_v3">bindingKeyOfTheClientsNotifySubscriptionListenerService</bindingKey>
+  <bindingKey xmlns="urn:uddi-org:api_v3"></bindingKey>
   <notificationInterval>P5D</notificationInterval>
   <maxEntities>5</maxEntities>
 </subscription>
\ No newline at end of file
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/bpel/BPEL_020_IntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/bpel/BPEL_020_IntegrationTest.java
index 0f318fd..56ee500 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/bpel/BPEL_020_IntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/bpel/BPEL_020_IntegrationTest.java
@@ -97,7 +97,7 @@
 	}

 	

 	@Test

-	public void parseWSDL_PortTypeTModels() throws WSDLException  {

+	public void parseWSDL_PortTypeTModels() throws WSDLException , Exception {

 		

 	    Definition wsdlDefinition = rw.readWSDL("uddi_data/bpel/riftsaw/bpel-technote.wsdl");

 		@SuppressWarnings("unchecked")

@@ -118,7 +118,7 @@
 	

 	@Test

 	public void registerBPELProcess() throws WSDLException, ConfigurationException,

-		MalformedURLException, RemoteException, TransportException  {

+		MalformedURLException, RemoteException, TransportException, Exception  {

 		

 		UDDIClerk clerk = new UDDIClerk();

 		clerk.setManagerName(manager.getName());

diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_141_JIRAIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_141_JIRAIntegrationTest.java
index 8607053..ea8afd1 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_141_JIRAIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_141_JIRAIntegrationTest.java
@@ -14,9 +14,18 @@
  */

 package org.apache.juddi.v3.tck;

 

+import java.net.Inet4Address;

+import java.util.AbstractList;

 import java.util.ArrayList;

+import java.util.Calendar;

+import java.util.GregorianCalendar;

 import java.util.List;

+import javax.xml.bind.JAXB;

+import javax.xml.datatype.DatatypeFactory;

 import javax.xml.soap.SOAPFault;

+import javax.xml.ws.Endpoint;

+import javax.xml.ws.Holder;

+import javax.xml.ws.soap.SOAPFaultException;

 import org.apache.commons.configuration.ConfigurationException;

 import org.apache.commons.logging.Log;

 import org.apache.commons.logging.LogFactory;

@@ -28,9 +37,12 @@
 import org.junit.BeforeClass;

 import org.junit.Test;

 import org.uddi.api_v3.*;

+import org.uddi.sub_v3.Subscription;

+import org.uddi.sub_v3.SubscriptionFilter;

 import org.uddi.v3_service.UDDIInquiryPortType;

 import org.uddi.v3_service.UDDIPublicationPortType;

 import org.uddi.v3_service.UDDISecurityPortType;

+import org.uddi.v3_service.UDDISubscriptionPortType;

 

 /**

  * This test class provides test cases of items discovered or reported through

@@ -44,6 +56,7 @@
 

     private static Log logger = LogFactory.getLog(UDDI_141_JIRAIntegrationTest.class);

     static UDDISecurityPortType security = null;

+    static UDDISubscriptionPortType subscription = null;

     static UDDIInquiryPortType inquiry = null;

     static UDDIPublicationPortType publication = null;

     protected static String authInfoJoe = null;

@@ -80,6 +93,7 @@
         try {

             Transport transport = manager.getTransport();

             security = transport.getUDDISecurityService();

+            subscription = transport.getUDDISubscriptionService();

             authInfoJoe = TckSecurity.getAuthToken(security, TckPublisher.getJoePublisherId(), TckPublisher.getJoePassword());

             authInfoSam = TckSecurity.getAuthToken(security, TckPublisher.getSamPublisherId(), TckPublisher.getSamPassword());

             Assert.assertNotNull(authInfoJoe);

@@ -479,6 +493,486 @@
 

     }

 

+    /**

+     * sets up a compelte publisher assertion

+     *

+     * @throws Exception

+     */

+    @Test

+    public void JUDDI_590() throws Exception {

+        //create two businesses

+        System.out.println("JUDDI_590");

+

+        SaveBusiness sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoJoe);

+        BusinessEntity be = new BusinessEntity();

+        Name n = new Name();

+        n.setValue("JUDDI_590 Joe");

+        be.getName().add(n);

+        sb.getBusinessEntity().add(be);

+        String joeBiz = null;

+        try {

+            BusinessDetail saveBusiness = publication.saveBusiness(sb);

+            joeBiz = saveBusiness.getBusinessEntity().get(0).getBusinessKey();

+            //DeleteBusiness db = new DeleteBusiness();

+            //db.setAuthInfo(authInfoJoe);

+            //db.getBusinessKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());

+            //publication.deleteBusiness(db);

+            //Assert.fail("request should have been rejected");

+        } catch (SOAPFaultException ex) {

+            HandleException(ex);

+        }

+

+        sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoSam);

+        be = new BusinessEntity();

+        n = new Name();

+        n.setValue("JUDDI_590 Sam");

+        be.getName().add(n);

+        sb.getBusinessEntity().add(be);

+        String samBiz = null;

+        try {

+            BusinessDetail saveBusiness = publication.saveBusiness(sb);

+            samBiz = saveBusiness.getBusinessEntity().get(0).getBusinessKey();

+            //DeleteBusiness db = new DeleteBusiness();

+            //db.setAuthInfo(authInfoJoe);

+            //db.getBusinessKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());

+            //publication.deleteBusiness(db);

+            //Assert.fail("request should have been rejected");

+        } catch (SOAPFaultException ex) {

+            HandleException(ex);

+        }

+

+

+        //create an assertion on one end

+        AddPublisherAssertions apa = new AddPublisherAssertions();

+        apa.setAuthInfo(authInfoJoe);

+        apa.getPublisherAssertion().add(new PublisherAssertion());

+        apa.getPublisherAssertion().get(0).setFromKey(joeBiz);

+        apa.getPublisherAssertion().get(0).setToKey(samBiz);

+        KeyedReference kr = new KeyedReference();

+        kr.setKeyName("Subsidiary");

+        kr.setKeyValue("parent-child");

+        kr.setTModelKey("uddi:uddi.org:relationships");

+        apa.getPublisherAssertion().get(0).setKeyedReference(kr);

+        publication.addPublisherAssertions(apa);

+        //check get status is not null from 1 and from 2

+        boolean ok = true;

+        String msg = "";

+        try {

+            List<AssertionStatusItem> assertionStatusReport = publication.getAssertionStatusReport(authInfoJoe, CompletionStatus.STATUS_TO_KEY_INCOMPLETE);

+            if (assertionStatusReport.isEmpty()) {

+                msg = "Stage1: no result returned, expected at least 1";

+                ok = false;

+            }

+            for (int i = 0; i < assertionStatusReport.size(); i++) {

+                JAXB.marshal(assertionStatusReport.get(i), System.out);

+                if (assertionStatusReport.get(i).getToKey().equals(samBiz)) {

+                    if (!assertionStatusReport.get(i).getCompletionStatus().equals(CompletionStatus.STATUS_TO_KEY_INCOMPLETE)) {

+                        ok = false;

+                        msg = "Stage1: status type mismatch";

+                    }

+                }

+            }

+        } catch (Exception ex) {

+            ok = false;

+            ex.printStackTrace();

+        }

+

+

+        //aprove the assertion from sam

+        apa = new AddPublisherAssertions();

+        apa.setAuthInfo(authInfoSam);

+        apa.getPublisherAssertion().add(new PublisherAssertion());

+        apa.getPublisherAssertion().get(0).setFromKey(joeBiz);

+        apa.getPublisherAssertion().get(0).setToKey(samBiz);

+        kr = new KeyedReference();

+        kr.setKeyName("Subsidiary");

+        kr.setKeyValue("parent-child");

+        kr.setTModelKey("uddi:uddi.org:relationships");

+        apa.getPublisherAssertion().get(0).setKeyedReference(kr);

+        publication.addPublisherAssertions(apa);

+        try {

+            List<AssertionStatusItem> assertionStatusReport = publication.getAssertionStatusReport(authInfoJoe, CompletionStatus.STATUS_COMPLETE);

+            if (assertionStatusReport.isEmpty()) {

+                msg = "Stage2: no result returned, expected at least 1";

+                ok = false;

+            }

+            for (int i = 0; i < assertionStatusReport.size(); i++) {

+                JAXB.marshal(assertionStatusReport.get(i), System.out);

+                if (assertionStatusReport.get(i).getToKey().equals(samBiz)) {

+                    if (!assertionStatusReport.get(i).getCompletionStatus().equals(CompletionStatus.STATUS_COMPLETE)) {

+                        ok = false;

+                        msg = "Stage2: status type mismatch";

+                    }

+                }

+            }

+            //test to see what the status actually is

+            if (!ok) {

+                assertionStatusReport = publication.getAssertionStatusReport(authInfoJoe, CompletionStatus.STATUS_FROM_KEY_INCOMPLETE);

+                for (int i = 0; i < assertionStatusReport.size(); i++) {

+                    JAXB.marshal(assertionStatusReport.get(i), System.out);

+                    if (assertionStatusReport.get(i).getToKey().equals(samBiz)) {

+                        msg = "Stage3: status is " + assertionStatusReport.get(i).getCompletionStatus().toString() + " instead of complete";

+                    }

+                }

+

+                assertionStatusReport = publication.getAssertionStatusReport(authInfoJoe, CompletionStatus.STATUS_TO_KEY_INCOMPLETE);

+                for (int i = 0; i < assertionStatusReport.size(); i++) {

+                    JAXB.marshal(assertionStatusReport.get(i), System.out);

+                    if (assertionStatusReport.get(i).getToKey().equals(samBiz)) {

+                        msg = "Stage3: status is " + assertionStatusReport.get(i).getCompletionStatus().toString() + " instead of complete";

+                    }

+                }

+                assertionStatusReport = publication.getAssertionStatusReport(authInfoJoe, CompletionStatus.STATUS_BOTH_INCOMPLETE);

+                for (int i = 0; i < assertionStatusReport.size(); i++) {

+                    JAXB.marshal(assertionStatusReport.get(i), System.out);

+                    if (assertionStatusReport.get(i).getToKey().equals(samBiz)) {

+                        msg = "Stage3: status is " + assertionStatusReport.get(i).getCompletionStatus().toString() + " instead of complete";

+                    }

+                }

+

+            }

+        } catch (Exception ex) {

+            ok = false;

+            ex.printStackTrace();

+        }

+        List<String> biz = new ArrayList<String>();

+        biz.add(samBiz);

+        DeleteBusinesses(biz, authInfoSam);

+

+        biz = new ArrayList<String>();

+        biz.add(joeBiz);

+        DeleteBusinesses(biz, authInfoJoe);

+        Assert.assertTrue(msg, ok);

+

+

+    }

+

+    /**

+     * setups up a partial relationship and confirms its existence

+     *

+     * @throws Exception

+     */

+    @Test

+    public void JUDDI_590_1() throws Exception {

+        //create two businesses

+        System.out.println("JUDDI_590_1");

+

+        SaveBusiness sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoJoe);

+        BusinessEntity be = new BusinessEntity();

+        Name n = new Name();

+        n.setValue("JUDDI_590 Joe");

+        be.getName().add(n);

+        sb.getBusinessEntity().add(be);

+        String joeBiz = null;

+        try {

+            BusinessDetail saveBusiness = publication.saveBusiness(sb);

+            joeBiz = saveBusiness.getBusinessEntity().get(0).getBusinessKey();

+            //DeleteBusiness db = new DeleteBusiness();

+            //db.setAuthInfo(authInfoJoe);

+            //db.getBusinessKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());

+            //publication.deleteBusiness(db);

+            //Assert.fail("request should have been rejected");

+        } catch (SOAPFaultException ex) {

+            HandleException(ex);

+        }

+

+        sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoSam);

+        be = new BusinessEntity();

+        n = new Name();

+        n.setValue("JUDDI_590 Sam");

+        be.getName().add(n);

+        sb.getBusinessEntity().add(be);

+        String samBiz = null;

+        try {

+            BusinessDetail saveBusiness = publication.saveBusiness(sb);

+            samBiz = saveBusiness.getBusinessEntity().get(0).getBusinessKey();

+            //DeleteBusiness db = new DeleteBusiness();

+            //db.setAuthInfo(authInfoJoe);

+            //db.getBusinessKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());

+            //publication.deleteBusiness(db);

+            //Assert.fail("request should have been rejected");

+        } catch (SOAPFaultException ex) {

+            HandleException(ex);

+        }

+

+

+        //create an assertion on one end

+        AddPublisherAssertions apa = new AddPublisherAssertions();

+        apa.setAuthInfo(authInfoJoe);

+        apa.getPublisherAssertion().add(new PublisherAssertion());

+        apa.getPublisherAssertion().get(0).setFromKey(joeBiz);

+        apa.getPublisherAssertion().get(0).setToKey(samBiz);

+        KeyedReference kr = new KeyedReference();

+        kr.setKeyName("Subsidiary");

+        kr.setKeyValue("parent-child");

+        kr.setTModelKey("uddi:uddi.org:relationships");

+        apa.getPublisherAssertion().get(0).setKeyedReference(kr);

+        publication.addPublisherAssertions(apa);

+        //ok so joe has asserted that he knows sam

+

+        //check get status is not null from 1 and from 2

+        boolean ok = true;

+        String msg = "";

+        try {

+            List<AssertionStatusItem> assertionStatusReport = publication.getAssertionStatusReport(authInfoJoe, CompletionStatus.STATUS_TO_KEY_INCOMPLETE);

+            if (assertionStatusReport.isEmpty()) {

+                msg = "Stage1: no result returned, expected at least 1";

+                ok = false;

+            }

+            for (int i = 0; i < assertionStatusReport.size(); i++) {

+                JAXB.marshal(assertionStatusReport.get(i), System.out);

+                if (assertionStatusReport.get(i).getToKey().equals(samBiz)) {

+                    if (!assertionStatusReport.get(i).getCompletionStatus().equals(CompletionStatus.STATUS_TO_KEY_INCOMPLETE)) {

+                        ok = false;

+                        msg = "Stage1: status type mismatch";

+                    }

+                }

+            }

+        } catch (Exception ex) {

+            ok = false;

+            ex.printStackTrace();

+        }

+        //check that sam got the message

+

+        try {

+            List<AssertionStatusItem> assertionStatusReport = publication.getAssertionStatusReport(authInfoSam, CompletionStatus.STATUS_TO_KEY_INCOMPLETE);

+            if (assertionStatusReport.isEmpty()) {

+                msg = "Stage2: no result returned, expected at least 1";

+                ok = false;

+            }

+            for (int i = 0; i < assertionStatusReport.size(); i++) {

+                JAXB.marshal(assertionStatusReport.get(i), System.out);

+                if (assertionStatusReport.get(i).getToKey().equals(samBiz)) {

+                    if (!assertionStatusReport.get(i).getCompletionStatus().equals(CompletionStatus.STATUS_TO_KEY_INCOMPLETE)) {

+                        ok = false;

+                        msg = "Stage2: status type mismatch";

+                    }

+                }

+            }

+        } catch (Exception ex) {

+            ok = false;

+            ex.printStackTrace();

+        }

+

+        List<String> biz = new ArrayList<String>();

+        biz.add(samBiz);

+        DeleteBusinesses(biz, authInfoSam);

+

+        biz = new ArrayList<String>();

+        biz.add(joeBiz);

+        DeleteBusinesses(biz, authInfoJoe);

+        Assert.assertTrue(msg, ok);

+

+

+    }

+

+    /**

+     *  //testing upper case subscription callbacks

+     *

+     * @throws Exception

+     */

+    @Test

+    public void JIRA_597() throws Exception {

+        System.out.println("JIRA_597");

+        int port = 4444;

+        String localhostname = java.net.InetAddress.getLocalHost().getHostName();

+        UDDISubscriptionListenerImpl impl = new UDDISubscriptionListenerImpl();

+        UDDISubscriptionListenerImpl.notifcationMap.clear();

+        UDDISubscriptionListenerImpl.notificationCount = 0;

+        Endpoint ep = null;

+        boolean ok = false;

+        do {

+            try {

+                ep = Endpoint.publish("http://" + localhostname + ":" + port + "/UDDI_CALLBACK", impl);

+                ok = true;

+            } catch (Exception ex) {

+                port++;

+            }

+        } while (!ok);

+        SaveBusiness sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoJoe);

+        BusinessEntity be = new BusinessEntity();

+        be.getName().add(new Name());

+        be.getName().get(0).setValue("Joe's callback business");

+        be.setBusinessServices(new BusinessServices());

+        BusinessService bs = new BusinessService();

+        bs.getName().add(new Name());

+        bs.getName().get(0).setValue("Joe's callback service");

+        bs.setBindingTemplates(new BindingTemplates());

+        BindingTemplate bt = new BindingTemplate();

+        bt.setAccessPoint(new AccessPoint());

+        bt.getAccessPoint().setValue("http://" + localhostname + ":" + port + "/UDDI_CALLBACK");

+        bt.getAccessPoint().setUseType("endPoint");

+        //Added per Kurt

+        TModelInstanceInfo instanceInfo = new TModelInstanceInfo();

+        instanceInfo.setTModelKey("uddi:uddi.org:transport:http");

+        bt.setTModelInstanceDetails(new TModelInstanceDetails());

+        bt.getTModelInstanceDetails().getTModelInstanceInfo().add(instanceInfo);

+

+        bs.getBindingTemplates().getBindingTemplate().add(bt);

+

+        bs.getBindingTemplates().getBindingTemplate().add(bt);

+        be.getBusinessServices().getBusinessService().add(bs);

+        sb.getBusinessEntity().add(be);

+        BusinessDetail saveBusiness = publication.saveBusiness(sb);

+

+        //ok Joe's callback is setup

+

+        //Setup a business to subscribe to

+        sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoSam);

+        be = new BusinessEntity();

+        be.getName().add(new Name());

+        be.getName().get(0).setValue("Sam's business");

+        sb.getBusinessEntity().add(be);

+        BusinessDetail saveBusiness1 = publication.saveBusiness(sb);

+

+        //ok Joe now needs to subscribe for Sam's business

+        Holder<List<Subscription>> list = new Holder<List<Subscription>>();

+        list.value = new ArrayList<Subscription>();

+        Subscription s = new Subscription();

+        s.setBindingKey(saveBusiness.getBusinessEntity().get(0).getBusinessServices().getBusinessService().get(0).getBindingTemplates().getBindingTemplate().get(0).getBindingKey());

+        s.setSubscriptionFilter(new SubscriptionFilter());

+        s.getSubscriptionFilter().setGetBusinessDetail(new GetBusinessDetail());

+        s.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey().add(saveBusiness1.getBusinessEntity().get(0).getBusinessKey());

+        DatatypeFactory df = DatatypeFactory.newInstance();

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.setTimeInMillis(System.currentTimeMillis());

+        gcal.add(Calendar.HOUR, 1);

+        s.setExpiresAfter(df.newXMLGregorianCalendar(gcal));

+

+        s.setNotificationInterval(df.newDuration(5000));

+        list.value.add(s);

+        subscription.saveSubscription(authInfoJoe, list);

+

+        //ok have sam change his business around.

+        sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoSam);

+        be = saveBusiness1.getBusinessEntity().get(0);

+        be.getName().get(0).setLang("en");

+        sb.getBusinessEntity().add(be);

+        publication.saveBusiness(sb);

+        int maxwait = 30000;

+        while (maxwait > 0) {

+            if (UDDISubscriptionListenerImpl.notifcationMap.size() > 0) {

+                break;

+            }

+            Thread.sleep(1000);

+            maxwait = maxwait - 1000;

+        }

+        if (UDDISubscriptionListenerImpl.notifcationMap.isEmpty()) {

+            Assert.fail("no callbacks were recieved.");

+        }

+

+

+    }

+

+    /**

+     * testing callbacks with underfined transport type

+     *

+     * @throws Exception

+     */

+    @Test

+    public void JIRA_596() throws Exception {

+        System.out.println("JIRA_596");

+        int port = 4444;

+        String localhostname = java.net.InetAddress.getLocalHost().getHostName();

+        UDDISubscriptionListenerImpl impl = new UDDISubscriptionListenerImpl();

+        UDDISubscriptionListenerImpl.notifcationMap.clear();

+        UDDISubscriptionListenerImpl.notificationCount = 0;

+        Endpoint ep = null;

+        boolean ok = false;

+        do {

+            try {

+                ep = Endpoint.publish("http://" + localhostname + ":" + port + "/UDDI_CALLBACK", impl);

+                ok = true;

+            } catch (Exception ex) {

+                port++;

+            }

+        } while (!ok);

+        SaveBusiness sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoJoe);

+        BusinessEntity be = new BusinessEntity();

+        be.getName().add(new Name());

+        be.getName().get(0).setValue("Joe's callback business");

+        be.setBusinessServices(new BusinessServices());

+        BusinessService bs = new BusinessService();

+        bs.getName().add(new Name());

+        bs.getName().get(0).setValue("Joe's callback service");

+        bs.setBindingTemplates(new BindingTemplates());

+        BindingTemplate bt = new BindingTemplate();

+        bt.setAccessPoint(new AccessPoint());

+        bt.getAccessPoint().setValue("http://" + localhostname + ":" + port + "/UDDI_CALLBACK");

+        bt.getAccessPoint().setUseType("endPoint");

+        //Added per Kurt

+        /*TModelInstanceInfo instanceInfo = new TModelInstanceInfo();

+         instanceInfo.setTModelKey("uddi:uddi.org:transport:http");

+         bt.setTModelInstanceDetails(new TModelInstanceDetails());

+         bt.getTModelInstanceDetails().getTModelInstanceInfo().add(instanceInfo);

+         */

+        bs.getBindingTemplates().getBindingTemplate().add(bt);

+

+        bs.getBindingTemplates().getBindingTemplate().add(bt);

+        be.getBusinessServices().getBusinessService().add(bs);

+        sb.getBusinessEntity().add(be);

+        BusinessDetail saveBusiness = publication.saveBusiness(sb);

+

+        //ok Joe's callback is setup

+

+        //Setup a business to subscribe to

+        sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoSam);

+        be = new BusinessEntity();

+        be.getName().add(new Name());

+        be.getName().get(0).setValue("Sam's business");

+        sb.getBusinessEntity().add(be);

+        BusinessDetail saveBusiness1 = publication.saveBusiness(sb);

+

+        //ok Joe now needs to subscribe for Sam's business

+        Holder<List<Subscription>> list = new Holder<List<Subscription>>();

+        list.value = new ArrayList<Subscription>();

+        Subscription s = new Subscription();

+        s.setBindingKey(saveBusiness.getBusinessEntity().get(0).getBusinessServices().getBusinessService().get(0).getBindingTemplates().getBindingTemplate().get(0).getBindingKey());

+        s.setSubscriptionFilter(new SubscriptionFilter());

+        s.getSubscriptionFilter().setGetBusinessDetail(new GetBusinessDetail());

+        s.getSubscriptionFilter().getGetBusinessDetail().getBusinessKey().add(saveBusiness1.getBusinessEntity().get(0).getBusinessKey());

+        DatatypeFactory df = DatatypeFactory.newInstance();

+        GregorianCalendar gcal = new GregorianCalendar();

+        gcal.setTimeInMillis(System.currentTimeMillis());

+        gcal.add(Calendar.HOUR, 1);

+        s.setExpiresAfter(df.newXMLGregorianCalendar(gcal));

+

+        s.setNotificationInterval(df.newDuration(5000));

+        list.value.add(s);

+        subscription.saveSubscription(authInfoJoe, list);

+

+        //ok have sam change his business around.

+        sb = new SaveBusiness();

+        sb.setAuthInfo(authInfoSam);

+        be = saveBusiness1.getBusinessEntity().get(0);

+        be.getName().get(0).setLang("en");

+        sb.getBusinessEntity().add(be);

+        publication.saveBusiness(sb);

+        int maxwait = 30000;

+        while (maxwait > 0) {

+            if (UDDISubscriptionListenerImpl.notifcationMap.size() > 0) {

+                break;

+            }

+            Thread.sleep(1000);

+            maxwait = maxwait - 1000;

+        }

+        if (UDDISubscriptionListenerImpl.notifcationMap.isEmpty()) {

+            Assert.fail("no callbacks were recieved.");

+        }

+

+

+    }

+

+    //once more without any relationship

     //TODO binding template tmodel instance info

     //TODO tmodel tests

     //TODO create tests for enforcing ref integrity of tmodel keys, after enforcing this, the tests in this class will need to be heavily revised

@@ -628,11 +1122,17 @@
 

     private void DeleteBusinesses(List<String> businesskeysToDelete) {

 

+        DeleteBusinesses(businesskeysToDelete, authInfoJoe);

+

+    }

+

+    private void DeleteBusinesses(List<String> businesskeysToDelete, String authinfo) {

+

 

         //cleanup

         try {

             DeleteBusiness db = new DeleteBusiness();

-            db.setAuthInfo(authInfoJoe);

+            db.setAuthInfo(authinfo);

             db.getBusinessKey().addAll(businesskeysToDelete);

             publication.deleteBusiness(db);

         } catch (Exception ex) {

diff --git a/uddi-ws/src/main/java/org/apache/juddi/jaxb/JAXBMarshaller.java b/uddi-ws/src/main/java/org/apache/juddi/jaxb/JAXBMarshaller.java
index 4c75caa..06716a7 100644
--- a/uddi-ws/src/main/java/org/apache/juddi/jaxb/JAXBMarshaller.java
+++ b/uddi-ws/src/main/java/org/apache/juddi/jaxb/JAXBMarshaller.java
@@ -105,7 +105,7 @@
 		try {

 			JAXBContext jc = getContext(thePackage);

 			Marshaller marshaller = jc.createMarshaller();

-			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

+			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);

 			marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

 			marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");

 			ByteArrayOutputStream baos = new ByteArrayOutputStream();

diff --git a/uddi-ws/src/main/java/org/apache/juddi/v3_service/JUDDIApiPortType.java b/uddi-ws/src/main/java/org/apache/juddi/v3_service/JUDDIApiPortType.java
index b324f1e..c098920 100644
--- a/uddi-ws/src/main/java/org/apache/juddi/v3_service/JUDDIApiPortType.java
+++ b/uddi-ws/src/main/java/org/apache/juddi/v3_service/JUDDIApiPortType.java
@@ -48,6 +48,10 @@
 

 /**

  * This portType defines all of the jUDDI publisher operations.

+ * This is above and beyond the original UDDI v3 specification and is NOT part of the standard.

+ * Method behavior within this class may change from version to version. These methods are

+ * primarily mean for administrative functions.

+ * 

  * 

  */

 @WebService(name = "JUDDI_Api_PortType", targetNamespace = "urn:juddi-apache-org:v3_service")

diff --git a/uddi-ws/src/main/java/org/uddi/api_v3/Name.java b/uddi-ws/src/main/java/org/uddi/api_v3/Name.java
index 3f95d70..8b5c346 100644
--- a/uddi-ws/src/main/java/org/uddi/api_v3/Name.java
+++ b/uddi-ws/src/main/java/org/uddi/api_v3/Name.java
@@ -68,6 +68,21 @@
     }

 

     /**

+     * A simple convenience constructor

+     * @param value max length is 255 chars

+     * @param lang max length is 26 chars

+     */

+    public Name(String value, String lang) {

+        this.value = value;

+        this.lang = lang;

+    }

+

+    public Name() {

+        value=null;

+        lang=null;

+    }

+

+    /**

      * Gets the value of the value property.

      * 

      * @return