Initial revision
Wed Nov 17 22:19:54 UTC 2004 mantoniotti
* Initial revision
addfile ./.clbuild-skip-update
addfile ./ACKNOWLEDGEMENTS
hunk ./ACKNOWLEDGEMENTS 1
+A lot of pleple deserved thanks for improving CL-UNIFICATION.
+
+The Lisp NYC group has endured presentations of this code and provided
+feedback.
+
+The following individuals have provided feedback and (precious) bug
+fixes.
+
+Boldyrev, Ivan
+Korablin, Vladimir V.
+Leuner, John
+McManus, Russell
+Scott, Peter
+Werner, Norman
addfile ./COPYING
hunk ./COPYING 1
+Copyright (c) 2004 Marco Antoniotti[_^M_][_$_]
+All rights reserved.[_^M_][_$_]
+ [_^M_][_$_]
+Permission is hereby granted, without written agreement and without[_^M_][_$_]
+license or royalty fees, to use, copy, modify, and distribute this[_^M_][_$_]
+software and its documentation for any purpose, provided that the[_^M_][_$_]
+above copyright notice and the following two paragraphs appear in all[_^M_][_$_]
+copies of this software.[_^M_][_$_]
+ [_^M_][_$_]
+IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE TO ANY PARTY FOR DIRECT,[_^M_][_$_]
+INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF[_^M_][_$_]
+THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHOR(S),[_^M_][_$_]
+HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.[_^M_][_$_]
+[_^M_][_$_]
+THE AUTHOR(S) UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,[_^M_][_$_]
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF[_^M_][_$_]
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE[_^M_][_$_]
+PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHOR(S) HAVE NO[_^M_][_$_]
+OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR[_^M_][_$_]
+MODIFICATIONS.[_^M_][_$_]
+[_^M_][_$_]
addfile ./ChangeLog
hunk ./ChangeLog 1
+2009-12-17 author <author@paniscia.local>
+
+ * lib-dependent/cl-ppcre-template.asd: Initial checkin.
+
+ * lib-dependent/cl-ppcre-template.lisp:
+ Patched to use Cl-PPCRE:SCAN-TO-STRINGS (thanks to Pixel // pinterface [a] gmail dot com).
+
+ * unifier.lisp: Minor cosmetic changes.
+
+ * unification-package.lisp: Exported MATCHF-CASE.
+
+ * templates-hierarchy.lisp:
+ Fixed a couple of problems with some accessors in the NUMBER,
+ STRUCTURE-OBJECT and STANDARD-OBJECT templates.
+
+ * match-block.lisp: Added MATCHF* macros.
+
+2009-04-18 author <author@paniscia.local>
+
+ * ChangeLog: ChangeLog updated.
+
+ * cl-unification.system, cl-unification.asd:
+ System definitions files (.asd and .system) modified in order to make
+ dependency form CL-PPCRE optional.
+
+ * lib-dependent/cl-ppcre-template.system: File added.
+
+ * lib-dependent/cl-ppcre-template.lisp:
+ Removed REQUIRE of CL-PPCRE. Too brittle.
+
+ * cl-unification-lib.asd: File added.
+
+2009-04-18 author <author@Macintosh-9.local>
+
+ * cl-unification.system, cl-unification.asd:
+ System definitions files (.asd and .system) modified in order to make
+ dependency form CL-PPCRE optional.
+
+ * lib-dependent/cl-ppcre-template.system: File added.
+
+ * lib-dependent/cl-ppcre-template.lisp:
+ Removed REQUIRE of CL-PPCRE. Too brittle.
+
+ * cl-unification-lib.asd: File added.
+
+2009-04-17 author <author@Macintosh-9.local>
+
+ * unification-package.lisp:
+ Added a few exports and changed the actual package name (i.e., I put
+ my money where my mouth is; the "published" package name is now a
+ nickname).
+
+ * apply-substitution.lisp:
+ Fixed a couple of snags. APPLY-SUBSTITUTION was not applied
+ recursively and it was barfing on numbers.
+ Current version is still incomplete, but it serves as a template for
+ further development.
+
+2009-04-15 author <author@Macintosh-9.local>
+
+ * ChangeLog: ChangeLog updated.
+
+ * lib-dependent/cl-ppcre-template.lisp, test/unification-tests.lisp:
+ Modified Files:
+ test/unification-tests.lisp
+ Added Files:
+ lib-dependent/cl-ppcre-template.lisp
+
+ The cl-ppcre-template reuses E. Weitz's wonderful CL-PPCRE library
+ to provide a seamless (YMMV) reuse of regular expressions within
+ CL-UNIFICATION.
+
+ * templates-hierarchy.lisp: Added LAMBDA-TEMPLATE.
+
+ * substitutions.lisp:
+ Added some functionality to extract all variables and/or all values
+ from an environment or a frame.
+
+ * match-block.lisp:
+ Added MATCHF (whose name may change) to simplify the
+ 'destructuring-bind'-like syntax and behavior of the matching
+ facilities.
+
+ * COPYING: Dates updated.
+
+ * unifier.lisp:
+ Major API change to 'unify'. It now accepts keywords. Old code
+ shouls not be affected, but new code is now more flexible. Look the
+ the STRING and (new) CHARACTER methods to see how this change is
+ affecting the code.
+
+ * variables.lisp: Some 'diff' unfathomable change happened.
+
+ * unification-package.lisp: Added exports of a few symbols.
+
+ * cl-unification.system, cl-unification.asd:
+ Fixed a few snags and added "lib-dependent" module.
+
+ * apply-substitution.lisp: Added some functionality and comments.
+
+2009-04-15 author <author@paniscia.pd.disco.unimib.it>
+
+ * lib-dependent/cl-ppcre-template.lisp, test/unification-tests.lisp:
+ Modified Files:
+ test/unification-tests.lisp
+ Added Files:
+ lib-dependent/cl-ppcre-template.lisp
+
+ The cl-ppcre-template reuses E. Weitz's wonderful CL-PPCRE library
+ to provide a seamless (YMMV) reuse of regular expressions within
+ CL-UNIFICATION.
+
+ * templates-hierarchy.lisp: Added LAMBDA-TEMPLATE.
+
+ * substitutions.lisp:
+ Added some functionality to extract all variables and/or all values
+ from an environment or a frame.
+
+ * match-block.lisp:
+ Added MATCHF (whose name may change) to simplify the
+ 'destructuring-bind'-like syntax and behavior of the matching
+ facilities.
+
+ * COPYING: Dates updated.
+
+ * unifier.lisp:
+ Major API change to 'unify'. It now accepts keywords. Old code
+ shouls not be affected, but new code is now more flexible. Look the
+ the STRING and (new) CHARACTER methods to see how this change is
+ affecting the code.
+
+ * variables.lisp: Some 'diff' unfathomable change happened.
+
+ * unification-package.lisp: Added exports of a few symbols.
+
+ * cl-unification.system, cl-unification.asd:
+ Fixed a few snags and added "lib-dependent" module.
+
+ * apply-substitution.lisp: Added some functionality and comments.
+
+2008-07-13 author <author@paniscia.pd.disco.unimib.it>
+
+ * ChangeLog: Changelog updated.
+
+ * ACKNOWLEDGEMENTS:
+ Added credits to a few people. Missing ones should bug the maintainer :)
+
+ * README: Copyright dates updated.
+
+ * unification.asd, unification.system: Cleaning up.
+ Committing in .
+
+ Removed Files:
+ unification.asd unification.system
+
+ * templates-hierarchy-saved.lisp: Clenaing up.
+ Committing in .
+
+ Removed Files:
+ templates-hierarchy-saved.lisp
+
+ * INSTALLATION: Instructions updated.
+
+ * COPYING: Copyright dates updated.
+
+ * test/unification-tests.lisp: Added file.
+
+ * substitutions.lisp, templates-hierarchy.lisp, unification-package.lisp, variables.lisp:
+ Some modification added. Exported symbols and reverted
+ reader macro #T to construct template instances at read time.
+ Added MAKE-LOAD-FORM method for templates which should fix problem with
+ SBCL.
+
+ Committing in .
+
+ Modified Files:
+ substitutions.lisp templates-hierarchy.lisp
+ unification-package.lisp variables.lisp
+
+ * cl-unification.system:
+ Added explicit :source-extension to accomodate Allegro CL.
+
+2008-07-13 author <author@Macintosh.local>
+
+ * ACKNOWLEDGEMENTS:
+ Added credits to a few people. Missing ones should bug the maintainer :)
+
+ * README: Copyright dates updated.
+
+ * unification.asd, unification.system: Cleaning up.
+ Committing in .
+
+ Removed Files:
+ unification.asd unification.system
+
+ * templates-hierarchy-saved.lisp: Cleaning up.
+ Committing in .
+
+ Removed Files:
+ templates-hierarchy-saved.lisp
+
+ * INSTALLATION: Instructions updated.
+
+ * COPYING: Copyright dates updated.
+
+ * test/unification-tests.lisp: Added file.
+
+ * substitutions.lisp, templates-hierarchy.lisp, unification-package.lisp, variables.lisp:
+ Some modification added. Exported symbols and reverted
+ reader macro #T to construct template instances at read time.
+ Added MAKE-LOAD-FORM method for templates which should fix problem with
+ SBCL.
+
+ Committing in .
+
+ Modified Files:
+ substitutions.lisp templates-hierarchy.lisp
+ unification-package.lisp variables.lisp
+
+ * cl-unification.system:
+ Added explicit :source-extension to accomodate Allegro CL.
+
+2008-07-10 author <author@Macintosh.local>
+
+ * apply-substitution.lisp:
+ Removed EXPORT of APPLY-SUBSTITUTION as it is already in the DEFPACKAGE.
+
+2007-11-09 author <author@Macintosh.local>
+
+ * docs/html/index.html: Changed the position of the disclaimer.
+
+ * ChangeLog: ChangeLog updated.
+
+ * match-block.lisp:
+ Made several changes to improve MATCH-CASE (following a note from Ivan
+ Boldyrev from a long time ago), MATCHING and MATCH.
+
+ Else-clauses are now handled correctly (AFAICT).
+
+ Single variable templates in MATCH, MATCH-CASE and MATCHING clauses do
+ not need to be quoted.
+
+ MATCHING was generating one gensym'ed variable per clause without
+ creating an appropriate enclosing LET. This is now fixed.
+
+ * substitutions.lisp:
+ Changed the top comment and added a (:copier nil) option to the
+ ENVIRONMENT defstruct, as COPY-ENVIRONMENT is defined later in the
+ file.
+
+ * cl-unification.system, cl-unification.asd:
+ Added the new system building files with more meaningful names
+ w.r.t. the name of the library.
+
+ * unification.asd, unification.system:
+ Marked the two system building files as 'obsolete', before removing
+ them from the repository. The new files are prefixed by 'cl-'.
+
+2007-11-09 author <author@papadopoulou-2.ydras.offices.>
+
+ * match-block.lisp:
+ Made several changes to improve MATCH-CASE (following a note from Ivan
+ Boldyrev from a long time ago), MATCHING and MATCH.
+
+ Else-clauses are now handled correctly (AFAICT).
+
+ Single variable templates in MATCH, MATCH-CASE and MATCHING clauses do
+ not need to be quoted.
+
+ MATCHING was generating one gensym'ed variable per clause without
+ creating an appropriate enclosing LET. This is now fixed.
+
+ * substitutions.lisp:
+ Changed the top comment and added a (:copier nil) option to the
+ ENVIRONMENT defstruct, as COPY-ENVIRONMENT is defined later in the
+ file.
+
+ * cl-unification.system, cl-unification.asd:
+ Added the new system building files with more meaningful names
+ w.r.t. the name of the library.
+
+ * unification.asd, unification.system:
+ Marked the two system building files as 'obsolete', before removing
+ them from the repository. The new files are prefixed by 'cl-'.
+
+2007-05-21 author <author@papadopoulou-2.ydras.offices.>
+
+ * ChangeLog: ChangeLog updated.
+
+ * README, ACKNOWLEDGEMENTS, COPYING, INSTALLATION:
+ Updated copyrights dates and changed a few instructions in the
+ INSTALLATION file.
+
+ * docs/html/index.html: Updated copyrights dates.
+
+ * ChangeLog: ChangeLog updated.
+
+ * unification-package.lisp, unification.asd, apply-substitution.lisp, match-block.lisp, substitutions.lisp:
+ See previous message.
+
+ * unification.system:
+ Added file 'apply-substitition.lisp' with a few new functions that are
+ a start for the variable substitition operation.
+
+ New fixes to the MATCH and MATCH-CASE macros. They should now work as
+ advertised.
+
+ Minor changes to other files: added exports to package file, fixed
+ .system and .asd files.
+
+2007-05-21 author <author@Paniscia-di-Marco-Antoniotti.local>
+
+ * README, ACKNOWLEDGEMENTS, COPYING, INSTALLATION:
+ Updated copyrights dates and changed a few instructions in the
+ INSTALLATION file.
+
+ * docs/html/index.html: Updated copyrights dates.
+
+ * ChangeLog: ChangeLog updated.
+
+ * unification-package.lisp, unification.asd, apply-substitution.lisp, match-block.lisp, substitutions.lisp:
+ See previous message.
+
+ * unification.system:
+ Added file 'apply-substitition.lisp' with a few new functions that are
+ a start for the variable substitition operation.
+
+ New fixes to the MATCH and MATCH-CASE macros. They should now work as
+ advertised.
+
+ Minor changes to other files: added exports to package file, fixed
+ .system and .asd files.
+
+2007-05-21 author <author@paniscia.disco.unimib.it>
+
+ * unification.system:
+ Added file 'apply-substitition.lisp' with a few new functions that are
+ a start for the variable substitition operation.
+
+ New fixes to the MATCH and MATCH-CASE macros. They should now work as
+ advertised.
+
+ Minor changes to other files: added exports to package file, fixed
+ .system and .asd files.
+
+2006-07-19 author <author@paniscia.disco.unimib.it>
+
+ * templates-hierarchy.lisp, unifier.lisp:
+ Fixed two problems with the unifier machinery.
+
+ The first one had to do with the matching of NIL against SYMBOL and LIST
+ in several places: essentially, the problem is incongruencies in the
+ results of COMPUTE-APPLICABLE-METHODS in these cases. I think I caught
+ most of them: unification of lists and the occur-check were the obvious
+ places where things went awry.
+
+ The second problem had to do with the reader macro #T. The original
+ code generated an object at read time, which is not such a good idea.
+ Now the code generates a call to MAKE-TEMPLATE with is evaluated later.
+ Incidentally, the reader macro function is now called |sharp-T-reader|, in
+ order to placate Emacs fontification.
+
+ Modified Files:
+ templates-hierarchy.lisp unifier.lisp
+
+ * unification-package.lisp: Added missing export.
+
+2005-10-25 author <author@paniscia.disco.unimib.it>
+
+ * unifier.lisp: Fixed problem with the unification of a list with a
+ SEQUENCE-TEMPLATE. The implementation was not checking that the
+ length of the list was compatible with the length of the required
+ elements in the template.
+
+ Apart from that, keyword matching is still unimplemented.
+
+ * match-block.lisp:
+ Fixed problem with checking the presence of T and OTHERWISE clauses in
+ MATCHING.
+
+2005-07-25 author <author@paniscia.disco.unimib.it>
+
+ * docs/html/downloads.html: Minor cleanup.
+
+2005-05-20 author <author@paniscia.disco.unimib.it>
+
+ * docs/html/links.html: Fixed typos.
+
+ * docs/html/nil-template-class.html: Fixed bug in documentation.
+
+ * docs/html/links.html: Page updated.
+
+ * docs/html/unification-dictionary.html: Incremental change to page.
+
+ * docs/html/number-template-class.html: Fixed a documentation bug.
+ Thanks to Norman Werner for spotting it.
+
+ * docs/html/index.html: Added link to "Mailing Lists" page.
+
+ * docs/html/mailing-lists.html: File added.
+
+ * unifier.lisp:
+ Fixed two major bugs reported by Norman Werver. Unification of
+ strings and symbols and of numers and symbols was not recurring on
+ VAR-UNIFY, as required; thus
+
+ (unify '(?x ?x) '("asd" "qweert"))
+ and
+ (unify '(foo ?x baz) '(foo 42 ?x))
+
+ would succed.
+ The two cases are now fixed.
+
+2005-05-19 author <author@paniscia.disco.unimib.it>
+
+ * README: Year updated.
+
+ * ACKNOWLEDGEMENTS: File added.
+
+ * ChangeLog: ChangeLog updated.
+
+ * COPYING: Updated copyright notice.
+
+ * docs/html/downloads.html, docs/html/index.html:
+ Changed the DISCLAIMER parts in the files, in order to clarify the licensing
+ of the code.
+
+2005-05-19 mantoniotti <mantoniotti@vault>
+
+ * COPYING: Updated copyright notice.
+
+ * docs/html/downloads.html, docs/html/index.html:
+ Changed the DISCLAIMER parts in the files, in order to clarify the licensing
+ of the code.
+
+2005-04-27 mantoniotti <mantoniotti@vault>
+
+ * docs/html/control-flow.html: Fixed factorial example.
+
+ * match-block.lisp:
+ Added IGNORABLE declaration to MATCH macro expansion.
+ This is useful in quieting various compilers.
+
+ * match-block.lisp: Added acknowledgement to Peter Scott.
+
+ * match-block.lisp: Fixed bug in condition signaling within MATCH-CASE.
+
+ * templates-hierarchy.lisp:
+ Fixed bugs in COLLECT-TEMPLATE-VARS for NUMBER-TEMPLATEs.
+ If a variable was present, then the method was not returning a list.
+ The treatment of constants like PI was also incorrect, as the numeric
+ value was returned. Retunrning () seems the right thing to do
+ instead.
+
+ * match-block.lisp:
+ Added MATCH-CASE macro. Slightly modified from the version provided
+ by Peter Scott.
+
+ * unification.asd: Added unification.asd file.
+
+2005-04-21 mantoniotti <mantoniotti@vault>
+
+ * docs/html/links.html: Fixed, but not completed, the page.
+
+2005-01-28 mantoniotti <mantoniotti@vault>
+
+ * docs/html/downloads.html: Added file `downloads.html'.
+
+ * docs/html/index.html:
+ Minor changes to text. Fixed `download.html' link.
+
+ * lambda-list-parsing.lisp, unifier.lisp:
+ Fixed minor problem in Lambda List parsing.
+ Also VALID-TEMPLATE-P was expanded, and it looks like it should become
+ a generic function.
+
+2004-11-17 mantoniotti <mantoniotti@vault>
+
+ * docs/html/images/unif-templ-hier.pcl, docs/html/images/unif-templ-hier.ps:
+ Initial import.
+
+ * docs/html/images/unif-templ-hier.pcl, docs/html/images/unif-templ-hier.ps:
+ New file.
+
+ * docs/html/images/Thumbs.db, docs/html/images/Thumbs.db:encryptable, docs/html/images/header_bg.gif, docs/html/images/header_bg_1.gif, docs/html/images/shim.gif, docs/html/images/unif-templ-hier.gif, docs/html/images/unif-templ-hier.pdf, docs/html/images/unif-templ-hier.sxd, docs/html/make-shared-environment-function.html, docs/html/match-case-macro.html, docs/html/standard-object-template-class.html, docs/html/string-template-class.html, docs/html/structure-object-template-class.html, docs/html/subseq-template-class.html:
+ Initial import.
+
+ * docs/html/images/Thumbs.db, docs/html/images/Thumbs.db:encryptable, docs/html/images/header_bg.gif, docs/html/images/header_bg_1.gif, docs/html/images/shim.gif, docs/html/images/unif-templ-hier.gif, docs/html/images/unif-templ-hier.pdf, docs/html/images/unif-templ-hier.sxd, docs/html/make-shared-environment-function.html, docs/html/match-case-macro.html, docs/html/standard-object-template-class.html, docs/html/string-template-class.html, docs/html/structure-object-template-class.html, docs/html/subseq-template-class.html:
+ New file.
+
+ * docs/html/.DS_Store, docs/html/aref-template-class.html, docs/html/array-template-class.html, docs/html/control-flow.html, docs/html/dictionary.html, docs/html/element-template-class.html, docs/html/elt-template-class.html, docs/html/expression-template-class.html, docs/html/find-variable-value-function.html, docs/html/hash-t-read-macro.html, docs/html/index.html, docs/html/links.html, docs/html/list-template-class.html, docs/html/main.css, docs/html/make-empty-environment-function.html, docs/html/match-macro.html, docs/html/matching-macro.html, docs/html/nil-template-class.html, docs/html/nth-template-class.html, docs/html/nthcdr-template-class.html, docs/html/number-template-class.html, docs/html/sequence-template-class.html, docs/html/symbol-template-class.html, docs/html/template-class.html, docs/html/template-p-function.html, docs/html/template-spec-accessor.html, docs/html/templates.html, docs/html/type-template-class.html, docs/html/unification-dictionary.html, docs/html/unify-function.html, docs/html/unify-package.html, docs/html/unifying-substitutions.html, docs/html/usci-variable.html, docs/html/vector-template-class.html, unification-package.lisp, unification.system, unifier.lisp, variables.lisp:
+ Initial import.
+
+ * docs/html/.DS_Store, docs/html/aref-template-class.html, docs/html/array-template-class.html, docs/html/control-flow.html, docs/html/dictionary.html, docs/html/element-template-class.html, docs/html/elt-template-class.html, docs/html/expression-template-class.html, docs/html/find-variable-value-function.html, docs/html/hash-t-read-macro.html, docs/html/index.html, docs/html/links.html, docs/html/list-template-class.html, docs/html/main.css, docs/html/make-empty-environment-function.html, docs/html/match-macro.html, docs/html/matching-macro.html, docs/html/nil-template-class.html, docs/html/nth-template-class.html, docs/html/nthcdr-template-class.html, docs/html/number-template-class.html, docs/html/sequence-template-class.html, docs/html/symbol-template-class.html, docs/html/template-class.html, docs/html/template-p-function.html, docs/html/template-spec-accessor.html, docs/html/templates.html, docs/html/type-template-class.html, docs/html/unification-dictionary.html, docs/html/unify-function.html, docs/html/unify-package.html, docs/html/unifying-substitutions.html, docs/html/usci-variable.html, docs/html/vector-template-class.html, unification-package.lisp, unification.system, unifier.lisp, variables.lisp:
+ New file.
+
+ * COPYING, INSTALLATION, README, lambda-list-parsing.lisp, match-block.lisp, substitutions.lisp, templates-hierarchy-saved.lisp, templates-hierarchy.lisp:
+ Initial import.
+
+ * COPYING, INSTALLATION, README, lambda-list-parsing.lisp, match-block.lisp, substitutions.lisp, templates-hierarchy-saved.lisp, templates-hierarchy.lisp:
+ New file.
+
addfile ./INSTALLATION
hunk ./INSTALLATION 1
+CL-UNIFICATION INSTALLATION
+
+The package comes with a MK:DEFSYSTEM definition:
+"unification.system".
+
+Issuing
+
+ (mk:load-system "unification")
+
+or
+
+ (mk:compile-system "unification")
+
+will make the UNIFY package available.
+
+If your CL implementation is ASDF-INSTALL aware, you should also be
+able to just say
+
+ (asdf-install:install "unification")
+
+provided that the package is unpacked in an ASDF-INSTALL known
+directory.
+
+Enjoy
addfile ./README
hunk ./README 1
+CL-UNIFICATION
+
+Marco Antoniotti 2004
+
+The directory containing this file you are reading should contain the
+code and the documentation of the CL-UNIFICATION package.
+
+The package is a full-blown library to "unify" arbitrary CL objects
+while constructing bindings for placeholders (unification variables)
+in a "template" sublanguage.
+
+Enjoy.
addfile ./apply-substitution.lisp
hunk ./apply-substitution.lisp 1
+;;; -*- Mode: Lisp -*-
+
+;;; substitutions.lisp
+;;; General CL structures unifier.
+;;; Substitution definitions.
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+;;;---------------------------------------------------------------------------
+;;; Substitution application.
+
+;;; apply-substitution --
+;;;
+;;; EXCLUDE-VARS are variables that will just pass through (a list for
+;;; the time being).
+
+(defgeneric apply-substitution (substitution item &optional exclude-vars))
+
+
+(defmethod apply-substitution ((s environment) (n number) &optional exclude-vars)
+ (declare (ignore exclude-vars))
+ n)
+
+
+(defmethod apply-substitution ((substitution environment) (s symbol)
+ &optional (exclude-vars ()))
+ (declare (type list exclude-vars))
+ (cond ((variable-any-p s) s)
+ ((variablep s)
+ (if (member s exclude-vars :test #'eq)
+ s
+ (multiple-value-bind (val foundp)
+ (find-variable-value s substitution)
+ (cond (foundp (apply-substitution substitution val exclude-vars))
+ (t (warn "~S is a free variable in the current environment."
+ s)
+ s))))
+ )
+ (t s)))
+
+
+(defmethod apply-substitution ((substitution environment) (l cons)
+ &optional (exclude-vars ()))
+ (declare (type list exclude-vars))
+ (cons (apply-substitution substitution (first l) exclude-vars)
+ (apply-substitution substitution (rest l) exclude-vars)))
+
+
+(defmethod apply-substitution ((substitution environment) (l null)
+ &optional exclude-vars)
+ (declare (ignore exclude-vars))
+ '())
+
+
+;;; compose-substitions --
+;;; The definition is a direct translation of TPL's definition at page 318.
+;;; Usually these are done by directly composing and currying
+;;; functions in ML/Haskell derivatives, but that is just being "lazy".
+;;; The current definition may be too "eager", but the "correct"
+;;; semantics should be preserved.
+
+(defun compose-substitutions (env2 env1) ; note the order.
+ (declare (type environment env2 env1))
+
+ (loop for env1-frame in (environment-frames env1)
+ collect
+ (loop for (var . term) in (frame-bindings env1-frame)
+ collect (make-binding var (apply-substitution env2 term))
+ into result-bindings
+ finally (return (make-frame result-bindings)))
+ into frames
+ finally (return (make-environment :frames frames))))
+ [_$_]
+ [_$_]
+
+
+;;; ground-term --
+
+(defun ground-term (term &optional (substitution (make-empty-environment)))
+ (apply-substitution substitution term))
+
+
+;;; end of file -- apply-substitutions.lisp --
addfile ./cl-unification-lib.asd
hunk ./cl-unification-lib.asd 1
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-unification-lib.asd --
+;;;; ASDF system file.
+
+(asdf:defsystem :cl-unification-lib
+ :author "Marco Antoniotti"
+ :components ((:module "lib-dependent"
+ :components ((:file "cl-ppcre-template"))))
+ :depends-on (cl-ppcre cl-unification))
+
+;;;; end of file -- cl-unification-lib.asd --
addfile ./cl-unification.asd
hunk ./cl-unification.asd 1
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-unification.asd --
+;;;; ASDF system file.
+
+;;;;===========================================================================
+;;;; Simple stuff that should be built in ASDF.
+
+(defpackage "CL-UNIFICATION-SYSTEM" (:use "CL" "ASDF"))
+
+(in-package "CL-UNIFICATION-SYSTEM")
+
+(defclass asdf-system-definition-file (asdf:cl-source-file) ())
+(defmethod source-file-type ((c asdf-system-definition-file) (s module)) "asd")
+
+
+(asdf:defsystem :cl-unification
+ :author "Marco Antoniotti"
+ :serial t
+ :components ((:file "unification-package")
+ (:file "variables")
+ (:file "substitutions")
+ (:file "lambda-list-parsing")
+ (:file "templates-hierarchy")
+ (:file "unifier")
+ (:file "match-block")
+ (:file "apply-substitution")
+ #+asdf-with-optional-dependencies
+ (:module "lib-dependent"
+ :pathname "lib-dependent"
+ :depends-on ("templates-hierarchy" "unifier")
+ :components ((:file "cl-ppcre-template"
+ :depends-on (cl-ppcre))
+ ))
+ #-asdf-with-optional-dependencies
+ (asdf-system-definition-file
+ "cl-unification-lib")
+ ))
+
+;;;; end of file -- cl-unification.asd --
addfile ./cl-unification.system
hunk ./cl-unification.system 1
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-unification.system --
+;;;; MK:DEFSYSTEM system file.
+
+(mk:defsystem "CL-UNIFICATION"
+ :source-extension "lisp"
+ :components ("unification-package"
+ "variables"
+ "substitutions"
+ "lambda-list-parsing"
+ "templates-hierarchy"
+ "unifier"
+ "match-block"
+ "apply-substitution"
+ (:module "lib-dependent"
+ :depends-on ("templates-hierarchy" "unifier")
+ :components ((:subsystem "cl-ppcre-template"
+ :non-required-p t
+ )
+ ))
+ ))
+ [_$_]
+;;; end of file -- cl-unification.system --
adddir ./docs
adddir ./docs/html
addfile ./docs/html/aref-template-class.html
hunk ./docs/html/aref-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class AREF-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class AREF-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>AREF-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ AREF-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The AREF-TEMPLATE class denotes those object that are used
+ to unify against a particular element of an ARRAY.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>aref</b> (<i>index1</i> ... <i>indexN</i>) <i>item</i>)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<b>aref</b> <i>index</i> <i>item</i>)
+ </pre>
+ </p>
+
+ <p>The AREF-TEMPLATE syntax denotes the <i>item</i> at
+ <i>index1</i> ... <i>indexN</i> of an ARRAY. An AREF-TEMPLATE must
+ be unified against a ARRAY object. <i>item</i> is <em>unified</em>
+ against the element extracted from the sequence object at
+ <i>index1</i> ... <i>indexN</i> by the standard function AREF.</p>
+
+ <p>The second form is a shorthand.</p>
+ <p>
+ <pre>
+ #T(<b>aref</b> <i>index</i> <i>item</i>) <==> #T(<b>aref</b> (<i>index</i>) <i>item</i>)
+ </pre>
+ </p>
+ [_$_]
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>aref</b> 2 ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>aref</b> 42 ?x)))
+ --> Error: index 42 out of bounds.
+
+
+ cl-prompt> (setq e (unify 42 #T(<b>aref</b> 42 ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+
+ cl-prompt> (setq e (unify "This is a string!" #T(<b>aref</b> 4 ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ #\Space [_$_]
+
+
+ cl-prompt> (setq e (unify #2A((1 0) (foo bar)) #T(<b>aref</b> (1 1) ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ BAR
+
+
+ cl-prompt> (setq e (unify #2A((1 0) (foo bar)) #T(<b>aref</b> (1 1) baz)))
+ --> Error: UNIFICATION-FAILURE
+
+
+ cl-prompt> (setq e (unify #2A((1 0) (foo ?x)) #T(<b>aref</b> (1 1) baz)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ BAZ
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an AREF-TEMPLATE against a non-ARRAY object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/array-template-class.html
hunk ./docs/html/array-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class ARRAY-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class ARRAY-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>ARRAY-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ ARRAY-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ VECTOR-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The ARRAY-TEMPLATE class denotes those object that are used
+ to unify against an ARRAY.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>array</b> <i>&lt;shape-template&gt;</i>)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<i>&lt;<strong>CL</strong> array type specifier&gt;</i> <i>&lt;shape-template&gt;</i>)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<b>array</b> ([* | <i>&lt;<strong>CL</strong> type specifier&gt;</i>] [<i>&lt;dimension sped&gt;</i>]) <i>&lt;shape-template&gt;</i>)
+ </pre>
+ </p>
+
+ <p>Where <i>&lt;shape-template&gt;</i> can be:</p>
+
+ <p>
+ <pre>
+ <i>&lt;shape-template&gt;</i> ::= <i>&lt;sequence-template&gt;</i>
+ | <i>&lt;destructuring template lambda list&gt;</i>
+ | (<i>&lt;shape-template&gt;</i>)
+ </pre>
+ </p>
+ [_$_]
+
+ <p>The ARRAY-TEMPLATE syntax denotes an ARRAY object. An
+ ARRAY-TEMPLATE must be unified against an ARRAY object. The elements
+ of the array must be unified against the
+ <i>&lt;shape-template&gt;</i>. Each row of the array is unified
+ recursively against each element of the <i>&lt;shape-template&gt;</i>.
+
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>array</b> (0 1 ?x 3 4 5))))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>array</b> (0 1 "FOO" 3 4 5))))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify #2A((0 1 42) (3 4 5)) #T(<b>array</b> ((0 1 ?x) (3 4 5)))))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #2A(("foo" "bar" 42) (3 4 5)) #T(<b>array</b> ((_ _ ?x) (3 4 5)))))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #2A(("foo" "bar" 42) (3 4 5)) #T(<b>array</b> (#T(vector _ &rest ?x) (3 4 5)))))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ #("bar" 42)
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an ARRAY-TEMPLATE against a non-ARRAY object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <h3>Syntax Note</h3>
+
+ <p>The ARRAY-TEMPLATE syntax tries to be easy to use, at the cost of
+ being overloaded. There is no actual need to have the separate
+ forms <code>(<b>array</b> (fixnum) ...)</code> and
+ <code>((<b>array</b> fixnum) ...)</code>.</p>
+
+ <p>In a future release they may be conflated. For the time being
+ they are kept separate as it is unclear which would be better to
+ provide.</p>
+
+ <h3>Elements Unification</h3>
+
+ <p>It would be nice to have the possibility to unify against
+ <em>slices</em> of the array. Alas, this seems non trivial to get
+ right, and it is left as a future extension of the semantics of
+ <i>&lt;shape-template&gt;</i>.</p>
+
+ <h3>ARRAY Structural Properties</h3>
+
+ <p>There is no way to "unify" against structural properties of
+ vectors like fill pointers and displacements.</p>
+
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/control-flow.html
hunk ./docs/html/control-flow.html 1
+<html>
+ <head>
+ <title>CL Control Flow</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: CONTROL FLOW</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link-selected">Home</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Control Flow</h1>
+
+ <p>In order to make the use of the UNIFICATION library easier, a few
+ utility macros are provided. The macros MATCH, MATCHING, and
+ MATCH-CASE can be used to unify two (or more) objects and then to
+ build a lexical environment where the variables present in the to
+ objects (or templates) are bound to the values resulting from the
+ application of UNIFY.</p>
+
+ <p>
+ <ul>
+ <li>MATCH is a "single shot" macro. It does one unification and
+ executes forms in an appropriate lexical environment.</li>
+
+ <li>MATCH-CASE is equivalent to CASE. It tries to match a single
+ object (or template) against a set of clauses. The forms associated
+ to the first clause for which there is a successful unification, are
+ then executed within an appropriate lexical environment.
+
+ <li>MATCHING is equivalent to COND. Each clause contains a
+ <em>head</em consisting of two objects to be unified. The first
+ clause whose head unifies sucessfully has its associated forms
+ executed within an appropriate lexical environment.
+ </ul>
+ </p>
+
+
+ <h1>Examples</h1>
+
+ <p>These macros allow the construction of interesting <em>pattern
+ matching</em> like code.</p>
+
+ <p>
+ <pre>
+ (defun factorial (x)
+ (<b>match-case</b> (x)
+ (0 1)
+ (#T(number ?n) (factorial (1- ?n)))
+ (otherwise (error "Incorrect match for ~S." x))))
+ </pre>
+ </p>
+
+ <p>Or consider the more interesting piece of code from a not-so
+ hypothetical Red-Black tree implementation (<em>cfr.</em>&nbsp;[<a
+ href="#O98">O98</a>].) The function BALANCE is the key part of the
+ rebalancing act played by Red-Black trees.</p>
+
+ <p>
+ <pre>
+ (defstruct (tree-node (:conc-name tn-)
+ (:constructor mk-tn (color left elem right)))
+ color
+ left
+ elem
+ right)
+
+ (defun balance (&rest balancing-arguments)
+ (<b>match-case</b> (balancing-arguments)
+ ((:black #T(tree-node tn-color :red
+ tn-left #T(tree-node tn-color :red
+ tn-left ?a
+ tn-elem ?x
+ tn-right ?b)
+ tn-elem ?y
+ tn-right ?c)
+ ?z
+ ?d)
+ (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
+ ((:black #T(tree-node tn-color :red
+ tn-left ?a
+ tn-elem ?x
+ tn-right #T(tree-node tn-color :red
+ tn-left ?b
+ tn-elem ?y
+ tn-right ?c))
+ ?z
+ ?d)
+ (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
+ ((:black ?a
+ ?x
+ #T(tree-node tn-color :red
+ tn-left #T(tree-node tn-color :red
+ tn-left ?b
+ tn-elem ?y
+ tn-right ?c)
+ tn-elem ?z
+ tn-right ?d))
+ (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
+ ((:black ?a
+ ?x
+ #T(tree-node tn-color :red
+ tn-left ?b
+ tn-elem ?y
+ tn-left #T(tree-node tn-color :red
+ tn-left ?c
+ tn-elem ?z
+ tn-right ?d)))
+ (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
+ ((?color ?left ?elem ?right)
+ (mk-tn ?color ?left ?elem ?right))))
+ </pre>
+ </p>
+
+ <p>This version of BALANCE is more verbose than the one given in [<a
+ href="#O98">O98</a>], but it preserves the general elegance of the
+ ML implementation.</p>
+
+
+
+ <h1>Control Flow Dictionary</h1>
+
+ <ul>
+ <li><a href="match-macro.html"><i>Macro</i> <b>MATCH</b></a>
+ <li><a href="matching-macro.html"><i>Macro</i> <b>MATCHING</b></a>
+ <li><a href="match-case-macro.html"><i>Macro</i> <b>MATCH-CASE</b></a>
+ </ul>
+ [_$_]
+
+
+ <h1>Notes</h1>
+
+ <h2>Other Forms</h2>
+
+ <p>It would be obvious to add the macros EMATCH-CASE and
+ CMATCH-CASE, for symmetry with ECASE and CCASE. Also, MATCHING
+ could be renamed to MATCH-COND.</p>
+
+
+ <h2>Current Implementation Details</h2>
+
+ <p>The current implementations of MATCHING and MATCH-CASE do not
+ handle user supplied environments yet.</p>
+
+
+ <h2>References</h2>
+
+ <p>
+ <a name="O98">[O98]</a> C. Okasaki, <i>Purely Functional Data
+ Structures</i>, Cambridge University Press, 1998.
+
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Document created
+ </li>
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/dictionary.html
hunk ./docs/html/dictionary.html 1
+<html>
+ <head>
+ <title>CL Unification Dictionary</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION Dictionary</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="index.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Common Lisp Extensions: UNIFICATION Dictionary</h1>
+
+ <p>The notion of <em>unification</em> originated in the field of
+ formal logic (e.g. Robinson, 1956) and has been used extensively in
+ Computer Science and Programming Languages. <strong>Prolog</strong>
+ obviously uses the full power of unification, however, unification
+ is also at the core of <em>type checking</em> algorithms in the
+ tradition of Milner's, and a limited form - <em>pattern
+ matching</em> - is available to the user in languages of the ML and
+ Haskell family.</p>
+
+ <p>The library presented in these pages provides a full blown
+ <em>unification framework</em> for <strong>Common Lisp</strong>.</p>
+
+ <p>Writing a pattern matcher or a an unifier in <strong>Common
+ Lisp</strong> is easy, as long as we limit ourselves to manipulate
+ only ATOMs and CONSes.</p>
+
+ <p>Alas, it would be much nicer if we could manipulated arbitrary
+ <strong>Common Lisp</strong> objects as the ML programmer can with
+ arbitrary ML objects.<p>
+
+ <p>The library presented here is the first one (to the best of the
+ author's knowledge) that is capable of manipulating arbitrary
+ <strong>Common Lisp</strong> objects.</p>
+
+ <p>The hope is that this library could be incorporated directly in
+ an implementation in order to provide better type checking.</p>
+
+ <p>This should not come as a surprise, as a compiler like CMUCL does
+ include a type inference engine, which does very similar things.</p>
+
+ <h2>Unification Basics</h2>
+ [_$_]
+ <p>The unification process makes sure that two <em>object
+ descriptions</em> containing some <em>holes</em>
+ - i.e. <em>variables</em> - can be made equal (almost in the EQUALP
+ sense) by assigning <em>consistent</em> values to the variables
+ involved.</p>
+
+ <p>Suppose we had a function U performing unification and returning
+ a set of <em>variable assignments</em>, often called a
+ <em>substitution</em>. A very simple [_$_]
+ example involving the unification of two numbers could be
+ <pre>
+ <b>U</b>(42, 42) ==> {}
+ </pre>
+ The two numbers are EQL, so no variable is involved and the empty
+ substitution is returned.
+ <pre>
+ <b>U</b>(42, 123) ==> &lt;unification failure&gt;
+ </pre>
+ The two numbers are not EQL, so the unification fails.
+ <pre>
+ <b>U</b>(42, x) ==> {x -> 42}
+ </pre>
+ The only way to make the unification process to succeed is to bind
+ the value 42 to the variable <code>x</code>.</p>
+
+ <p>The UNIFICATION library defines all the necessary functions and a
+ <em>unification sub-language</em> to handle most of <strong>Common
+ Lisp</strong>.</p>
+
+ <h2>UNIFICATION Library</h2>
+
+ <p>The UNIFICATION library has one main entry point, the generic function
+ UNIFY, and a sub-language definition that allows us to talk about
+ <strong>Common Lisp</strong> objects.</p>
+
+ <p>The UNIFY generic function has the following signature:
+ <pre>
+ <b>unify</b> <i>x</i> <i>y</i> &amp;optional <i>substitution</i>
+ </pre>
+ Where <code><i>x</i></code> and <code><i>y</i></code> are either
+ arbitrary <strong>Common Lisp</strong> objects, <em>variables</em>,
+ or <em>object templates</em>. These items constitute the so-called
+ <em>extended terms</em> manipulated by the unification
+ machinery.</p>
+
+ <p><em>Variables</em> are symbols with a <code>#\?</code> as the
+ first character of the name. This is a rather traditional choice,
+ although a different one based on quoted symbols is possible.
+ Therefore, the following are examples of variables.
+ <pre>
+ ?A ?s ?qwe ?42z ?a-variable-with-a-very-long-name ?_
+ </pre>
+ There are two special variables, <code>?_</code> and <code>_</code>,
+ which are used as anonymous place holders, they match anything, but
+ never appear in a substitution.</p>
+
+ <p>Hence, the above examples result in the following
+ <pre>
+ cl-prompt&gt; (<b>unify</b> 42 42)
+ <i>#&lt;EMPTY ENVIRONMENT xxxxxx&gt;</i>
+ </pre>
+
+ <pre>
+ cl-prompt&gt; (<b>unify</b> 42 123)
+ ==> error: unification failure
+ </pre>
+
+ <pre>
+ cl-prompt&gt; (<b>unify</b> 42 ?x)
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?x *)
+ <i>42</i>
+ </pre>
+ </p>
+ Where FIND-VARIABLE-VALUE is the accessor used to find the value of
+ a variable in a substitution.</p>
+
+ <p>As a more complicated example, consider the usual CONS based
+ unification
+ <pre>
+ cl-prompt&gt; (<b>unify</b> '(foo (bar frobboz) ?baz) '(foo ?gnao 42))
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?gnao *)
+ <i>(BAR FROBBOZ)</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?baz **)
+ <i>42</i>
+ </pre>
+
+ <p>Of course note the following behavior
+ <pre>
+ cl-prompt&gt; (<b>unify</b> '(foo ?x 42) '(foo 42 ?x))
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>unify</b> '(foo ?x 42) '(foo baz ?x))
+ ==> error: unification failure
+ </pre>
+ </p>
+ [_$_]
+
+ <p>UNIFY works also on arrays and vectors. Strings are treated as
+ atomic objects
+ <pre>
+ cl-prompt&gt; (<b>unify</b> #(1 2 3) #(1 ?x ?y))
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?x *)
+ <i>2</i>
+ </pre>
+
+ <pre>
+ cl-prompt&gt; (<b>unify</b> #2A((1 2 3) (a s ?z)) #2A((1 ?x ?y) (a s d)))
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?z *)
+ <i>D</i>
+ </pre>
+ </p>
+
+ <p>So far so good, but how can you unify two structures? First of
+ all there is no portable way (yet) to list all the slots of a given
+ structure. Secondly, by allowing the unification of arbitrary
+ CONSes, we have created a short-circuit in the unification
+ machinery.</p>
+
+ <p>Dealing with object instances raises similar problems.</p>
+
+ <p>Suppose we have the following definition
+ <pre>
+ (defstruct foo a s d)
+ </pre>
+ The straighforward
+ <pre>
+ (<b>unify</b> #S(FOO A 42 S NIL D NIL) (make-foo :a 42))
+ </pre>
+ cannot be built portably, besides, we do not even have the equivalent of the
+ <code>#S(...)</code> notation for regular CLOS objects. Moreover we want
+ to do other things with other data types.</p>
+
+ <p>A simple solution is to define a <em>template sub-language</em>
+ to express unifications between structure objects or standard
+ objects (and other data types as well.) Nevertheless, the
+ definition of such sub-language cannot be CONS based, because in
+ such case, we would conflate arbitrary CONSes and the expressions of
+ the sub-language.</p>
+
+ <p>To circumvent this problem we resort to the usual trick a ML
+ programmer uses to placate the type-checker: we introduce an
+ "intermediate" data type. Essentially the following
+ <pre>
+ (defclass <b>template</b> ()
+ ((spec :accessor template-spec :type (or cons symbol number) ...)))
+ </pre>
+ </p>
+
+ <p>The TEMPLATE class is accompanied by a reader macro
+ (<code>#T</code> for <em>template</em>, or <em>type</em>, with an
+ abuse of language) and an
+ appropriate PRINT-OBJECT method. The <code>#T</code> reader macro
+ expands as
+ <pre>
+ <b>#T</b><i>something</i> ==> (make-instance 'template :spec <i>something</i>)
+ </pre>
+ With this infrastructure we can
+ express the unification of the FOO instance as
+ <pre>
+ (<b>unify</b> #(FOO A 42 S NIL D NIL) <b>#T(foo foo-a 42)</b>)
+ </pre>
+ I.e. we use the actual structure accessor FOO-A to get to the the
+ value of the slot A in a FOO. This is an example of the template
+ language.</p>
+
+ <p>A more interesting example, which involves vectors is the
+ following
+ <pre>
+ cl-prompt> (<b>unify</b> #(1 2 3 4 5) <b>#T(vector 1 ?x &amp;rest ?rest)</b>) ; You get the idea...
+ <i>#&lt;ENVIRONMENT xxxxxxx&gt;</i>
+
+ cl-prompt> (<b>find-variable-value</b> '?rest *)
+ <i>#(3 4 5)</i>
+ </pre>
+ I.e. we have a DESTRUCTURING-BIND on steroids.<p>
+
+ <p>Note that separataing the templates is necessary if we want to do
+ something like
+ <pre>
+ cl-prompt> (<b>unify</b> '(1 2 3 4 5) <b>#T(list 1 ?x &amp;rest ?rest)</b>)
+ <i>#&lt;ENVIRONMENT xxxxxxx&gt;</i>
+
+ cl-prompt> (<b>find-variable-value</b> '?rest *)
+ <i>(3 4 5)</i>
+ </pre>
+ Without the template denoted by <code>#T(list ...)</code> the
+ unifier would have been utterly confused.</p>
+
+ <p>In the following the full extent of the UNIFICATION facility is
+ described in its main components.
+ </p>
+
+
+ <h2><a href="substitutions.html">Unifying Substitutions</a></h2>
+
+ <h2><a href="templates.html">The Template Sub-language</a></h2>
+
+ <h2><a href="templates.html">Control Flow</a></h2>
+
+ <h2><a href="unification-dictionary.html">The UNIFICATION Dictionary</a></h2>
+ [_$_]
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-05-05</strong><br>
+ Started the site.
+ </li>
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/downloads.html
hunk ./docs/html/downloads.html 1
+<html>
+ <head>
+ <title>CL Unification Download Page</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="downloads.html" class="navigation-link-selected">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;<div class="sidebar"></div></td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>CL-UNIFICATION Download Page</h1>
+
+
+ <hr>
+ <em>
+ <p>
+ <b>DISCLAIMER:</b> The code associated to these documents is not
+ completely tested and it is bound to contain errors and omissions.
+ This documentation may contain errors and omissions as well.</p>
+
+ <p>The file <tt>COPYING</tt> contains a Berkeley-style license. You
+ are advised to use the code at your own risk. No warranty
+ whatsoever is provided, the author will not be held responsible for
+ any effect generated by your use of the library, and you can put
+ here the scarier extra disclaimer you can think of.
+ </p>
+ </em>
+ <hr>
+
+
+ <h2>Download and CVS Repository</h2>
+
+ <p>The CVS repository is <a href="http://common-lisp.net/cgi-bin/viewcvs.cgi/cl-unification/?cvsroot=cl-unification">here</a>. You can download a tarball directly from there.</p>
+
+
+
+
+
+ [_$_]
+
+<!--
+;;; Copyright (c) 2004-2005 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2005-01-28</strong><br>
+ Updated.
+ <li><strong>2004-05-05</strong><br>
+ Started the site.
+ </li>
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/element-template-class.html
hunk ./docs/html/element-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class ELEMENT-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class ELEMENT-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>ELEMENT-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ AREF-TEMPLATE, ELT-TEMPLATE, NTH-TEMPLATE, NTHCDR-TEMPLATE
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The ELEMENT-TEMPLATE class denotes those object that are used
+ to unify against a particular element of an ARRAY or a SEQUENCE.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/elt-template-class.html
hunk ./docs/html/elt-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class ELT-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class ELT-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>ELT-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ ELT-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The ELT-TEMPLATE class denotes those object that are used
+ to unify against a particular element of a SEQUENCE.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>elt</b> <i>index</i> <i>item</i>)
+ </pre>
+ </p>
+
+ <p>The ELT-TEMPLATE syntax denotes the element of <i>item</i> at
+ <i>index</i>. An ELT-TEMPLATE must be unified against a SEQUENCE
+ object. <i>item</i> is <em>unified</em> against the element
+ extracted from the sequence object at <i>index</i> by the standard
+ function ELT.<p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>elt</b> 2 ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>elt</b> 42 ?x)))
+ --> Error: index 42 out of bounds.
+
+
+ cl-prompt> (setq e (unify 42 #T(<b>elt</b> 42 ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+
+ cl-prompt> (setq e (unify "This is a string!" #T(<b>elt</b> 4 ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ #\Space [_$_]
+ </pre>
+ </p>
+
+
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an ELT-TEMPLATE against a non-SEQUENCE object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/expression-template-class.html
hunk ./docs/html/expression-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class EXPRESSION-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class EXPRESSION-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>EXPRESSION-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ ELT-TEMPLATE, SUBSEQ-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The EXPRESSION-TEMPLATE class is the root of the <em>expression template</em> sub-hierarchy.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/find-variable-value-function.html
hunk ./docs/html/find-variable-value-function.html 1
+<html>
+ <head>
+ <title>CL Unification: Function FIND-VARIABLE-VALUE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Function FIND-VARIABLE-VALUE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Function</i> <strong>FIND-VARIABLE-VALUE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>find-variable-value</b> <i>variable-name</i> &amp;optional <i>env</i> <i>errorp</i>
+ => <i>value</i>, <i>found</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>variable-name</code></i>---a <i>symbol</i> denoting a <em>unification variable</em></p>
+ <p><i><code>env</code></i>---an <i>unification-environment</i></p>
+ <p><i><code>value</code></i>---an <i>object</i></p>
+ <p><i><code>found</code></i>---a <i>boolean</i></p>
+
+
+
+ <h2>Description:</h2>
+
+ <p>The function FIND-VARIABLE-VALUE searches the environment
+ <i>env</i> for the <i>value</i> associated to the unification variable
+ <i>variable-name</i>.<p>
+
+ <p>If there is a <i>value</i> associated to <i>variable-name</i> in
+ <i>env</i>, then it is returned; <i>found</i>, the second return
+ value, is T.
+
+ <p>If no value is associated to <i>variable-name</i> then
+ FIND-VARIABLE-NAME signals an error of type
+ UNIFICATION-VARIABLE-UNBOUND if <i>errorp</i> is non-NIL (the
+ default.) If <i>errorp</i> is NIL then FIND-VARIABLE-NAME returns
+ the values NIL and NIL.</p>
+
+ <p><i>env</i> defaults to *NULL-ENVIRONMENT*.
+ [_$_]
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY:ENVIRONMENT, BINDING, UNIFICATION-VARIABLE-UNBOUND, *NULL-ENVIRONMENT*</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-09</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/hash-t-read-macro.html
hunk ./docs/html/hash-t-read-macro.html 1
+<html>
+ <head>
+ <title>CL Unification: #T Reader Macro</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Standard Generic Function TEMPLATE-SPEC</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Reader Macro</i> <strong>#T</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>#T</b><i>spec</i>
+ -> <i>template</i>
+ </pre>
+ </p>
+
+
+ <h2>Description:</h2>
+
+ <p><b>#T</b><i>spec</i> expands to <code>(make-template
+ <i>template-kind</i> <i>spec</i>)</code>.
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ <b>#T</b>foo ==> #&lt;SYMBOL-TEMPLATE FOO xxxxxx&gt;
+ </pre>
+ </p>
+
+
+ <p>
+ <pre>
+ <b>#T</b>(vector 1 2 &amp;rest ?x) ==> #&lt;VECTOR-TEMPLATE xxxxx&gt;
+ </pre>
+ </p>
+ [_$_]
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>TEMPLATE, the "Template Sub-language" section.</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-09</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
adddir ./docs/html/images
addfile ./docs/html/images/Thumbs.db:encryptable
addfile ./docs/html/images/header_bg.gif
binary ./docs/html/images/header_bg.gif
addfile ./docs/html/images/header_bg_1.gif
binary ./docs/html/images/header_bg_1.gif
addfile ./docs/html/images/shim.gif
binary ./docs/html/images/shim.gif
addfile ./docs/html/images/unif-templ-hier.gif
binary ./docs/html/images/unif-templ-hier.gif
addfile ./docs/html/images/unif-templ-hier.pcl
hunk ./docs/html/images/unif-templ-hier.pcl 1
-
+[_^[_]%-12345X@PJL JOB
+@PJL SET HOLD=OFF
+@PJL SET RESOLUTION = 600
+@PJL SET BITSPERPIXEL = 2
+@PJL SET ECONOMODE = OFF
+@PJL ENTER LANGUAGE = POSTSCRIPT [_$_]
+%!PS-Adobe-3.0[_^M_][_$_]
+%%Title: Document[_^M_][_$_]
+%%Creator: PScript5.dll Version 5.2.2[_^M_][_$_]
+%%CreationDate: 10/10/2004 14:55:30[_^M_][_$_]
+%%BoundingBox: (atend)[_^M_][_$_]
+%%DocumentNeededResources: (atend)[_^M_][_$_]
+%%DocumentSuppliedResources: (atend)[_^M_][_$_]
+%%DocumentData: Clean7Bit[_^M_][_$_]
+%%TargetDevice: (HP LaserJet 8150 Series) (3010.107) 0[_^M_][_$_]
+%%LanguageLevel: 3[_^M_][_$_]
+%%EndComments[_^M_][_$_]
+[_^M_][_$_]
+%%BeginDefaults[_^M_][_$_]
+%%ViewingOrientation: 1 0 0 1[_^M_][_$_]
+%%EndDefaults[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+%%BeginProlog[_^M_][_$_]
+%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0[_^M_][_$_]
+/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false[_^M_][_$_]
+setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype[_^M_][_$_]
+ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch[_^M_][_$_]
+def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0[_^M_][_$_]
+rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def[_^M_][_$_]
+/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def[_^M_][_$_]
+typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72[_^M_][_$_]
+def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp[_^M_][_$_]
+exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def[_^M_][_$_]
+/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype[_^M_][_$_]
+{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}[_^M_][_$_]
+readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop[_^M_][_$_]
+(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def[_^M_][_$_]
+/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )[_^M_][_$_]
+tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup[_^M_][_$_]
+xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint[_^M_][_$_]
+tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck[_^M_][_$_]
+{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])[_^M_][_$_]
+tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup[_^M_][_$_]
+rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}[_^M_][_$_]
+forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier[_^M_][_$_]
+/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin[_^M_][_$_]
+$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0[_^M_][_$_]
+ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont[_^M_][_$_]
+lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict[_^M_][_$_]
+/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{[_^M_][_$_]
+(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt[_^M_][_$_]
+$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}[_^M_][_$_]
+repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname[_^M_][_$_]
+=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end[_^M_][_$_]
+end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking[_^M_][_$_]
+where{pop/setpacking where{pop oldpack setpacking}if}if[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+userdict /Pscript_WinNT_Incr 230 dict dup begin put[_^M_][_$_]
+%%BeginResource: file Pscript_FatalError 5.0 0[_^M_][_$_]
+userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup[_^M_][_$_]
+length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding[_^M_][_$_]
+{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end[_^M_][_$_]
+/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div[_^M_][_$_]
+cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[[_^M_][_$_]
+(This job requires more memory than is available in this printer.)100 500[_^M_][_$_]
+(Try one or more of the following, and then print again:)100 485[_^M_][_$_]
+(For the output format, choose Optimize For Portability.)115 470[_^M_][_$_]
+(In the Device Settings page, make sure the Available PostScript Memory is accurate.)[_^M_][_$_]
+115 455(Reduce the number of fonts in the document.)115 440[_^M_][_$_]
+(Print the document in parts.)115 425 12/Times-Roman showpage[_^M_][_$_]
+(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end[_^M_][_$_]
+version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse[_^M_][_$_]
+105000 VM?[_^M_][_$_]
+%%BeginResource: file Pscript_Win_Basic 5.0 0[_^M_][_$_]
+/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^[_^M_][_$_]
+/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-[_^M_][_$_]
+/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,[_^M_][_$_]
+d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C[_^M_][_$_]
+/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M[_^M_][_$_]
+/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d[_^M_][_$_]
+/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage[_^M_][_$_]
+, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop[_^M_][_$_]
+languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,[_^M_][_$_]
+d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld[_^M_][_$_]
+/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix[_^M_][_$_]
+currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit[_^M_][_$_]
+counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b[_^M_][_$_]
+/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~[_^M_][_$_]
+d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put[_^M_][_$_]
+/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq[_^M_][_$_]
+{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `[_^M_][_$_]
+/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped[_^M_][_$_]
+{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}[_^M_][_$_]
+{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~[_^M_][_$_]
+itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5[_^M_][_$_]
+ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform[_^M_][_$_]
+nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -[_^M_][_$_]
+neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0[_^M_][_$_]
+- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool[_^M_][_$_]
+2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e[_^M_][_$_]
+{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b[_^M_][_$_]
+/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont[_^M_][_$_]
+{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1[_^M_][_$_]
+dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d[_^M_][_$_]
+E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1[_^M_][_$_]
+^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2[_^M_][_$_]
+16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}[_^M_][_$_]
+bind d[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+%%BeginResource: file Pscript_Win_Utils_L2 5.0 0[_^M_][_$_]
+/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge[_^M_][_$_]
+{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $[_^M_][_$_]
+snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F[_^M_][_$_]
+setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d[_^M_][_$_]
+/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b[_^M_][_$_]
+/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}?[_^M_][_$_]
+not{/ColorRendering<</GetHalftoneName{currenthalftone @/HalftoneName known{[_^M_][_$_]
+/HalftoneName get}{!/none}?}bn/GetPageDeviceName{currentpagedevice @[_^M_][_$_]
+/PageDeviceName known{/PageDeviceName get @ null eq{!/none}if}{!/none}?}bn[_^M_][_$_]
+/GetSubstituteCRD{!/DefaultColorRendering/ColorRendering resourcestatus{! ![_^M_][_$_]
+/DefaultColorRendering}{(DefaultColorRendering*){cvn exit}127 string[_^M_][_$_]
+/ColorRendering resourceforall}?}bn>>/defineresource where{!/ProcSet[_^M_][_$_]
+defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource `[_^M_][_$_]
+mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)[_^M_][_$_]
+GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5[_^M_][_$_]
+-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub[_^M_][_$_]
+getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~[_^M_][_$_]
+/ColorRendering defineresource !}b/findcolorrendering where{!}{[_^M_][_$_]
+/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{[_^M_][_$_]
+/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}?[_^M_][_$_]
+/selectcolorrendering{findcolorrendering !/ColorRendering findresource[_^M_][_$_]
+setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get[_^M_][_$_]
+`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d[_^M_][_$_]
+/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{[_^M_][_$_]
+/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d[_^M_][_$_]
+/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d[_^M_][_$_]
+E}bind d[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+end[_^M_][_$_]
+%%EndProlog[_^M_][_$_]
+[_^M_][_$_]
+%%BeginSetup[_^M_][_$_]
+statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end[_^M_][_$_]
+[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginNonPPDFeature: JobTimeout 0[_^M_][_$_]
+0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse[_^M_][_$_]
+%%EndNonPPDFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginNonPPDFeature: WaitTimeout 120[_^M_][_$_]
+120 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse[_^M_][_$_]
+%%EndNonPPDFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *HPEdgeToEdge True[_^M_][_$_]
+<</EdgeToEdge true>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *HPPaperPolicy PromptUser[_^M_][_$_]
+[_^M_][_$_]
+ <</DeferredMediaSelection true>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *HPHalftone PrinterDefault[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Collate True[_^M_][_$_]
+<</Collate true>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Smoothing True[_^M_][_$_]
+[_^M_][_$_]
+ << /PostRenderingEnhance true /PostRenderingEnhanceDetails << /REValue 2 /Type 8 >>[_^M_][_$_]
+ >> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *PageSize Letter[_^M_][_$_]
+[_^M_][_$_]
+ <</PageSize [612 792] /ImagingBBox null>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *StapleLocation 1parallel[_^M_][_$_]
+[_^M_][_$_]
+ userdict /HPStapleOption {(ONE)} put[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *MediaType None[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *OutputBin Upper[_^M_][_$_]
+<</Staple 0 /OutputType (TOP OUTPUT BIN)>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Duplex DuplexNoTumble[_^M_][_$_]
+[_^M_][_$_]
+ <</Duplex true /Tumble false>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *JRConstraints 0[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *JRHDInstalled JRHDStore[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *JRHDNotInstalled JRHDPrivate[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *HPPrinterModelName HP_LaserJet_8150_Series_PS[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option2 False[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option6 False[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option3 True[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option5 False[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option20 Standard[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option21 MailboxModeMailbox[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *InstalledMemory 32-39MB[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *PrinterHardDisk False[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *JobRetention True[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+1 setlinecap 1 setlinejoin[_^M_][_$_]
+/mysetup [ 72 600 V 0 0 -72 600 V 2.99905 785.99908 ] def [_^M_][_$_]
+%%EndSetup[_^M_][_$_]
+[_^M_][_$_]
+userdict begin /ehsave save def end[_^M_][_$_]
+%%EndPageComments[_^M_][_$_]
+%%BeginPageSetup[_^M_][_$_]
+/DeviceRGB dup setcolorspace /colspABC exch def[_^M_][_$_]
+mysetup concat colspRefresh[_^M_][_$_]
+%%EndPageSetup[_^M_][_$_]
+[_^M_][_$_]
+Pscript_WinNT_Incr begin[_^M_][_$_]
+%%BeginResource: file Pscript_Win_GdiObject 5.0 0[_^M_][_$_]
+/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore[_^M_][_$_]
+{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d[_^M_][_$_]
+/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps[_^M_][_$_]
+L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType[_^M_][_$_]
+1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d[_^M_][_$_]
+/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal[_^M_][_$_]
+{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep[_^M_][_$_]
+gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b[_^M_][_$_]
+/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M[_^M_][_$_]
+MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep[_^M_][_$_]
+M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8[_^M_][_$_]
++}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d[_^M_][_$_]
+/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix[_^M_][_$_]
+GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0[_^M_][_$_]
+/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal[_^M_][_$_]
+makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5[_^M_][_$_]
+/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $[_^M_][_$_]
+/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt[_^M_][_$_]
+~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0[_^M_][_$_]
+0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b[_^M_][_$_]
+/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +[_^M_][_$_]
+: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~[_^M_][_$_]
+XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S[_^M_][_$_]
+GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix[_^M_][_$_]
+currentmatrix readonly d ; ;}if}b[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+%%BeginResource: file Pscript_Win_GdiObject_L3 5.0 0[_^M_][_$_]
+/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 1 d/RepsV 1 d/RepsH 1 d[_^M_][_$_]
+/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d[_^M_][_$_]
+/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d[_^M_][_$_]
+/SetBGndFGnd{BGnd null ne{BGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~[_^M_][_$_]
+rf}if FGnd null ne{FGnd aload ! scol}if}b/PaintProc{` SetBGndFGnd RepsH{Width[_^M_][_$_]
+Height F mx PaintData imagemask Width 0 +}repeat E}b E d/mp/makepattern , d[_^M_][_$_]
+/build_pattern{CTMsave GDIBWPatternMx setmatrix/nupangle where{! nupangle -90[_^M_][_$_]
+eq{nupangle R}if}if GDIBWPatternDict @ ` Width Height ne{Width Height gt{Width[_^M_][_$_]
+Height V 1}{1 Height Width V}? +S}if xOrg yOrg E matrix + mp CTMrestore}b/hbf[_^M_][_$_]
+{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}{L}? ;}b/pbf{: ![_^M_][_$_]
+/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d[_^M_][_$_]
+/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1 d/BBox[0 0[_^M_][_$_]
+Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d 20 dict @ `[_^M_][_$_]
+/ImageType 1 d/Width Width d/Height Height d/ImageMatrix[1 0 0 1 0 0]d[_^M_][_$_]
+/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{[_^M_][_$_]
+/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict[_^M_][_$_]
+~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L}[_^M_][_$_]
+? ;}b/mask_pbf{:/fEOFill ~ d 20 dict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/Height ~[_^M_][_$_]
+d/Width ~ d/PatternType 1 d/PaintType 2 d/TilingType 1 d/BBox[0 0 Width Height][_^M_][_$_]
+d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d/PaintProc{` Width Height[_^M_][_$_]
+T 1 1 dtransform abs ~ abs ~ 0 0 3 -1 $ 0 0 6 array astore{PaintData}imagemask[_^M_][_$_]
+E}b & mx makepattern setpattern E fEOFill{O}{L}? ;}b/grf4{4 dict `/ShadingType[_^M_][_$_]
+4 d/DataSource ~ d/ColorSpace ~ d & E shfill}b[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+end reinitialize[_^M_][_$_]
+/DeviceGray dup setcolorspace /colspABC exch def[_^M_][_$_]
+0 0 scol N 2950 725 M 3113 869 I K [_^M_][_$_]
+N 3113 869 M 3044 831 I 3069 806 I C [_^M_][_$_]
+ O N 2950 725 M 3113 775 I K [_^M_][_$_]
+N 3113 775 M 3038 769 I 3044 738 I C [_^M_][_$_]
+ O N 2950 725 M 3113 681 I K [_^M_][_$_]
+N 3113 681 M 3044 719 I 3038 681 I C [_^M_][_$_]
+ O N 2950 725 M 3113 588 I K [_^M_][_$_]
+N 3113 588 M 3069 650 I 3044 619 I C [_^M_][_$_]
+ O 55017 VM?[_^M_][_$_]
+Pscript_WinNT_Incr begin[_^M_][_$_]
+%%BeginResource: file Pscript_T42Hdr 5.0 0[_^M_][_$_]
+/asc42 0.0 d/sF42{/asc42 ~ d Ji}bind d/bS42{0 asc42 -M}bind d/eS42{0 asc42 neg[_^M_][_$_]
+-M}b/Is2015?{version cvi 2015 ge}bind d/AllocGlyphStorage{Is2015?{!}{{string}[_^M_][_$_]
+forall}?}bind d/Type42DictBegin{25 dict `/FontName ~ d/Encoding ~ d 4 array[_^M_][_$_]
+astore cvx/FontBBox ~ d/PaintType 0 d/FontType 42 d/FontMatrix[1 0 0 1 0 0]d[_^M_][_$_]
+/CharStrings 256 dict `/.notdef 0 d & E d/sfnts}bind d/Type42DictEnd{& @[_^M_][_$_]
+/FontName get ~ definefont ! E}bind d/RDS{string currentfile ~ readstring !}[_^M_][_$_]
+executeonly d/PrepFor2015{Is2015?{/GlyphDirectory 16 dict d sfnts 0 get @ 2 ^[_^M_][_$_]
+(glyx)putinterval 2 ^(locx)putinterval ! !}{! !}?}bind d/AddT42Char{Is2015?[_^M_][_$_]
+{findfont/GlyphDirectory get ` d E ! !}{findfont/sfnts get 4 ^ get 3 ^ 2 ^[_^M_][_$_]
+putinterval ! ! ! !}?}bind d/IDStrNull{1 add 2 mul @ string 0 1 3 ^ 1 sub{1 ^ ~[_^M_][_$_]
+0 put}for ~ !}bind d/IDStr{@ 1 add 2 mul string 0 1 3 ^{1 ^ ~ @ 2 mul ~ 3 copy[_^M_][_$_]
+256 idiv put ~ 1 add ~ 256 mod put}for ~ !}bind d/IDStr2{~ @ 1 add 2 mul string[_^M_][_$_]
+0 1 3 ^{1 ^ ~ @ 2 mul ~ 5 ^ add 3 copy 256 idiv put ~ 1 add ~ 256 mod put}for ~[_^M_][_$_]
+! ~ !}bind d/CIDT42Begin{25 dict `/CDevProc ~ d/CIDMap ~ d/CIDCount ~ d[_^M_][_$_]
+/CIDSystemInfo 3 dict @ ` 3 -1 $/Supplement ~ d 3 -1 $/Ordering ~ d 3 -1 $[_^M_][_$_]
+/Registry ~ d E d/CIDFontName ~ d/Encoding ~ d 4 array astore cvx/FontBBox ~ d[_^M_][_$_]
+/CharStrings 2 dict @ `/.notdef 0 d E d/GDBytes 2 d/CIDFontType 2 d/FontType 42[_^M_][_$_]
+d/PaintType 0 d/FontMatrix[1 0 0 1 0 0]d/Metrics2 16 dict d/sfnts}bind d[_^M_][_$_]
+/CIDT42End{CIDFontName & E/CIDFont defineresource !}bind d/T42CIDCP32K{/CIDFont[_^M_][_$_]
+findresource @ length dict copy @/FID undef `/CIDFontName ~ d/CIDMap ~ d[_^M_][_$_]
+/CIDCount ~ d/Metrics2 8 dict d CIDFontName & E/CIDFont defineresource !}bind d[_^M_][_$_]
+/T42CIDCPR{/CIDFont findresource @ length dict copy @/FID undef `/CIDFontName ~[_^M_][_$_]
+d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec cvx}if/! cvx/! cvx[_^M_][_$_]
+/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^ 0.0 0.0}}? bind[_^M_][_$_]
+readonly/CDevProc ~ d CIDFontName & E/CIDFont defineresource !}bind d[_^M_][_$_]
+/T0AddT42Char{/CIDFont findresource/GlyphDirectory get ` d E ! !}bind d[_^M_][_$_]
+/T0AddT42Mtx2{/CIDFont findresource/Metrics2 get ` d E}bind d/UpdateCIDMap{[_^M_][_$_]
+/CIDFont findresource/CIDMap get 3 1 $ putinterval}d/AddXUID{version cvi 3011[_^M_][_$_]
+ge{/XUID ~ d}{!}?}bind d/hfDef42CID{/CIDFont findresource @ length dict copy @[_^M_][_$_]
+/FID undef `/CIDFontName 2 ^ d @ type @/booleantype ne{/arraytype eq{/CDevProc[_^M_][_$_]
+~ d}{matrix @ 4 4 -1 $ put/FontMatrix ~ d}?}{! !}? & E/CIDFont defineresource[_^M_][_$_]
+!}bind d/hfDefRT42CID{/CIDFont findresource @ length dict copy @/FID undef `[_^M_][_$_]
+/CIDFontName 1 ^ d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec[_^M_][_$_]
+cvx}if/! cvx/! cvx/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^[_^M_][_$_]
+0.0 0.0}}? bind readonly/CDevProc ~ d & E/CIDFont defineresource !}bind d[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+end reinitialize[_^M_][_$_]
+-0.578 -0.207 1.387 0.922[_^M_][_$_]
+ 256 array 0 1 255 {1 index exch /.notdef put} for /TTE1CD9F20t00[_^M_][_$_]
+Type42DictBegin[_^M_][_$_]
+[<00010000000a000a000a000a6376742065146ccc000000ac000002746670[_^M_][_$_]
+676d2bc15a050000032000000768676c79661b44802b000058e80004e222[_^M_][_$_]
+68656164ce8b489100000a8800000036686865610dd60c5100000ac00000[_^M_][_$_]
+0024686d74785d72583900000ae4000023446c6f636116f62ad600002e28[_^M_][_$_]
+000023486d6178700dba0872000051700000002070726570877d61440000[_^M_][_$_]
+5190000007556764697200000000000000000000000005ba0019000005ba[_^M_][_$_]
+001900000000000000000000000000000000000000000425001900000000[_^M_][_$_]
+ffe700000000ffe70000000000000000fe68ffea00000000000000000000[_^M_][_$_]
+0000000002f5ffee05cd000002ddffee02f0000000000000000000000000[_^M_][_$_]
+000000000000000000000000000000000000000000000000000000000000[_^M_][_$_]
+000008000000080000000000000000000000000000000000000000000000[_^M_][_$_]
+00000000000000000000000000d2010e012c01130000000000c8010900c8[_^M_][_$_]
+000000000000000000000000000000890048001bff77ffb8ffe500a4005f[_^M_][_$_]
+000aff5cffa1fff6000000000000000afff6000000000000000000000059[_^M_][_$_]
+ffa700c9000000c3000000c2008300c3000000bd000000bd007900c3006c[_^M_][_$_]
+00bd009100af00000000026f00ae00a6009a0000009b0094008b00cc00ae[_^M_][_$_]
+00a600940000000000ff000001e300000000000000000000000000000000[_^M_][_$_]
+00000000000000000000000000cd00cd006801ee0060008c000000000000[_^M_][_$_]
+0000000000000000000000a800a800a800b900cd00a80052016a0049007d[_^M_][_$_]
+007d0083008a00000071009b00910078000001fc0071ff8f022a006d0094[_^M_][_$_]
+00a0029a030a00b800ae008b018b019101d10391008c00730268027d01b0[_^M_][_$_]
+01dd021c033302a3026b02730152024c0021004c05e704f20098ff6800ac[_^M_][_$_]
+00c500850085005c0054006000b401baff1ffe680000008300bc00940094[_^M_][_$_]
+ff85ffae00520029061400ae00460046fe580560008f076002f20025003e[_^M_][_$_]
+004700500058007300a80160006000950025003e004700500058007300a8[_^M_][_$_]
+01600000002d005000600081009300ba0108ffd3ffaeff9106520060005c[_^M_][_$_]
+00b0012b012b04ba013e018507600016000a004b403f545249483b393837[_^M_][_$_]
+363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a19[_^M_][_$_]
+1817161514131211100f0e0d0c0b0a090807060504030201002c01b01843[_^M_][_$_]
+58456ab0194360b0462344231020b0464ef04d2fb000121b21231133592d[_^M_][_$_]
+2c01b0184358b0052bb000134bb0145058b100403859b0062b1b21231133[_^M_][_$_]
+592d2c01b01843584eb0032510f221b000124d1b2045b00425b00425234a[_^M_][_$_]
+6164b0285258212310d21bb0032510f221b0001259592d2cb01a43582121[_^M_][_$_]
+1bb00225b0022549b00325b003254a612064b01050582121211bb00325b0[_^M_][_$_]
+032549b0005058b0005058b8ffe238211bb0103821591bb0005258b01e38[_^M_][_$_]
+211bb8fff03821595959592d2c01b0184358b0052bb000134bb0145058b9[_^M_][_$_]
+0000ffc03859b0062b1b21231133592d2c4e018a10b146194344b00014b1[_^M_][_$_]
+0046e2b00015b90000fff03800b0003cb0282bb0022510b0003c2d2c0118[_^M_][_$_]
+b0002fb00114f2b00113b001154db000122d2c01b0184358b0052bb00013[_^M_][_$_]
+b90000ffe038b0062b1b21231133592d2c01b018435845646a23456469b0[_^M_][_$_]
+1943646060b0462344231020b046f02fb000121b2121208a208a52581133[_^M_][_$_]
+1b212159592d2c01b10b0a432343650a2d2c00b10a0b4323430b2d2c00b0[_^M_][_$_]
+462370b101463e01b0462370b10246453ab10200080d2d2cb0122bb00225[_^M_][_$_]
+45b00225456ab0408b60b0022523442121212d2cb0132bb0022545b00225[_^M_][_$_]
+456ab8ffc08c60b0022523442121212d2cb000b0122b2121212d2cb000b0[_^M_][_$_]
+132b2121212d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc0[_^M_][_$_]
+8a8cb8100062602b0c642364615c58b00361592d2cb1000325456854b01c[_^M_][_$_]
+4b505a58b0032545b0032545606820b004252344b0042523441bb0032520[_^M_][_$_]
+4568208a2344b00325456860b003252344592d2cb00325204568208a2344[_^M_][_$_]
+b003254564686560b00425b0016023442d2cb00943588721c01bb0124358[_^M_][_$_]
+8745b0112bb0472344b0477ae41b038a45186920b04723448a8a8720b0a0[_^M_][_$_]
+5158b0112bb0472344b0477ae41b21b0477ae4595959182d2c208a452345[_^M_][_$_]
+6860442d2c456a422d2c01182f2d2c01b0184358b00425b0042549642345[_^M_][_$_]
+64696120b080626ab00225b00225618cb0194360b0462344218a10b046f6[_^M_][_$_]
+211b21212121592d2c01b0184358b0022545b002254564606ab00325456a[_^M_][_$_]
+6120b00425456a208a8b65b0042523448cb00325234421211b20456a4420[_^M_][_$_]
+456a44592d2c012045b00055b018435a584568234569b0408b6120b08062[_^M_][_$_]
+6a208a236120b003258b65b0042523448cb00325234421211b2121b0192b[_^M_][_$_]
+592d2c018a8a45642345646164422d2cb00425b00425b0192bb0184358b0[_^M_][_$_]
+0425b00425b00325b01b2b01b0022543b04054b0022543b000545a58b003[_^M_][_$_]
+252045b040614459b0022543b00054b0022543b040545a58b004252045b0[_^M_][_$_]
+4060445959212121212d2c014b525843b00225452361441b2121592d2c01[_^M_][_$_]
+4b525843b00225452360441b2121592d2c4b525845441b2121592d2c0120[_^M_][_$_]
+b003252349b04060b0206320b000525823b002253823b002256538008a63[_^M_][_$_]
+381b212121212159012d2c4b505845441b2121592d2c01b005251023208a[_^M_][_$_]
+f500b0016023edec2d2c01b005251023208af500b0016123edec2d2c01b0[_^M_][_$_]
+062510f500edec2d2c462346608a8a462320468a608a61b8ff8062232010[_^M_][_$_]
+238ab14b4b8a70456020b0005058b00161b8ffba8b1bb0468c59b0106068[_^M_][_$_]
+013a2d2c2045b00325465258b0022546206861b00325b003253f2321381b[_^M_][_$_]
+2111592d2c2045b00325465058b0022546206861b00325b003253f232138[_^M_][_$_]
+1b2111592d2c00b00743b006430b2d2c8a10ec2d2cb00c4358211b2046b0[_^M_][_$_]
+005258b8fff0381bb0103859592d2c20b0005558b8100063b003254564b0[_^M_][_$_]
+0325456461b0005358b0021bb04061b00359254569535845441b2121591b[_^M_][_$_]
+21b0022545b00225456164b028515845441b212159592d2c21210c642364[_^M_][_$_]
+8bb84000622d2c21b08051580c6423648bb82000621bb200402f2b59b002[_^M_][_$_]
+602d2c21b0c051580c6423648bb81555621bb200802f2b59b002602d2c0c[_^M_][_$_]
+6423648bb84000626023212d2c4b5358b00425b004254964234564696120[_^M_][_$_]
+b080626ab00225b00225618cb0462344218a10b046f6211b218a11231220[_^M_][_$_]
+392f592d2c2121212121212d2cb0134358031b02592d2cb0134358021b03[_^M_][_$_]
+592d2cb00a2b2310203cb0172b2d2cb00225b8fff038b0282b8a102320d0[_^M_][_$_]
+23b0102bb0054358c01b3c59201011b00012012d2c4b53234b515a58381b[_^M_][_$_]
+2121592d2c01b0022510d023c901b00113b0001410b0013cb001162d2c01[_^M_][_$_]
+b00013b001b0032549b0031738b001132d2c4b53234b515a5820458a6044[_^M_][_$_]
+1b2121592d2cb0024354584b53234b515a58381b2121591b21212121592d[_^M_][_$_]
+2c4b53234b515a58381b2121592d2c4b5458381b2121592d2c4b52587d1b[_^M_][_$_]
+7a592d2cb1020042b123018851b1400188535a58b910000020885458b202[_^M_][_$_]
+010243604259b12401885158b920000040885458b202020243604259b124[_^M_][_$_]
+01885458b2022002436042004b014b5258b2020802436042591bb9400000[_^M_][_$_]
+80885458b202040243604259b94000008063b80100885458b20208024360[_^M_][_$_]
+4259b94000010063b80200885458b2021002436042595959592d00010000[_^M_][_$_]
+00016148e1f6c9625f0f3cf5001b080000000000aff53caf00000000b8f4[_^M_][_$_]
+5fe9fb5cfe520b170760000000090001000100000000000100000760fe52[_^M_][_$_]
+00000ab3fb5cfa7a0b170001000000000000000000000000000008d10258[_^M_][_$_]
+0032000000000239000002200000023900b602d70054047300170473004e[_^M_][_$_]
+071d0081055600580187005c02aa007b02aa004a031d004204ac00710239[_^M_][_$_]
+00b602aa0042023900b6023900000473005c047300e30473003f0473005a[_^M_][_$_]
+0473001f047300560473005c047300620473005604730056023900b60239[_^M_][_$_]
+00b604ac007104ac007104ac00710473005e081f00730556fffe055600a4[_^M_][_$_]
+05c7006005c700a4055600a404e300a40639006005c700a4023900bc0400[_^M_][_$_]
+0037055600a4047300a406aa00a405c700a406390060055600a406390060[_^M_][_$_]
+05c700a40556005c04e3002d05c700a40556000c078d00190556000a0556[_^M_][_$_]
+000a04e300250239008b023900000239002103c1004a046afff402aa0056[_^M_][_$_]
+0473004e0473008b04000048047300480473004802390010047300480473[_^M_][_$_]
+008b01d3008b01d3ffb80400008b01d3008b06aa008b0473008b04730048[_^M_][_$_]
+0473008b0473004802aa008b0400003f02390023047300870400001b05c7[_^M_][_$_]
+000a0400000e0400001b0400002902ac0039021400bc02ac003104ac0058[_^M_][_$_]
+0556fffe0556fffe05c70060055600a405c700a40639006005c700a40473[_^M_][_$_]
+004e0473004e0473004e0473004e0473004e0473004e0400004804730048[_^M_][_$_]
+04730048047300480473004801d3007901d3ffec01d3ffac01d3ffd50473[_^M_][_$_]
+008b04730048047300480473004804730048047300480473008704730087[_^M_][_$_]
+0473008704730087047300500333008504730071047300310473005602cd[_^M_][_$_]
+0068044cfffe04e3008b05e5000005e500000578003202aa00e302aa003f[_^M_][_$_]
+04ac0071080000000639005004ac005c04ac007104ac007104ac00710473[_^M_][_$_]
+00020473008b03f4003305b4007b069600a4046400000231ffb202f6002b[_^M_][_$_]
+02ec002d06250071071d004e0473004804730062023900b604ac00710464[_^M_][_$_]
+001404730042046400330556fffe0473008d0473008d0486005b0556fffe[_^M_][_$_]
+0556fffe0639006008000060078d00480258fff404b0fff402aa005402aa[_^M_][_$_]
+005401c7007d01c7007d04ac007103f4002e0400001b0556000a0156fe54[_^M_][_$_]
+0473004c02aa005a02aa007f040000100400001004730050023900b60239[_^M_][_$_]
+00b603220090080000190556fffe055600a40556fffe055600a4055600a4[_^M_][_$_]
+023900ac0239ffdf023900080239001f06390060063900600639006005c7[_^M_][_$_]
+00a405c700a405c700a401d3008b02aa001702aa000602aa001d02aa002d[_^M_][_$_]
+02aa00f802aa00a202aa0085037a009d02aa00b602aa00170473000801d3[_^M_][_$_]
+000c0556005c0400003f04e3002504000029021400bc05c7000204730048[_^M_][_$_]
+0556000a0400001b055600a40473008b04ac007104ac00a602aa006a02aa[_^M_][_$_]
+001902aa002106ac007f06ac007f06ac003504e300000639006004730048[_^M_][_$_]
+023900bc0556005c0400003f05c700600400004805c70060040000480473[_^M_][_$_]
+00480400fff4023900b60556fffe0473004e0556fffe0473004e05c700a4[_^M_][_$_]
+0513004805c70002055600a404730048055600a404730048047300a401d3[_^M_][_$_]
+0047047300a40255008b047300a402f3004205c700a40473008b05c700a4[_^M_][_$_]
+0473008b063900600473004805c700a402aa008b05c700a402aa002b0556[_^M_][_$_]
+005c0400003f04e3002d0239002304e3002d02d0002305c700a404730087[_^M_][_$_]
+05c700a40473008704e300250400002904e300250400002904ae00a40639[_^M_][_$_]
+006006790060049c0048047300480400004804ae00480400002105310048[_^M_][_$_]
+0400fff4047200b602f6004c09e9008f063900bc03a6008b0568002102aa[_^M_][_$_]
+00e502aa0056071d00810296000f04d5009202d6008302d6008304d500b1[_^M_][_$_]
+02d600700556fffe0473004e05c700600400004805c70060040000480556[_^M_][_$_]
+00a404730048055600a404730048055600a4047300480639006004730048[_^M_][_$_]
+0639006004730048063900600473004805c700a40473008b05c700140473[_^M_][_$_]
+00000239ffce01d3ff9b0239ffe501d3ffb20239fff501d3ffc2023900bc[_^M_][_$_]
+01d3008b0400003701d3ffac056800a40400008b0400008b047300a401d3[_^M_][_$_]
+004205c700a40473008b05c700a40473008b063900600473004806390060[_^M_][_$_]
+0473004805c700a402aa005a0556005c0400003f04e3002d0239002305c7[_^M_][_$_]
+00a40473008705c700a40473008705c700a40473008705c700a404730087[_^M_][_$_]
+078d001905c7000a0556000a0400001b0200008b0556fffe0473004e0800[_^M_][_$_]
+0000071d004e0639005004730048023900b6078d001905c7000a078d0019[_^M_][_$_]
+05c7000a078d001905c7000a0556000a0400001b01c7007d0400fff40473[_^M_][_$_]
+00310473004806ac007f06ac003606ac003606ac006d02aa00fc02aa0085[_^M_][_$_]
+02aa00ee034800370556fffe0646003306b7003303290033069a00000631[_^M_][_$_]
+0000069a0000033300290556fffe055600a40575000c055600a404e30025[_^M_][_$_]
+05c700a4023900bc055600a40556fffe06aa00a405c700a4053f006d0639[_^M_][_$_]
+006005c700a4055600a404e5006004e3002d0556000a0556000a0679005e[_^M_][_$_]
+06390066023900080556000a049c0048040000480473008b01ec00790473[_^M_][_$_]
+00870481008b0452001b03e100480473008b0473005c01ec008b0400008b[_^M_][_$_]
+0400001b0473008b0400001b03e10048047300480491008b044800480473[_^M_][_$_]
+0087042d000e058500870585004802520008047300870473004804730087[_^M_][_$_]
+05850048055600a40666002d048900a405bc00600556005c023900bc0239[_^M_][_$_]
+00080400003707ae000a07ae00a40666002d055600a4051f000805c700a4[_^M_][_$_]
+0556fffe053d00a4055600a4048900a406330023055600a4073500060514[_^M_][_$_]
+005a05c700a405c700a4055600a405a4000a06aa00a405c700a406390060[_^M_][_$_]
+05c700a4055600a405c7006004e3002d051f000806cb00600556000a05fc[_^M_][_$_]
+00a40579007706e100a4071700a4063d0000071000a4053d00a405bc005e[_^M_][_$_]
+080c00a405c7005c0473004e0496005e043f008b0310008b04aa00000473[_^M_][_$_]
+004805aa0004040000230479008b0479008b0400008b0491000a05b6008b[_^M_][_$_]
+0473008b047300480473008b0473008b0400004803aa00250400001b0698[_^M_][_$_]
+00480400000e0498008b0444005e066a008b068f008b04f6000005bc008b[_^M_][_$_]
+042f008b0400001b05f4008b0456003504730048047300000310008b0400[_^M_][_$_]
+00480400003f01d3008b01d3ffd501d3ffb806e9000a0698008b04730000[_^M_][_$_]
+0400008b0400001b0473008b047300a403b8008b046afff407fc008f0473[_^M_][_$_]
+008b02aa002302aa002102aa006d02aa002101d3008b0556005c0400003f[_^M_][_$_]
+0473000001480060028f004e028f005e028f005e0148006001ec004e01ec[_^M_][_$_]
+005801ec007101ec005601480060028f004e014800600148007502140039[_^M_][_$_]
+01ec007101cf0091014800600148ff79023900b604cd0083048f003b035c[_^M_][_$_]
+00170429001404cd0098028f004c02cd001404cd009804cd003b028f004c[_^M_][_$_]
+0429003f0429005a0429004804cd005004cd003b02cd004a02cd003b04cd[_^M_][_$_]
+005004cd002d04cd00870466006f043d003b0466003b047b00980400002d[_^M_][_$_]
+0550009804cd005404cd003704cd003704cd003702000060037100600566[_^M_][_$_]
+0077028fffa20429003f0429003f0429ff790429ff7904cd002d05500098[_^M_][_$_]
+05500098055000980550009804cd008304cd008304cd0083048f003b035c[_^M_][_$_]
+00170429001404cd0098028f003d02cd001404cd003b028f003d0429003f[_^M_][_$_]
+0429005a0429004804cd003b02cd003b04cd005004cd00870466006f0466[_^M_][_$_]
+003b047b00980400002d0550009804cd0054028f004c048f003b0429005a[_^M_][_$_]
+0466006f04cd00290000ffdc0000ff250000ffdc0000fe51014800600639[_^M_][_$_]
+00600473004805c700a40473008702aa00cf02aa00f802aa005602aa00e3[_^M_][_$_]
+02aa001702aaff0c02aa001702aa000402aa002d02aa002d02aa002d02aa[_^M_][_$_]
+000402aa00cf02aa000402aa002d02aa002b02aa002b02aa001902aa0017[_^M_][_$_]
+0556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe0473[_^M_][_$_]
+fff20556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe[_^M_][_$_]
+0473004e0556fffe0473004e0556fffe0473004e0556fffe0473004e0556[_^M_][_$_]
+fffe0473004e055600a404730048055600a404730048055600a404730048[_^M_][_$_]
+055600a404730048055600770473fff1055600a404730048055600a40473[_^M_][_$_]
+0048055600a4047300480239009801d30098023900bc01d3008b06390060[_^M_][_$_]
+0473004806390060047300480639006004730048063900600473fff20639[_^M_][_$_]
+006004730048063900600473004806390060047300480639006004730048[_^M_][_$_]
+063900600473004806390060047300480639006004730048063900600473[_^M_][_$_]
+004805c700a40473008705c700a40473008705c700a40473008705c700a4[_^M_][_$_]
+0473008705c700a40473008705c700a40473008705c700a4047300870556[_^M_][_$_]
+000a0400001b0556000a0400001b0556000a0400001b0473004801df00b2[_^M_][_$_]
+01df007501df002b01df007501f4ff8501f4ff8501f4ff850458ff850458[_^M_][_$_]
+00560458ff85045800560458ff850458005604d7ff8504d7ff8506c3ff85[_^M_][_$_]
+045801310458013f0458005a0458003d0458007504580048045800480458[_^M_][_$_]
+002d0458002b0458005c06c3ff850458ff850323ff8503a000560458ff85[_^M_][_$_]
+0323ff8503a000560252ff85025eff85022500ac0252ff85025eff850327[_^M_][_$_]
+ff8501baff850323ff8501f4ff85039aff850323ff85030e004801f4ff85[_^M_][_$_]
+04bc001f030e004804bc001f026600cd01f4ff85045c000c04c3003501df[_^M_][_$_]
+000001df000001df0000045c000c04c30035045cfff604bc001f022500ac[_^M_][_$_]
+04c3001f026600cd04730062034c008901df002701df00710364000001df[_^M_][_$_]
+0071051f001f01df00ae05b80050027b003d05b8005005b8005004580056[_^M_][_$_]
+045800560458005602b8000a02b8000a03e1005203e100520698000a0698[_^M_][_$_]
+000a08b8000a08b8000a04a4ff8504a4ff85045c0052045c005201baff85[_^M_][_$_]
+0652005004a8002704cd00330414002902b8001f043d0033027b003d0364[_^M_][_$_]
+0000051f001f051f001f01ae000001df000001ae000001ae000001ae001b[_^M_][_$_]
+01ae000001df00000133000a045c000c04c3003501cb006801c7001f0266[_^M_][_$_]
+00e9026600620266005601f4ff850252ff85025eff8505b8005003df0093[_^M_][_$_]
+0000fb5c0000fb5c0000fb5c0000fb5c0000fe000000fd3b0000fc4c0000[_^M_][_$_]
+fd0a0000fd2d0000ff170000fdaa0000fda80000fe850000fe9605c3005e[_^M_][_$_]
+0000fbdf0000fd1b0000fbfa0000fe020000fdf00000fc4c0000fd7f0000[_^M_][_$_]
+fd2d045e005e047f002d04ac002d047f0056047f0056055c002d03640006[_^M_][_$_]
+03df0050051f0050047f002d04ac002d05c3005e05c3005e04ac005004ac[_^M_][_$_]
+005003df00930571002d062100560635005e047f0056047f0056045e005e[_^M_][_$_]
+049a00500404009304f6005004ac005004ac0050047f0081047f00810537[_^M_][_$_]
+00500537005004ac005004ac002f0400008103df0093045e005e03df0050[_^M_][_$_]
+04ac005003df0050047f0056051200500431005004db0050053700500431[_^M_][_$_]
+0050045e005e04000050039a004a0000fcfe035c001f035cfe620000fc73[_^M_][_$_]
+0000fc730000fc730000fc730000fee10000fe000000fee9031f00b604fe[_^M_][_$_]
+009a0248008b048f008b035c0010035cffc903df0000035c001f04830050[_^M_][_$_]
+0000fd100000ff190000fe5e0000fda80000fec10000fe960000fe620000[_^M_][_$_]
+fe680431006204bc006004bc005c04fe000e04fe007f04fe006004fe0060[_^M_][_$_]
+04bc001704fe003504fe006004fe004a0527005006d100350000fee10000[_^M_][_$_]
+fe000000fee901baff8505b8005001f4ff8504580056045800560458ff85[_^M_][_$_]
+03e1005204c100330327ff8504c100330327ff85051f001f04bc001f01f4[_^M_][_$_]
+ff85030e0048027b003d045801310458013f0458005a0458003d0458003d[_^M_][_$_]
+0458004a045800c90458002d0458002b0458005c04e3002d023900230556[_^M_][_$_]
+00a40473004805c700a40479008b04140029023900bc0400003701d3008b[_^M_][_$_]
+01d3ffb80489003a031000300786000605cf000405aa00a40447008b0556[_^M_][_$_]
+00a40400008b05fc00a4049a008b0556000a0400001b0556000a0400001b[_^M_][_$_]
+05a5000a043a000e057900770444005e057900a40473008b063900600473[_^M_][_$_]
+00480639006004730048080000000000ffdc0000ff160000ffdc0000ff20[_^M_][_$_]
+0000ffdc0000ff200197000005b8005001f4ff8502b8000a03e10052043d[_^M_][_$_]
+00330440006401f4ff8503fdff85044000640440006406d9001306d90013[_^M_][_$_]
+06d9001306d9001301ba00280493004a031d0042065200500252ff85025e[_^M_][_$_]
+ff8501df000001df000006750048027b003d0000ffdd0000fe870000fefd[_^M_][_$_]
+047300690568005c05c7006005c7006006aa008b05c70000098700a4078d[_^M_][_$_]
+00000556000004e3002d0800002901ae000501ae002a026600ea02660056[_^M_][_$_]
+0266006201ae002e04a8002701ae001001cb006801cb006801df000501df[_^M_][_$_]
+000501df002a01df002a01df002a01df002a028000ae028000b203640000[_^M_][_$_]
+03640000057e001f04bc001f05b8005001f4ff8505b8005001f4ff8505b8[_^M_][_$_]
+005001f4ff8505b8005001f4ff8505b8005001f4ff8505b8005001f4ff85[_^M_][_$_]
+04580056045800560458ff8504580056045800560458ff85045800560458[_^M_][_$_]
+00560458ff8504580056045800560458ff8504580056045800560458ff85[_^M_][_$_]
+04580056045800560458ff8502b8000a02b8000a02b8000a02b8000002b8[_^M_][_$_]
+000a02b8fffc02b8fffc02b8000803e1005203e1005203e1005203e10052[_^M_][_$_]
+03e1005203e1005203e100520698000a04d7ff850698000a04d7ff850698[_^M_][_$_]
+000a04d7ff8508b8000a06c3ff8508b8000a06c3ff8504a4ff85045c0052[_^M_][_$_]
+03a000560458ff850323ff8506520050065200500252ff85025eff850652[_^M_][_$_]
+00500252ff85025eff85065200500252ff85025eff85065200500252ff85[_^M_][_$_]
+025eff8504a8002704a8002706d9003306d9ff7904c100330327ff8504cd[_^M_][_$_]
+00330327ff8504cd00330327ff8504cd00330327ff8504c100330327ff85[_^M_][_$_]
+04c100330327ff8504c100330327ff8504c100330327ff8504c100330327[_^M_][_$_]
+ff660414002901baff850414002901baff850414002901baff8504140029[_^M_][_$_]
+01baff85043d003301f4ff85043d0033043d003301f4ff85043d003301f4[_^M_][_$_]
+ff8504580056045800560458ff8503640000036400000364000003640000[_^M_][_$_]
+0364000003640000036400000364000005f3000505900005051f001f04bc[_^M_][_$_]
+001f01f4ff8503640000051f001f04bc001f051f001f04bc001f0000fe46[_^M_][_$_]
+0000ff6e0000ff590000ffb70000fec308fc003208ad00320000ffb50000[_^M_][_$_]
+ffb60000ff410000ff920000fec30000ffbf0168003202cc00320000fea2[_^M_][_$_]
+0000ff5a04cd00320000ff580000ff580000ff920698000a04d7ff8508b8[_^M_][_$_]
+000a06c3ff85045c005203a000560458ff850323ff85034c008902b8001f[_^M_][_$_]
+02aa001d02aa001d02aa001d02aa001d02aa003f02aa003f02aa000402aa[_^M_][_$_]
+000402aa000402aa000402aa00ca02aa00e302aa001702aa001702aa001d[_^M_][_$_]
+02aa001d055600a4047300480556fffe0473004e055600a40473008b0556[_^M_][_$_]
+00a40473008b055600a40473008b05c700600400004805c700a404730048[_^M_][_$_]
+05c700a40473004805c700a40473004805c700a40473004805c700a40473[_^M_][_$_]
+0048055600a404730048055600a404730048055600a404730048055600a4[_^M_][_$_]
+04730048055600a40473004804e300a402390010063900600473004805c7[_^M_][_$_]
+00a40473008b05c700a40473008b05c700a40473008b05c7007104730053[_^M_][_$_]
+05c700a40473008b0239ffce01d3ff9b0239000701d3ffd3055600a40400[_^M_][_$_]
+008b055600a40400008b055600a40400008b047300a401d3008b047300a4[_^M_][_$_]
+01d3ffb1047300a401d3ffb1047300a401d3ffac06aa00a406aa008b06aa[_^M_][_$_]
+00a406aa008b06aa00a406aa008b05c700a40473008b05c700a40473008b[_^M_][_$_]
+05c700a40473008b05c700a40473008b0639006004730048063900600473[_^M_][_$_]
+004806390060047300480639006004730048055600a40473008b055600a4[_^M_][_$_]
+0473008b05c700a402aa008b05c700a402aa008b05c700a402aa006605c7[_^M_][_$_]
+00a402aa001d0556005c0400003f0556005c0400003f0556005c0400003f[_^M_][_$_]
+0556005c0400003f0556005c0400003f04e3002d0239002304e3002d0239[_^M_][_$_]
+002304e3002d0239ffed04e3002d0239001705c700a40473008705c700a4[_^M_][_$_]
+0473008705c700a40473008705c700a40473008705c700a4047300870556[_^M_][_$_]
+000c0400001b0556000c0400001b078d001905c7000a078d001905c7000a[_^M_][_$_]
+0556000a0400000e0556000a0400000e0556000a0400001b04e300250400[_^M_][_$_]
+002904e300250400002904e30025040000290473008b0239000d05c7000a[_^M_][_$_]
+0400001b0473004e0200008b049c0048049c0048049c0048049c0048049c[_^M_][_$_]
+0048049c0048049c0048049c00480556fffe0556fffe060a0000060a0000[_^M_][_$_]
+05e2000005e20000059c0000059c00000400004804000048040000480400[_^M_][_$_]
+0048040000480400004805eb000005eb0000073000000730000007300000[_^M_][_$_]
+073000000473008b0473008b0473008b0473008b0473008b0473008b0473[_^M_][_$_]
+008b0473008b065c0000065c000007a1000007a1000007a1000007a10000[_^M_][_$_]
+075900000759000001ec008b01ec008b01ecffdb01ecffdb01ec000301ec[_^M_][_$_]
+000301ecff9b01ecff9b02b6000002b6000003fb000003fb000003fb0000[_^M_][_$_]
+03fb000003b3000003b30000047300480473004804730048047300480473[_^M_][_$_]
+004804730048063900000639000007da000007da00000776000007760000[_^M_][_$_]
+047300870473008704730087047300870473008704730087047300870473[_^M_][_$_]
+0087064c00000778000007ca000007490000058500480585004805850048[_^M_][_$_]
+0585004805850048058500480585004805850048063900000639000007da[_^M_][_$_]
+000007da000007760000077600000736000007360000049c0048049c0048[_^M_][_$_]
+04000048040000480473008b0473008b01ecffeb01ec0078047300480473[_^M_][_$_]
+004804730087047300870585004805850048049c0048049c0048049c0048[_^M_][_$_]
+049c0048049c0048049c0048049c0048049c00480556fffe0556fffe060a[_^M_][_$_]
+0000060a000005e2000005e20000059c0000059c00000473008b0473008b[_^M_][_$_]
+0473008b0473008b0473008b0473008b0473008b0473008b065c0000065c[_^M_][_$_]
+000007a1000007a1000007a1000007a10000075900000759000005850048[_^M_][_$_]
+058500480585004805850048058500480585004805850048058500480639[_^M_][_$_]
+00000639000007da000007da000007760000077600000736000007360000[_^M_][_$_]
+049c0048049c0048049c0048049c0048049c0048049c0048049c00480556[_^M_][_$_]
+fffe0556fffe0556fffe0556fffe0556fffe02aa010302aa00f902aa0103[_^M_][_$_]
+02aa000602aa00060473008b0473008b0473008b0473008b0473008b065e[_^M_][_$_]
+0000064d000006cf000006be000005c700a402aa004602aa006e02aa0006[_^M_][_$_]
+01ecffc201ecffb201ecff7e01ecff7e01ecff9b01ecff9b0239fff60239[_^M_][_$_]
+ffe6032900000318000002aa004602aa006e02aa00060473008704730087[_^M_][_$_]
+04730087047300870491008b0491008b04730087047300870556000a0556[_^M_][_$_]
+000a06a6000006e7000005eb0000034800370348003702aa005605850048[_^M_][_$_]
+058500480585004805850048058500480708000006930000070800000693[_^M_][_$_]
+00000639006602aa00e302aa01030000fec30000fec80000fdf40000fed8[_^M_][_$_]
+0000ffa40000feea0000ff4c0000fe9e0000fec30000ffbf0000ff3d0000[_^M_][_$_]
+fe9e0000fed80000fed80000ffae0000ffae0000ffae000000640000ff47[_^M_][_$_]
+0000ff480000ff440000ff440000fe87000000000000ffa60000ff440000[_^M_][_$_]
+ff440000ff440000fec80000ff2d000000000000feeb0000ff4c0000ffae[_^M_][_$_]
+0000ff350000ff240000ffbf0000fe870000febb0000fec30000fec30000[_^M_][_$_]
+fed80000fed80000feb10000fec80000fdbf0000fdf40000feb10000fec8[_^M_][_$_]
+0000fdbf0000fe870000fee30000ffa60000fe870000ff440000feba0000[_^M_][_$_]
+ff230000ff9a0000fdf40000feb10000ffae0000fe940000ffa40000fe87[_^M_][_$_]
+0000fdf40000ff3d0000ff440000feb10000feb10000feb10000ff030000[_^M_][_$_]
+ff440000ff530000ff530000ff53045cffee04c30016045c000c04c30035[_^M_][_$_]
+045c000c04c30035045c000c04c30035045c000c04c30035045c000c04c3[_^M_][_$_]
+0035045c000c04c30035045800790458003c0473000a05fd0000053d00a4[_^M_][_$_]
+0473008b053d000d0473000305c7006905c700600400004805c70002066e[_^M_][_$_]
+0000053d005104730048047300480556006d0514006a04e3ffd106390060[_^M_][_$_]
+0556000c0724008b01d3008b02390014055600a40400008b01d300140400[_^M_][_$_]
+001b06aa008505c7ffd10473008b06390060070e006005a0004805fd0000[_^M_][_$_]
+0473008b055600a40556006a0400005004e50060035600000239002304f7[_^M_][_$_]
+00140239002304e3002d0625007105c700a4062c000a0400001b04e30025[_^M_][_$_]
+04000029046c001f046c006003c6004803c600330473003f0473002f03a9[_^M_][_$_]
+0020044e0023046c008b021400bc0214002605d200c1023900b60a5b00a4[_^M_][_$_]
+097800a4084c0048086000a4064a00a40363008b097800a4073e00a40607[_^M_][_$_]
+008b0556fffe0473004e0239ffdf01d3ffa9063900600473004805c700a4[_^M_][_$_]
+0473008705c700a40473008705c700a40473008705c700a40473008705c7[_^M_][_$_]
+00a404730087047300480556fffe0473004e0556fffe0473004e08000000[_^M_][_$_]
+071d004e06390060047300480639006004730048055600a40400008b0639[_^M_][_$_]
+0060047300480639006004730048046c001f03c6002b01d3ffac0a5b00a4[_^M_][_$_]
+097800a4084c00480639006004730048085b00a4046c008b05c700a40473[_^M_][_$_]
+008b0556fffe0473004e0556fffe0473004e055600a404730048055600a4[_^M_][_$_]
+047300480239ff6601d3ff3e0239fffa01d3ffc806390060047300480639[_^M_][_$_]
+00600473004805c700a402aa000605c700a402aa007c05c700a40473006a[_^M_][_$_]
+05c700a404730087040200420374002305c700a40473008b057900a404a8[_^M_][_$_]
+00420446003904e30025040000290556fffe0473004e0639006004730048[_^M_][_$_]
+0639006004730048063900600473004806390060047300480556000a0400[_^M_][_$_]
+001b02aa001d02aa001d02aa001702aa003f02aa00040473008c049c0048[_^M_][_$_]
+049c00480473008b0400001b0400000004730048047300480473004805db[_^M_][_$_]
+004804000048040000230552002304460048026200100473004804730048[_^M_][_$_]
+04ae004b0400001b04e0001d047300870473008b0473008b01d3000001ec[_^M_][_$_]
+008b01d3008b029e0000024e000001d3008b0486008b06aa008506aa0085[_^M_][_$_]
+06aa008b0473ffb80473008b0455008b0473004805c50048058500480473[_^M_][_$_]
+004802aafff802aafff802aafff802aa008b02aa008b0239008b0239fff8[_^M_][_$_]
+0447008b0447008b0400003f0231ffb2026200100231ffcf039900000239[_^M_][_$_]
+0012023900230473000004c50048043b00870400001b05c7000a0400001b[_^M_][_$_]
+03ce000004000029046e002903c6002b03c6002c0400001b040000480400[_^M_][_$_]
+001b0400004806390060043f008b0446004804ae004b0473008b02ff000a[_^M_][_$_]
+040000080364008b047300480400001b04000048078e00480718004807fc[_^M_][_$_]
+004805b6002303930023060c0023061900100568008b04f0008b03e2001e[_^M_][_$_]
+048200880481008b0473008705cd000a0767fffd05cd000a047300480585[_^M_][_$_]
+004804970014063900600473004805c700600400004804e300a403fc008b[_^M_][_$_]
+04ff0000043c0032060d000a049d000006aa008506aa0085057900770473[_^M_][_$_]
+0087057900a4044e000a0556006a0556006a04e0000504e0000505e50060[_^M_][_$_]
+0476004803c70014034f0028049700140496005e0400004801d3ffb80639[_^M_][_$_]
+006003b6004803b6001b095f006005e8001b0600000a04c0000a079800a4[_^M_][_$_]
+05c2008b054a000d03fe001b06f800a4057a008b0735000805aa000508f7[_^M_][_$_]
+00a4076c008b0514006d0400004a0679005e058500870639006004730048[_^M_][_$_]
+0604000c04a4001b0604000c04a4001b0ab3006008d300480711005f0568[_^M_][_$_]
+0048095f006008800048095f006005e8001b05c700600400004803f80014[_^M_][_$_]
+02aafffa02aa000002aa000002aa000007bd000a07bd002a05c700a40479[_^M_][_$_]
+008b053d000f042f0008055600a40473008b048900a40426008b0514005a[_^M_][_$_]
+040000230556001804000008069d000a04d1000a071200a40543008b0847[_^M_][_$_]
+00a406c6008b05c700600400004805c700600400004804e3002d03aa0025[_^M_][_$_]
+0744000a0563000a057900770444005e070b000a053b000a070b000a053b[_^M_][_$_]
+000a023900bc0735000605aa0004055600a40400008b05a4000a0491000a[_^M_][_$_]
+05c700a40473008b05c700a40473008b057900770444005e06aa00a405b6[_^M_][_$_]
+008b0556fffe0473004e0556fffe0473004e08000000071d004e055600a4[_^M_][_$_]
+0473004806390060047300480735000605aa00040514005a040000230443[_^M_][_$_]
+001f03c6002b05c700a40479008b05c700a40479008b0639006004730048[_^M_][_$_]
+063900600473004805bc005e0400001b051f00080400001b051f00080400[_^M_][_$_]
+001b051f00080400001b057900770444005e071000a405bc008b053d0051[_^M_][_$_]
+0473004807d100510724004807e2006d06f0004a0582006d0468004a0838[_^M_][_$_]
+000a073e000a085b00a4071f008b0639006004ae004b0609002d056b0025[_^M_][_$_]
+02aa001d02aa001702aa003f02aa001d02aa000402aaff8c04c1003304c1[_^M_][_$_]
+0033028f004c0000fed802fe000004cd0037045cffc904c3fff100000000[_^M_][_$_]
+000000280000002800000028000000380000009800000102000002a20000[_^M_][_$_]
+0412000005600000070e0000076a000007da0000084c000008f000000976[_^M_][_$_]
+000009ea00000a3600000a7200000ae400000b9400000bfe00000cc40000[_^M_][_$_]
+0dda00000e8000000f7400001064000010fe0000123a0000132e0000137c[_^M_][_$_]
+00001402000014b000001520000015d0000016b8000018e400001a1a0000[_^M_][_$_]
+1b4600001c6a00001d2600001db800001e3400001f8600002024000020a0[_^M_][_$_]
+0000215400002280000022da0000243a000024d8000025fe000026c80000[_^M_][_$_]
+28cc00002a1e00002bd200002c4200002ce200002dce00003086000031b8[_^M_][_$_]
+000032c60000335e000033bc0000342e00003484000035400000356a0000[_^M_][_$_]
+35c40000374c0000385e0000394c00003a4e00003b8a00003c5e00003de8[_^M_][_$_]
+00003e9200003ee800003fb2000040d00000411000004228000042da0000[_^M_][_$_]
+43ce000044ea0000460400004682000047e8000048ae0000496800004a68[_^M_][_$_]
+00004c5400004e0200004f7200005016000050fa0000515a000052380000[_^M_][_$_]
+52ec0000534c00005388000054f2000055320000558c000055da0000562c[_^M_][_$_]
+0000565a0000568a000056bc000056f60000572e000057660000589a0000[_^M_][_$_]
+58c8000058f4000059220000596c000059e400005a5000005a9400005b0a[_^M_][_$_]
+00005b2e00005b5a00005b8600005bb400005c0600005c3800005c660000[_^M_][_$_]
+5c9200005cb600005d0800005da200005e380000600e000061620000631a[_^M_][_$_]
+000063a40000642e000065680000670a0000689c000069f400006a500000[_^M_][_$_]
+6a9800006b7400006c6200006df200006eec00006f7c0000704600007112[_^M_][_$_]
+000072820000732c00007416000074c2000075120000757c000076060000[_^M_][_$_]
+7712000077ba000078a400007a6a00007b8a00007c9400007d0600007d84[_^M_][_$_]
+00007e1000007f0000007fda000080ce00008148000081c6000082500000[_^M_][_$_]
+8296000082f40000834e0000846c000085f20000864a000086aa00008770[_^M_][_$_]
+0000883a000088a200008918000089a400008a3e00008a7a00008ac60000[_^M_][_$_]
+8b3a00008c8200008cfe00008d7e00008e7e00008f6a000090300000907a[_^M_][_$_]
+000090f0000091ac00009390000093e00000942600009466000094b80000[_^M_][_$_]
+94fa0000953600009576000096180000965c000096a2000097080000974e[_^M_][_$_]
+00009796000097f00000983200009868000098d00000994c000099740000[_^M_][_$_]
+99fa00009a4a00009ad000009b4600009be800009c5800009ce600009dce[_^M_][_$_]
+00009e9e00009ee400009f1200009f5600009f7a00009ff80000a0e20000[_^M_][_$_]
+a21e0000a25e0000a28c0000a3700000a4840000a4d80000a5ca0000a62e[_^M_][_$_]
+0000a6fc0000a7dc0000a8700000a9080000a9a80000aa420000aa8a0000[_^M_][_$_]
+aab40000aaf00000aca60000ae180000ae5e0000ae8c0000aed40000aefe[_^M_][_$_]
+0000b0380000b0760000b0860000b0c60000b0f20000b2840000b4400000[_^M_][_$_]
+b4860000b4ca0000b4da0000b5c40000b7660000b7aa0000b7d40000b818[_^M_][_$_]
+0000b86c0000b91e0000b9ba0000b9d20000b9ea0000ba2c0000ba540000[_^M_][_$_]
+ba9e0000bace0000bb180000bb460000bb8a0000bbb80000bbfe0000bc3a[_^M_][_$_]
+0000bc7a0000bca20000bd7e0000bebc0000bf000000c01c0000c05a0000[_^M_][_$_]
+c0980000c0f00000c1240000c1680000c1940000c1ca0000c1ee0000c244[_^M_][_$_]
+0000c35c0000c4820000c5ce0000c6ec0000c7ee0000c8be0000c9640000[_^M_][_$_]
+ca740000caba0000cb060000cb860000cd5a0000cd8c0000cdb40000cdee[_^M_][_$_]
+0000ce200000ce820000cff40000d0ee0000d1440000d1780000d1c60000[_^M_][_$_]
+d2180000d2d00000d43e0000d47a0000d4be0000d4e20000d5180000d53c[_^M_][_$_]
+0000d6080000d7760000d7b80000d7dc0000d8a00000d8d20000d91e0000[_^M_][_$_]
+d94a0000d98c0000d9b00000db580000dd080000dd4c0000dd900000de72[_^M_][_$_]
+0000df6a0000dfe80000e0240000e0c20000e1080000e1860000e1c20000[_^M_][_$_]
+e2800000e32e0000e37c0000e44e0000e5e00000e7740000e8860000e95a[_^M_][_$_]
+0000ea2e0000ea5c0000ea8c0000eb660000ec4c0000ec920000eccc0000[_^M_][_$_]
+ed0c0000ed300000ed580000ee460000ee8c0000eeb40000ef500000f03e[_^M_][_$_]
+0000f07e0000f0a20000f0f20000f1280000f1680000f18c0000f28c0000[_^M_][_$_]
+f3bc0000f4000000f4240000f4680000f48c0000f4e80000f6b60000f8b8[_^M_][_$_]
+0000f8fa0000f9220000f9680000f9940000f9de0000fa200000fa440000[_^M_][_$_]
+fa7a0000faa20000fae60000fb160000fb560000fb7a0000fbe00000fc1e[_^M_][_$_]
+0000fd800000fe460000fefe0000ffb800010072000101240001018c0001[_^M_][_$_]
+02000001023a000102e000010336000103ba0001042c000104b600010512[_^M_][_$_]
+00010562000105ae00010624000107560001087c00010942000109d80001[_^M_][_$_]
+0a7200010b1000010b8e00010cc000010d8200010ed400010f6e00010ffc[_^M_][_$_]
+000110fe00011184000112520001131400011396000114a8000115dc0001[_^M_][_$_]
+16ae000117b2000118900001190a0001193600011976000119a6000119fe[_^M_][_$_]
+00011a4a00011b5400011c7800011d9200011e5a00011f3e00011fc40001[_^M_][_$_]
+20ec0001224c0001231c0001241c00012568000125780001264c0001272e[_^M_][_$_]
+000127be0001294600012a3600012b2200012b8c00012bd800012c060001[_^M_][_$_]
+2c4000012c9600012cf200012e1600012e5a00012f86000130f00001317c[_^M_][_$_]
+0001324000013250000133440001343a0001353000013590000135ea0001[_^M_][_$_]
+3688000137c200013882000139b400013a1600013ae200013b8600013ce6[_^M_][_$_]
+00013e1a00013ede00013f1c000140420001410c000142680001430c0001[_^M_][_$_]
+44040001448e0001456000014660000146d20001485c0001496c00014aa6[_^M_][_$_]
+00014b5400014c0a00014cc400014da800014e9600014f2600014fec0001[_^M_][_$_]
+513c0001528a000153ac0001552c0001562800015700000157740001584e[_^M_][_$_]
+0001598c00015b1400015c1c00015cda00015d2200015e2a00015eee0001[_^M_][_$_]
+600e000160b00001619c0001621e0001633e000164060001648600016658[_^M_][_$_]
+000167d20001693e000169e200016a9c00016b5600016c4400016d020001[_^M_][_$_]
+6d6400016dfa00016f2e0001702600017120000171740001728a000172b0[_^M_][_$_]
+000173c6000173d6000173e60001748000017490000175b8000176900001[_^M_][_$_]
+776a0001778e000177cc00017846000178d40001794a0001798000017abc[_^M_][_$_]
+00017b1200017baa00017c7400017cf800017de400017e2400017e480001[_^M_][_$_]
+7e6c00017fce00018070000181f6000182ec000183e600018450000184f6[_^M_][_$_]
+000185f20001864a000186b00001871c0001882600018890000188e20001[_^M_][_$_]
+892a0001897c000189d600018a4800018aae00018b1200018c7600018d0a[_^M_][_$_]
+00018dd000018e3a00018ee600018f6600018fda00019078000191760001[_^M_][_$_]
+91fc0001929000019320000193fe000194a8000195940001962a000196ae[_^M_][_$_]
+00019780000198440001990e000199ee00019af200019c3600019d4c0001[_^M_][_$_]
+9dc600019ec600019f7a00019fcc0001a0280001a0920001a0ce0001a132[_^M_][_$_]
+0001a2100001a2340001a2660001a2a40001a2ca0001a3060001a3dc0001[_^M_][_$_]
+a4000001a4220001a4680001a4ac0001a4d00001a4f40001a5400001a568[_^M_][_$_]
+0001a58e0001a5ba0001a5de0001a6020001a6340001a6580001a6840001[_^M_][_$_]
+a6ac0001a6d40001a6fc0001a7200001a7460001a76a0001a7c20001a810[_^M_][_$_]
+0001a8460001a87e0001a8a60001a8dc0001a9000001a9240001a94c0001[_^M_][_$_]
+a9740001a99c0001aaa00001aad00001ab800001abe00001ac420001acac[_^M_][_$_]
+0001ae020001af3c0001b0240001b10e0001b17a0001b1a20001b1fc0001[_^M_][_$_]
+b2580001b2e40001b3720001b44a0001b5160001b5a40001b6320001b700[_^M_][_$_]
+0001b7c20001b84e0001b91a0001b9c40001ba700001bb660001bc420001[_^M_][_$_]
+bd100001bd340001bd5c0001bd840001bdb20001be020001be3e0001be8e[_^M_][_$_]
+0001bec20001bf160001bf4c0001bf820001bfb60001c0140001c05a0001[_^M_][_$_]
+c0800001c0ae0001c0d40001c1020001c1280001c1560001c17c0001c1aa[_^M_][_$_]
+0001c1e00001c2200001c2440001c2680001c28c0001c2b00001c2f00001[_^M_][_$_]
+c3140001c3620001c39a0001c3e80001c41c0001c46e0001c4a20001c4e4[_^M_][_$_]
+0001c5140001c5700001c5ae0001c5e40001c61e0001c6400001c6620001[_^M_][_$_]
+c6860001c6aa0001c6d20001c6fa0001c7680001c7a00001c81e0001c84e[_^M_][_$_]
+0001c8c40001c8f00001c9180001c93e0001c9ba0001c9f80001ca3e0001[_^M_][_$_]
+ca6a0001caa60001cada0001cb020001cb320001cb6e0001cb940001cbb8[_^M_][_$_]
+0001cbdc0001cc000001cc240001cc4c0001cc700001ccae0001ccdc0001[_^M_][_$_]
+cd140001cd400001cd680001cd940001cdce0001cdfc0001ce200001ce44[_^M_][_$_]
+0001ce680001ce8c0001cec00001ceee0001cf240001cf4e0001d0800001[_^M_][_$_]
+d0ec0001d17e0001d2060001d2680001d2940001d2cc0001d3080001d33a[_^M_][_$_]
+0001d3700001d4440001d5640001d5a00001d5d60001d6ca0001d7180001[_^M_][_$_]
+d81c0001d8ee0001d99e0001da5c0001db380001dcb80001dd660001de14[_^M_][_$_]
+0001df000001dfd20001e0a60001e0f80001e1c60001e2b20001e40c0001[_^M_][_$_]
+e44e0001e4a20001e4ee0001e5240001e56e0001e6080001e6460001e696[_^M_][_$_]
+0001e7c60001e8320001e9120001e9440001ea800001eba80001ec560001[_^M_][_$_]
+ec820001ee520001eea20001efe00001f0780001f0dc0001f20e0001f2fe[_^M_][_$_]
+0001f3f00001f5a20001f6ae0001f7020001f75c0001f7b60001f7e80001[_^M_][_$_]
+f8820001f8cc0001f9a00001fad00001fb960001fbf40001fc900001fcca[_^M_][_$_]
+0001fd380001fd720001fdce0001fdfa0001fe4a0001fe820001febc0001[_^M_][_$_]
+feea0001ffe40002001c000200c60002010a00020190000201da000202fc[_^M_][_$_]
+0002034c00020496000204e2000205bc000205fc000207300002076c0002[_^M_][_$_]
+07ac000208b2000209cc00020af600020ba800020c8000020d5200020e32[_^M_][_$_]
+00020ee00002103a0002109a0002112600021250000212e0000213400002[_^M_][_$_]
+14160002147800021540000215e80002164c000216aa0002175c000217ee[_^M_][_$_]
+0002181a00021868000218d40002193400021a1800021b1e00021b940002[_^M_][_$_]
+1d5a00021dce00021e6400021f6a00022052000220940002219e00022328[_^M_][_$_]
+0002239400022476000224ba000225c400022734000227a0000228880002[_^M_][_$_]
+2a4200022b1600022bba00022d1a00022d5e00022e5200022f8c0002302c[_^M_][_$_]
+0002310c000231ec00023352000234ec00023640000237b8000239980002[_^M_][_$_]
+3a8000023bae00023d4400023f200002413200024338000245a6000247b2[_^M_][_$_]
+00024a0400024d2e00024f160002515a0002534a000254da0002566a0002[_^M_][_$_]
+57c00002590200025a2000025b9e00025ca400025dae00025ec600025fe2[_^M_][_$_]
+0002612000026262000263ac00026504000266340002676a000268ae0002[_^M_][_$_]
+6a3800026b8600026c8200026e600002704a0002722e000273bc000275aa[_^M_][_$_]
+00027716000278f000027a2600027bae00027c6e00027cec00027dfc0002[_^M_][_$_]
+7e6a00027efa00028006000280f2000281a400028288000282e60002834e[_^M_][_$_]
+000284680002853a0002868a000287ee0002896200028a6e00028aee0002[_^M_][_$_]
+8c4200028d9800028dd800028ed400029016000290ae0002919000029230[_^M_][_$_]
+000293460002947600029514000296760002982c000299c000029b3c0002[_^M_][_$_]
+9d2800029e980002a07a0002a23a0002a3c60002a52c0002a69a0002a75c[_^M_][_$_]
+0002a86a0002a8ca0002a8da0002a9d40002aab80002ac2c0002adec0002[_^M_][_$_]
+af440002af9c0002b0ec0002b0fc0002b2900002b4020002b4120002b422[_^M_][_$_]
+0002b44e0002b4900002b4e80002b4f80002b5080002b5180002b5280002[_^M_][_$_]
+b63c0002b6f00002b7ec0002b7fc0002b80c0002b81c0002b8400002b862[_^M_][_$_]
+0002b8a40002b8d00002b9100002b9340002b9440002b9540002b9640002[_^M_][_$_]
+b9740002b9840002ba1a0002bac60002bbe60002bd220002be1c0002bede[_^M_][_$_]
+0002c00e0002c1060002c1a40002c2480002c2580002c3060002c3dc0002[_^M_][_$_]
+c4b80002c5a00002c6820002c77a0002c87a0002c93a0002c94a0002ca48[_^M_][_$_]
+0002cb340002cc1c0002ccf20002d0fe0002d1440002d18e0002d1be0002[_^M_][_$_]
+d1f60002d2260002d26c0002d31c0002d34e0002d3a60002d3e60002d42c[_^M_][_$_]
+0002d4d40002d5760002d62a0002d78a0002d7d20002d8160002d8da0002[_^M_][_$_]
+d9640002d9980002d9ce0002d9fa0002daae0002db560002dca60002dcf4[_^M_][_$_]
+0002dd4a0002df5c0002e0b20002e2a40002e3840002e3ae0002e4b00002[_^M_][_$_]
+e5760002e6a20002e7b40002e9940002eaca0002ec2c0002edd20002edfa[_^M_][_$_]
+0002f0340002f1340002f27a0002f4ac0002f5900002f6780002f6f40002[_^M_][_$_]
+f7600002f80a0002f8700002f9400002f99c0002f9ae0002f9c00002fa38[_^M_][_$_]
+0002fab00002fb380002fbc00002fbf40002fc280002fc700002fd7a0002[_^M_][_$_]
+fdac0002fe040002fe3c0002fe820002feaa0002fee00002ff120002ff44[_^M_][_$_]
+0002ffa200030008000300420003007e000300c6000301120003014e0003[_^M_][_$_]
+018c000301d000030214000302560003028e000302c6000303080003033c[_^M_][_$_]
+00030390000303c200030402000304480003047a000304be000305020003[_^M_][_$_]
+05480003059000030794000307d400030810000308400003089e000308e2[_^M_][_$_]
+0003091800030966000309b400030a0600030a5800030aae00030ae20003[_^M_][_$_]
+0bca00030c2a00030c7e00030cda00030d3600030d9800030ddc00030e16[_^M_][_$_]
+00030e9200030f1000030f4c00030f8800030fe0000310380003107a0003[_^M_][_$_]
+10ca0003111e00031160000311b8000312a6000312d80003130800031338[_^M_][_$_]
+00031392000313e60003144c00031484000314ba000314f0000315440003[_^M_][_$_]
+1592000315e800031632000316820003178e00031884000318ec00031954[_^M_][_$_]
+00031984000319be000319fa00031a4400031a7a00031ab000031b1a0003[_^M_][_$_]
+1b8400031bbc00031bfc00031c2200031c4800031c7a00031cb000031d0c[_^M_][_$_]
+00031d9e00031dfe00031e5e00031eb000031f020003200c000320e20003[_^M_][_$_]
+21d800032210000322400003228a000322b0000322f40003235200032394[_^M_][_$_]
+000323d00003240a000324400003247c000324be000325ae000325e20003[_^M_][_$_]
+26240003265a0003268e000326d800032728000328c200032a1800032a58[_^M_][_$_]
+00032a9000032adc00032b1800032b5200032d6200032db000032fd60003[_^M_][_$_]
+3126000331bc000332b80003330a0003343000033676000339520003398a[_^M_][_$_]
+000339b600033a3400033ac200033aee00033b5800033c2800033cf60003[_^M_][_$_]
+3d0800033dac00033fbe00033fec0003405000034094000341000003417a[_^M_][_$_]
+000341da00034240000342a00003431600034384000343e80003450a0003[_^M_][_$_]
+45f8000346a000034712000347b000034820000348d60003496800034a50[_^M_][_$_]
+00034af200034bbe00034c6800034d1800034d9a00034e5200034ef00003[_^M_][_$_]
+4f860003500c00035110000352c800035310000353680003539e000353ce[_^M_][_$_]
+000353f2000354160003545400035492000354d8000355060003553c0003[_^M_][_$_]
+557200035598000355c0000355fc00035638000356600003568c000356c8[_^M_][_$_]
+00035708000357300003575800035780000357a8000357e4000358200003[_^M_][_$_]
+58560003588c000358c4000358e80003591e0003595200035990000359b6[_^M_][_$_]
+000359ec00035a1c00035a4200035a6800035aa200035adc00035bc80003[_^M_][_$_]
+5ccc00035d0400035d3c00035d7200035da800035dd000035df800035e52[_^M_][_$_]
+00035e9400035ebc00035ee400035f2200035f6e00035f9400035fb80003[_^M_][_$_]
+60000003604600036082000360c0000360fc000361380003617c000361a2[_^M_][_$_]
+000361d8000362060003622c0003625200036288000362b6000362dc0003[_^M_][_$_]
+63020003633e0003637a000363b6000363f20003641a000364420003646c[_^M_][_$_]
+00036496000364be000364e60003650e0003653600036578000365a40003[_^M_][_$_]
+65dc0003660a000366420003667000036698000366c60003671200036750[_^M_][_$_]
+00036796000367dc0003681200036840000368660003688c000368bc0003[_^M_][_$_]
+68e40003690c000369340003697c000369ba000369f000036a3800036a5e[_^M_][_$_]
+00036a8200036abe00036b0000036b3c00036b7a00036baa00036bda0003[_^M_][_$_]
+6c1000036c4600036c8200036cbe00036ce600036d0e00036d3800036d62[_^M_][_$_]
+00036da200036dc800036dee00036e1400036e4200036e6800036e8e0003[_^M_][_$_]
+6eb400036ee200036f0800036f3a00036f6200036f9000036fb400036fea[_^M_][_$_]
+0003700e000370340003705800037094000370d00003710c000371540003[_^M_][_$_]
+717c000371a40003734200037376000373ae000373e80003741a0003744c[_^M_][_$_]
+00037484000374bc000375040003754e00037596000375de000376360003[_^M_][_$_]
+768e000376e200037738000377a8000378180003784600037874000378a6[_^M_][_$_]
+000378d80003790e0003794000037996000379ee00037a5000037ab20003[_^M_][_$_]
+7b0a00037b6000037b8e00037bbc00037bee00037c2000037c5800037c90[_^M_][_$_]
+00037cce00037d0c00037d6000037db600037e1600037e7600037ed20003[_^M_][_$_]
+7f2c00037f9000037ff80003802c0003806000038094000380c8000380fe[_^M_][_$_]
+0003813400038174000381b40003820400038256000382b6000383160003[_^M_][_$_]
+8374000383d40003842c00038488000384b6000384e40003851600038548[_^M_][_$_]
+00038580000385b8000386020003864e000386a6000386fe000387500003[_^M_][_$_]
+87a4000387d2000388040003883600038868000388a6000388e400038922[_^M_][_$_]
+00038960000389ba00038a1a00038a8200038ae600038b1400038b420003[_^M_][_$_]
+8b7400038ba600038bde00038c1600038c5000038c8a00038cd400038d1e[_^M_][_$_]
+00038d8000038de200038e3a00038e9400038f0200038f7000038fa40003[_^M_][_$_]
+8fda0003900a0003903e00039072000390a4000390e40003911800039148[_^M_][_$_]
+00039176000391a6000391dc0003920a0003923a0003928c000392e00003[_^M_][_$_]
+932c00039378000393cc0003942000039484000394ea000395440003959e[_^M_][_$_]
+000396060003966e000396d20003973c000397b40003982c000398680003[_^M_][_$_]
+98a4000398e4000399240003996a000399b0000399fe00039a4c00039ab2[_^M_][_$_]
+00039b1a00039b8600039bf200039c5c00039cc400039d3c00039db40003[_^M_][_$_]
+9df200039e3000039e7200039eb400039efe00039f4800039f9400039fe0[_^M_][_$_]
+0003a0440003a0a80003a11e0003a1940003a1fa0003a2620003a2e00003[_^M_][_$_]
+a35e0003a3900003a3ba0003a40a0003a43a0003a48a0003a4b80003a500[_^M_][_$_]
+0003a5440003a57a0003a5d80003a62c0003a6500003a6ac0003a7120003[_^M_][_$_]
+a76e0003a7ea0003a8940003a8d80003a8fc0003a93c0003a96a0003a9a6[_^M_][_$_]
+0003a9fa0003aa500003aaa60003ab040003ab2a0003abdc0003ac9c0003[_^M_][_$_]
+ad7c0003adac0003add80003ae160003ae540003ae840003aec00003af08[_^M_][_$_]
+0003af3e0003af960003aff80003b0aa0003b1760003b2560003b2840003[_^M_][_$_]
+b2aa0003b2e00003b3160003b3440003b3720003b3a00003b3de0003b422[_^M_][_$_]
+0003b4580003b4c40003b5240003b57e0003b5fe0003b6860003b6da0003[_^M_][_$_]
+b7180003b73e0003b7800003b7ae0003b7ec0003b83e0003b8920003b8ea[_^M_][_$_]
+0003b93e0003b9700003b9c60003ba220003bab40003bade0003bb080003[_^M_][_$_]
+bb700003bb980003bbd60003bc3e0003bccc0003bd600003bd860003bdc2[_^M_][_$_]
+0003be4a0003becc0003bf3a0003bfc00003c04c0003c0d80003c1640003[_^M_][_$_]
+c1b00003c1fe0003c2340003c2680003c29a0003c3060003c3b20003c3e8[_^M_][_$_]
+0003c41e0003c4640003c48e0003c4ea0003c5460003c5840003c5f00003[_^M_][_$_]
+c67a0003c6f00003c7540003c77a0003c7b40003c82c0003c8be0003c950[_^M_][_$_]
+0003c9b80003ca260003caa80003cad20003cb000003cb480003cbcc0003[_^M_][_$_]
+cbf60003cc200003cc7c0003ccbe0003cd680003cda20003cdf20003ce72[_^M_][_$_]
+0003cee40003cf580003cf980003d01c0003d0a80003d12e0003d1940003[_^M_][_$_]
+d1ce0003d2160003d2520003d2800003d3140003d3960003d43c0003d48a[_^M_][_$_]
+0003d4da0003d5500003d5bc0003d5fc0003d62e0003d6600003d6980003[_^M_][_$_]
+d6d00003d6fc0003d7280003d7540003d7800003d7ac0003d7d80003d80c[_^M_][_$_]
+0003d8400003d8780003d8b00003d9740003d9c80003daac0003dba60003[_^M_][_$_]
+dbb60003dc7a0003dd180003dde60003debc0003dfd00003e0b20003e0c2[_^M_][_$_]
+0003e1640003e1fc0003e2ba0003e3a00003e3fe0003e4fa0003e5720003[_^M_][_$_]
+e6a00003e79c0003e8580003e8680003e8bc0003e9a00003ea6e0003eac8[_^M_][_$_]
+0003ebd20003ec7a0003ed280003ed380003ed480003ee140003eeca0003[_^M_][_$_]
+ef960003f06a0003f13c0003f2940003f3980003f3a80003f4440003f4fa[_^M_][_$_]
+0003f5620003f6120003f6780003f7740003f8240003f8d60003f9980003[_^M_][_$_]
+fa4e0003fb200003fc220003fd260003fe060003ff380004002c00040112[_^M_][_$_]
+000401d4000402ce0004037200040382000403aa00040428000404380004[_^M_][_$_]
+0476000404b4000404f2000405200004054c000405780004059e000405ca[_^M_][_$_]
+000405f6000406240004065200040680000406ac000406da000407080004[_^M_][_$_]
+0736000407640004079a000407d0000408060004083c00040872000408a8[_^M_][_$_]
+000408de00040914000409240004095a00040990000409c2000409f40004[_^M_][_$_]
+0a2200040a5000040b7400040c9600040cc400040cf200040d2000040d4e[_^M_][_$_]
+00040e8600040f7600040fa400040fd2000410000004102e000410c20004[_^M_][_$_]
+10e80004110e0004113400041162000411900004123e000412d800041306[_^M_][_$_]
+000413340004136600041398000413c6000413f400041426000414580004[_^M_][_$_]
+1486000414b4000414e6000415180004154600041574000415a6000415d8[_^M_][_$_]
+00041606000416340004166600041698000416c6000416f4000417260004[_^M_][_$_]
+175800041786000417b4000418aa00041990000419be000419ec00041a66[_^M_][_$_]
+00041b9400041cce00041d5800041df000041e1e00041e4c00041e820004[_^M_][_$_]
+1eb800041eea00041f1c00041f4a00041f7800041faa00041fdc0004200a[_^M_][_$_]
+0004203800042090000420ce00042168000421c80004223a000423080004[_^M_][_$_]
+231800042420000424e8000425bc000426ec000427c20004289000042962[_^M_][_$_]
+00042ad200042ae200042af200042c4e00042d2600042d9200042ea60004[_^M_][_$_]
+2eb600042f7c00043086000431f000043260000432e80004339a0004340a[_^M_][_$_]
+0004341a0004342a000434cc00043562000435b6000436ba000437600004[_^M_][_$_]
+3808000438da0004397e00043a2000043aae00043abe00043bcc00043cca[_^M_][_$_]
+00043d9400043df000043e4c00043ecc00043f2e00043fb20004400a0004[_^M_][_$_]
+40640004411c000441d80004435400044364000444060004449a000445b6[_^M_][_$_]
+0004462e000446a4000447520004483c000448d00004493c00044a1c0004[_^M_][_$_]
+4acc00044b5400044bec00044cd600044dd400044f660004500c000450b8[_^M_][_$_]
+0004516200045210000453180004532800045406000454fe0004550e0004[_^M_][_$_]
+55a000045642000456800004575000045810000458ca000459bc00045b28[_^M_][_$_]
+00045c8e00045dbc00045e92000460060004610c00046220000462920004[_^M_][_$_]
+641c000464860004656c0004666000046706000467380004676a0004677a[_^M_][_$_]
+000468500004698400046a8400046b5c00046c6400046d4e00046dae0004[_^M_][_$_]
+6e0a00046f1800046f94000470ba000471ce0004729200047356000473f4[_^M_][_$_]
+00047482000475180004767a0004768a000477d6000478e600047a2a0004[_^M_][_$_]
+7b2000047bee00047c9e00047d1e00047e1000047efc00047f0c00047f1c[_^M_][_$_]
+00047f2c00047fb2000480420004819e000482f2000483a20004843c0004[_^M_][_$_]
+85560004865400048712000487e40004890600048a3e00048b1400048c12[_^M_][_$_]
+00048d2c00048e7800049016000491a2000492540004930a0004944c0004[_^M_][_$_]
+957800049610000496b6000496e80004971a000498e200049a8c00049bb8[_^M_][_$_]
+00049cdc00049e660004a0120004a0400004a06e0004a12e0004a1ca0004[_^M_][_$_]
+a2cc0004a32c0004a39e0004a3da0004a4160004a5e00004a7f00004a8c8[_^M_][_$_]
+0004a9aa0004aa5c0004aae80004abec0004acfe0004adca0004ae920004[_^M_][_$_]
+afd20004b1000004b1c20004b2820004b32a0004b3dc0004b4440004b4ac[_^M_][_$_]
+0004b5880004b65c0004b79c0004b8cc0004b9ee0004bae40004bb3c0004[_^M_][_$_]
+bb960004bc020004bc720004bcf60004bd7c0004be8c0004bf800004c0d2[_^M_][_$_]
+0004c20a0004c21a0004c2480004c2760004c35e0004c4420004c4c80004[_^M_][_$_]
+c55e0004c5e00004c65e0004c6de0004c75e0004c7e00004c8620004c936[_^M_][_$_]
+0004ca2e0004ca5c0004ca8a0004cabc0004caee0004cafe0004cb0e0004[_^M_][_$_]
+cb3c0004cb6a0004cb9c0004cbce0004cc000004cc320004cc640004cc96[_^M_][_$_]
+0004cd620004cd720004cda00004cdce0004ce000004ce320004ce640004[_^M_][_$_]
+ce960004cec80004cefa0004cf2c0004cf5e0004cf8c0004cfba0004cfec[_^M_][_$_]
+0004d01e0004d0500004d0800004d0b20004d0e40004d16a0004d1d80004[_^M_][_$_]
+d26c0004d27c0004d3760004d4800004d5800004d66c0004d7360004d804[_^M_][_$_]
+0004d8b20004d9700004da220004dac40004dba80004dc600004dcea0004[_^M_][_$_]
+dd700004ddc60004de560004deb80004def40004df7e0004dfde0004e012[_^M_][_$_]
+0004e0460004e0860004e0ee0004e11a0004e19e0004e1e00004e2220001[_^M_][_$_]
+000008d1008c0010004c000700020010002f005500000469ffff00030001[_^M_][_$_]
+b15440b80135b31c22392f410c0135003f0135004f0135008f0135009f01[_^M_][_$_]
+3500050040012eb31c1f3930411201280001004001280080012800900128[_^M_][_$_]
+00a0012800b00128000500ef0126000100400125b31b1f3940410a012400[_^M_][_$_]
+01002f01050001004f010400010040010340aa090d392f652f662f672f68[_^M_][_$_]
+2f692f6a2f742f752f7b2f7c2fd12fd20c20fc30fc40fcd0fc04f1f2197f[_^M_][_$_]
+f2018ff2aff2e0f203d1d216171c7b7c161b7b7c19307c407c507c607c70[_^M_][_$_]
+7c05767716171c6d7016171c6c6f16171c6b6e161b0f6b7f6b8f6e9f6eaf[_^M_][_$_]
+6e056b6e7f721a747514151c676a14151ca96ab96ae96af96a0466691415[_^M_][_$_]
+1cc669016568141b0f651f6502af68bf68ef65ff6504656885711a197316[_^M_][_$_]
+7a431921794319217f413201340001007f01330080013300900133000300[_^M_][_$_]
+6f0132007f0132008f01320003007001210001002f0121003f0121004f01[_^M_][_$_]
+21005f0121000400a0011e00b0011e00c0011e00030020012d0030012d00[_^M_][_$_]
+60012d0070012d0080012d0090012d00060040010fb40b1f39092f411f01[_^M_][_$_]
+0e005f010e009f010e00af010e00bf010e00050090010e00bf010e00cf01[_^M_][_$_]
+0e00df010e00ef010e00050020010e006f010e00b0010e00d0010e00e001[_^M_][_$_]
+0eb205d10f4123010e003f010e00bf010e00cf010e0004000f010e005f01[_^M_][_$_]
+0e006f010e00a0010e00bf010e00cf010e00df010e0007003f010e004f01[_^M_][_$_]
+0e007f010e00af010e00ef010e00ff010eb2069f7f4123010e00af010e00[_^M_][_$_]
+e0010e00ff010e0004001f010e003f010e00af010e00df010e00ef010e00[_^M_][_$_]
+05000f010e001f010e002f010e007f010e008f010e00c0010e00df010e00[_^M_][_$_]
+ef010eb2086d9f411b010e00cf010e00ef010e00ff010e0004000f010e00[_^M_][_$_]
+ef010e0002000f010e002f010e003f010e004f010e00c0010e00df010e00[_^M_][_$_]
+ef010eb2073a70bd010e00df010e00020040010eb32b33395f411b010e00[_^M_][_$_]
+70010e008f010e009f010e00cf010e00df010e0006000f010e001f010e00[_^M_][_$_]
+3f010e0080010e00bf010e00ef010e00060040010eb3091b3970bb013600[_^M_][_$_]
+0100200108b30d113940b80102b20b1439b9ffc00107b31b22392f411801[_^M_][_$_]
+0c004f010c0002002f010c0001008f010b0001002f0107004f010700c001[_^M_][_$_]
+0700d001070004004f010700010040010040640b103940fe0b1139e0f601[_^M_][_$_]
+e0f60114f424f40274f40140df60df0220d830d840d80366c176c10299be[_^M_][_$_]
+0120b230b240b20360b070b0029b93002b9a92002b9991002b9493002b92[_^M_][_$_]
+93002b9193062b9395032b9885042b9796042b9695032b9995a995026f41[_^M_][_$_]
+0f0131007f0131008f01310003013001160032001f011901160015001f01[_^M_][_$_]
+16b285032bb9ffe0012fb30b143970410d01170001002f0117003f011700[_^M_][_$_]
+4f0117005f0117000401130114b22a1fa0bc011400b0011400c001144016[_^M_][_$_]
+0370fbf0fb022ffb6ffb7ffb0340fa50fa60faf0fa04b8ffc040fffa1115[_^M_][_$_]
+3950ec70ec0250ec70ec0240ec01bfeb0170ea0130ea0170e9015fe970e9[_^M_][_$_]
+f0e903a0e9015fe870e802efe8017fe8bfe8efe803f0e701f0e7012fe780[_^M_][_$_]
+e7a0e7f0e70450e6f0e60250e660e670e6c0e60450e50170e50180e4e0e4[_^M_][_$_]
+f0e40340dca0dc02309050900220a04fa05fa09fa0afa0efa006e0f501e0[_^M_][_$_]
+f501f3851e1f2fe20140dd019fd5afd5bfd5030fd340d302e0d0010fc470[_^M_][_$_]
+c4022fc43fc44fc45fc49fc4afc4efc4ffc40899bd99bf02dad9042bd685[_^M_][_$_]
+022bcccd062bcd85022bc9c8062bc885022b8d8b042b8c8b191f8b83c81f[_^M_][_$_]
+897d641f817f082b7d7f082b7f85072baf85042b8885012b8785002b8485[_^M_][_$_]
+042b8385002b2ffd4ffd027f40abef012df03bf04ff069f07ff0051b3715[_^M_][_$_]
+1836151535151234150f33150c3215093115063015032f15002e1526270f[_^M_][_$_]
+28270f26002a1f0f2a2f2a3f2a032f24bf24022a2b0f2c2b0f22230e2423[_^M_][_$_]
+0f1e1f0e201f0f2005010f10110c0c0d0e0c090a0b0c0607080c0304050c[_^M_][_$_]
+0001020c0003181f500f700f027f0f800fbf0f030f031f032f034f037f03[_^M_][_$_]
+bf03ef030704012c1f1b011d0d18071a0d1510170d1204140d701b01501b[_^M_][_$_]
+701bf01b03b8ffc0400b1b131839701b801b02503301b0124b004b5442b0[_^M_][_$_]
+13014b004b5342b0332b4bb8032052b0322b4bb009505b58b101018e59b0[_^M_][_$_]
+332bb00288b8010054b00488b8020054b012435a5b58b80119b101018e85[_^M_][_$_]
+1bb900040100b04b60858d592b1db0644b5358b0801d59b0324b5358b090[_^M_][_$_]
+1d5900732b74742b2b2b2b2b7373742b2b2b2b2b2b2b732b2b2b2b2b2b73[_^M_][_$_]
+732bb1282645b02a4561b02c4560442b2b2b2b2b2b2b2b2b2b2b2b73b0ef[_^M_][_$_]
+45b0f0456168b0f04560b0ef23447373012b2b2b2b2b2b2b2b2b2b2b2b2b[_^M_][_$_]
+2b2b2b2b2b73737473737373732b74737374737373747374737474737374[_^M_][_$_]
+7374747374737374742b747374742b73742b2b2b2b7300732b2b2b2b2b2b[_^M_][_$_]
+2b2b2b2b737373737373737473742b2b73737373732b2b2b742b73742b75[_^M_][_$_]
+5e7374755e7374755e7374755e7374755e2b73747374737373012b2bb018[_^M_][_$_]
+b0314b53422b2b73742b732b732b2b2b732b2b2b2b732b2b2b73742b7373[_^M_][_$_]
+2b7373732b7373742b732bb109322b4bb05052424bb03c524bb00f505bb0[_^M_][_$_]
+1a23424bb0c8524bb036505bb00c23422b00000000>[_^M_][_$_]
+[16105 16169 15785 16013 16241 16333 15745 15601 15869 15477 16269 15937 16109[_^M_][_$_]
+16361 16209 16209 16113 16321 16289 14899 ] AllocGlyphStorage[_^M_][_$_]
+]def [_^M_][_$_]
+108 44 [_^M_][_$_]
+PrepFor2015[_^M_][_$_]
+AddFontInfoBegin[_^M_][_$_]
+AddFontInfo[_^M_][_$_]
+/OrigFontType /TrueType def [_$_]
+/OrigFontName <4D6963726F736F66742053616E73205365726966> def
+/OrigFontStyle () def[_^M_][_$_]
+/FSType 8 def[_^M_][_$_]
+AddFontInfoEnd[_^M_][_$_]
+[16#2c 16#6e18af9b ] AddXUID[_^M_][_$_]
+Type42DictEnd[_^M_][_$_]
+1 9274 49 <000100a40000052305ba0009007140180702010281060714060607050304[_^M_][_$_]
+01077f000e0d0d063b00b8fffa40090b0b063b0006027f04b8fff8b40d0d[_^M_][_$_]
+063b04b8fff8401c0b0b063b04400b006e020a046b02770b01780b01480b[_^M_][_$_]
+e80bf80b03005f5d715d2b2b011a18102b2b4ded32102b2bed32002f3f31[_^M_][_$_]
+30872e2b877dc4212301112311330111330523c7fd00b8c60300b90485fb[_^M_][_$_]
+7b05bafb7b048500>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 11218 55 <0001002d000004b605ba00070049403101059106030300a00205a0027f03[_^M_][_$_]
+040d0d063b03400809037f3030e9090148099809b809f809040709170977[_^M_][_$_]
+09d70904005f5d5d5d2b011a18102b4dede610e6002f3fed323130012111[_^M_][_$_]
+231121352104b6fe1bc3fe1f0489050cfaf4050cae00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8070 43 <000100a40000052305ba000b006f4019039108400605089118300a060301[_^M_][_$_]
+0509017f000e0d0d063b00b8fffa40090b0b063b0008047f05b8fff8b40d[_^M_][_$_]
+0d063b05b8fff840170b0b063b05400d006e020c056b02570d01480d880d[_^M_][_$_]
+02005f5d712b2b011a18102b2b4ded32102b2bed32002f333f332b001a18[_^M_][_$_]
+104ded31302123112111231133112111330523c3fd06c2c202fac302b2fd[_^M_][_$_]
+4e05bafda6025a00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 6982 38 <00010060ffe7055e05d3001900c140341a182a183a18030511010a0f0115[_^M_][_$_]
+080103470901080901090d92060407178717020b00171392001307101710[_^M_][_$_]
+020d020a09167d17b8fff4b40d0d063b17b8fff040190b0b063b17051715[_^M_][_$_]
+17020f17400b1036107d030c0d0d063b03b8ffd6400c0b0b063b03400703[_^M_][_$_]
+01100303b8ffe2401d090b361b176f021a036c02b81b01571b01271b371b[_^M_][_$_]
+571b771ba71b05005f5d715d2b2b2b015f5e5d1a18102b2b4ded2b5e5d10[_^M_][_$_]
+2b2bed39395f5e5d003fedcd5f5e5d3fedcd5d5d31305f5d5d5d5d052000[_^M_][_$_]
+1110002132001723262623220011100033323637330600030afec9fe8d01[_^M_][_$_]
+730137ef015015c80cd9a5dffefc0102ddacd40ec815feba190199015d01[_^M_][_$_]
+5d0199fefed38ba4fecdfee3fee4fecca89ceaff0000>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 7274 39 <000200a40000056005ba0006000f007840180a0401050201090f91000307[_^M_][_$_]
+9106080b180b020d020b7d03b8fffcb40d0d063b03b8ffeab70b0b063b03[_^M_][_$_]
+077f06b8fff6b40d0d063b06b8fff8401c0b0b063b064011036f0210066b[_^M_][_$_]
+02571101a7110118114811881103005f5d5d712b2b011a18102b2b4ded10[_^M_][_$_]
+2b2bed5f5e5d002fed3fed31305e5d5d1321201110212137212012111002[_^M_][_$_]
+2121a401d102ebfd15fe2fc2010b013fe8e7fec0fef505bafd2bfd1bae01[_^M_][_$_]
+29010e0107012000>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 10444 53 <000200a40000056a05ba0014001c00f14017470c570c670c03024c035c03[_^M_][_$_]
+020302011c018100141400b8fff840320b0b063b0000148a14012c143c14[_^M_][_$_]
+0208141814020902050e150e250e350e0403197d070e170e270e370e040e[_^M_][_$_]
+040d0d063b0eb8fff4401a0b0b063b0e01020e1112140600080018007800[_^M_][_$_]
+030d0015077f08b8fff8b40d0d063b08b8fff8402f0b0b063b08401e006f[_^M_][_$_]
+021d086b028711010212110915919706010606081c9209030008481e0177[_^M_][_$_]
+1e01a71eb71e02005f5d715d002f333fed12392f5ded1239395f5d302b2b[_^M_][_$_]
+011a18102b2b4ded325f5e5d1117332f2b2b5ded5f5d5f5e5d5d5d872e2b[_^M_][_$_]
+2b0e4b52587d1b7a5910c431005f5d5f5d21230326262321112311213216[_^M_][_$_]
+16151406071516170121323635342121056ad28a25ac70fe99c20289aad8[_^M_][_$_]
+88b0999950fc8f01b1b5a3fec6fe3101876884fd8d05ba42d48598cc1f04[_^M_][_$_]
+31d80192728cfa00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 2538 16 <0001004201b80268026d0003003140208f0101012f024f025f0203025000[_^M_][_$_]
+6000027001012f01010005017005012005015d712f10c65d5d5d002f5dcd[_^M_][_$_]
+5d3130012135210268fdda022601b8b5>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 7462 40 <000100a4000004e905ba000b0062401f0991064002010691183005910203[_^M_][_$_]
+0a910107081708020a00080400060a7f01b8fffab40d0d063b01b8fffe40[_^M_][_$_]
+120b0b063b01400d006f020c016b02e80d01005f5d2b2b011a18102b2b4d[_^M_][_$_]
+ed3210c4c45f5e5d002fed3fed2b001a18104ded31302121112115211121[_^M_][_$_]
+1521112104e9fbbb0423fc9f0329fcd7038305baaefe40aefe10>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8922 48 <000100a40000060605ba000c0125b90003fff4400a0d0d063b0b48091036[_^M_][_$_]
+09b8ffb840960910368c0b9c0b0283099309020268040101480458047804[_^M_][_$_]
+0302670301014703570377030302180a0101050a150a250a0302880a980a[_^M_][_$_]
+a80a0300bc0adc0a0203c80a01011e052e0502037705a705b705c705d705[_^M_][_$_]
+05018505950502001e022e0202037702a702b702c702d702050185029502[_^M_][_$_]
+0205020a030479040108041804280438040409000b08030104070b027f00[_^M_][_$_]
+0a0d0d063b00b8fff640090b0b063b0009057f07b8fffc40200b0b063b07[_^M_][_$_]
+400e006e020d076b02770e01570e970e02080e180e380ee80e04005f5d5d[_^M_][_$_]
+712b2b011a18102b4ded32102b2bed32002f33333f335f5e5d5d12173931[_^M_][_$_]
+305d5f5d5f715f5d5f5d5f715f5d5f5d5f5d5f715f5d015f5d5f5d5f5d5f[_^M_][_$_]
+5d5f5d5d2b2b2b212311012301112311210101210606b8fe5eaefe5eb801[_^M_][_$_]
+23018d018f012304dffb2104dffb2105bafb3a04c600>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 9726 51 <000200a4000004fc05ba000b0015007d400d0c9109090b159100030b107d[_^M_][_$_]
+05b8ffeeb40d0d063b05b8ffda40190b0b063b053705010205051505020d[_^M_][_$_]
+0305400910360c0a7f0bb8fff8b40d0d063b0bb8fffc40170b0b063b0b40[_^M_][_$_]
+17056f02160b6b02e817017717a71702005f5d5d2b2b011a18102b2b4ded[_^M_][_$_]
+322b5f5e5d5f5d102b2bed002f3fed12392fed3130132132161615140421[_^M_][_$_]
+21112313213236353426262321a40223b4f38efee6fef5fe8fc2c20173bb[_^M_][_$_]
+9f58877ffe9105ba43df8adee6fdb602f88c84588824>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8832 47 <000100a40000042f05ba0005003b400f020304910100400f18360007047f[_^M_][_$_]
+01b8fffc40110b0b063b014006016b02a70701880701005f5d5d2b011a18[_^M_][_$_]
+102b4ded10c62b002fed3f3130212111331121042ffc75c202c905bafaf4[_^M_][_$_]
+>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 6372 36 <0002fffe0000055805ba0002000a00fd402ea809b8090257020103000504[_^M_][_$_]
+0401020607070101041c01020481030a1403030a01071c01000781080914[_^M_][_$_]
+08080908b8ffea40740919360316091936980aa80a02027a0a0103370a47[_^M_][_$_]
+0a570a670a0401070a170a270a03029809b80902037709013a094a095a09[_^M_][_$_]
+6a090418092809880903020a09010a0306934007021702020b0002400b0b[_^M_][_$_]
+063b020203080903080c0377020b087602370c670cf70c03580c780c0208[_^M_][_$_]
+0cb80c02005f5d715d2b2b00182f3f1239392f2b5f5e5d1a4ded3130015f[_^M_][_$_]
+5e5d5f5d5d5d5f5d5f5d5f5d5f5d5f5d2b2b872e2b084b52587d1b7a5910[_^M_][_$_]
+c487052e182b084b52587d1b7a5910c40705103c3c07103c3c015f5d5d01[_^M_][_$_]
+01030123032103230133039afefef603b6dbaafd9aa2cd0233d1025802a8[_^M_][_$_]
+fd58fda801befe4205ba>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 0 0 <0002003200000226060000030007000033112111252111213201f4fe7801[_^M_][_$_]
+1cfee40600fa006c0528>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/N 49 def[_^M_][_$_]
+/T 55 def[_^M_][_$_]
+/H 43 def[_^M_][_$_]
+/C 38 def[_^M_][_$_]
+/D 39 def[_^M_][_$_]
+/R 53 def[_^M_][_$_]
+/hyphen 16 def[_^M_][_$_]
+/E 40 def[_^M_][_$_]
+/M 48 def[_^M_][_$_]
+/P 51 def[_^M_][_$_]
+/L 47 def[_^M_][_$_]
+/A 36 def[_^M_][_$_]
+/.notdef 0 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 1 /N put[_^M_][_$_]
+dup 2 /T put[_^M_][_$_]
+dup 3 /H put[_^M_][_$_]
+dup 4 /C put[_^M_][_$_]
+dup 5 /D put[_^M_][_$_]
+dup 6 /R put[_^M_][_$_]
+dup 7 /hyphen put[_^M_][_$_]
+dup 8 /E put[_^M_][_$_]
+dup 9 /M put[_^M_][_$_]
+dup 10 /P put[_^M_][_$_]
+dup 11 /L put[_^M_][_$_]
+dup 12 /A put[_^M_][_$_]
+pop[_^M_][_$_]
+Pscript_WinNT_Incr begin[_^M_][_$_]
+%%BeginResource: file Pscript_Text 5.0 0[_^M_][_$_]
+/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d[_^M_][_$_]
+/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^[_^M_][_$_]
+length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets[_^M_][_$_]
+{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&[_^M_][_$_]
+/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}[_^M_][_$_]
+if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{[_^M_][_$_]
+{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get[_^M_][_$_]
+StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $[_^M_][_$_]
+! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy[_^M_][_$_]
+put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM[_^M_][_$_]
+makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0[_^M_][_$_]
+Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N[_^M_][_$_]
+/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT[_^M_][_$_]
+{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d[_^M_][_$_]
+/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `[_^M_][_$_]
+/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d[_^M_][_$_]
+/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont[_^M_][_$_]
+Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1[_^M_][_$_]
+add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E[_^M_][_$_]
+/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $[_^M_][_$_]
+FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255[_^M_][_$_]
+idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector[_^M_][_$_]
+Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding[_^M_][_$_]
+length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2[_^M_][_$_]
+add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs[_^M_][_$_]
+putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^[_^M_][_$_]
+256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E[_^M_][_$_]
+/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~[_^M_][_$_]
+definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix[_^M_][_$_]
+makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ ![_^M_][_$_]
+findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?[_^M_][_$_]
+{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName[_^M_][_$_]
+get undefinefont}forall undefinefont}b[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+end reinitialize[_^M_][_$_]
+F /F0 0 /0 F /TTE1CD9F20t00 mF [_$_]
+/F0S47YFFFFFFBB F0 [71.031 0 0 -68.75 0 0 ] mFS
+F0S47YFFFFFFBB Ji [_$_]
+3125 894 M <010203040506070208090A0B0C0208>S [_$_]
+3125 800 M <010203070208090A0B0C0208>S [_$_]
+3125 706 M <080B02070208090A0B0C0208>S [_$_]
+: 3125 550 594 78 rc 317 VM?[_^M_][_$_]
+1 7608 41 <000100a40000048105ba0009004f40110591020207019108030704040002[_^M_][_$_]
+067f07b8fffe401c0d0d063b074000400b16360b006f020a076b02e80b01[_^M_][_$_]
+270b570b02005f5d5d2b2b2b011a18102b4ded3212392f002f3fed12392f[_^M_][_$_]
+ed3130012111211521112311210481fce502b1fd4fc203dd050cfe3aaefd[_^M_][_$_]
+6805ba00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/F 41 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 13 /F put[_^M_][_$_]
+pop[_^M_][_$_]
+3125 613 M <0C06080D070208090A0B0C0208>S [_$_]
+; N 3625 1056 M 3788 1056 I K [_^M_][_$_]
+N 3788 1056 M 3713 1075 I 3713 1038 I C [_^M_][_$_]
+ O 951 VM?[_^M_][_$_]
+1 10782 54 <0001005cffe704ec05d300230140b9001dfff4b40b0b063b1cb8fff44076[_^M_][_$_]
+0b0b063b5a220103681f0102571f0100071f0101351e451e0203781d0102[_^M_][_$_]
+131d231d531d0303381a481a020228173817481703007814010255140155[_^M_][_$_]
+100103680e780e02780d0101080d010a5a0c01580b010225093509020317[_^M_][_$_]
+05270537050300670201024a0201030a0f1b21040068150115189112b8ff[_^M_][_$_]
+fc40150d0d063b120407034703570367038703050b000307b8fff040200d[_^M_][_$_]
+0d063b07910013167f150c0b0b063b151b7f0f0c0b0b063b0f150f030a7f[_^M_][_$_]
+21b8ffe0b40b0b063b21b8fff4401a0d0d063b21047f034025216f022403[_^M_][_$_]
+6c02b825e82502a72501005f5d5d2b2b011a18104ded102b2bed1239392f[_^M_][_$_]
+2bed2f2bed003fed2bc45f5e5d3f2bedc45d12173931305f5d5f5d5f5d5f[_^M_][_$_]
+5d5f5d5d5e5d5f5d5d5f5d5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d[_^M_][_$_]
+5f5d2b2b0520002733161633323635342624263534243332041723022122[_^M_][_$_]
+0615141604161615140402cdfecafecd08bb0ff3aca3c7cefe09db011dec[_^M_][_$_]
+f8013009bd1dfeb1a2b28f0187e6a4fed3190116daa49d8673796e6bbe9e[_^M_][_$_]
+b2e4e6d2010a7a655c5c5654b195bdfa>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8228 44 <000100bc0000017f05ba00030063400c020301007f01040d0d063b01b8ff[_^M_][_$_]
+fc400d0b0b063b01400405017f213005b8ffc0402a232836070517053705[_^M_][_$_]
+6705770587050647055705670587059705a705b705c705f7050998050178[_^M_][_$_]
+0501005f5d715d712b2b011a18102b2b4ded002f3f313021231133017fc3[_^M_][_$_]
+c305ba00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 7732 42 <00010060ffe705b605d3001d00e640521c100b0b063b2a1d3a1d7a1d0303[_^M_][_$_]
+671401022511012a0f010388080102350801039801010217911818002809[_^M_][_$_]
+01090d920604139200131a0a7d090c0d0d063b09100b0b063b0908184818[_^M_][_$_]
+020900181c167f1ab8ffd6401b0b0b063b1a351a0103371a01000710010d[_^M_][_$_]
+02107d030c0d0d063b03b8ffd6400f0b0b063b03402703010503010e0303[_^M_][_$_]
+b8ffe24018090b361f1a6f021e036c02781f01271fa71fb71ff71f04005f[_^M_][_$_]
+5d5d2b2b2b015f5e5d5d1a18102b2b4ded5f5e5d5f5d5f5d102bed32c45f[_^M_][_$_]
+5e5dd42b2bed002f3fed3fedcd5d12392fed31305f5d5f5d5f5d5f5d5d5f[_^M_][_$_]
+5d5f5d2b0520001110002120041723262623220011100033203735213521[_^M_][_$_]
+112327060325fec4fe770184013b0109015f15c90ce8bee3feeb0118e201[_^M_][_$_]
+3d9afe7d023f89339519019e01580159019dffd68ea1fecafee6fee7fec9[_^M_][_$_]
+d1dfaffd149ab300>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/S 54 def[_^M_][_$_]
+/I 44 def[_^M_][_$_]
+/G 42 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 14 /S put[_^M_][_$_]
+dup 15 /I put[_^M_][_$_]
+dup 16 /G put[_^M_][_$_]
+pop[_^M_][_$_]
+3800 1081 M <0E02060F0110070208090A0B0C0208>S [_$_]
+N 2744 1338 M 2906 1056 I K [_^M_][_$_]
+N 2906 1056 M 2888 1131 I 2850 1113 I C [_^M_][_$_]
+ O N 2744 1338 M 2906 1338 I K [_^M_][_$_]
+N 2906 1338 M 2831 1356 I 2831 1319 I C [_^M_][_$_]
+ O 2919 1363 M <0B0F0E02070208090A0B0C0208>S [_$_]
+N 2606 1056 M 2906 1056 I K [_^M_][_$_]
+N 2906 1056 M 2831 1075 I 2831 1038 I C [_^M_][_$_]
+ O 635 VM?[_^M_][_$_]
+1 11490 57 <0001000c0000054805ba000600c0b90003ffea405d091936001609193678[_^M_][_$_]
+019801c80103023501450155016501040307011701270167010477029702[_^M_][_$_]
+c70203023a024a025a026a0204030802180228026802040a020303020800[_^M_][_$_]
+700207036d0237086708f7080358087808020808b80802005f5d715d2b2b[_^M_][_$_]
+00182f3f3130015f5e5d5f5d5f5d5d5f5d5f5d2b2bb106024354581b401a[_^M_][_$_]
+05061c0504068100011400000105041c05060481030214030302872e4d2b[_^M_][_$_]
+084b52587d1b7a5910c487052e182b084b52587d1b7a5910c45901012301[_^M_][_$_]
+3301010548fdc6c8fdc6cf01cf01cf05bafa4605bafb1704e900>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 9432 50 <00020060ffe705db05d3000b001700bdb10602435458400a129200040c92[_^M_][_$_]
+06130f03b8ffeeb40d0d063b03b8ffe040100b0b063b0303191815090c0d[_^M_][_$_]
+0d063b09b8ffd6b70b0b063b090919181112392f2b2bcd1112392f2b2bcd[_^M_][_$_]
+003fed3fed31301b404a12920a001a002a000300040c9205061506250603[_^M_][_$_]
+0906130f7d03157d09406803010a031a033a034a03046709010509150935[_^M_][_$_]
+094509040a0319036f0218096c02e81901571901271901005f5d715d2b2b[_^M_][_$_]
+015f5e5d5d5d5d1a18104ded10ed003f5e5ded3f5ded3130590120001110[_^M_][_$_]
+00212000111000013200111000232200111000031f01340188fe78feccfe[_^M_][_$_]
+cbfe76018a0133dc0119fee8d9ddfee5011a05d3fe60feaafeaafe6001a1[_^M_][_$_]
+0155015601a0faba0138011801180138fec8fee8fee9fec7>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/V 57 def[_^M_][_$_]
+/O 50 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 17 /V put[_^M_][_$_]
+dup 18 /O put[_^M_][_$_]
+pop[_^M_][_$_]
+2919 1081 M <110804021206070208090A0B0C0208>S [_$_]
+N 3617 1058 M 3617 1047 3607 1037 3596 1037 -c 3584 1037 3574 1047 3574 1058 -c 3574 1069 3584 1079 3596 1079 -c 3607 1079 3617 1069 3617 1058 -c C [_^M_][_$_]
+ O N 1769 1338 M 1931 1619 I K [_^M_][_$_]
+N 1931 1619 M 1875 1563 I 1913 1544 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1525 I K [_^M_][_$_]
+N 1931 1525 M 1869 1481 I 1894 1456 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1431 I K [_^M_][_$_]
+N 1931 1431 M 1856 1413 I 1875 1375 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1338 I K [_^M_][_$_]
+N 1931 1338 M 1856 1356 I 1856 1319 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1244 I K [_^M_][_$_]
+N 1931 1244 M 1875 1300 I 1856 1263 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1150 I K [_^M_][_$_]
+N 1931 1150 M 1894 1219 I 1869 1194 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1056 I K [_^M_][_$_]
+N 1931 1056 M 1913 1131 I 1875 1113 I C [_^M_][_$_]
+ O 635 VM?[_^M_][_$_]
+1 12728 60 <0001000a0000054c05ba000800dc4018010704670401034804580402000a[_^M_][_$_]
+041a04020b0200040305b8ffe8b60a0f3605030305b8ffe1400c091b3600[_^M_][_$_]
+1f091b3607017f04b8fff8403b0b0b063b04400500047f30300a00700209[_^M_][_$_]
+056d02070a170a970ab70ad70af70a06070a370a670a870aa70a05480a68[_^M_][_$_]
+0a780a03c80ad80ae80a03005f5d715d712b2b2b011a18102b4ded392b2b[_^M_][_$_]
+002f3f2b1239395f5e5d5f5d5f5d1133333130b106024354581b401a0708[_^M_][_$_]
+19070608810001140000010706190708068105041405050487052e2b084b[_^M_][_$_]
+52587d1b7a5910c487052e182b084b52587d1b7a5910c459010111231101[_^M_][_$_]
+330101054cfdc0c2fdc0ec01b601b405bafcb3fd93026d034dfd5d02a300[_^M_][_$_]
+>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 6682 37 <000300a4000004ec05ba000d0016001e00c24043380d480d02080b010708[_^M_][_$_]
+0111020b1e910e4005040e91183016910503179104270001081a181a020d[_^M_][_$_]
+020b04127f0c091c09020f0309180d0d063b090c0b0b063b090904b8fffa[_^M_][_$_]
+b40d0d063b04b8fffcb70b0b063b041a7d00b8fff4b40d0d063b00b8ffea[_^M_][_$_]
+b60b0b063b000e17b8fffc40190d0d063b177f044020006f021f046b02a7[_^M_][_$_]
+20018820e82002005f5d5d2b2b011a18104ded2b32102b2bed122b2b392f[_^M_][_$_]
+2b2b5f5e5ded12395f5e5d5d002fed3fed2b001a18104ded3931305f5e5d[_^M_][_$_]
+5d5d01140421211121320415140716160121323635342623211121203534[_^M_][_$_]
+26232104ecfee8fef5fddb020aea010cd38e8dfc7a0146a19894b7fecc01[_^M_][_$_]
+61015ca1d4feb801aacedc05bac8aed46624c1012f67786c6dfba2fc8379[_^M_][_$_]
+>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/Y 60 def[_^M_][_$_]
+/B 37 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 19 /Y put[_^M_][_$_]
+dup 20 /B put[_^M_][_$_]
+pop[_^M_][_$_]
+1944 1644 M <0E130914120B070208090A0B0C0208>S [_$_]
+635 VM?[_^M_][_$_]
+1 11330 56 <000100a4ffe7052305ba00130059402077120103070a010b0800010c020e[_^M_][_$_]
+05030a9100130e7f0f0e0d0d063b0f067f05b8fff640150d0d063b054015[_^M_][_$_]
+0f6e0214056b02a71501481501005f5d5d2b2b011a18102b4ded102bed00[_^M_][_$_]
+3fed3f335f5e5d5e5d31305f5d0522260235113311101633323611113311[_^M_][_$_]
+10060402e3fffd43c2c2bbbbc2c37fff0019c6010cb10350fcb3fedfb6b6[_^M_][_$_]
+0121034dfcb0fef6fc7d>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8352 45 <00010037ffe7035c05ba000f007c401f550a01030e0308075807020b0007[_^M_][_$_]
+0a914803010203130e7f0f0e0d0d063b0fb8fff0401d0b0b063b0f087f40[_^M_][_$_]
+6707010807180728074807040d0007160d0d063b07b8ffe840120b0b063b[_^M_][_$_]
+07110f6e02b811012711a71102005f5d5d2b01182f2b2b5f5e5d5d1a4ded[_^M_][_$_]
+102b2bed003f5f5dedc45f5e5d3f5f5d3130011006232226353533103332[_^M_][_$_]
+36351133035cd0cbb6d4c3c76970c201d5fef3e1deb627fef476bf03ef00[_^M_][_$_]
+>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/U 56 def[_^M_][_$_]
+/J 45 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 21 /U put[_^M_][_$_]
+dup 22 /J put[_^M_][_$_]
+pop[_^M_][_$_]
+1944 1550 M <0E020615040215060807121416080402070208090A0B0C0208>S [_$_]
+1944 1456 M <0E020C01050C060507121416080402070208090A0B0C0208>S [_$_]
+317 VM?[_^M_][_$_]
+1 9928 52 <00020060ff8b05f405d3000f001f018c400d1d200b0b063b10200b0b063b[_^M_][_$_]
+1db8ffe0b40b0b063b10b8ffca40180b0b063b611e711e811e0303070017[_^M_][_$_]
+002700030088020111b8ffc040490f13368a1e01021a1e6a1e7a1e030137[_^M_][_$_]
+1167110202271101001010110f000f0e001f1d1d1c020203011e0101001f[_^M_][_$_]
+001f811e01141e1f1e1e011592020d0f03040a0a1a0a2a0a03030ab8ffe8[_^M_][_$_]
+404c0b0b063b0a041e0001181f281f681f781f041f1b9217016701770103[_^M_][_$_]
+003a014a015a01030105041504250403090304180b0b063b0413381e481e[_^M_][_$_]
+020000101b1d1e04121802040f0307127d0db8ffeeb40d0d063b0db8ffd6[_^M_][_$_]
+400e0b0b063b0d187d070c0d0d063b07b8ffd640320b0b063b0740680d01[_^M_][_$_]
+0a0d1a0d3a0d4a0d046707010507150735074507040a03210d6f0220076c[_^M_][_$_]
+02e82101572101272101005f5d715d2b2b015f5e5d5d5d5d1a18102b2b4d[_^M_][_$_]
+ed102b2bed12173911121739c65f5d003f2b5f5e5dc65d5f5dfdc45d1139[_^M_][_$_]
+393f2b5f5d121739ed313087082e2b87087dc407083c083c0708103c083c[_^M_][_$_]
+005f5d5f5d5f5d5f5d2b015d5f5d5f5d002b2b012b2b2507270623200011[_^M_][_$_]
+10002120001110072736111000232200111000333237273705f473f2a3cd[_^M_][_$_]
+fecbfe76018a013501340188be9287fee8d9ddfee5011ada746992731489[_^M_][_$_]
+bf6301a10155015601a0fe60feaafeb4d573a0010e01180138fec8fee8fe[_^M_][_$_]
+e9fec7317389>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/Q 52 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 23 /Q put[_^M_][_$_]
+pop[_^M_][_$_]
+1944 1363 M <0E08171508010408070208090A0B0C0208>S [_$_]
+N 2736 1340 M 2736 1328 2726 1318 2715 1318 -c 2703 1318 2693 1328 2693 1340 -c 2693 1351 2703 1361 2715 1361 -c 2726 1361 2736 1351 2736 1340 -c C [_^M_][_$_]
+ O 1944 1269 M <011509140806070208090A0B0C0208>S [_$_]
+1944 1175 M <010F0B070208090A0B0C0208>S [_$_]
+1944 1081 M <0C06060C13070208090A0B0C0208>S [_$_]
+N 2598 1058 M 2598 1047 2588 1037 2577 1037 -c 2565 1037 2555 1047 2555 1058 -c 2555 1069 2565 1079 2577 1079 -c 2588 1079 2598 1069 2598 1058 -c C [_^M_][_$_]
+ O N 2025 844 M 2188 963 I K [_^M_][_$_]
+N 2188 963 M 2119 931 I 2138 900 I C [_^M_][_$_]
+ O N 2025 844 M 2188 725 I K [_^M_][_$_]
+N 2188 725 M 2138 788 I 2119 756 I C [_^M_][_$_]
+ O 2200 988 M <0E15140E0817070208090A0B0C0208>S [_$_]
+2200 750 M <080B0809080102070208090A0B0C0208>S [_$_]
+N 2942 727 M 2942 715 2932 705 2921 705 -c 2909 705 2899 715 2899 727 -c 2899 738 2909 748 2921 748 -c 2932 748 2942 738 2942 727 -c C [_^M_][_$_]
+ O N 988 1088 M 1150 1338 I K [_^M_][_$_]
+N 1150 1338 M 1094 1288 I 1125 1263 I C [_^M_][_$_]
+ O N 988 1088 M 1150 844 I K [_^M_][_$_]
+N 1150 844 M 1125 919 I 1094 894 I C [_^M_][_$_]
+ O 1163 1363 M <02130A08070208090A0B0C0208>S [_$_]
+N 1761 1340 M 1761 1328 1751 1318 1740 1318 -c 1728 1318 1718 1328 1718 1340 -c 1718 1351 1728 1361 1740 1361 -c 1751 1361 1761 1351 1761 1340 -c C [_^M_][_$_]
+ O 317 VM?[_^M_][_$_]
+1 12422 59 <0001000a0000054c05ba000b00f6406c080b380b680b880b980b05070537[_^M_][_$_]
+05670597050409020504050203020106010809080b0a0b0007000201020b[_^M_][_$_]
+000b03030a050605080708040409070106018100071400000709030a0381[_^M_][_$_]
+040914040409070627066706770604080428046804780404010603040a40[_^M_][_$_]
+13163606b8ffc040381216360a0a2a0a020a002a00020506250602050425[_^M_][_$_]
+04020b030a060a0600040d0070020c046d02e90d01580d01a80db80df80d[_^M_][_$_]
+03470d01005f5d5d715d2b2b0111123939182f2f5f5e5d5d5d5d2b2b002f[_^M_][_$_]
+3f5f5d5d313087052e4d2b877dc4872e182b877dc4871008c008c0871008[_^M_][_$_]
+c008c0871008c008c0871008c008c0015f5e5d5d21230901230901330901[_^M_][_$_]
+3301054ceefe4efe4cee0233fe05ed017b017dedfe03026dfd93030402b6[_^M_][_$_]
+fde2021efd4a>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/X 59 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 24 /X put[_^M_][_$_]
+pop[_^M_][_$_]
+1163 869 M <08180A06080E0E0F1201070208090A0B0C0208>S [_$_]
+N 2017 846 M 2017 834 2007 824 1996 824 -c 1984 824 1974 834 1974 846 -c 1974 857 1984 867 1996 867 -c 2007 867 2017 857 2017 846 -c C [_^M_][_$_]
+ O 575 1113 M <0208090A0B0C0208>S [_$_]
+N 979 1090 M 979 1078 970 1068 958 1068 -c 947 1068 937 1078 937 1090 -c 937 1101 947 1111 958 1111 -c 970 1111 979 1101 979 1090 -c C [_^M_][_$_]
+ O LH[_^M_][_$_]
+(%%[Page: 1]%%) = [_^M_][_$_]
+%%PageTrailer[_^M_][_$_]
+[_^M_][_$_]
+%%Trailer[_^M_][_$_]
+%%DocumentNeededResources: [_^M_][_$_]
+%%DocumentSuppliedResources: [_^M_][_$_]
+%%+ procset Pscript_WinNT_ErrorHandler 5.0 0[_^M_][_$_]
+%%+ procset Pscript_FatalError 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Win_Basic 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Win_Utils_L2 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Win_GdiObject 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Win_GdiObject_L3 5.0 0[_^M_][_$_]
+%%+ procset Pscript_T42Hdr 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Text 5.0 0[_^M_][_$_]
+Pscript_WinNT_Incr dup /terminate get exec[_^M_][_$_]
+ehsave restore[_^M_][_$_]
+(%%[LastPage]%%) = [_^M_][_$_]
+%%EOF[_^M_][_$_]
+[_^D_][_^[_]%-12345X@PJL EOJ
+[_^[_]%-12345X
addfile ./docs/html/images/unif-templ-hier.pdf
binary ./docs/html/images/unif-templ-hier.pdf
addfile ./docs/html/images/unif-templ-hier.ps
hunk ./docs/html/images/unif-templ-hier.ps 1
+%!PS-Adobe-3.0[_^M_][_$_]
+%%Title: Document[_^M_][_$_]
+%%Creator: PScript5.dll Version 5.2.2[_^M_][_$_]
+%%CreationDate: 10/10/2004 14:55:30[_^M_][_$_]
+%%BoundingBox: (atend)[_^M_][_$_]
+%%DocumentNeededResources: (atend)[_^M_][_$_]
+%%DocumentSuppliedResources: (atend)[_^M_][_$_]
+%%DocumentData: Clean7Bit[_^M_][_$_]
+%%TargetDevice: (HP LaserJet 8150 Series) (3010.107) 0[_^M_][_$_]
+%%LanguageLevel: 3[_^M_][_$_]
+%%EndComments[_^M_][_$_]
+[_^M_][_$_]
+%%BeginDefaults[_^M_][_$_]
+%%ViewingOrientation: 1 0 0 1[_^M_][_$_]
+%%EndDefaults[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+%%BeginProlog[_^M_][_$_]
+%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0[_^M_][_$_]
+/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false[_^M_][_$_]
+setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype[_^M_][_$_]
+ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch[_^M_][_$_]
+def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0[_^M_][_$_]
+rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def[_^M_][_$_]
+/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def[_^M_][_$_]
+typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72[_^M_][_$_]
+def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp[_^M_][_$_]
+exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def[_^M_][_$_]
+/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype[_^M_][_$_]
+{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}[_^M_][_$_]
+readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop[_^M_][_$_]
+(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def[_^M_][_$_]
+/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )[_^M_][_$_]
+tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup[_^M_][_$_]
+xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint[_^M_][_$_]
+tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck[_^M_][_$_]
+{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])[_^M_][_$_]
+tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup[_^M_][_$_]
+rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}[_^M_][_$_]
+forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier[_^M_][_$_]
+/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin[_^M_][_$_]
+$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0[_^M_][_$_]
+ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont[_^M_][_$_]
+lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict[_^M_][_$_]
+/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{[_^M_][_$_]
+(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt[_^M_][_$_]
+$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}[_^M_][_$_]
+repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname[_^M_][_$_]
+=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end[_^M_][_$_]
+end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking[_^M_][_$_]
+where{pop/setpacking where{pop oldpack setpacking}if}if[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+userdict /Pscript_WinNT_Incr 230 dict dup begin put[_^M_][_$_]
+%%BeginResource: file Pscript_FatalError 5.0 0[_^M_][_$_]
+userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup[_^M_][_$_]
+length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding[_^M_][_$_]
+{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end[_^M_][_$_]
+/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div[_^M_][_$_]
+cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[[_^M_][_$_]
+(This job requires more memory than is available in this printer.)100 500[_^M_][_$_]
+(Try one or more of the following, and then print again:)100 485[_^M_][_$_]
+(For the output format, choose Optimize For Portability.)115 470[_^M_][_$_]
+(In the Device Settings page, make sure the Available PostScript Memory is accurate.)[_^M_][_$_]
+115 455(Reduce the number of fonts in the document.)115 440[_^M_][_$_]
+(Print the document in parts.)115 425 12/Times-Roman showpage[_^M_][_$_]
+(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end[_^M_][_$_]
+version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse[_^M_][_$_]
+105000 VM?[_^M_][_$_]
+%%BeginResource: file Pscript_Win_Basic 5.0 0[_^M_][_$_]
+/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^[_^M_][_$_]
+/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-[_^M_][_$_]
+/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,[_^M_][_$_]
+d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C[_^M_][_$_]
+/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M[_^M_][_$_]
+/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d[_^M_][_$_]
+/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage[_^M_][_$_]
+, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop[_^M_][_$_]
+languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,[_^M_][_$_]
+d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld[_^M_][_$_]
+/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix[_^M_][_$_]
+currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit[_^M_][_$_]
+counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b[_^M_][_$_]
+/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~[_^M_][_$_]
+d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put[_^M_][_$_]
+/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq[_^M_][_$_]
+{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `[_^M_][_$_]
+/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped[_^M_][_$_]
+{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}[_^M_][_$_]
+{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~[_^M_][_$_]
+itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5[_^M_][_$_]
+ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform[_^M_][_$_]
+nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -[_^M_][_$_]
+neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0[_^M_][_$_]
+- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool[_^M_][_$_]
+2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e[_^M_][_$_]
+{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b[_^M_][_$_]
+/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont[_^M_][_$_]
+{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1[_^M_][_$_]
+dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d[_^M_][_$_]
+E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1[_^M_][_$_]
+^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2[_^M_][_$_]
+16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}[_^M_][_$_]
+bind d[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+%%BeginResource: file Pscript_Win_Utils_L2 5.0 0[_^M_][_$_]
+/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge[_^M_][_$_]
+{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $[_^M_][_$_]
+snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F[_^M_][_$_]
+setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d[_^M_][_$_]
+/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b[_^M_][_$_]
+/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}?[_^M_][_$_]
+not{/ColorRendering<</GetHalftoneName{currenthalftone @/HalftoneName known{[_^M_][_$_]
+/HalftoneName get}{!/none}?}bn/GetPageDeviceName{currentpagedevice @[_^M_][_$_]
+/PageDeviceName known{/PageDeviceName get @ null eq{!/none}if}{!/none}?}bn[_^M_][_$_]
+/GetSubstituteCRD{!/DefaultColorRendering/ColorRendering resourcestatus{! ![_^M_][_$_]
+/DefaultColorRendering}{(DefaultColorRendering*){cvn exit}127 string[_^M_][_$_]
+/ColorRendering resourceforall}?}bn>>/defineresource where{!/ProcSet[_^M_][_$_]
+defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource `[_^M_][_$_]
+mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)[_^M_][_$_]
+GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5[_^M_][_$_]
+-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub[_^M_][_$_]
+getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~[_^M_][_$_]
+/ColorRendering defineresource !}b/findcolorrendering where{!}{[_^M_][_$_]
+/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{[_^M_][_$_]
+/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}?[_^M_][_$_]
+/selectcolorrendering{findcolorrendering !/ColorRendering findresource[_^M_][_$_]
+setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get[_^M_][_$_]
+`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d[_^M_][_$_]
+/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{[_^M_][_$_]
+/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d[_^M_][_$_]
+/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d[_^M_][_$_]
+E}bind d[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+end[_^M_][_$_]
+%%EndProlog[_^M_][_$_]
+[_^M_][_$_]
+%%BeginSetup[_^M_][_$_]
+statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end[_^M_][_$_]
+[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginNonPPDFeature: JobTimeout 0[_^M_][_$_]
+0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse[_^M_][_$_]
+%%EndNonPPDFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginNonPPDFeature: WaitTimeout 120[_^M_][_$_]
+120 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse[_^M_][_$_]
+%%EndNonPPDFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *HPEdgeToEdge True[_^M_][_$_]
+<</EdgeToEdge true>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *HPPaperPolicy PromptUser[_^M_][_$_]
+[_^M_][_$_]
+ <</DeferredMediaSelection true>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *HPHalftone PrinterDefault[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Collate True[_^M_][_$_]
+<</Collate true>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Smoothing True[_^M_][_$_]
+[_^M_][_$_]
+ << /PostRenderingEnhance true /PostRenderingEnhanceDetails << /REValue 2 /Type 8 >>[_^M_][_$_]
+ >> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *PageSize Letter[_^M_][_$_]
+[_^M_][_$_]
+ <</PageSize [612 792] /ImagingBBox null>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *StapleLocation 1parallel[_^M_][_$_]
+[_^M_][_$_]
+ userdict /HPStapleOption {(ONE)} put[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *MediaType None[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *OutputBin Upper[_^M_][_$_]
+<</Staple 0 /OutputType (TOP OUTPUT BIN)>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Duplex DuplexNoTumble[_^M_][_$_]
+[_^M_][_$_]
+ <</Duplex true /Tumble false>> setpagedevice[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *JRConstraints 0[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *JRHDInstalled JRHDStore[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *JRHDNotInstalled JRHDPrivate[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *HPPrinterModelName HP_LaserJet_8150_Series_PS[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option2 False[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option6 False[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option3 True[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option5 False[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option20 Standard[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *Option21 MailboxModeMailbox[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *InstalledMemory 32-39MB[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *PrinterHardDisk False[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+featurebegin{[_^M_][_$_]
+%%BeginFeature: *JobRetention True[_^M_][_$_]
+[_^M_][_$_]
+%%EndFeature[_^M_][_$_]
+}featurecleanup[_^M_][_$_]
+1 setlinecap 1 setlinejoin[_^M_][_$_]
+/mysetup [ 72 600 V 0 0 -72 600 V 2.99905 785.99908 ] def [_^M_][_$_]
+%%EndSetup[_^M_][_$_]
+[_^M_][_$_]
+userdict begin /ehsave save def end[_^M_][_$_]
+%%EndPageComments[_^M_][_$_]
+%%BeginPageSetup[_^M_][_$_]
+/DeviceRGB dup setcolorspace /colspABC exch def[_^M_][_$_]
+mysetup concat colspRefresh[_^M_][_$_]
+%%EndPageSetup[_^M_][_$_]
+[_^M_][_$_]
+Pscript_WinNT_Incr begin[_^M_][_$_]
+%%BeginResource: file Pscript_Win_GdiObject 5.0 0[_^M_][_$_]
+/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore[_^M_][_$_]
+{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d[_^M_][_$_]
+/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps[_^M_][_$_]
+L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType[_^M_][_$_]
+1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d[_^M_][_$_]
+/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal[_^M_][_$_]
+{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep[_^M_][_$_]
+gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b[_^M_][_$_]
+/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M[_^M_][_$_]
+MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep[_^M_][_$_]
+M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8[_^M_][_$_]
++}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d[_^M_][_$_]
+/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix[_^M_][_$_]
+GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0[_^M_][_$_]
+/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal[_^M_][_$_]
+makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5[_^M_][_$_]
+/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $[_^M_][_$_]
+/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt[_^M_][_$_]
+~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0[_^M_][_$_]
+0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b[_^M_][_$_]
+/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +[_^M_][_$_]
+: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~[_^M_][_$_]
+XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S[_^M_][_$_]
+GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix[_^M_][_$_]
+currentmatrix readonly d ; ;}if}b[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+%%BeginResource: file Pscript_Win_GdiObject_L3 5.0 0[_^M_][_$_]
+/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 1 d/RepsV 1 d/RepsH 1 d[_^M_][_$_]
+/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d[_^M_][_$_]
+/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d[_^M_][_$_]
+/SetBGndFGnd{BGnd null ne{BGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~[_^M_][_$_]
+rf}if FGnd null ne{FGnd aload ! scol}if}b/PaintProc{` SetBGndFGnd RepsH{Width[_^M_][_$_]
+Height F mx PaintData imagemask Width 0 +}repeat E}b E d/mp/makepattern , d[_^M_][_$_]
+/build_pattern{CTMsave GDIBWPatternMx setmatrix/nupangle where{! nupangle -90[_^M_][_$_]
+eq{nupangle R}if}if GDIBWPatternDict @ ` Width Height ne{Width Height gt{Width[_^M_][_$_]
+Height V 1}{1 Height Width V}? +S}if xOrg yOrg E matrix + mp CTMrestore}b/hbf[_^M_][_$_]
+{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}{L}? ;}b/pbf{: ![_^M_][_$_]
+/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d[_^M_][_$_]
+/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1 d/BBox[0 0[_^M_][_$_]
+Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d 20 dict @ `[_^M_][_$_]
+/ImageType 1 d/Width Width d/Height Height d/ImageMatrix[1 0 0 1 0 0]d[_^M_][_$_]
+/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{[_^M_][_$_]
+/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict[_^M_][_$_]
+~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L}[_^M_][_$_]
+? ;}b/mask_pbf{:/fEOFill ~ d 20 dict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/Height ~[_^M_][_$_]
+d/Width ~ d/PatternType 1 d/PaintType 2 d/TilingType 1 d/BBox[0 0 Width Height][_^M_][_$_]
+d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d/PaintProc{` Width Height[_^M_][_$_]
+T 1 1 dtransform abs ~ abs ~ 0 0 3 -1 $ 0 0 6 array astore{PaintData}imagemask[_^M_][_$_]
+E}b & mx makepattern setpattern E fEOFill{O}{L}? ;}b/grf4{4 dict `/ShadingType[_^M_][_$_]
+4 d/DataSource ~ d/ColorSpace ~ d & E shfill}b[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+end reinitialize[_^M_][_$_]
+/DeviceGray dup setcolorspace /colspABC exch def[_^M_][_$_]
+0 0 scol N 2950 725 M 3113 869 I K [_^M_][_$_]
+N 3113 869 M 3044 831 I 3069 806 I C [_^M_][_$_]
+ O N 2950 725 M 3113 775 I K [_^M_][_$_]
+N 3113 775 M 3038 769 I 3044 738 I C [_^M_][_$_]
+ O N 2950 725 M 3113 681 I K [_^M_][_$_]
+N 3113 681 M 3044 719 I 3038 681 I C [_^M_][_$_]
+ O N 2950 725 M 3113 588 I K [_^M_][_$_]
+N 3113 588 M 3069 650 I 3044 619 I C [_^M_][_$_]
+ O 55017 VM?[_^M_][_$_]
+Pscript_WinNT_Incr begin[_^M_][_$_]
+%%BeginResource: file Pscript_T42Hdr 5.0 0[_^M_][_$_]
+/asc42 0.0 d/sF42{/asc42 ~ d Ji}bind d/bS42{0 asc42 -M}bind d/eS42{0 asc42 neg[_^M_][_$_]
+-M}b/Is2015?{version cvi 2015 ge}bind d/AllocGlyphStorage{Is2015?{!}{{string}[_^M_][_$_]
+forall}?}bind d/Type42DictBegin{25 dict `/FontName ~ d/Encoding ~ d 4 array[_^M_][_$_]
+astore cvx/FontBBox ~ d/PaintType 0 d/FontType 42 d/FontMatrix[1 0 0 1 0 0]d[_^M_][_$_]
+/CharStrings 256 dict `/.notdef 0 d & E d/sfnts}bind d/Type42DictEnd{& @[_^M_][_$_]
+/FontName get ~ definefont ! E}bind d/RDS{string currentfile ~ readstring !}[_^M_][_$_]
+executeonly d/PrepFor2015{Is2015?{/GlyphDirectory 16 dict d sfnts 0 get @ 2 ^[_^M_][_$_]
+(glyx)putinterval 2 ^(locx)putinterval ! !}{! !}?}bind d/AddT42Char{Is2015?[_^M_][_$_]
+{findfont/GlyphDirectory get ` d E ! !}{findfont/sfnts get 4 ^ get 3 ^ 2 ^[_^M_][_$_]
+putinterval ! ! ! !}?}bind d/IDStrNull{1 add 2 mul @ string 0 1 3 ^ 1 sub{1 ^ ~[_^M_][_$_]
+0 put}for ~ !}bind d/IDStr{@ 1 add 2 mul string 0 1 3 ^{1 ^ ~ @ 2 mul ~ 3 copy[_^M_][_$_]
+256 idiv put ~ 1 add ~ 256 mod put}for ~ !}bind d/IDStr2{~ @ 1 add 2 mul string[_^M_][_$_]
+0 1 3 ^{1 ^ ~ @ 2 mul ~ 5 ^ add 3 copy 256 idiv put ~ 1 add ~ 256 mod put}for ~[_^M_][_$_]
+! ~ !}bind d/CIDT42Begin{25 dict `/CDevProc ~ d/CIDMap ~ d/CIDCount ~ d[_^M_][_$_]
+/CIDSystemInfo 3 dict @ ` 3 -1 $/Supplement ~ d 3 -1 $/Ordering ~ d 3 -1 $[_^M_][_$_]
+/Registry ~ d E d/CIDFontName ~ d/Encoding ~ d 4 array astore cvx/FontBBox ~ d[_^M_][_$_]
+/CharStrings 2 dict @ `/.notdef 0 d E d/GDBytes 2 d/CIDFontType 2 d/FontType 42[_^M_][_$_]
+d/PaintType 0 d/FontMatrix[1 0 0 1 0 0]d/Metrics2 16 dict d/sfnts}bind d[_^M_][_$_]
+/CIDT42End{CIDFontName & E/CIDFont defineresource !}bind d/T42CIDCP32K{/CIDFont[_^M_][_$_]
+findresource @ length dict copy @/FID undef `/CIDFontName ~ d/CIDMap ~ d[_^M_][_$_]
+/CIDCount ~ d/Metrics2 8 dict d CIDFontName & E/CIDFont defineresource !}bind d[_^M_][_$_]
+/T42CIDCPR{/CIDFont findresource @ length dict copy @/FID undef `/CIDFontName ~[_^M_][_$_]
+d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec cvx}if/! cvx/! cvx[_^M_][_$_]
+/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^ 0.0 0.0}}? bind[_^M_][_$_]
+readonly/CDevProc ~ d CIDFontName & E/CIDFont defineresource !}bind d[_^M_][_$_]
+/T0AddT42Char{/CIDFont findresource/GlyphDirectory get ` d E ! !}bind d[_^M_][_$_]
+/T0AddT42Mtx2{/CIDFont findresource/Metrics2 get ` d E}bind d/UpdateCIDMap{[_^M_][_$_]
+/CIDFont findresource/CIDMap get 3 1 $ putinterval}d/AddXUID{version cvi 3011[_^M_][_$_]
+ge{/XUID ~ d}{!}?}bind d/hfDef42CID{/CIDFont findresource @ length dict copy @[_^M_][_$_]
+/FID undef `/CIDFontName 2 ^ d @ type @/booleantype ne{/arraytype eq{/CDevProc[_^M_][_$_]
+~ d}{matrix @ 4 4 -1 $ put/FontMatrix ~ d}?}{! !}? & E/CIDFont defineresource[_^M_][_$_]
+!}bind d/hfDefRT42CID{/CIDFont findresource @ length dict copy @/FID undef `[_^M_][_$_]
+/CIDFontName 1 ^ d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec[_^M_][_$_]
+cvx}if/! cvx/! cvx/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^[_^M_][_$_]
+0.0 0.0}}? bind readonly/CDevProc ~ d & E/CIDFont defineresource !}bind d[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+end reinitialize[_^M_][_$_]
+-0.578 -0.207 1.387 0.922[_^M_][_$_]
+ 256 array 0 1 255 {1 index exch /.notdef put} for /TTE1CD9F20t00[_^M_][_$_]
+Type42DictBegin[_^M_][_$_]
+[<00010000000a000a000a000a6376742065146ccc000000ac000002746670[_^M_][_$_]
+676d2bc15a050000032000000768676c79661b44802b000058e80004e222[_^M_][_$_]
+68656164ce8b489100000a8800000036686865610dd60c5100000ac00000[_^M_][_$_]
+0024686d74785d72583900000ae4000023446c6f636116f62ad600002e28[_^M_][_$_]
+000023486d6178700dba0872000051700000002070726570877d61440000[_^M_][_$_]
+5190000007556764697200000000000000000000000005ba0019000005ba[_^M_][_$_]
+001900000000000000000000000000000000000000000425001900000000[_^M_][_$_]
+ffe700000000ffe70000000000000000fe68ffea00000000000000000000[_^M_][_$_]
+0000000002f5ffee05cd000002ddffee02f0000000000000000000000000[_^M_][_$_]
+000000000000000000000000000000000000000000000000000000000000[_^M_][_$_]
+000008000000080000000000000000000000000000000000000000000000[_^M_][_$_]
+00000000000000000000000000d2010e012c01130000000000c8010900c8[_^M_][_$_]
+000000000000000000000000000000890048001bff77ffb8ffe500a4005f[_^M_][_$_]
+000aff5cffa1fff6000000000000000afff6000000000000000000000059[_^M_][_$_]
+ffa700c9000000c3000000c2008300c3000000bd000000bd007900c3006c[_^M_][_$_]
+00bd009100af00000000026f00ae00a6009a0000009b0094008b00cc00ae[_^M_][_$_]
+00a600940000000000ff000001e300000000000000000000000000000000[_^M_][_$_]
+00000000000000000000000000cd00cd006801ee0060008c000000000000[_^M_][_$_]
+0000000000000000000000a800a800a800b900cd00a80052016a0049007d[_^M_][_$_]
+007d0083008a00000071009b00910078000001fc0071ff8f022a006d0094[_^M_][_$_]
+00a0029a030a00b800ae008b018b019101d10391008c00730268027d01b0[_^M_][_$_]
+01dd021c033302a3026b02730152024c0021004c05e704f20098ff6800ac[_^M_][_$_]
+00c500850085005c0054006000b401baff1ffe680000008300bc00940094[_^M_][_$_]
+ff85ffae00520029061400ae00460046fe580560008f076002f20025003e[_^M_][_$_]
+004700500058007300a80160006000950025003e004700500058007300a8[_^M_][_$_]
+01600000002d005000600081009300ba0108ffd3ffaeff9106520060005c[_^M_][_$_]
+00b0012b012b04ba013e018507600016000a004b403f545249483b393837[_^M_][_$_]
+363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a19[_^M_][_$_]
+1817161514131211100f0e0d0c0b0a090807060504030201002c01b01843[_^M_][_$_]
+58456ab0194360b0462344231020b0464ef04d2fb000121b21231133592d[_^M_][_$_]
+2c01b0184358b0052bb000134bb0145058b100403859b0062b1b21231133[_^M_][_$_]
+592d2c01b01843584eb0032510f221b000124d1b2045b00425b00425234a[_^M_][_$_]
+6164b0285258212310d21bb0032510f221b0001259592d2cb01a43582121[_^M_][_$_]
+1bb00225b0022549b00325b003254a612064b01050582121211bb00325b0[_^M_][_$_]
+032549b0005058b0005058b8ffe238211bb0103821591bb0005258b01e38[_^M_][_$_]
+211bb8fff03821595959592d2c01b0184358b0052bb000134bb0145058b9[_^M_][_$_]
+0000ffc03859b0062b1b21231133592d2c4e018a10b146194344b00014b1[_^M_][_$_]
+0046e2b00015b90000fff03800b0003cb0282bb0022510b0003c2d2c0118[_^M_][_$_]
+b0002fb00114f2b00113b001154db000122d2c01b0184358b0052bb00013[_^M_][_$_]
+b90000ffe038b0062b1b21231133592d2c01b018435845646a23456469b0[_^M_][_$_]
+1943646060b0462344231020b046f02fb000121b2121208a208a52581133[_^M_][_$_]
+1b212159592d2c01b10b0a432343650a2d2c00b10a0b4323430b2d2c00b0[_^M_][_$_]
+462370b101463e01b0462370b10246453ab10200080d2d2cb0122bb00225[_^M_][_$_]
+45b00225456ab0408b60b0022523442121212d2cb0132bb0022545b00225[_^M_][_$_]
+456ab8ffc08c60b0022523442121212d2cb000b0122b2121212d2cb000b0[_^M_][_$_]
+132b2121212d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc0[_^M_][_$_]
+8a8cb8100062602b0c642364615c58b00361592d2cb1000325456854b01c[_^M_][_$_]
+4b505a58b0032545b0032545606820b004252344b0042523441bb0032520[_^M_][_$_]
+4568208a2344b00325456860b003252344592d2cb00325204568208a2344[_^M_][_$_]
+b003254564686560b00425b0016023442d2cb00943588721c01bb0124358[_^M_][_$_]
+8745b0112bb0472344b0477ae41b038a45186920b04723448a8a8720b0a0[_^M_][_$_]
+5158b0112bb0472344b0477ae41b21b0477ae4595959182d2c208a452345[_^M_][_$_]
+6860442d2c456a422d2c01182f2d2c01b0184358b00425b0042549642345[_^M_][_$_]
+64696120b080626ab00225b00225618cb0194360b0462344218a10b046f6[_^M_][_$_]
+211b21212121592d2c01b0184358b0022545b002254564606ab00325456a[_^M_][_$_]
+6120b00425456a208a8b65b0042523448cb00325234421211b20456a4420[_^M_][_$_]
+456a44592d2c012045b00055b018435a584568234569b0408b6120b08062[_^M_][_$_]
+6a208a236120b003258b65b0042523448cb00325234421211b2121b0192b[_^M_][_$_]
+592d2c018a8a45642345646164422d2cb00425b00425b0192bb0184358b0[_^M_][_$_]
+0425b00425b00325b01b2b01b0022543b04054b0022543b000545a58b003[_^M_][_$_]
+252045b040614459b0022543b00054b0022543b040545a58b004252045b0[_^M_][_$_]
+4060445959212121212d2c014b525843b00225452361441b2121592d2c01[_^M_][_$_]
+4b525843b00225452360441b2121592d2c4b525845441b2121592d2c0120[_^M_][_$_]
+b003252349b04060b0206320b000525823b002253823b002256538008a63[_^M_][_$_]
+381b212121212159012d2c4b505845441b2121592d2c01b005251023208a[_^M_][_$_]
+f500b0016023edec2d2c01b005251023208af500b0016123edec2d2c01b0[_^M_][_$_]
+062510f500edec2d2c462346608a8a462320468a608a61b8ff8062232010[_^M_][_$_]
+238ab14b4b8a70456020b0005058b00161b8ffba8b1bb0468c59b0106068[_^M_][_$_]
+013a2d2c2045b00325465258b0022546206861b00325b003253f2321381b[_^M_][_$_]
+2111592d2c2045b00325465058b0022546206861b00325b003253f232138[_^M_][_$_]
+1b2111592d2c00b00743b006430b2d2c8a10ec2d2cb00c4358211b2046b0[_^M_][_$_]
+005258b8fff0381bb0103859592d2c20b0005558b8100063b003254564b0[_^M_][_$_]
+0325456461b0005358b0021bb04061b00359254569535845441b2121591b[_^M_][_$_]
+21b0022545b00225456164b028515845441b212159592d2c21210c642364[_^M_][_$_]
+8bb84000622d2c21b08051580c6423648bb82000621bb200402f2b59b002[_^M_][_$_]
+602d2c21b0c051580c6423648bb81555621bb200802f2b59b002602d2c0c[_^M_][_$_]
+6423648bb84000626023212d2c4b5358b00425b004254964234564696120[_^M_][_$_]
+b080626ab00225b00225618cb0462344218a10b046f6211b218a11231220[_^M_][_$_]
+392f592d2c2121212121212d2cb0134358031b02592d2cb0134358021b03[_^M_][_$_]
+592d2cb00a2b2310203cb0172b2d2cb00225b8fff038b0282b8a102320d0[_^M_][_$_]
+23b0102bb0054358c01b3c59201011b00012012d2c4b53234b515a58381b[_^M_][_$_]
+2121592d2c01b0022510d023c901b00113b0001410b0013cb001162d2c01[_^M_][_$_]
+b00013b001b0032549b0031738b001132d2c4b53234b515a5820458a6044[_^M_][_$_]
+1b2121592d2cb0024354584b53234b515a58381b2121591b21212121592d[_^M_][_$_]
+2c4b53234b515a58381b2121592d2c4b5458381b2121592d2c4b52587d1b[_^M_][_$_]
+7a592d2cb1020042b123018851b1400188535a58b910000020885458b202[_^M_][_$_]
+010243604259b12401885158b920000040885458b202020243604259b124[_^M_][_$_]
+01885458b2022002436042004b014b5258b2020802436042591bb9400000[_^M_][_$_]
+80885458b202040243604259b94000008063b80100885458b20208024360[_^M_][_$_]
+4259b94000010063b80200885458b2021002436042595959592d00010000[_^M_][_$_]
+00016148e1f6c9625f0f3cf5001b080000000000aff53caf00000000b8f4[_^M_][_$_]
+5fe9fb5cfe520b170760000000090001000100000000000100000760fe52[_^M_][_$_]
+00000ab3fb5cfa7a0b170001000000000000000000000000000008d10258[_^M_][_$_]
+0032000000000239000002200000023900b602d70054047300170473004e[_^M_][_$_]
+071d0081055600580187005c02aa007b02aa004a031d004204ac00710239[_^M_][_$_]
+00b602aa0042023900b6023900000473005c047300e30473003f0473005a[_^M_][_$_]
+0473001f047300560473005c047300620473005604730056023900b60239[_^M_][_$_]
+00b604ac007104ac007104ac00710473005e081f00730556fffe055600a4[_^M_][_$_]
+05c7006005c700a4055600a404e300a40639006005c700a4023900bc0400[_^M_][_$_]
+0037055600a4047300a406aa00a405c700a406390060055600a406390060[_^M_][_$_]
+05c700a40556005c04e3002d05c700a40556000c078d00190556000a0556[_^M_][_$_]
+000a04e300250239008b023900000239002103c1004a046afff402aa0056[_^M_][_$_]
+0473004e0473008b04000048047300480473004802390010047300480473[_^M_][_$_]
+008b01d3008b01d3ffb80400008b01d3008b06aa008b0473008b04730048[_^M_][_$_]
+0473008b0473004802aa008b0400003f02390023047300870400001b05c7[_^M_][_$_]
+000a0400000e0400001b0400002902ac0039021400bc02ac003104ac0058[_^M_][_$_]
+0556fffe0556fffe05c70060055600a405c700a40639006005c700a40473[_^M_][_$_]
+004e0473004e0473004e0473004e0473004e0473004e0400004804730048[_^M_][_$_]
+04730048047300480473004801d3007901d3ffec01d3ffac01d3ffd50473[_^M_][_$_]
+008b04730048047300480473004804730048047300480473008704730087[_^M_][_$_]
+0473008704730087047300500333008504730071047300310473005602cd[_^M_][_$_]
+0068044cfffe04e3008b05e5000005e500000578003202aa00e302aa003f[_^M_][_$_]
+04ac0071080000000639005004ac005c04ac007104ac007104ac00710473[_^M_][_$_]
+00020473008b03f4003305b4007b069600a4046400000231ffb202f6002b[_^M_][_$_]
+02ec002d06250071071d004e0473004804730062023900b604ac00710464[_^M_][_$_]
+001404730042046400330556fffe0473008d0473008d0486005b0556fffe[_^M_][_$_]
+0556fffe0639006008000060078d00480258fff404b0fff402aa005402aa[_^M_][_$_]
+005401c7007d01c7007d04ac007103f4002e0400001b0556000a0156fe54[_^M_][_$_]
+0473004c02aa005a02aa007f040000100400001004730050023900b60239[_^M_][_$_]
+00b603220090080000190556fffe055600a40556fffe055600a4055600a4[_^M_][_$_]
+023900ac0239ffdf023900080239001f06390060063900600639006005c7[_^M_][_$_]
+00a405c700a405c700a401d3008b02aa001702aa000602aa001d02aa002d[_^M_][_$_]
+02aa00f802aa00a202aa0085037a009d02aa00b602aa00170473000801d3[_^M_][_$_]
+000c0556005c0400003f04e3002504000029021400bc05c7000204730048[_^M_][_$_]
+0556000a0400001b055600a40473008b04ac007104ac00a602aa006a02aa[_^M_][_$_]
+001902aa002106ac007f06ac007f06ac003504e300000639006004730048[_^M_][_$_]
+023900bc0556005c0400003f05c700600400004805c70060040000480473[_^M_][_$_]
+00480400fff4023900b60556fffe0473004e0556fffe0473004e05c700a4[_^M_][_$_]
+0513004805c70002055600a404730048055600a404730048047300a401d3[_^M_][_$_]
+0047047300a40255008b047300a402f3004205c700a40473008b05c700a4[_^M_][_$_]
+0473008b063900600473004805c700a402aa008b05c700a402aa002b0556[_^M_][_$_]
+005c0400003f04e3002d0239002304e3002d02d0002305c700a404730087[_^M_][_$_]
+05c700a40473008704e300250400002904e300250400002904ae00a40639[_^M_][_$_]
+006006790060049c0048047300480400004804ae00480400002105310048[_^M_][_$_]
+0400fff4047200b602f6004c09e9008f063900bc03a6008b0568002102aa[_^M_][_$_]
+00e502aa0056071d00810296000f04d5009202d6008302d6008304d500b1[_^M_][_$_]
+02d600700556fffe0473004e05c700600400004805c70060040000480556[_^M_][_$_]
+00a404730048055600a404730048055600a4047300480639006004730048[_^M_][_$_]
+0639006004730048063900600473004805c700a40473008b05c700140473[_^M_][_$_]
+00000239ffce01d3ff9b0239ffe501d3ffb20239fff501d3ffc2023900bc[_^M_][_$_]
+01d3008b0400003701d3ffac056800a40400008b0400008b047300a401d3[_^M_][_$_]
+004205c700a40473008b05c700a40473008b063900600473004806390060[_^M_][_$_]
+0473004805c700a402aa005a0556005c0400003f04e3002d0239002305c7[_^M_][_$_]
+00a40473008705c700a40473008705c700a40473008705c700a404730087[_^M_][_$_]
+078d001905c7000a0556000a0400001b0200008b0556fffe0473004e0800[_^M_][_$_]
+0000071d004e0639005004730048023900b6078d001905c7000a078d0019[_^M_][_$_]
+05c7000a078d001905c7000a0556000a0400001b01c7007d0400fff40473[_^M_][_$_]
+00310473004806ac007f06ac003606ac003606ac006d02aa00fc02aa0085[_^M_][_$_]
+02aa00ee034800370556fffe0646003306b7003303290033069a00000631[_^M_][_$_]
+0000069a0000033300290556fffe055600a40575000c055600a404e30025[_^M_][_$_]
+05c700a4023900bc055600a40556fffe06aa00a405c700a4053f006d0639[_^M_][_$_]
+006005c700a4055600a404e5006004e3002d0556000a0556000a0679005e[_^M_][_$_]
+06390066023900080556000a049c0048040000480473008b01ec00790473[_^M_][_$_]
+00870481008b0452001b03e100480473008b0473005c01ec008b0400008b[_^M_][_$_]
+0400001b0473008b0400001b03e10048047300480491008b044800480473[_^M_][_$_]
+0087042d000e058500870585004802520008047300870473004804730087[_^M_][_$_]
+05850048055600a40666002d048900a405bc00600556005c023900bc0239[_^M_][_$_]
+00080400003707ae000a07ae00a40666002d055600a4051f000805c700a4[_^M_][_$_]
+0556fffe053d00a4055600a4048900a406330023055600a4073500060514[_^M_][_$_]
+005a05c700a405c700a4055600a405a4000a06aa00a405c700a406390060[_^M_][_$_]
+05c700a4055600a405c7006004e3002d051f000806cb00600556000a05fc[_^M_][_$_]
+00a40579007706e100a4071700a4063d0000071000a4053d00a405bc005e[_^M_][_$_]
+080c00a405c7005c0473004e0496005e043f008b0310008b04aa00000473[_^M_][_$_]
+004805aa0004040000230479008b0479008b0400008b0491000a05b6008b[_^M_][_$_]
+0473008b047300480473008b0473008b0400004803aa00250400001b0698[_^M_][_$_]
+00480400000e0498008b0444005e066a008b068f008b04f6000005bc008b[_^M_][_$_]
+042f008b0400001b05f4008b0456003504730048047300000310008b0400[_^M_][_$_]
+00480400003f01d3008b01d3ffd501d3ffb806e9000a0698008b04730000[_^M_][_$_]
+0400008b0400001b0473008b047300a403b8008b046afff407fc008f0473[_^M_][_$_]
+008b02aa002302aa002102aa006d02aa002101d3008b0556005c0400003f[_^M_][_$_]
+0473000001480060028f004e028f005e028f005e0148006001ec004e01ec[_^M_][_$_]
+005801ec007101ec005601480060028f004e014800600148007502140039[_^M_][_$_]
+01ec007101cf0091014800600148ff79023900b604cd0083048f003b035c[_^M_][_$_]
+00170429001404cd0098028f004c02cd001404cd009804cd003b028f004c[_^M_][_$_]
+0429003f0429005a0429004804cd005004cd003b02cd004a02cd003b04cd[_^M_][_$_]
+005004cd002d04cd00870466006f043d003b0466003b047b00980400002d[_^M_][_$_]
+0550009804cd005404cd003704cd003704cd003702000060037100600566[_^M_][_$_]
+0077028fffa20429003f0429003f0429ff790429ff7904cd002d05500098[_^M_][_$_]
+05500098055000980550009804cd008304cd008304cd0083048f003b035c[_^M_][_$_]
+00170429001404cd0098028f003d02cd001404cd003b028f003d0429003f[_^M_][_$_]
+0429005a0429004804cd003b02cd003b04cd005004cd00870466006f0466[_^M_][_$_]
+003b047b00980400002d0550009804cd0054028f004c048f003b0429005a[_^M_][_$_]
+0466006f04cd00290000ffdc0000ff250000ffdc0000fe51014800600639[_^M_][_$_]
+00600473004805c700a40473008702aa00cf02aa00f802aa005602aa00e3[_^M_][_$_]
+02aa001702aaff0c02aa001702aa000402aa002d02aa002d02aa002d02aa[_^M_][_$_]
+000402aa00cf02aa000402aa002d02aa002b02aa002b02aa001902aa0017[_^M_][_$_]
+0556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe0473[_^M_][_$_]
+fff20556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe[_^M_][_$_]
+0473004e0556fffe0473004e0556fffe0473004e0556fffe0473004e0556[_^M_][_$_]
+fffe0473004e055600a404730048055600a404730048055600a404730048[_^M_][_$_]
+055600a404730048055600770473fff1055600a404730048055600a40473[_^M_][_$_]
+0048055600a4047300480239009801d30098023900bc01d3008b06390060[_^M_][_$_]
+0473004806390060047300480639006004730048063900600473fff20639[_^M_][_$_]
+006004730048063900600473004806390060047300480639006004730048[_^M_][_$_]
+063900600473004806390060047300480639006004730048063900600473[_^M_][_$_]
+004805c700a40473008705c700a40473008705c700a40473008705c700a4[_^M_][_$_]
+0473008705c700a40473008705c700a40473008705c700a4047300870556[_^M_][_$_]
+000a0400001b0556000a0400001b0556000a0400001b0473004801df00b2[_^M_][_$_]
+01df007501df002b01df007501f4ff8501f4ff8501f4ff850458ff850458[_^M_][_$_]
+00560458ff85045800560458ff850458005604d7ff8504d7ff8506c3ff85[_^M_][_$_]
+045801310458013f0458005a0458003d0458007504580048045800480458[_^M_][_$_]
+002d0458002b0458005c06c3ff850458ff850323ff8503a000560458ff85[_^M_][_$_]
+0323ff8503a000560252ff85025eff85022500ac0252ff85025eff850327[_^M_][_$_]
+ff8501baff850323ff8501f4ff85039aff850323ff85030e004801f4ff85[_^M_][_$_]
+04bc001f030e004804bc001f026600cd01f4ff85045c000c04c3003501df[_^M_][_$_]
+000001df000001df0000045c000c04c30035045cfff604bc001f022500ac[_^M_][_$_]
+04c3001f026600cd04730062034c008901df002701df00710364000001df[_^M_][_$_]
+0071051f001f01df00ae05b80050027b003d05b8005005b8005004580056[_^M_][_$_]
+045800560458005602b8000a02b8000a03e1005203e100520698000a0698[_^M_][_$_]
+000a08b8000a08b8000a04a4ff8504a4ff85045c0052045c005201baff85[_^M_][_$_]
+0652005004a8002704cd00330414002902b8001f043d0033027b003d0364[_^M_][_$_]
+0000051f001f051f001f01ae000001df000001ae000001ae000001ae001b[_^M_][_$_]
+01ae000001df00000133000a045c000c04c3003501cb006801c7001f0266[_^M_][_$_]
+00e9026600620266005601f4ff850252ff85025eff8505b8005003df0093[_^M_][_$_]
+0000fb5c0000fb5c0000fb5c0000fb5c0000fe000000fd3b0000fc4c0000[_^M_][_$_]
+fd0a0000fd2d0000ff170000fdaa0000fda80000fe850000fe9605c3005e[_^M_][_$_]
+0000fbdf0000fd1b0000fbfa0000fe020000fdf00000fc4c0000fd7f0000[_^M_][_$_]
+fd2d045e005e047f002d04ac002d047f0056047f0056055c002d03640006[_^M_][_$_]
+03df0050051f0050047f002d04ac002d05c3005e05c3005e04ac005004ac[_^M_][_$_]
+005003df00930571002d062100560635005e047f0056047f0056045e005e[_^M_][_$_]
+049a00500404009304f6005004ac005004ac0050047f0081047f00810537[_^M_][_$_]
+00500537005004ac005004ac002f0400008103df0093045e005e03df0050[_^M_][_$_]
+04ac005003df0050047f0056051200500431005004db0050053700500431[_^M_][_$_]
+0050045e005e04000050039a004a0000fcfe035c001f035cfe620000fc73[_^M_][_$_]
+0000fc730000fc730000fc730000fee10000fe000000fee9031f00b604fe[_^M_][_$_]
+009a0248008b048f008b035c0010035cffc903df0000035c001f04830050[_^M_][_$_]
+0000fd100000ff190000fe5e0000fda80000fec10000fe960000fe620000[_^M_][_$_]
+fe680431006204bc006004bc005c04fe000e04fe007f04fe006004fe0060[_^M_][_$_]
+04bc001704fe003504fe006004fe004a0527005006d100350000fee10000[_^M_][_$_]
+fe000000fee901baff8505b8005001f4ff8504580056045800560458ff85[_^M_][_$_]
+03e1005204c100330327ff8504c100330327ff85051f001f04bc001f01f4[_^M_][_$_]
+ff85030e0048027b003d045801310458013f0458005a0458003d0458003d[_^M_][_$_]
+0458004a045800c90458002d0458002b0458005c04e3002d023900230556[_^M_][_$_]
+00a40473004805c700a40479008b04140029023900bc0400003701d3008b[_^M_][_$_]
+01d3ffb80489003a031000300786000605cf000405aa00a40447008b0556[_^M_][_$_]
+00a40400008b05fc00a4049a008b0556000a0400001b0556000a0400001b[_^M_][_$_]
+05a5000a043a000e057900770444005e057900a40473008b063900600473[_^M_][_$_]
+00480639006004730048080000000000ffdc0000ff160000ffdc0000ff20[_^M_][_$_]
+0000ffdc0000ff200197000005b8005001f4ff8502b8000a03e10052043d[_^M_][_$_]
+00330440006401f4ff8503fdff85044000640440006406d9001306d90013[_^M_][_$_]
+06d9001306d9001301ba00280493004a031d0042065200500252ff85025e[_^M_][_$_]
+ff8501df000001df000006750048027b003d0000ffdd0000fe870000fefd[_^M_][_$_]
+047300690568005c05c7006005c7006006aa008b05c70000098700a4078d[_^M_][_$_]
+00000556000004e3002d0800002901ae000501ae002a026600ea02660056[_^M_][_$_]
+0266006201ae002e04a8002701ae001001cb006801cb006801df000501df[_^M_][_$_]
+000501df002a01df002a01df002a01df002a028000ae028000b203640000[_^M_][_$_]
+03640000057e001f04bc001f05b8005001f4ff8505b8005001f4ff8505b8[_^M_][_$_]
+005001f4ff8505b8005001f4ff8505b8005001f4ff8505b8005001f4ff85[_^M_][_$_]
+04580056045800560458ff8504580056045800560458ff85045800560458[_^M_][_$_]
+00560458ff8504580056045800560458ff8504580056045800560458ff85[_^M_][_$_]
+04580056045800560458ff8502b8000a02b8000a02b8000a02b8000002b8[_^M_][_$_]
+000a02b8fffc02b8fffc02b8000803e1005203e1005203e1005203e10052[_^M_][_$_]
+03e1005203e1005203e100520698000a04d7ff850698000a04d7ff850698[_^M_][_$_]
+000a04d7ff8508b8000a06c3ff8508b8000a06c3ff8504a4ff85045c0052[_^M_][_$_]
+03a000560458ff850323ff8506520050065200500252ff85025eff850652[_^M_][_$_]
+00500252ff85025eff85065200500252ff85025eff85065200500252ff85[_^M_][_$_]
+025eff8504a8002704a8002706d9003306d9ff7904c100330327ff8504cd[_^M_][_$_]
+00330327ff8504cd00330327ff8504cd00330327ff8504c100330327ff85[_^M_][_$_]
+04c100330327ff8504c100330327ff8504c100330327ff8504c100330327[_^M_][_$_]
+ff660414002901baff850414002901baff850414002901baff8504140029[_^M_][_$_]
+01baff85043d003301f4ff85043d0033043d003301f4ff85043d003301f4[_^M_][_$_]
+ff8504580056045800560458ff8503640000036400000364000003640000[_^M_][_$_]
+0364000003640000036400000364000005f3000505900005051f001f04bc[_^M_][_$_]
+001f01f4ff8503640000051f001f04bc001f051f001f04bc001f0000fe46[_^M_][_$_]
+0000ff6e0000ff590000ffb70000fec308fc003208ad00320000ffb50000[_^M_][_$_]
+ffb60000ff410000ff920000fec30000ffbf0168003202cc00320000fea2[_^M_][_$_]
+0000ff5a04cd00320000ff580000ff580000ff920698000a04d7ff8508b8[_^M_][_$_]
+000a06c3ff85045c005203a000560458ff850323ff85034c008902b8001f[_^M_][_$_]
+02aa001d02aa001d02aa001d02aa001d02aa003f02aa003f02aa000402aa[_^M_][_$_]
+000402aa000402aa000402aa00ca02aa00e302aa001702aa001702aa001d[_^M_][_$_]
+02aa001d055600a4047300480556fffe0473004e055600a40473008b0556[_^M_][_$_]
+00a40473008b055600a40473008b05c700600400004805c700a404730048[_^M_][_$_]
+05c700a40473004805c700a40473004805c700a40473004805c700a40473[_^M_][_$_]
+0048055600a404730048055600a404730048055600a404730048055600a4[_^M_][_$_]
+04730048055600a40473004804e300a402390010063900600473004805c7[_^M_][_$_]
+00a40473008b05c700a40473008b05c700a40473008b05c7007104730053[_^M_][_$_]
+05c700a40473008b0239ffce01d3ff9b0239000701d3ffd3055600a40400[_^M_][_$_]
+008b055600a40400008b055600a40400008b047300a401d3008b047300a4[_^M_][_$_]
+01d3ffb1047300a401d3ffb1047300a401d3ffac06aa00a406aa008b06aa[_^M_][_$_]
+00a406aa008b06aa00a406aa008b05c700a40473008b05c700a40473008b[_^M_][_$_]
+05c700a40473008b05c700a40473008b0639006004730048063900600473[_^M_][_$_]
+004806390060047300480639006004730048055600a40473008b055600a4[_^M_][_$_]
+0473008b05c700a402aa008b05c700a402aa008b05c700a402aa006605c7[_^M_][_$_]
+00a402aa001d0556005c0400003f0556005c0400003f0556005c0400003f[_^M_][_$_]
+0556005c0400003f0556005c0400003f04e3002d0239002304e3002d0239[_^M_][_$_]
+002304e3002d0239ffed04e3002d0239001705c700a40473008705c700a4[_^M_][_$_]
+0473008705c700a40473008705c700a40473008705c700a4047300870556[_^M_][_$_]
+000c0400001b0556000c0400001b078d001905c7000a078d001905c7000a[_^M_][_$_]
+0556000a0400000e0556000a0400000e0556000a0400001b04e300250400[_^M_][_$_]
+002904e300250400002904e30025040000290473008b0239000d05c7000a[_^M_][_$_]
+0400001b0473004e0200008b049c0048049c0048049c0048049c0048049c[_^M_][_$_]
+0048049c0048049c0048049c00480556fffe0556fffe060a0000060a0000[_^M_][_$_]
+05e2000005e20000059c0000059c00000400004804000048040000480400[_^M_][_$_]
+0048040000480400004805eb000005eb0000073000000730000007300000[_^M_][_$_]
+073000000473008b0473008b0473008b0473008b0473008b0473008b0473[_^M_][_$_]
+008b0473008b065c0000065c000007a1000007a1000007a1000007a10000[_^M_][_$_]
+075900000759000001ec008b01ec008b01ecffdb01ecffdb01ec000301ec[_^M_][_$_]
+000301ecff9b01ecff9b02b6000002b6000003fb000003fb000003fb0000[_^M_][_$_]
+03fb000003b3000003b30000047300480473004804730048047300480473[_^M_][_$_]
+004804730048063900000639000007da000007da00000776000007760000[_^M_][_$_]
+047300870473008704730087047300870473008704730087047300870473[_^M_][_$_]
+0087064c00000778000007ca000007490000058500480585004805850048[_^M_][_$_]
+0585004805850048058500480585004805850048063900000639000007da[_^M_][_$_]
+000007da000007760000077600000736000007360000049c0048049c0048[_^M_][_$_]
+04000048040000480473008b0473008b01ecffeb01ec0078047300480473[_^M_][_$_]
+004804730087047300870585004805850048049c0048049c0048049c0048[_^M_][_$_]
+049c0048049c0048049c0048049c0048049c00480556fffe0556fffe060a[_^M_][_$_]
+0000060a000005e2000005e20000059c0000059c00000473008b0473008b[_^M_][_$_]
+0473008b0473008b0473008b0473008b0473008b0473008b065c0000065c[_^M_][_$_]
+000007a1000007a1000007a1000007a10000075900000759000005850048[_^M_][_$_]
+058500480585004805850048058500480585004805850048058500480639[_^M_][_$_]
+00000639000007da000007da000007760000077600000736000007360000[_^M_][_$_]
+049c0048049c0048049c0048049c0048049c0048049c0048049c00480556[_^M_][_$_]
+fffe0556fffe0556fffe0556fffe0556fffe02aa010302aa00f902aa0103[_^M_][_$_]
+02aa000602aa00060473008b0473008b0473008b0473008b0473008b065e[_^M_][_$_]
+0000064d000006cf000006be000005c700a402aa004602aa006e02aa0006[_^M_][_$_]
+01ecffc201ecffb201ecff7e01ecff7e01ecff9b01ecff9b0239fff60239[_^M_][_$_]
+ffe6032900000318000002aa004602aa006e02aa00060473008704730087[_^M_][_$_]
+04730087047300870491008b0491008b04730087047300870556000a0556[_^M_][_$_]
+000a06a6000006e7000005eb0000034800370348003702aa005605850048[_^M_][_$_]
+058500480585004805850048058500480708000006930000070800000693[_^M_][_$_]
+00000639006602aa00e302aa01030000fec30000fec80000fdf40000fed8[_^M_][_$_]
+0000ffa40000feea0000ff4c0000fe9e0000fec30000ffbf0000ff3d0000[_^M_][_$_]
+fe9e0000fed80000fed80000ffae0000ffae0000ffae000000640000ff47[_^M_][_$_]
+0000ff480000ff440000ff440000fe87000000000000ffa60000ff440000[_^M_][_$_]
+ff440000ff440000fec80000ff2d000000000000feeb0000ff4c0000ffae[_^M_][_$_]
+0000ff350000ff240000ffbf0000fe870000febb0000fec30000fec30000[_^M_][_$_]
+fed80000fed80000feb10000fec80000fdbf0000fdf40000feb10000fec8[_^M_][_$_]
+0000fdbf0000fe870000fee30000ffa60000fe870000ff440000feba0000[_^M_][_$_]
+ff230000ff9a0000fdf40000feb10000ffae0000fe940000ffa40000fe87[_^M_][_$_]
+0000fdf40000ff3d0000ff440000feb10000feb10000feb10000ff030000[_^M_][_$_]
+ff440000ff530000ff530000ff53045cffee04c30016045c000c04c30035[_^M_][_$_]
+045c000c04c30035045c000c04c30035045c000c04c30035045c000c04c3[_^M_][_$_]
+0035045c000c04c30035045800790458003c0473000a05fd0000053d00a4[_^M_][_$_]
+0473008b053d000d0473000305c7006905c700600400004805c70002066e[_^M_][_$_]
+0000053d005104730048047300480556006d0514006a04e3ffd106390060[_^M_][_$_]
+0556000c0724008b01d3008b02390014055600a40400008b01d300140400[_^M_][_$_]
+001b06aa008505c7ffd10473008b06390060070e006005a0004805fd0000[_^M_][_$_]
+0473008b055600a40556006a0400005004e50060035600000239002304f7[_^M_][_$_]
+00140239002304e3002d0625007105c700a4062c000a0400001b04e30025[_^M_][_$_]
+04000029046c001f046c006003c6004803c600330473003f0473002f03a9[_^M_][_$_]
+0020044e0023046c008b021400bc0214002605d200c1023900b60a5b00a4[_^M_][_$_]
+097800a4084c0048086000a4064a00a40363008b097800a4073e00a40607[_^M_][_$_]
+008b0556fffe0473004e0239ffdf01d3ffa9063900600473004805c700a4[_^M_][_$_]
+0473008705c700a40473008705c700a40473008705c700a40473008705c7[_^M_][_$_]
+00a404730087047300480556fffe0473004e0556fffe0473004e08000000[_^M_][_$_]
+071d004e06390060047300480639006004730048055600a40400008b0639[_^M_][_$_]
+0060047300480639006004730048046c001f03c6002b01d3ffac0a5b00a4[_^M_][_$_]
+097800a4084c00480639006004730048085b00a4046c008b05c700a40473[_^M_][_$_]
+008b0556fffe0473004e0556fffe0473004e055600a404730048055600a4[_^M_][_$_]
+047300480239ff6601d3ff3e0239fffa01d3ffc806390060047300480639[_^M_][_$_]
+00600473004805c700a402aa000605c700a402aa007c05c700a40473006a[_^M_][_$_]
+05c700a404730087040200420374002305c700a40473008b057900a404a8[_^M_][_$_]
+00420446003904e30025040000290556fffe0473004e0639006004730048[_^M_][_$_]
+0639006004730048063900600473004806390060047300480556000a0400[_^M_][_$_]
+001b02aa001d02aa001d02aa001702aa003f02aa00040473008c049c0048[_^M_][_$_]
+049c00480473008b0400001b0400000004730048047300480473004805db[_^M_][_$_]
+004804000048040000230552002304460048026200100473004804730048[_^M_][_$_]
+04ae004b0400001b04e0001d047300870473008b0473008b01d3000001ec[_^M_][_$_]
+008b01d3008b029e0000024e000001d3008b0486008b06aa008506aa0085[_^M_][_$_]
+06aa008b0473ffb80473008b0455008b0473004805c50048058500480473[_^M_][_$_]
+004802aafff802aafff802aafff802aa008b02aa008b0239008b0239fff8[_^M_][_$_]
+0447008b0447008b0400003f0231ffb2026200100231ffcf039900000239[_^M_][_$_]
+0012023900230473000004c50048043b00870400001b05c7000a0400001b[_^M_][_$_]
+03ce000004000029046e002903c6002b03c6002c0400001b040000480400[_^M_][_$_]
+001b0400004806390060043f008b0446004804ae004b0473008b02ff000a[_^M_][_$_]
+040000080364008b047300480400001b04000048078e00480718004807fc[_^M_][_$_]
+004805b6002303930023060c0023061900100568008b04f0008b03e2001e[_^M_][_$_]
+048200880481008b0473008705cd000a0767fffd05cd000a047300480585[_^M_][_$_]
+004804970014063900600473004805c700600400004804e300a403fc008b[_^M_][_$_]
+04ff0000043c0032060d000a049d000006aa008506aa0085057900770473[_^M_][_$_]
+0087057900a4044e000a0556006a0556006a04e0000504e0000505e50060[_^M_][_$_]
+0476004803c70014034f0028049700140496005e0400004801d3ffb80639[_^M_][_$_]
+006003b6004803b6001b095f006005e8001b0600000a04c0000a079800a4[_^M_][_$_]
+05c2008b054a000d03fe001b06f800a4057a008b0735000805aa000508f7[_^M_][_$_]
+00a4076c008b0514006d0400004a0679005e058500870639006004730048[_^M_][_$_]
+0604000c04a4001b0604000c04a4001b0ab3006008d300480711005f0568[_^M_][_$_]
+0048095f006008800048095f006005e8001b05c700600400004803f80014[_^M_][_$_]
+02aafffa02aa000002aa000002aa000007bd000a07bd002a05c700a40479[_^M_][_$_]
+008b053d000f042f0008055600a40473008b048900a40426008b0514005a[_^M_][_$_]
+040000230556001804000008069d000a04d1000a071200a40543008b0847[_^M_][_$_]
+00a406c6008b05c700600400004805c700600400004804e3002d03aa0025[_^M_][_$_]
+0744000a0563000a057900770444005e070b000a053b000a070b000a053b[_^M_][_$_]
+000a023900bc0735000605aa0004055600a40400008b05a4000a0491000a[_^M_][_$_]
+05c700a40473008b05c700a40473008b057900770444005e06aa00a405b6[_^M_][_$_]
+008b0556fffe0473004e0556fffe0473004e08000000071d004e055600a4[_^M_][_$_]
+0473004806390060047300480735000605aa00040514005a040000230443[_^M_][_$_]
+001f03c6002b05c700a40479008b05c700a40479008b0639006004730048[_^M_][_$_]
+063900600473004805bc005e0400001b051f00080400001b051f00080400[_^M_][_$_]
+001b051f00080400001b057900770444005e071000a405bc008b053d0051[_^M_][_$_]
+0473004807d100510724004807e2006d06f0004a0582006d0468004a0838[_^M_][_$_]
+000a073e000a085b00a4071f008b0639006004ae004b0609002d056b0025[_^M_][_$_]
+02aa001d02aa001702aa003f02aa001d02aa000402aaff8c04c1003304c1[_^M_][_$_]
+0033028f004c0000fed802fe000004cd0037045cffc904c3fff100000000[_^M_][_$_]
+000000280000002800000028000000380000009800000102000002a20000[_^M_][_$_]
+0412000005600000070e0000076a000007da0000084c000008f000000976[_^M_][_$_]
+000009ea00000a3600000a7200000ae400000b9400000bfe00000cc40000[_^M_][_$_]
+0dda00000e8000000f7400001064000010fe0000123a0000132e0000137c[_^M_][_$_]
+00001402000014b000001520000015d0000016b8000018e400001a1a0000[_^M_][_$_]
+1b4600001c6a00001d2600001db800001e3400001f8600002024000020a0[_^M_][_$_]
+0000215400002280000022da0000243a000024d8000025fe000026c80000[_^M_][_$_]
+28cc00002a1e00002bd200002c4200002ce200002dce00003086000031b8[_^M_][_$_]
+000032c60000335e000033bc0000342e00003484000035400000356a0000[_^M_][_$_]
+35c40000374c0000385e0000394c00003a4e00003b8a00003c5e00003de8[_^M_][_$_]
+00003e9200003ee800003fb2000040d00000411000004228000042da0000[_^M_][_$_]
+43ce000044ea0000460400004682000047e8000048ae0000496800004a68[_^M_][_$_]
+00004c5400004e0200004f7200005016000050fa0000515a000052380000[_^M_][_$_]
+52ec0000534c00005388000054f2000055320000558c000055da0000562c[_^M_][_$_]
+0000565a0000568a000056bc000056f60000572e000057660000589a0000[_^M_][_$_]
+58c8000058f4000059220000596c000059e400005a5000005a9400005b0a[_^M_][_$_]
+00005b2e00005b5a00005b8600005bb400005c0600005c3800005c660000[_^M_][_$_]
+5c9200005cb600005d0800005da200005e380000600e000061620000631a[_^M_][_$_]
+000063a40000642e000065680000670a0000689c000069f400006a500000[_^M_][_$_]
+6a9800006b7400006c6200006df200006eec00006f7c0000704600007112[_^M_][_$_]
+000072820000732c00007416000074c2000075120000757c000076060000[_^M_][_$_]
+7712000077ba000078a400007a6a00007b8a00007c9400007d0600007d84[_^M_][_$_]
+00007e1000007f0000007fda000080ce00008148000081c6000082500000[_^M_][_$_]
+8296000082f40000834e0000846c000085f20000864a000086aa00008770[_^M_][_$_]
+0000883a000088a200008918000089a400008a3e00008a7a00008ac60000[_^M_][_$_]
+8b3a00008c8200008cfe00008d7e00008e7e00008f6a000090300000907a[_^M_][_$_]
+000090f0000091ac00009390000093e00000942600009466000094b80000[_^M_][_$_]
+94fa0000953600009576000096180000965c000096a2000097080000974e[_^M_][_$_]
+00009796000097f00000983200009868000098d00000994c000099740000[_^M_][_$_]
+99fa00009a4a00009ad000009b4600009be800009c5800009ce600009dce[_^M_][_$_]
+00009e9e00009ee400009f1200009f5600009f7a00009ff80000a0e20000[_^M_][_$_]
+a21e0000a25e0000a28c0000a3700000a4840000a4d80000a5ca0000a62e[_^M_][_$_]
+0000a6fc0000a7dc0000a8700000a9080000a9a80000aa420000aa8a0000[_^M_][_$_]
+aab40000aaf00000aca60000ae180000ae5e0000ae8c0000aed40000aefe[_^M_][_$_]
+0000b0380000b0760000b0860000b0c60000b0f20000b2840000b4400000[_^M_][_$_]
+b4860000b4ca0000b4da0000b5c40000b7660000b7aa0000b7d40000b818[_^M_][_$_]
+0000b86c0000b91e0000b9ba0000b9d20000b9ea0000ba2c0000ba540000[_^M_][_$_]
+ba9e0000bace0000bb180000bb460000bb8a0000bbb80000bbfe0000bc3a[_^M_][_$_]
+0000bc7a0000bca20000bd7e0000bebc0000bf000000c01c0000c05a0000[_^M_][_$_]
+c0980000c0f00000c1240000c1680000c1940000c1ca0000c1ee0000c244[_^M_][_$_]
+0000c35c0000c4820000c5ce0000c6ec0000c7ee0000c8be0000c9640000[_^M_][_$_]
+ca740000caba0000cb060000cb860000cd5a0000cd8c0000cdb40000cdee[_^M_][_$_]
+0000ce200000ce820000cff40000d0ee0000d1440000d1780000d1c60000[_^M_][_$_]
+d2180000d2d00000d43e0000d47a0000d4be0000d4e20000d5180000d53c[_^M_][_$_]
+0000d6080000d7760000d7b80000d7dc0000d8a00000d8d20000d91e0000[_^M_][_$_]
+d94a0000d98c0000d9b00000db580000dd080000dd4c0000dd900000de72[_^M_][_$_]
+0000df6a0000dfe80000e0240000e0c20000e1080000e1860000e1c20000[_^M_][_$_]
+e2800000e32e0000e37c0000e44e0000e5e00000e7740000e8860000e95a[_^M_][_$_]
+0000ea2e0000ea5c0000ea8c0000eb660000ec4c0000ec920000eccc0000[_^M_][_$_]
+ed0c0000ed300000ed580000ee460000ee8c0000eeb40000ef500000f03e[_^M_][_$_]
+0000f07e0000f0a20000f0f20000f1280000f1680000f18c0000f28c0000[_^M_][_$_]
+f3bc0000f4000000f4240000f4680000f48c0000f4e80000f6b60000f8b8[_^M_][_$_]
+0000f8fa0000f9220000f9680000f9940000f9de0000fa200000fa440000[_^M_][_$_]
+fa7a0000faa20000fae60000fb160000fb560000fb7a0000fbe00000fc1e[_^M_][_$_]
+0000fd800000fe460000fefe0000ffb800010072000101240001018c0001[_^M_][_$_]
+02000001023a000102e000010336000103ba0001042c000104b600010512[_^M_][_$_]
+00010562000105ae00010624000107560001087c00010942000109d80001[_^M_][_$_]
+0a7200010b1000010b8e00010cc000010d8200010ed400010f6e00010ffc[_^M_][_$_]
+000110fe00011184000112520001131400011396000114a8000115dc0001[_^M_][_$_]
+16ae000117b2000118900001190a0001193600011976000119a6000119fe[_^M_][_$_]
+00011a4a00011b5400011c7800011d9200011e5a00011f3e00011fc40001[_^M_][_$_]
+20ec0001224c0001231c0001241c00012568000125780001264c0001272e[_^M_][_$_]
+000127be0001294600012a3600012b2200012b8c00012bd800012c060001[_^M_][_$_]
+2c4000012c9600012cf200012e1600012e5a00012f86000130f00001317c[_^M_][_$_]
+0001324000013250000133440001343a0001353000013590000135ea0001[_^M_][_$_]
+3688000137c200013882000139b400013a1600013ae200013b8600013ce6[_^M_][_$_]
+00013e1a00013ede00013f1c000140420001410c000142680001430c0001[_^M_][_$_]
+44040001448e0001456000014660000146d20001485c0001496c00014aa6[_^M_][_$_]
+00014b5400014c0a00014cc400014da800014e9600014f2600014fec0001[_^M_][_$_]
+513c0001528a000153ac0001552c0001562800015700000157740001584e[_^M_][_$_]
+0001598c00015b1400015c1c00015cda00015d2200015e2a00015eee0001[_^M_][_$_]
+600e000160b00001619c0001621e0001633e000164060001648600016658[_^M_][_$_]
+000167d20001693e000169e200016a9c00016b5600016c4400016d020001[_^M_][_$_]
+6d6400016dfa00016f2e0001702600017120000171740001728a000172b0[_^M_][_$_]
+000173c6000173d6000173e60001748000017490000175b8000176900001[_^M_][_$_]
+776a0001778e000177cc00017846000178d40001794a0001798000017abc[_^M_][_$_]
+00017b1200017baa00017c7400017cf800017de400017e2400017e480001[_^M_][_$_]
+7e6c00017fce00018070000181f6000182ec000183e600018450000184f6[_^M_][_$_]
+000185f20001864a000186b00001871c0001882600018890000188e20001[_^M_][_$_]
+892a0001897c000189d600018a4800018aae00018b1200018c7600018d0a[_^M_][_$_]
+00018dd000018e3a00018ee600018f6600018fda00019078000191760001[_^M_][_$_]
+91fc0001929000019320000193fe000194a8000195940001962a000196ae[_^M_][_$_]
+00019780000198440001990e000199ee00019af200019c3600019d4c0001[_^M_][_$_]
+9dc600019ec600019f7a00019fcc0001a0280001a0920001a0ce0001a132[_^M_][_$_]
+0001a2100001a2340001a2660001a2a40001a2ca0001a3060001a3dc0001[_^M_][_$_]
+a4000001a4220001a4680001a4ac0001a4d00001a4f40001a5400001a568[_^M_][_$_]
+0001a58e0001a5ba0001a5de0001a6020001a6340001a6580001a6840001[_^M_][_$_]
+a6ac0001a6d40001a6fc0001a7200001a7460001a76a0001a7c20001a810[_^M_][_$_]
+0001a8460001a87e0001a8a60001a8dc0001a9000001a9240001a94c0001[_^M_][_$_]
+a9740001a99c0001aaa00001aad00001ab800001abe00001ac420001acac[_^M_][_$_]
+0001ae020001af3c0001b0240001b10e0001b17a0001b1a20001b1fc0001[_^M_][_$_]
+b2580001b2e40001b3720001b44a0001b5160001b5a40001b6320001b700[_^M_][_$_]
+0001b7c20001b84e0001b91a0001b9c40001ba700001bb660001bc420001[_^M_][_$_]
+bd100001bd340001bd5c0001bd840001bdb20001be020001be3e0001be8e[_^M_][_$_]
+0001bec20001bf160001bf4c0001bf820001bfb60001c0140001c05a0001[_^M_][_$_]
+c0800001c0ae0001c0d40001c1020001c1280001c1560001c17c0001c1aa[_^M_][_$_]
+0001c1e00001c2200001c2440001c2680001c28c0001c2b00001c2f00001[_^M_][_$_]
+c3140001c3620001c39a0001c3e80001c41c0001c46e0001c4a20001c4e4[_^M_][_$_]
+0001c5140001c5700001c5ae0001c5e40001c61e0001c6400001c6620001[_^M_][_$_]
+c6860001c6aa0001c6d20001c6fa0001c7680001c7a00001c81e0001c84e[_^M_][_$_]
+0001c8c40001c8f00001c9180001c93e0001c9ba0001c9f80001ca3e0001[_^M_][_$_]
+ca6a0001caa60001cada0001cb020001cb320001cb6e0001cb940001cbb8[_^M_][_$_]
+0001cbdc0001cc000001cc240001cc4c0001cc700001ccae0001ccdc0001[_^M_][_$_]
+cd140001cd400001cd680001cd940001cdce0001cdfc0001ce200001ce44[_^M_][_$_]
+0001ce680001ce8c0001cec00001ceee0001cf240001cf4e0001d0800001[_^M_][_$_]
+d0ec0001d17e0001d2060001d2680001d2940001d2cc0001d3080001d33a[_^M_][_$_]
+0001d3700001d4440001d5640001d5a00001d5d60001d6ca0001d7180001[_^M_][_$_]
+d81c0001d8ee0001d99e0001da5c0001db380001dcb80001dd660001de14[_^M_][_$_]
+0001df000001dfd20001e0a60001e0f80001e1c60001e2b20001e40c0001[_^M_][_$_]
+e44e0001e4a20001e4ee0001e5240001e56e0001e6080001e6460001e696[_^M_][_$_]
+0001e7c60001e8320001e9120001e9440001ea800001eba80001ec560001[_^M_][_$_]
+ec820001ee520001eea20001efe00001f0780001f0dc0001f20e0001f2fe[_^M_][_$_]
+0001f3f00001f5a20001f6ae0001f7020001f75c0001f7b60001f7e80001[_^M_][_$_]
+f8820001f8cc0001f9a00001fad00001fb960001fbf40001fc900001fcca[_^M_][_$_]
+0001fd380001fd720001fdce0001fdfa0001fe4a0001fe820001febc0001[_^M_][_$_]
+feea0001ffe40002001c000200c60002010a00020190000201da000202fc[_^M_][_$_]
+0002034c00020496000204e2000205bc000205fc000207300002076c0002[_^M_][_$_]
+07ac000208b2000209cc00020af600020ba800020c8000020d5200020e32[_^M_][_$_]
+00020ee00002103a0002109a0002112600021250000212e0000213400002[_^M_][_$_]
+14160002147800021540000215e80002164c000216aa0002175c000217ee[_^M_][_$_]
+0002181a00021868000218d40002193400021a1800021b1e00021b940002[_^M_][_$_]
+1d5a00021dce00021e6400021f6a00022052000220940002219e00022328[_^M_][_$_]
+0002239400022476000224ba000225c400022734000227a0000228880002[_^M_][_$_]
+2a4200022b1600022bba00022d1a00022d5e00022e5200022f8c0002302c[_^M_][_$_]
+0002310c000231ec00023352000234ec00023640000237b8000239980002[_^M_][_$_]
+3a8000023bae00023d4400023f200002413200024338000245a6000247b2[_^M_][_$_]
+00024a0400024d2e00024f160002515a0002534a000254da0002566a0002[_^M_][_$_]
+57c00002590200025a2000025b9e00025ca400025dae00025ec600025fe2[_^M_][_$_]
+0002612000026262000263ac00026504000266340002676a000268ae0002[_^M_][_$_]
+6a3800026b8600026c8200026e600002704a0002722e000273bc000275aa[_^M_][_$_]
+00027716000278f000027a2600027bae00027c6e00027cec00027dfc0002[_^M_][_$_]
+7e6a00027efa00028006000280f2000281a400028288000282e60002834e[_^M_][_$_]
+000284680002853a0002868a000287ee0002896200028a6e00028aee0002[_^M_][_$_]
+8c4200028d9800028dd800028ed400029016000290ae0002919000029230[_^M_][_$_]
+000293460002947600029514000296760002982c000299c000029b3c0002[_^M_][_$_]
+9d2800029e980002a07a0002a23a0002a3c60002a52c0002a69a0002a75c[_^M_][_$_]
+0002a86a0002a8ca0002a8da0002a9d40002aab80002ac2c0002adec0002[_^M_][_$_]
+af440002af9c0002b0ec0002b0fc0002b2900002b4020002b4120002b422[_^M_][_$_]
+0002b44e0002b4900002b4e80002b4f80002b5080002b5180002b5280002[_^M_][_$_]
+b63c0002b6f00002b7ec0002b7fc0002b80c0002b81c0002b8400002b862[_^M_][_$_]
+0002b8a40002b8d00002b9100002b9340002b9440002b9540002b9640002[_^M_][_$_]
+b9740002b9840002ba1a0002bac60002bbe60002bd220002be1c0002bede[_^M_][_$_]
+0002c00e0002c1060002c1a40002c2480002c2580002c3060002c3dc0002[_^M_][_$_]
+c4b80002c5a00002c6820002c77a0002c87a0002c93a0002c94a0002ca48[_^M_][_$_]
+0002cb340002cc1c0002ccf20002d0fe0002d1440002d18e0002d1be0002[_^M_][_$_]
+d1f60002d2260002d26c0002d31c0002d34e0002d3a60002d3e60002d42c[_^M_][_$_]
+0002d4d40002d5760002d62a0002d78a0002d7d20002d8160002d8da0002[_^M_][_$_]
+d9640002d9980002d9ce0002d9fa0002daae0002db560002dca60002dcf4[_^M_][_$_]
+0002dd4a0002df5c0002e0b20002e2a40002e3840002e3ae0002e4b00002[_^M_][_$_]
+e5760002e6a20002e7b40002e9940002eaca0002ec2c0002edd20002edfa[_^M_][_$_]
+0002f0340002f1340002f27a0002f4ac0002f5900002f6780002f6f40002[_^M_][_$_]
+f7600002f80a0002f8700002f9400002f99c0002f9ae0002f9c00002fa38[_^M_][_$_]
+0002fab00002fb380002fbc00002fbf40002fc280002fc700002fd7a0002[_^M_][_$_]
+fdac0002fe040002fe3c0002fe820002feaa0002fee00002ff120002ff44[_^M_][_$_]
+0002ffa200030008000300420003007e000300c6000301120003014e0003[_^M_][_$_]
+018c000301d000030214000302560003028e000302c6000303080003033c[_^M_][_$_]
+00030390000303c200030402000304480003047a000304be000305020003[_^M_][_$_]
+05480003059000030794000307d400030810000308400003089e000308e2[_^M_][_$_]
+0003091800030966000309b400030a0600030a5800030aae00030ae20003[_^M_][_$_]
+0bca00030c2a00030c7e00030cda00030d3600030d9800030ddc00030e16[_^M_][_$_]
+00030e9200030f1000030f4c00030f8800030fe0000310380003107a0003[_^M_][_$_]
+10ca0003111e00031160000311b8000312a6000312d80003130800031338[_^M_][_$_]
+00031392000313e60003144c00031484000314ba000314f0000315440003[_^M_][_$_]
+1592000315e800031632000316820003178e00031884000318ec00031954[_^M_][_$_]
+00031984000319be000319fa00031a4400031a7a00031ab000031b1a0003[_^M_][_$_]
+1b8400031bbc00031bfc00031c2200031c4800031c7a00031cb000031d0c[_^M_][_$_]
+00031d9e00031dfe00031e5e00031eb000031f020003200c000320e20003[_^M_][_$_]
+21d800032210000322400003228a000322b0000322f40003235200032394[_^M_][_$_]
+000323d00003240a000324400003247c000324be000325ae000325e20003[_^M_][_$_]
+26240003265a0003268e000326d800032728000328c200032a1800032a58[_^M_][_$_]
+00032a9000032adc00032b1800032b5200032d6200032db000032fd60003[_^M_][_$_]
+3126000331bc000332b80003330a0003343000033676000339520003398a[_^M_][_$_]
+000339b600033a3400033ac200033aee00033b5800033c2800033cf60003[_^M_][_$_]
+3d0800033dac00033fbe00033fec0003405000034094000341000003417a[_^M_][_$_]
+000341da00034240000342a00003431600034384000343e80003450a0003[_^M_][_$_]
+45f8000346a000034712000347b000034820000348d60003496800034a50[_^M_][_$_]
+00034af200034bbe00034c6800034d1800034d9a00034e5200034ef00003[_^M_][_$_]
+4f860003500c00035110000352c800035310000353680003539e000353ce[_^M_][_$_]
+000353f2000354160003545400035492000354d8000355060003553c0003[_^M_][_$_]
+557200035598000355c0000355fc00035638000356600003568c000356c8[_^M_][_$_]
+00035708000357300003575800035780000357a8000357e4000358200003[_^M_][_$_]
+58560003588c000358c4000358e80003591e0003595200035990000359b6[_^M_][_$_]
+000359ec00035a1c00035a4200035a6800035aa200035adc00035bc80003[_^M_][_$_]
+5ccc00035d0400035d3c00035d7200035da800035dd000035df800035e52[_^M_][_$_]
+00035e9400035ebc00035ee400035f2200035f6e00035f9400035fb80003[_^M_][_$_]
+60000003604600036082000360c0000360fc000361380003617c000361a2[_^M_][_$_]
+000361d8000362060003622c0003625200036288000362b6000362dc0003[_^M_][_$_]
+63020003633e0003637a000363b6000363f20003641a000364420003646c[_^M_][_$_]
+00036496000364be000364e60003650e0003653600036578000365a40003[_^M_][_$_]
+65dc0003660a000366420003667000036698000366c60003671200036750[_^M_][_$_]
+00036796000367dc0003681200036840000368660003688c000368bc0003[_^M_][_$_]
+68e40003690c000369340003697c000369ba000369f000036a3800036a5e[_^M_][_$_]
+00036a8200036abe00036b0000036b3c00036b7a00036baa00036bda0003[_^M_][_$_]
+6c1000036c4600036c8200036cbe00036ce600036d0e00036d3800036d62[_^M_][_$_]
+00036da200036dc800036dee00036e1400036e4200036e6800036e8e0003[_^M_][_$_]
+6eb400036ee200036f0800036f3a00036f6200036f9000036fb400036fea[_^M_][_$_]
+0003700e000370340003705800037094000370d00003710c000371540003[_^M_][_$_]
+717c000371a40003734200037376000373ae000373e80003741a0003744c[_^M_][_$_]
+00037484000374bc000375040003754e00037596000375de000376360003[_^M_][_$_]
+768e000376e200037738000377a8000378180003784600037874000378a6[_^M_][_$_]
+000378d80003790e0003794000037996000379ee00037a5000037ab20003[_^M_][_$_]
+7b0a00037b6000037b8e00037bbc00037bee00037c2000037c5800037c90[_^M_][_$_]
+00037cce00037d0c00037d6000037db600037e1600037e7600037ed20003[_^M_][_$_]
+7f2c00037f9000037ff80003802c0003806000038094000380c8000380fe[_^M_][_$_]
+0003813400038174000381b40003820400038256000382b6000383160003[_^M_][_$_]
+8374000383d40003842c00038488000384b6000384e40003851600038548[_^M_][_$_]
+00038580000385b8000386020003864e000386a6000386fe000387500003[_^M_][_$_]
+87a4000387d2000388040003883600038868000388a6000388e400038922[_^M_][_$_]
+00038960000389ba00038a1a00038a8200038ae600038b1400038b420003[_^M_][_$_]
+8b7400038ba600038bde00038c1600038c5000038c8a00038cd400038d1e[_^M_][_$_]
+00038d8000038de200038e3a00038e9400038f0200038f7000038fa40003[_^M_][_$_]
+8fda0003900a0003903e00039072000390a4000390e40003911800039148[_^M_][_$_]
+00039176000391a6000391dc0003920a0003923a0003928c000392e00003[_^M_][_$_]
+932c00039378000393cc0003942000039484000394ea000395440003959e[_^M_][_$_]
+000396060003966e000396d20003973c000397b40003982c000398680003[_^M_][_$_]
+98a4000398e4000399240003996a000399b0000399fe00039a4c00039ab2[_^M_][_$_]
+00039b1a00039b8600039bf200039c5c00039cc400039d3c00039db40003[_^M_][_$_]
+9df200039e3000039e7200039eb400039efe00039f4800039f9400039fe0[_^M_][_$_]
+0003a0440003a0a80003a11e0003a1940003a1fa0003a2620003a2e00003[_^M_][_$_]
+a35e0003a3900003a3ba0003a40a0003a43a0003a48a0003a4b80003a500[_^M_][_$_]
+0003a5440003a57a0003a5d80003a62c0003a6500003a6ac0003a7120003[_^M_][_$_]
+a76e0003a7ea0003a8940003a8d80003a8fc0003a93c0003a96a0003a9a6[_^M_][_$_]
+0003a9fa0003aa500003aaa60003ab040003ab2a0003abdc0003ac9c0003[_^M_][_$_]
+ad7c0003adac0003add80003ae160003ae540003ae840003aec00003af08[_^M_][_$_]
+0003af3e0003af960003aff80003b0aa0003b1760003b2560003b2840003[_^M_][_$_]
+b2aa0003b2e00003b3160003b3440003b3720003b3a00003b3de0003b422[_^M_][_$_]
+0003b4580003b4c40003b5240003b57e0003b5fe0003b6860003b6da0003[_^M_][_$_]
+b7180003b73e0003b7800003b7ae0003b7ec0003b83e0003b8920003b8ea[_^M_][_$_]
+0003b93e0003b9700003b9c60003ba220003bab40003bade0003bb080003[_^M_][_$_]
+bb700003bb980003bbd60003bc3e0003bccc0003bd600003bd860003bdc2[_^M_][_$_]
+0003be4a0003becc0003bf3a0003bfc00003c04c0003c0d80003c1640003[_^M_][_$_]
+c1b00003c1fe0003c2340003c2680003c29a0003c3060003c3b20003c3e8[_^M_][_$_]
+0003c41e0003c4640003c48e0003c4ea0003c5460003c5840003c5f00003[_^M_][_$_]
+c67a0003c6f00003c7540003c77a0003c7b40003c82c0003c8be0003c950[_^M_][_$_]
+0003c9b80003ca260003caa80003cad20003cb000003cb480003cbcc0003[_^M_][_$_]
+cbf60003cc200003cc7c0003ccbe0003cd680003cda20003cdf20003ce72[_^M_][_$_]
+0003cee40003cf580003cf980003d01c0003d0a80003d12e0003d1940003[_^M_][_$_]
+d1ce0003d2160003d2520003d2800003d3140003d3960003d43c0003d48a[_^M_][_$_]
+0003d4da0003d5500003d5bc0003d5fc0003d62e0003d6600003d6980003[_^M_][_$_]
+d6d00003d6fc0003d7280003d7540003d7800003d7ac0003d7d80003d80c[_^M_][_$_]
+0003d8400003d8780003d8b00003d9740003d9c80003daac0003dba60003[_^M_][_$_]
+dbb60003dc7a0003dd180003dde60003debc0003dfd00003e0b20003e0c2[_^M_][_$_]
+0003e1640003e1fc0003e2ba0003e3a00003e3fe0003e4fa0003e5720003[_^M_][_$_]
+e6a00003e79c0003e8580003e8680003e8bc0003e9a00003ea6e0003eac8[_^M_][_$_]
+0003ebd20003ec7a0003ed280003ed380003ed480003ee140003eeca0003[_^M_][_$_]
+ef960003f06a0003f13c0003f2940003f3980003f3a80003f4440003f4fa[_^M_][_$_]
+0003f5620003f6120003f6780003f7740003f8240003f8d60003f9980003[_^M_][_$_]
+fa4e0003fb200003fc220003fd260003fe060003ff380004002c00040112[_^M_][_$_]
+000401d4000402ce0004037200040382000403aa00040428000404380004[_^M_][_$_]
+0476000404b4000404f2000405200004054c000405780004059e000405ca[_^M_][_$_]
+000405f6000406240004065200040680000406ac000406da000407080004[_^M_][_$_]
+0736000407640004079a000407d0000408060004083c00040872000408a8[_^M_][_$_]
+000408de00040914000409240004095a00040990000409c2000409f40004[_^M_][_$_]
+0a2200040a5000040b7400040c9600040cc400040cf200040d2000040d4e[_^M_][_$_]
+00040e8600040f7600040fa400040fd2000410000004102e000410c20004[_^M_][_$_]
+10e80004110e0004113400041162000411900004123e000412d800041306[_^M_][_$_]
+000413340004136600041398000413c6000413f400041426000414580004[_^M_][_$_]
+1486000414b4000414e6000415180004154600041574000415a6000415d8[_^M_][_$_]
+00041606000416340004166600041698000416c6000416f4000417260004[_^M_][_$_]
+175800041786000417b4000418aa00041990000419be000419ec00041a66[_^M_][_$_]
+00041b9400041cce00041d5800041df000041e1e00041e4c00041e820004[_^M_][_$_]
+1eb800041eea00041f1c00041f4a00041f7800041faa00041fdc0004200a[_^M_][_$_]
+0004203800042090000420ce00042168000421c80004223a000423080004[_^M_][_$_]
+231800042420000424e8000425bc000426ec000427c20004289000042962[_^M_][_$_]
+00042ad200042ae200042af200042c4e00042d2600042d9200042ea60004[_^M_][_$_]
+2eb600042f7c00043086000431f000043260000432e80004339a0004340a[_^M_][_$_]
+0004341a0004342a000434cc00043562000435b6000436ba000437600004[_^M_][_$_]
+3808000438da0004397e00043a2000043aae00043abe00043bcc00043cca[_^M_][_$_]
+00043d9400043df000043e4c00043ecc00043f2e00043fb20004400a0004[_^M_][_$_]
+40640004411c000441d80004435400044364000444060004449a000445b6[_^M_][_$_]
+0004462e000446a4000447520004483c000448d00004493c00044a1c0004[_^M_][_$_]
+4acc00044b5400044bec00044cd600044dd400044f660004500c000450b8[_^M_][_$_]
+0004516200045210000453180004532800045406000454fe0004550e0004[_^M_][_$_]
+55a000045642000456800004575000045810000458ca000459bc00045b28[_^M_][_$_]
+00045c8e00045dbc00045e92000460060004610c00046220000462920004[_^M_][_$_]
+641c000464860004656c0004666000046706000467380004676a0004677a[_^M_][_$_]
+000468500004698400046a8400046b5c00046c6400046d4e00046dae0004[_^M_][_$_]
+6e0a00046f1800046f94000470ba000471ce0004729200047356000473f4[_^M_][_$_]
+00047482000475180004767a0004768a000477d6000478e600047a2a0004[_^M_][_$_]
+7b2000047bee00047c9e00047d1e00047e1000047efc00047f0c00047f1c[_^M_][_$_]
+00047f2c00047fb2000480420004819e000482f2000483a20004843c0004[_^M_][_$_]
+85560004865400048712000487e40004890600048a3e00048b1400048c12[_^M_][_$_]
+00048d2c00048e7800049016000491a2000492540004930a0004944c0004[_^M_][_$_]
+957800049610000496b6000496e80004971a000498e200049a8c00049bb8[_^M_][_$_]
+00049cdc00049e660004a0120004a0400004a06e0004a12e0004a1ca0004[_^M_][_$_]
+a2cc0004a32c0004a39e0004a3da0004a4160004a5e00004a7f00004a8c8[_^M_][_$_]
+0004a9aa0004aa5c0004aae80004abec0004acfe0004adca0004ae920004[_^M_][_$_]
+afd20004b1000004b1c20004b2820004b32a0004b3dc0004b4440004b4ac[_^M_][_$_]
+0004b5880004b65c0004b79c0004b8cc0004b9ee0004bae40004bb3c0004[_^M_][_$_]
+bb960004bc020004bc720004bcf60004bd7c0004be8c0004bf800004c0d2[_^M_][_$_]
+0004c20a0004c21a0004c2480004c2760004c35e0004c4420004c4c80004[_^M_][_$_]
+c55e0004c5e00004c65e0004c6de0004c75e0004c7e00004c8620004c936[_^M_][_$_]
+0004ca2e0004ca5c0004ca8a0004cabc0004caee0004cafe0004cb0e0004[_^M_][_$_]
+cb3c0004cb6a0004cb9c0004cbce0004cc000004cc320004cc640004cc96[_^M_][_$_]
+0004cd620004cd720004cda00004cdce0004ce000004ce320004ce640004[_^M_][_$_]
+ce960004cec80004cefa0004cf2c0004cf5e0004cf8c0004cfba0004cfec[_^M_][_$_]
+0004d01e0004d0500004d0800004d0b20004d0e40004d16a0004d1d80004[_^M_][_$_]
+d26c0004d27c0004d3760004d4800004d5800004d66c0004d7360004d804[_^M_][_$_]
+0004d8b20004d9700004da220004dac40004dba80004dc600004dcea0004[_^M_][_$_]
+dd700004ddc60004de560004deb80004def40004df7e0004dfde0004e012[_^M_][_$_]
+0004e0460004e0860004e0ee0004e11a0004e19e0004e1e00004e2220001[_^M_][_$_]
+000008d1008c0010004c000700020010002f005500000469ffff00030001[_^M_][_$_]
+b15440b80135b31c22392f410c0135003f0135004f0135008f0135009f01[_^M_][_$_]
+3500050040012eb31c1f3930411201280001004001280080012800900128[_^M_][_$_]
+00a0012800b00128000500ef0126000100400125b31b1f3940410a012400[_^M_][_$_]
+01002f01050001004f010400010040010340aa090d392f652f662f672f68[_^M_][_$_]
+2f692f6a2f742f752f7b2f7c2fd12fd20c20fc30fc40fcd0fc04f1f2197f[_^M_][_$_]
+f2018ff2aff2e0f203d1d216171c7b7c161b7b7c19307c407c507c607c70[_^M_][_$_]
+7c05767716171c6d7016171c6c6f16171c6b6e161b0f6b7f6b8f6e9f6eaf[_^M_][_$_]
+6e056b6e7f721a747514151c676a14151ca96ab96ae96af96a0466691415[_^M_][_$_]
+1cc669016568141b0f651f6502af68bf68ef65ff6504656885711a197316[_^M_][_$_]
+7a431921794319217f413201340001007f01330080013300900133000300[_^M_][_$_]
+6f0132007f0132008f01320003007001210001002f0121003f0121004f01[_^M_][_$_]
+21005f0121000400a0011e00b0011e00c0011e00030020012d0030012d00[_^M_][_$_]
+60012d0070012d0080012d0090012d00060040010fb40b1f39092f411f01[_^M_][_$_]
+0e005f010e009f010e00af010e00bf010e00050090010e00bf010e00cf01[_^M_][_$_]
+0e00df010e00ef010e00050020010e006f010e00b0010e00d0010e00e001[_^M_][_$_]
+0eb205d10f4123010e003f010e00bf010e00cf010e0004000f010e005f01[_^M_][_$_]
+0e006f010e00a0010e00bf010e00cf010e00df010e0007003f010e004f01[_^M_][_$_]
+0e007f010e00af010e00ef010e00ff010eb2069f7f4123010e00af010e00[_^M_][_$_]
+e0010e00ff010e0004001f010e003f010e00af010e00df010e00ef010e00[_^M_][_$_]
+05000f010e001f010e002f010e007f010e008f010e00c0010e00df010e00[_^M_][_$_]
+ef010eb2086d9f411b010e00cf010e00ef010e00ff010e0004000f010e00[_^M_][_$_]
+ef010e0002000f010e002f010e003f010e004f010e00c0010e00df010e00[_^M_][_$_]
+ef010eb2073a70bd010e00df010e00020040010eb32b33395f411b010e00[_^M_][_$_]
+70010e008f010e009f010e00cf010e00df010e0006000f010e001f010e00[_^M_][_$_]
+3f010e0080010e00bf010e00ef010e00060040010eb3091b3970bb013600[_^M_][_$_]
+0100200108b30d113940b80102b20b1439b9ffc00107b31b22392f411801[_^M_][_$_]
+0c004f010c0002002f010c0001008f010b0001002f0107004f010700c001[_^M_][_$_]
+0700d001070004004f010700010040010040640b103940fe0b1139e0f601[_^M_][_$_]
+e0f60114f424f40274f40140df60df0220d830d840d80366c176c10299be[_^M_][_$_]
+0120b230b240b20360b070b0029b93002b9a92002b9991002b9493002b92[_^M_][_$_]
+93002b9193062b9395032b9885042b9796042b9695032b9995a995026f41[_^M_][_$_]
+0f0131007f0131008f01310003013001160032001f011901160015001f01[_^M_][_$_]
+16b285032bb9ffe0012fb30b143970410d01170001002f0117003f011700[_^M_][_$_]
+4f0117005f0117000401130114b22a1fa0bc011400b0011400c001144016[_^M_][_$_]
+0370fbf0fb022ffb6ffb7ffb0340fa50fa60faf0fa04b8ffc040fffa1115[_^M_][_$_]
+3950ec70ec0250ec70ec0240ec01bfeb0170ea0130ea0170e9015fe970e9[_^M_][_$_]
+f0e903a0e9015fe870e802efe8017fe8bfe8efe803f0e701f0e7012fe780[_^M_][_$_]
+e7a0e7f0e70450e6f0e60250e660e670e6c0e60450e50170e50180e4e0e4[_^M_][_$_]
+f0e40340dca0dc02309050900220a04fa05fa09fa0afa0efa006e0f501e0[_^M_][_$_]
+f501f3851e1f2fe20140dd019fd5afd5bfd5030fd340d302e0d0010fc470[_^M_][_$_]
+c4022fc43fc44fc45fc49fc4afc4efc4ffc40899bd99bf02dad9042bd685[_^M_][_$_]
+022bcccd062bcd85022bc9c8062bc885022b8d8b042b8c8b191f8b83c81f[_^M_][_$_]
+897d641f817f082b7d7f082b7f85072baf85042b8885012b8785002b8485[_^M_][_$_]
+042b8385002b2ffd4ffd027f40abef012df03bf04ff069f07ff0051b3715[_^M_][_$_]
+1836151535151234150f33150c3215093115063015032f15002e1526270f[_^M_][_$_]
+28270f26002a1f0f2a2f2a3f2a032f24bf24022a2b0f2c2b0f22230e2423[_^M_][_$_]
+0f1e1f0e201f0f2005010f10110c0c0d0e0c090a0b0c0607080c0304050c[_^M_][_$_]
+0001020c0003181f500f700f027f0f800fbf0f030f031f032f034f037f03[_^M_][_$_]
+bf03ef030704012c1f1b011d0d18071a0d1510170d1204140d701b01501b[_^M_][_$_]
+701bf01b03b8ffc0400b1b131839701b801b02503301b0124b004b5442b0[_^M_][_$_]
+13014b004b5342b0332b4bb8032052b0322b4bb009505b58b101018e59b0[_^M_][_$_]
+332bb00288b8010054b00488b8020054b012435a5b58b80119b101018e85[_^M_][_$_]
+1bb900040100b04b60858d592b1db0644b5358b0801d59b0324b5358b090[_^M_][_$_]
+1d5900732b74742b2b2b2b2b7373742b2b2b2b2b2b2b732b2b2b2b2b2b73[_^M_][_$_]
+732bb1282645b02a4561b02c4560442b2b2b2b2b2b2b2b2b2b2b2b73b0ef[_^M_][_$_]
+45b0f0456168b0f04560b0ef23447373012b2b2b2b2b2b2b2b2b2b2b2b2b[_^M_][_$_]
+2b2b2b2b2b73737473737373732b74737374737373747374737474737374[_^M_][_$_]
+7374747374737374742b747374742b73742b2b2b2b7300732b2b2b2b2b2b[_^M_][_$_]
+2b2b2b2b737373737373737473742b2b73737373732b2b2b742b73742b75[_^M_][_$_]
+5e7374755e7374755e7374755e7374755e2b73747374737373012b2bb018[_^M_][_$_]
+b0314b53422b2b73742b732b732b2b2b732b2b2b2b732b2b2b73742b7373[_^M_][_$_]
+2b7373732b7373742b732bb109322b4bb05052424bb03c524bb00f505bb0[_^M_][_$_]
+1a23424bb0c8524bb036505bb00c23422b00000000>[_^M_][_$_]
+[16105 16169 15785 16013 16241 16333 15745 15601 15869 15477 16269 15937 16109[_^M_][_$_]
+16361 16209 16209 16113 16321 16289 14899 ] AllocGlyphStorage[_^M_][_$_]
+]def [_^M_][_$_]
+108 44 [_^M_][_$_]
+PrepFor2015[_^M_][_$_]
+AddFontInfoBegin[_^M_][_$_]
+AddFontInfo[_^M_][_$_]
+/OrigFontType /TrueType def [_$_]
+/OrigFontName <4D6963726F736F66742053616E73205365726966> def
+/OrigFontStyle () def[_^M_][_$_]
+/FSType 8 def[_^M_][_$_]
+AddFontInfoEnd[_^M_][_$_]
+[16#2c 16#6e18af9b ] AddXUID[_^M_][_$_]
+Type42DictEnd[_^M_][_$_]
+1 9274 49 <000100a40000052305ba0009007140180702010281060714060607050304[_^M_][_$_]
+01077f000e0d0d063b00b8fffa40090b0b063b0006027f04b8fff8b40d0d[_^M_][_$_]
+063b04b8fff8401c0b0b063b04400b006e020a046b02770b01780b01480b[_^M_][_$_]
+e80bf80b03005f5d715d2b2b011a18102b2b4ded32102b2bed32002f3f31[_^M_][_$_]
+30872e2b877dc4212301112311330111330523c7fd00b8c60300b90485fb[_^M_][_$_]
+7b05bafb7b048500>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 11218 55 <0001002d000004b605ba00070049403101059106030300a00205a0027f03[_^M_][_$_]
+040d0d063b03400809037f3030e9090148099809b809f809040709170977[_^M_][_$_]
+09d70904005f5d5d5d2b011a18102b4dede610e6002f3fed323130012111[_^M_][_$_]
+231121352104b6fe1bc3fe1f0489050cfaf4050cae00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8070 43 <000100a40000052305ba000b006f4019039108400605089118300a060301[_^M_][_$_]
+0509017f000e0d0d063b00b8fffa40090b0b063b0008047f05b8fff8b40d[_^M_][_$_]
+0d063b05b8fff840170b0b063b05400d006e020c056b02570d01480d880d[_^M_][_$_]
+02005f5d712b2b011a18102b2b4ded32102b2bed32002f333f332b001a18[_^M_][_$_]
+104ded31302123112111231133112111330523c3fd06c2c202fac302b2fd[_^M_][_$_]
+4e05bafda6025a00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 6982 38 <00010060ffe7055e05d3001900c140341a182a183a18030511010a0f0115[_^M_][_$_]
+080103470901080901090d92060407178717020b00171392001307101710[_^M_][_$_]
+020d020a09167d17b8fff4b40d0d063b17b8fff040190b0b063b17051715[_^M_][_$_]
+17020f17400b1036107d030c0d0d063b03b8ffd6400c0b0b063b03400703[_^M_][_$_]
+01100303b8ffe2401d090b361b176f021a036c02b81b01571b01271b371b[_^M_][_$_]
+571b771ba71b05005f5d715d2b2b2b015f5e5d1a18102b2b4ded2b5e5d10[_^M_][_$_]
+2b2bed39395f5e5d003fedcd5f5e5d3fedcd5d5d31305f5d5d5d5d052000[_^M_][_$_]
+1110002132001723262623220011100033323637330600030afec9fe8d01[_^M_][_$_]
+730137ef015015c80cd9a5dffefc0102ddacd40ec815feba190199015d01[_^M_][_$_]
+5d0199fefed38ba4fecdfee3fee4fecca89ceaff0000>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 7274 39 <000200a40000056005ba0006000f007840180a0401050201090f91000307[_^M_][_$_]
+9106080b180b020d020b7d03b8fffcb40d0d063b03b8ffeab70b0b063b03[_^M_][_$_]
+077f06b8fff6b40d0d063b06b8fff8401c0b0b063b064011036f0210066b[_^M_][_$_]
+02571101a7110118114811881103005f5d5d712b2b011a18102b2b4ded10[_^M_][_$_]
+2b2bed5f5e5d002fed3fed31305e5d5d1321201110212137212012111002[_^M_][_$_]
+2121a401d102ebfd15fe2fc2010b013fe8e7fec0fef505bafd2bfd1bae01[_^M_][_$_]
+29010e0107012000>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 10444 53 <000200a40000056a05ba0014001c00f14017470c570c670c03024c035c03[_^M_][_$_]
+020302011c018100141400b8fff840320b0b063b0000148a14012c143c14[_^M_][_$_]
+0208141814020902050e150e250e350e0403197d070e170e270e370e040e[_^M_][_$_]
+040d0d063b0eb8fff4401a0b0b063b0e01020e1112140600080018007800[_^M_][_$_]
+030d0015077f08b8fff8b40d0d063b08b8fff8402f0b0b063b08401e006f[_^M_][_$_]
+021d086b028711010212110915919706010606081c9209030008481e0177[_^M_][_$_]
+1e01a71eb71e02005f5d715d002f333fed12392f5ded1239395f5d302b2b[_^M_][_$_]
+011a18102b2b4ded325f5e5d1117332f2b2b5ded5f5d5f5e5d5d5d872e2b[_^M_][_$_]
+2b0e4b52587d1b7a5910c431005f5d5f5d21230326262321112311213216[_^M_][_$_]
+16151406071516170121323635342121056ad28a25ac70fe99c20289aad8[_^M_][_$_]
+88b0999950fc8f01b1b5a3fec6fe3101876884fd8d05ba42d48598cc1f04[_^M_][_$_]
+31d80192728cfa00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 2538 16 <0001004201b80268026d0003003140208f0101012f024f025f0203025000[_^M_][_$_]
+6000027001012f01010005017005012005015d712f10c65d5d5d002f5dcd[_^M_][_$_]
+5d3130012135210268fdda022601b8b5>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 7462 40 <000100a4000004e905ba000b0062401f0991064002010691183005910203[_^M_][_$_]
+0a910107081708020a00080400060a7f01b8fffab40d0d063b01b8fffe40[_^M_][_$_]
+120b0b063b01400d006f020c016b02e80d01005f5d2b2b011a18102b2b4d[_^M_][_$_]
+ed3210c4c45f5e5d002fed3fed2b001a18104ded31302121112115211121[_^M_][_$_]
+1521112104e9fbbb0423fc9f0329fcd7038305baaefe40aefe10>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8922 48 <000100a40000060605ba000c0125b90003fff4400a0d0d063b0b48091036[_^M_][_$_]
+09b8ffb840960910368c0b9c0b0283099309020268040101480458047804[_^M_][_$_]
+0302670301014703570377030302180a0101050a150a250a0302880a980a[_^M_][_$_]
+a80a0300bc0adc0a0203c80a01011e052e0502037705a705b705c705d705[_^M_][_$_]
+05018505950502001e022e0202037702a702b702c702d702050185029502[_^M_][_$_]
+0205020a030479040108041804280438040409000b08030104070b027f00[_^M_][_$_]
+0a0d0d063b00b8fff640090b0b063b0009057f07b8fffc40200b0b063b07[_^M_][_$_]
+400e006e020d076b02770e01570e970e02080e180e380ee80e04005f5d5d[_^M_][_$_]
+712b2b011a18102b4ded32102b2bed32002f33333f335f5e5d5d12173931[_^M_][_$_]
+305d5f5d5f715f5d5f5d5f715f5d5f5d5f5d5f715f5d015f5d5f5d5f5d5f[_^M_][_$_]
+5d5f5d5d2b2b2b212311012301112311210101210606b8fe5eaefe5eb801[_^M_][_$_]
+23018d018f012304dffb2104dffb2105bafb3a04c600>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 9726 51 <000200a4000004fc05ba000b0015007d400d0c9109090b159100030b107d[_^M_][_$_]
+05b8ffeeb40d0d063b05b8ffda40190b0b063b053705010205051505020d[_^M_][_$_]
+0305400910360c0a7f0bb8fff8b40d0d063b0bb8fffc40170b0b063b0b40[_^M_][_$_]
+17056f02160b6b02e817017717a71702005f5d5d2b2b011a18102b2b4ded[_^M_][_$_]
+322b5f5e5d5f5d102b2bed002f3fed12392fed3130132132161615140421[_^M_][_$_]
+21112313213236353426262321a40223b4f38efee6fef5fe8fc2c20173bb[_^M_][_$_]
+9f58877ffe9105ba43df8adee6fdb602f88c84588824>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8832 47 <000100a40000042f05ba0005003b400f020304910100400f18360007047f[_^M_][_$_]
+01b8fffc40110b0b063b014006016b02a70701880701005f5d5d2b011a18[_^M_][_$_]
+102b4ded10c62b002fed3f3130212111331121042ffc75c202c905bafaf4[_^M_][_$_]
+>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 6372 36 <0002fffe0000055805ba0002000a00fd402ea809b8090257020103000504[_^M_][_$_]
+0401020607070101041c01020481030a1403030a01071c01000781080914[_^M_][_$_]
+08080908b8ffea40740919360316091936980aa80a02027a0a0103370a47[_^M_][_$_]
+0a570a670a0401070a170a270a03029809b80902037709013a094a095a09[_^M_][_$_]
+6a090418092809880903020a09010a0306934007021702020b0002400b0b[_^M_][_$_]
+063b020203080903080c0377020b087602370c670cf70c03580c780c0208[_^M_][_$_]
+0cb80c02005f5d715d2b2b00182f3f1239392f2b5f5e5d1a4ded3130015f[_^M_][_$_]
+5e5d5f5d5d5d5f5d5f5d5f5d5f5d5f5d2b2b872e2b084b52587d1b7a5910[_^M_][_$_]
+c487052e182b084b52587d1b7a5910c40705103c3c07103c3c015f5d5d01[_^M_][_$_]
+01030123032103230133039afefef603b6dbaafd9aa2cd0233d1025802a8[_^M_][_$_]
+fd58fda801befe4205ba>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 0 0 <0002003200000226060000030007000033112111252111213201f4fe7801[_^M_][_$_]
+1cfee40600fa006c0528>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/N 49 def[_^M_][_$_]
+/T 55 def[_^M_][_$_]
+/H 43 def[_^M_][_$_]
+/C 38 def[_^M_][_$_]
+/D 39 def[_^M_][_$_]
+/R 53 def[_^M_][_$_]
+/hyphen 16 def[_^M_][_$_]
+/E 40 def[_^M_][_$_]
+/M 48 def[_^M_][_$_]
+/P 51 def[_^M_][_$_]
+/L 47 def[_^M_][_$_]
+/A 36 def[_^M_][_$_]
+/.notdef 0 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 1 /N put[_^M_][_$_]
+dup 2 /T put[_^M_][_$_]
+dup 3 /H put[_^M_][_$_]
+dup 4 /C put[_^M_][_$_]
+dup 5 /D put[_^M_][_$_]
+dup 6 /R put[_^M_][_$_]
+dup 7 /hyphen put[_^M_][_$_]
+dup 8 /E put[_^M_][_$_]
+dup 9 /M put[_^M_][_$_]
+dup 10 /P put[_^M_][_$_]
+dup 11 /L put[_^M_][_$_]
+dup 12 /A put[_^M_][_$_]
+pop[_^M_][_$_]
+Pscript_WinNT_Incr begin[_^M_][_$_]
+%%BeginResource: file Pscript_Text 5.0 0[_^M_][_$_]
+/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d[_^M_][_$_]
+/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^[_^M_][_$_]
+length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets[_^M_][_$_]
+{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&[_^M_][_$_]
+/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}[_^M_][_$_]
+if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{[_^M_][_$_]
+{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get[_^M_][_$_]
+StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $[_^M_][_$_]
+! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy[_^M_][_$_]
+put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM[_^M_][_$_]
+makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0[_^M_][_$_]
+Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N[_^M_][_$_]
+/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT[_^M_][_$_]
+{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d[_^M_][_$_]
+/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `[_^M_][_$_]
+/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d[_^M_][_$_]
+/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont[_^M_][_$_]
+Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1[_^M_][_$_]
+add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E[_^M_][_$_]
+/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $[_^M_][_$_]
+FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255[_^M_][_$_]
+idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector[_^M_][_$_]
+Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding[_^M_][_$_]
+length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2[_^M_][_$_]
+add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs[_^M_][_$_]
+putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^[_^M_][_$_]
+256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E[_^M_][_$_]
+/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~[_^M_][_$_]
+definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix[_^M_][_$_]
+makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ ![_^M_][_$_]
+findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?[_^M_][_$_]
+{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName[_^M_][_$_]
+get undefinefont}forall undefinefont}b[_^M_][_$_]
+%%EndResource[_^M_][_$_]
+end reinitialize[_^M_][_$_]
+F /F0 0 /0 F /TTE1CD9F20t00 mF [_$_]
+/F0S47YFFFFFFBB F0 [71.031 0 0 -68.75 0 0 ] mFS
+F0S47YFFFFFFBB Ji [_$_]
+3125 894 M <010203040506070208090A0B0C0208>S [_$_]
+3125 800 M <010203070208090A0B0C0208>S [_$_]
+3125 706 M <080B02070208090A0B0C0208>S [_$_]
+: 3125 550 594 78 rc 317 VM?[_^M_][_$_]
+1 7608 41 <000100a40000048105ba0009004f40110591020207019108030704040002[_^M_][_$_]
+067f07b8fffe401c0d0d063b074000400b16360b006f020a076b02e80b01[_^M_][_$_]
+270b570b02005f5d5d2b2b2b011a18102b4ded3212392f002f3fed12392f[_^M_][_$_]
+ed3130012111211521112311210481fce502b1fd4fc203dd050cfe3aaefd[_^M_][_$_]
+6805ba00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/F 41 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 13 /F put[_^M_][_$_]
+pop[_^M_][_$_]
+3125 613 M <0C06080D070208090A0B0C0208>S [_$_]
+; N 3625 1056 M 3788 1056 I K [_^M_][_$_]
+N 3788 1056 M 3713 1075 I 3713 1038 I C [_^M_][_$_]
+ O 951 VM?[_^M_][_$_]
+1 10782 54 <0001005cffe704ec05d300230140b9001dfff4b40b0b063b1cb8fff44076[_^M_][_$_]
+0b0b063b5a220103681f0102571f0100071f0101351e451e0203781d0102[_^M_][_$_]
+131d231d531d0303381a481a020228173817481703007814010255140155[_^M_][_$_]
+100103680e780e02780d0101080d010a5a0c01580b010225093509020317[_^M_][_$_]
+05270537050300670201024a0201030a0f1b21040068150115189112b8ff[_^M_][_$_]
+fc40150d0d063b120407034703570367038703050b000307b8fff040200d[_^M_][_$_]
+0d063b07910013167f150c0b0b063b151b7f0f0c0b0b063b0f150f030a7f[_^M_][_$_]
+21b8ffe0b40b0b063b21b8fff4401a0d0d063b21047f034025216f022403[_^M_][_$_]
+6c02b825e82502a72501005f5d5d2b2b011a18104ded102b2bed1239392f[_^M_][_$_]
+2bed2f2bed003fed2bc45f5e5d3f2bedc45d12173931305f5d5f5d5f5d5f[_^M_][_$_]
+5d5f5d5d5e5d5f5d5d5f5d5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d[_^M_][_$_]
+5f5d2b2b0520002733161633323635342624263534243332041723022122[_^M_][_$_]
+0615141604161615140402cdfecafecd08bb0ff3aca3c7cefe09db011dec[_^M_][_$_]
+f8013009bd1dfeb1a2b28f0187e6a4fed3190116daa49d8673796e6bbe9e[_^M_][_$_]
+b2e4e6d2010a7a655c5c5654b195bdfa>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8228 44 <000100bc0000017f05ba00030063400c020301007f01040d0d063b01b8ff[_^M_][_$_]
+fc400d0b0b063b01400405017f213005b8ffc0402a232836070517053705[_^M_][_$_]
+6705770587050647055705670587059705a705b705c705f7050998050178[_^M_][_$_]
+0501005f5d715d712b2b011a18102b2b4ded002f3f313021231133017fc3[_^M_][_$_]
+c305ba00>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 7732 42 <00010060ffe705b605d3001d00e640521c100b0b063b2a1d3a1d7a1d0303[_^M_][_$_]
+671401022511012a0f010388080102350801039801010217911818002809[_^M_][_$_]
+01090d920604139200131a0a7d090c0d0d063b09100b0b063b0908184818[_^M_][_$_]
+020900181c167f1ab8ffd6401b0b0b063b1a351a0103371a01000710010d[_^M_][_$_]
+02107d030c0d0d063b03b8ffd6400f0b0b063b03402703010503010e0303[_^M_][_$_]
+b8ffe24018090b361f1a6f021e036c02781f01271fa71fb71ff71f04005f[_^M_][_$_]
+5d5d2b2b2b015f5e5d5d1a18102b2b4ded5f5e5d5f5d5f5d102bed32c45f[_^M_][_$_]
+5e5dd42b2bed002f3fed3fedcd5d12392fed31305f5d5f5d5f5d5f5d5d5f[_^M_][_$_]
+5d5f5d2b0520001110002120041723262623220011100033203735213521[_^M_][_$_]
+112327060325fec4fe770184013b0109015f15c90ce8bee3feeb0118e201[_^M_][_$_]
+3d9afe7d023f89339519019e01580159019dffd68ea1fecafee6fee7fec9[_^M_][_$_]
+d1dfaffd149ab300>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/S 54 def[_^M_][_$_]
+/I 44 def[_^M_][_$_]
+/G 42 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 14 /S put[_^M_][_$_]
+dup 15 /I put[_^M_][_$_]
+dup 16 /G put[_^M_][_$_]
+pop[_^M_][_$_]
+3800 1081 M <0E02060F0110070208090A0B0C0208>S [_$_]
+N 2744 1338 M 2906 1056 I K [_^M_][_$_]
+N 2906 1056 M 2888 1131 I 2850 1113 I C [_^M_][_$_]
+ O N 2744 1338 M 2906 1338 I K [_^M_][_$_]
+N 2906 1338 M 2831 1356 I 2831 1319 I C [_^M_][_$_]
+ O 2919 1363 M <0B0F0E02070208090A0B0C0208>S [_$_]
+N 2606 1056 M 2906 1056 I K [_^M_][_$_]
+N 2906 1056 M 2831 1075 I 2831 1038 I C [_^M_][_$_]
+ O 635 VM?[_^M_][_$_]
+1 11490 57 <0001000c0000054805ba000600c0b90003ffea405d091936001609193678[_^M_][_$_]
+019801c80103023501450155016501040307011701270167010477029702[_^M_][_$_]
+c70203023a024a025a026a0204030802180228026802040a020303020800[_^M_][_$_]
+700207036d0237086708f7080358087808020808b80802005f5d715d2b2b[_^M_][_$_]
+00182f3f3130015f5e5d5f5d5f5d5d5f5d5f5d2b2bb106024354581b401a[_^M_][_$_]
+05061c0504068100011400000105041c05060481030214030302872e4d2b[_^M_][_$_]
+084b52587d1b7a5910c487052e182b084b52587d1b7a5910c45901012301[_^M_][_$_]
+3301010548fdc6c8fdc6cf01cf01cf05bafa4605bafb1704e900>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 9432 50 <00020060ffe705db05d3000b001700bdb10602435458400a129200040c92[_^M_][_$_]
+06130f03b8ffeeb40d0d063b03b8ffe040100b0b063b0303191815090c0d[_^M_][_$_]
+0d063b09b8ffd6b70b0b063b090919181112392f2b2bcd1112392f2b2bcd[_^M_][_$_]
+003fed3fed31301b404a12920a001a002a000300040c9205061506250603[_^M_][_$_]
+0906130f7d03157d09406803010a031a033a034a03046709010509150935[_^M_][_$_]
+094509040a0319036f0218096c02e81901571901271901005f5d715d2b2b[_^M_][_$_]
+015f5e5d5d5d5d1a18104ded10ed003f5e5ded3f5ded3130590120001110[_^M_][_$_]
+00212000111000013200111000232200111000031f01340188fe78feccfe[_^M_][_$_]
+cbfe76018a0133dc0119fee8d9ddfee5011a05d3fe60feaafeaafe6001a1[_^M_][_$_]
+0155015601a0faba0138011801180138fec8fee8fee9fec7>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/V 57 def[_^M_][_$_]
+/O 50 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 17 /V put[_^M_][_$_]
+dup 18 /O put[_^M_][_$_]
+pop[_^M_][_$_]
+2919 1081 M <110804021206070208090A0B0C0208>S [_$_]
+N 3617 1058 M 3617 1047 3607 1037 3596 1037 -c 3584 1037 3574 1047 3574 1058 -c 3574 1069 3584 1079 3596 1079 -c 3607 1079 3617 1069 3617 1058 -c C [_^M_][_$_]
+ O N 1769 1338 M 1931 1619 I K [_^M_][_$_]
+N 1931 1619 M 1875 1563 I 1913 1544 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1525 I K [_^M_][_$_]
+N 1931 1525 M 1869 1481 I 1894 1456 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1431 I K [_^M_][_$_]
+N 1931 1431 M 1856 1413 I 1875 1375 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1338 I K [_^M_][_$_]
+N 1931 1338 M 1856 1356 I 1856 1319 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1244 I K [_^M_][_$_]
+N 1931 1244 M 1875 1300 I 1856 1263 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1150 I K [_^M_][_$_]
+N 1931 1150 M 1894 1219 I 1869 1194 I C [_^M_][_$_]
+ O N 1769 1338 M 1931 1056 I K [_^M_][_$_]
+N 1931 1056 M 1913 1131 I 1875 1113 I C [_^M_][_$_]
+ O 635 VM?[_^M_][_$_]
+1 12728 60 <0001000a0000054c05ba000800dc4018010704670401034804580402000a[_^M_][_$_]
+041a04020b0200040305b8ffe8b60a0f3605030305b8ffe1400c091b3600[_^M_][_$_]
+1f091b3607017f04b8fff8403b0b0b063b04400500047f30300a00700209[_^M_][_$_]
+056d02070a170a970ab70ad70af70a06070a370a670a870aa70a05480a68[_^M_][_$_]
+0a780a03c80ad80ae80a03005f5d715d712b2b2b011a18102b4ded392b2b[_^M_][_$_]
+002f3f2b1239395f5e5d5f5d5f5d1133333130b106024354581b401a0708[_^M_][_$_]
+19070608810001140000010706190708068105041405050487052e2b084b[_^M_][_$_]
+52587d1b7a5910c487052e182b084b52587d1b7a5910c459010111231101[_^M_][_$_]
+330101054cfdc0c2fdc0ec01b601b405bafcb3fd93026d034dfd5d02a300[_^M_][_$_]
+>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 6682 37 <000300a4000004ec05ba000d0016001e00c24043380d480d02080b010708[_^M_][_$_]
+0111020b1e910e4005040e91183016910503179104270001081a181a020d[_^M_][_$_]
+020b04127f0c091c09020f0309180d0d063b090c0b0b063b090904b8fffa[_^M_][_$_]
+b40d0d063b04b8fffcb70b0b063b041a7d00b8fff4b40d0d063b00b8ffea[_^M_][_$_]
+b60b0b063b000e17b8fffc40190d0d063b177f044020006f021f046b02a7[_^M_][_$_]
+20018820e82002005f5d5d2b2b011a18104ded2b32102b2bed122b2b392f[_^M_][_$_]
+2b2b5f5e5ded12395f5e5d5d002fed3fed2b001a18104ded3931305f5e5d[_^M_][_$_]
+5d5d01140421211121320415140716160121323635342623211121203534[_^M_][_$_]
+26232104ecfee8fef5fddb020aea010cd38e8dfc7a0146a19894b7fecc01[_^M_][_$_]
+61015ca1d4feb801aacedc05bac8aed46624c1012f67786c6dfba2fc8379[_^M_][_$_]
+>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/Y 60 def[_^M_][_$_]
+/B 37 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 19 /Y put[_^M_][_$_]
+dup 20 /B put[_^M_][_$_]
+pop[_^M_][_$_]
+1944 1644 M <0E130914120B070208090A0B0C0208>S [_$_]
+635 VM?[_^M_][_$_]
+1 11330 56 <000100a4ffe7052305ba00130059402077120103070a010b0800010c020e[_^M_][_$_]
+05030a9100130e7f0f0e0d0d063b0f067f05b8fff640150d0d063b054015[_^M_][_$_]
+0f6e0214056b02a71501481501005f5d5d2b2b011a18102b4ded102bed00[_^M_][_$_]
+3fed3f335f5e5d5e5d31305f5d0522260235113311101633323611113311[_^M_][_$_]
+10060402e3fffd43c2c2bbbbc2c37fff0019c6010cb10350fcb3fedfb6b6[_^M_][_$_]
+0121034dfcb0fef6fc7d>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+1 8352 45 <00010037ffe7035c05ba000f007c401f550a01030e0308075807020b0007[_^M_][_$_]
+0a914803010203130e7f0f0e0d0d063b0fb8fff0401d0b0b063b0f087f40[_^M_][_$_]
+6707010807180728074807040d0007160d0d063b07b8ffe840120b0b063b[_^M_][_$_]
+07110f6e02b811012711a71102005f5d5d2b01182f2b2b5f5e5d5d1a4ded[_^M_][_$_]
+102b2bed003f5f5dedc45f5e5d3f5f5d3130011006232226353533103332[_^M_][_$_]
+36351133035cd0cbb6d4c3c76970c201d5fef3e1deb627fef476bf03ef00[_^M_][_$_]
+>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/U 56 def[_^M_][_$_]
+/J 45 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 21 /U put[_^M_][_$_]
+dup 22 /J put[_^M_][_$_]
+pop[_^M_][_$_]
+1944 1550 M <0E020615040215060807121416080402070208090A0B0C0208>S [_$_]
+1944 1456 M <0E020C01050C060507121416080402070208090A0B0C0208>S [_$_]
+317 VM?[_^M_][_$_]
+1 9928 52 <00020060ff8b05f405d3000f001f018c400d1d200b0b063b10200b0b063b[_^M_][_$_]
+1db8ffe0b40b0b063b10b8ffca40180b0b063b611e711e811e0303070017[_^M_][_$_]
+002700030088020111b8ffc040490f13368a1e01021a1e6a1e7a1e030137[_^M_][_$_]
+1167110202271101001010110f000f0e001f1d1d1c020203011e0101001f[_^M_][_$_]
+001f811e01141e1f1e1e011592020d0f03040a0a1a0a2a0a03030ab8ffe8[_^M_][_$_]
+404c0b0b063b0a041e0001181f281f681f781f041f1b9217016701770103[_^M_][_$_]
+003a014a015a01030105041504250403090304180b0b063b0413381e481e[_^M_][_$_]
+020000101b1d1e04121802040f0307127d0db8ffeeb40d0d063b0db8ffd6[_^M_][_$_]
+400e0b0b063b0d187d070c0d0d063b07b8ffd640320b0b063b0740680d01[_^M_][_$_]
+0a0d1a0d3a0d4a0d046707010507150735074507040a03210d6f0220076c[_^M_][_$_]
+02e82101572101272101005f5d715d2b2b015f5e5d5d5d5d1a18102b2b4d[_^M_][_$_]
+ed102b2bed12173911121739c65f5d003f2b5f5e5dc65d5f5dfdc45d1139[_^M_][_$_]
+393f2b5f5d121739ed313087082e2b87087dc407083c083c0708103c083c[_^M_][_$_]
+005f5d5f5d5f5d5f5d2b015d5f5d5f5d002b2b012b2b2507270623200011[_^M_][_$_]
+10002120001110072736111000232200111000333237273705f473f2a3cd[_^M_][_$_]
+fecbfe76018a013501340188be9287fee8d9ddfee5011ada746992731489[_^M_][_$_]
+bf6301a10155015601a0fe60feaafeb4d573a0010e01180138fec8fee8fe[_^M_][_$_]
+e9fec7317389>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/Q 52 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 23 /Q put[_^M_][_$_]
+pop[_^M_][_$_]
+1944 1363 M <0E08171508010408070208090A0B0C0208>S [_$_]
+N 2736 1340 M 2736 1328 2726 1318 2715 1318 -c 2703 1318 2693 1328 2693 1340 -c 2693 1351 2703 1361 2715 1361 -c 2726 1361 2736 1351 2736 1340 -c C [_^M_][_$_]
+ O 1944 1269 M <011509140806070208090A0B0C0208>S [_$_]
+1944 1175 M <010F0B070208090A0B0C0208>S [_$_]
+1944 1081 M <0C06060C13070208090A0B0C0208>S [_$_]
+N 2598 1058 M 2598 1047 2588 1037 2577 1037 -c 2565 1037 2555 1047 2555 1058 -c 2555 1069 2565 1079 2577 1079 -c 2588 1079 2598 1069 2598 1058 -c C [_^M_][_$_]
+ O N 2025 844 M 2188 963 I K [_^M_][_$_]
+N 2188 963 M 2119 931 I 2138 900 I C [_^M_][_$_]
+ O N 2025 844 M 2188 725 I K [_^M_][_$_]
+N 2188 725 M 2138 788 I 2119 756 I C [_^M_][_$_]
+ O 2200 988 M <0E15140E0817070208090A0B0C0208>S [_$_]
+2200 750 M <080B0809080102070208090A0B0C0208>S [_$_]
+N 2942 727 M 2942 715 2932 705 2921 705 -c 2909 705 2899 715 2899 727 -c 2899 738 2909 748 2921 748 -c 2932 748 2942 738 2942 727 -c C [_^M_][_$_]
+ O N 988 1088 M 1150 1338 I K [_^M_][_$_]
+N 1150 1338 M 1094 1288 I 1125 1263 I C [_^M_][_$_]
+ O N 988 1088 M 1150 844 I K [_^M_][_$_]
+N 1150 844 M 1125 919 I 1094 894 I C [_^M_][_$_]
+ O 1163 1363 M <02130A08070208090A0B0C0208>S [_$_]
+N 1761 1340 M 1761 1328 1751 1318 1740 1318 -c 1728 1318 1718 1328 1718 1340 -c 1718 1351 1728 1361 1740 1361 -c 1751 1361 1761 1351 1761 1340 -c C [_^M_][_$_]
+ O 317 VM?[_^M_][_$_]
+1 12422 59 <0001000a0000054c05ba000b00f6406c080b380b680b880b980b05070537[_^M_][_$_]
+05670597050409020504050203020106010809080b0a0b0007000201020b[_^M_][_$_]
+000b03030a050605080708040409070106018100071400000709030a0381[_^M_][_$_]
+040914040409070627066706770604080428046804780404010603040a40[_^M_][_$_]
+13163606b8ffc040381216360a0a2a0a020a002a00020506250602050425[_^M_][_$_]
+04020b030a060a0600040d0070020c046d02e90d01580d01a80db80df80d[_^M_][_$_]
+03470d01005f5d5d715d2b2b0111123939182f2f5f5e5d5d5d5d2b2b002f[_^M_][_$_]
+3f5f5d5d313087052e4d2b877dc4872e182b877dc4871008c008c0871008[_^M_][_$_]
+c008c0871008c008c0871008c008c0015f5e5d5d21230901230901330901[_^M_][_$_]
+3301054ceefe4efe4cee0233fe05ed017b017dedfe03026dfd93030402b6[_^M_][_$_]
+fde2021efd4a>/TTE1CD9F20t00 AddT42Char [_^M_][_$_]
+/TTE1CD9F20t00 findfont /CharStrings get begin[_^M_][_$_]
+/X 59 def[_^M_][_$_]
+end[_^M_][_$_]
+/TTE1CD9F20t00 findfont /Encoding get[_^M_][_$_]
+dup 24 /X put[_^M_][_$_]
+pop[_^M_][_$_]
+1163 869 M <08180A06080E0E0F1201070208090A0B0C0208>S [_$_]
+N 2017 846 M 2017 834 2007 824 1996 824 -c 1984 824 1974 834 1974 846 -c 1974 857 1984 867 1996 867 -c 2007 867 2017 857 2017 846 -c C [_^M_][_$_]
+ O 575 1113 M <0208090A0B0C0208>S [_$_]
+N 979 1090 M 979 1078 970 1068 958 1068 -c 947 1068 937 1078 937 1090 -c 937 1101 947 1111 958 1111 -c 970 1111 979 1101 979 1090 -c C [_^M_][_$_]
+ O LH[_^M_][_$_]
+(%%[Page: 1]%%) = [_^M_][_$_]
+%%PageTrailer[_^M_][_$_]
+[_^M_][_$_]
+%%Trailer[_^M_][_$_]
+%%DocumentNeededResources: [_^M_][_$_]
+%%DocumentSuppliedResources: [_^M_][_$_]
+%%+ procset Pscript_WinNT_ErrorHandler 5.0 0[_^M_][_$_]
+%%+ procset Pscript_FatalError 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Win_Basic 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Win_Utils_L2 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Win_GdiObject 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Win_GdiObject_L3 5.0 0[_^M_][_$_]
+%%+ procset Pscript_T42Hdr 5.0 0[_^M_][_$_]
+%%+ procset Pscript_Text 5.0 0[_^M_][_$_]
+Pscript_WinNT_Incr dup /terminate get exec[_^M_][_$_]
+ehsave restore[_^M_][_$_]
+(%%[LastPage]%%) = [_^M_][_$_]
+%%EOF[_^M_][_$_]
addfile ./docs/html/images/unif-templ-hier.sxd
binary ./docs/html/images/unif-templ-hier.sxd
addfile ./docs/html/index.html
hunk ./docs/html/index.html 1
+<html>
+ <head>
+ <title>CL Unification</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link-selected">Home</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;<div class="sidebar"></div></td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Common Lisp Extensions: UNIFICATION</h1>
+
+
+ <em>
+ <p>
+ <b>DISCLAIMER:</b> The code associated to these documents is not
+ completely tested and it is bound to contain errors and omissions.
+ This documentation may contain errors and omissions as well.</p>
+
+ <p>Finally, the license under which the code is released is not
+ settled yet, although the file <tt>COPYING</tt> contains a
+ Berkeley-style license. For the time being you are advised to use
+ the code at your own risk. No warranty whatsoever is provided, the
+ author will not be held responsible for any effect generated by your
+ use of the library, and you can put here the scarier extra
+ disclaimer you can think of.
+ </p>
+ </em>
+
+ <p>The notion of <em>unification</em> originated in the field of
+ formal logic (e.g. <a href="#R65">[R65]</a>,) and has been used
+ extensively in Computer Science and Programming Languages. Most
+ notably, <strong>Prolog</strong> uses the full power of
+ unification.</p>
+
+ <p>
+ Unification is also at the core of <em>type checking</em> algorithms
+ in the tradition of Milner's, and a limited form - <em>pattern
+ matching</em> - is available to the user in languages of the ML and
+ Haskell family.</p>
+
+ <p>The library presented in these pages provides a full blown
+ <em>unification framework</em> for <strong>Common Lisp</strong>.</p>
+
+ <p>Writing a pattern matcher or a an unifier in <strong>Common
+ Lisp</strong> is easy, as long as we limit ourselves to manipulate
+ only ATOMs and CONSes.</p>
+
+ <p>Alas, it would be much nicer if we could manipulate arbitrary
+ <strong>Common Lisp</strong> objects as the ML programmer can with
+ arbitrary ML objects.<p>
+
+ <p>The library presented here is the first one (to the best of the
+ author's knowledge) that is capable of manipulating arbitrary
+ <strong>Common Lisp</strong> objects.</p>
+
+ <p>The hope is that this library could be incorporated directly in
+ an implementation in order to provide better type checking.</p>
+
+ <p>This should not come as a surprise, as a compiler like CMUCL does
+ include a type inference engine, which does very similar things.</p>
+
+ <h2>Unification Basics</h2>
+ [_$_]
+ <p>The unification process makes sure that two <em>object
+ descriptions</em> containing some <em>holes</em>
+ - i.e. <em>variables</em> - can be made equal (almost in the EQUALP
+ sense) by assigning <em>consistent</em> values to the variables
+ involved.</p>
+
+ <p>Suppose we had a function U performing unification and returning
+ a set of <em>variable assignments</em>, often called a
+ <em>substitution</em>. A very simple [_$_]
+ example involving the unification of two numbers could be
+ <pre>
+ <b>U</b>(42, 42) ==> {}
+ </pre>
+ The two numbers are EQL, so no variable is involved and the empty
+ substitution is returned.
+ <pre>
+ <b>U</b>(42, 123) ==> &lt;unification failure&gt;
+ </pre>
+ The two numbers are not EQL, so the unification fails.
+ <pre>
+ <b>U</b>(42, x) ==> {x -> 42}
+ </pre>
+ The only way to make the unification process to succeed is to bind
+ the value 42 to the variable <code>x</code>.</p>
+
+ <p>The UNIFICATION library defines all the necessary functions and a
+ <em>unification sub-language</em> to handle most of <strong>Common
+ Lisp</strong>.</p>
+
+ <h2>UNIFICATION Library</h2>
+
+ <p>The UNIFICATION library has one main entry point, the generic function
+ UNIFY, and a sub-language definition that allows us to talk about
+ <strong>Common Lisp</strong> objects.</p>
+
+ <p>The UNIFY generic function has the following signature:
+ <pre>
+ <b>unify</b> <i>x</i> <i>y</i> &amp;optional <i>substitution</i>
+ </pre>
+ Where <code><i>x</i></code> and <code><i>y</i></code> are either
+ arbitrary <strong>Common Lisp</strong> objects, <em>variables</em>,
+ or <em>object templates</em>. These items constitute the so-called
+ <em>extended terms</em> manipulated by the unification
+ machinery.</p>
+
+ <p><em>Variables</em> are symbols with a <code>#\?</code> as the
+ first character of the name. This is a rather traditional choice,
+ although a different one based on quoted symbols is possible.
+ Therefore, the following are examples of variables.
+ <pre>
+ ?A ?s ?qwe ?42z ?a-variable-with-a-very-long-name ?_
+ </pre>
+ There are two special variables, <code>?_</code> and <code>_</code>,
+ which are used as anonymous place holders, they match anything, but
+ never appear in a substitution.</p>
+
+ <p>Hence, the above examples result in the following
+ <pre>
+ cl-prompt&gt; (<b>unify</b> 42 42)
+ <i>#&lt;EMPTY ENVIRONMENT xxxxxx&gt;</i>
+ </pre>
+
+ <pre>
+ cl-prompt&gt; (<b>unify</b> 42 123)
+ ==> error: unification failure
+ </pre>
+
+ <pre>
+ cl-prompt&gt; (<b>unify</b> 42 ?x)
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?x *)
+ <i>42</i>
+ </pre>
+ </p>
+ Where FIND-VARIABLE-VALUE is the accessor used to find the value of
+ a variable in a substitution.</p>
+
+ <p>As a more complicated example, consider the usual CONS based
+ unification
+ <pre>
+ cl-prompt&gt; (<b>unify</b> '(foo (bar frobboz) ?baz) '(foo ?gnao 42))
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?gnao *)
+ <i>(BAR FROBBOZ)</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?baz **)
+ <i>42</i>
+ </pre>
+
+ <p>Of course note the following behavior
+ <pre>
+ cl-prompt&gt; (<b>unify</b> '(foo ?x 42) '(foo 42 ?x))
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>unify</b> '(foo ?x 42) '(foo baz ?x))
+ ==> error: unification failure
+ </pre>
+ </p>
+ [_$_]
+
+ <p>UNIFY works also on arrays and vectors. Strings are treated as
+ atomic objects
+ <pre>
+ cl-prompt&gt; (<b>unify</b> #(1 2 3) #(1 ?x ?y))
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?x *)
+ <i>2</i>
+ </pre>
+
+ <pre>
+ cl-prompt&gt; (<b>unify</b> #2A((1 2 3) (a s ?z)) #2A((1 ?x ?y) (a s d)))
+ <i>#&lt;ENVIRONMENT xxxxxx&gt;</i>
+
+ cl-prompt&gt; (<b>find-variable-value</b> '?z *)
+ <i>D</i>
+ </pre>
+ </p>
+
+ <p>So far so good, but how can you unify two structures? First of
+ all there is no portable way (yet) to list all the slots of a given
+ structure. Secondly, by allowing the unification of arbitrary
+ CONSes, we have created a short-circuit in the unification
+ machinery.</p>
+
+ <p>Dealing with object instances raises similar problems.</p>
+
+ <p>Suppose we have the following definition
+ <pre>
+ (defstruct foo a s d)
+ </pre>
+ The straightforward
+ <pre>
+ (<b>unify</b> #S(FOO A 42 S NIL D NIL) (make-foo :a 42))
+ </pre>
+ cannot be built portably, besides, we do not even have the equivalent of the
+ <code>#S(...)</code> notation for regular CLOS objects. Moreover we want
+ to do other things with other data types.</p>
+
+ <p>A simple solution is to define a <em>template sub-language</em>
+ to express unifications between structure objects or standard
+ objects (and other data types as well.) Nevertheless, the
+ definition of such sub-language cannot be CONS based, because in
+ such case, we would conflate arbitrary CONSes and the expressions of
+ the sub-language.</p>
+
+ <p>To circumvent this problem we resort to the usual trick a ML
+ programmer uses to placate the type-checker: we introduce an
+ "intermediate" data type. Essentially the following
+ <pre>
+ (defclass <b>template</b> ()
+ ((spec :accessor template-spec :type (or cons symbol number) ...)))
+ </pre>
+ </p>
+
+ <p>The TEMPLATE class is accompanied by a reader macro
+ (<code>#T</code> for <em>template</em>, or <em>type</em>, with an
+ abuse of language) and an
+ appropriate PRINT-OBJECT method. The <code>#T</code> reader macro
+ expands as
+ <pre>
+ <b>#T</b><i>something</i> ==> (make-instance 'template :spec <i>something</i>)
+ </pre>
+ With this infrastructure we can
+ express the unification of the FOO instance as
+ <pre>
+ (<b>unify</b> #S(FOO A 42 S NIL D NIL) <b>#T(foo foo-a 42)</b>)
+ </pre>
+ I.e. we use the actual structure accessor FOO-A to get to the the
+ value of the slot A in a FOO. This is an example of the template
+ language.</p>
+
+ <p>A more interesting example, which involves vectors is the
+ following
+ <pre>
+ cl-prompt> (<b>unify</b> #(1 2 3 4 5) <b>#T(vector 1 ?x &amp;rest ?rest)</b>) ; You get the idea...
+ <i>#&lt;ENVIRONMENT xxxxxxx&gt;</i>
+
+ cl-prompt> (<b>find-variable-value</b> '?rest *)
+ <i>#(3 4 5)</i>
+ </pre>
+ I.e. we have a DESTRUCTURING-BIND on steroids.<p>
+
+ <p>Note that separating the templates is necessary if we want to do
+ something like
+ <pre>
+ cl-prompt> (<b>unify</b> '(1 2 3 4 5) <b>#T(list 1 ?x &amp;rest ?rest)</b>)
+ <i>#&lt;ENVIRONMENT xxxxxxx&gt;</i>
+
+ cl-prompt> (<b>find-variable-value</b> '?rest *)
+ <i>(3 4 5)</i>
+ </pre>
+ Without the template denoted by <code>#T(list ...)</code> the
+ unifier would have been utterly confused.</p>
+
+ <p>In the following the full extent of the UNIFICATION facility is
+ described in its main components.
+ </p>
+
+
+ <h2><a href="unifying-substitutions.html">Unifying Substitutions</a></h2>
+
+ <h2><a href="templates.html">The Template Sub-language</a></h2>
+
+ <h2><a href="control-flow.html">Control Flow</a></h2>
+
+ <h2><a href="unification-dictionary.html">The UNIFICATION
+ Dictionary</a></h2>
+
+ <h2>References</h2>
+
+ <p>
+ <a name="R65">[R56]</a> J. A. Robinson, <i>A machine-oriented logic based on the
+ resolution principle</i>, Journal of the ACM, Vol. 12, No. 1,
+ January 1965, Pages 23--49.</p>
+ [_$_]
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-11-04</strong><br>
+ Updated.
+ <li><strong>2004-05-05</strong><br>
+ Started the site.
+ </li>
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/links.html
hunk ./docs/html/links.html 1
+<html>
+ <head>
+ <title>CLRFI: COMMON LISP Requests for Improvements Links</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CLRFI: Common Lisp Requests for Improvements Links</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="doc.html" class="navigation-link">Documents</a>
+ | <a href="faq.html" class="navigation-link">FAQ</a>
+ | <a href="clrfis.html" class="navigation-link">CLRFI listing</a>
+ | <a href="links.html" class="navigation-link-selected">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Links</h1>
+
+ <p>Here are some links which are pertinent to the CLRFI project.</p>
+
+ <ul>
+ <li><a href="http://srfi.schemers.org">SRFI</a></li>
+
+ <li>Local <strong>Common Lisp</strong> user communities
+ <ul>
+ <li><a href="http://www.lispnyc.org">LispNYC</a></li>
+ <li><a href="http://www.jugtouch.com/~rss/lisp">CRACL</a></li>
+ </ul>
+ </li>
+
+ <li>Software Repositories
+ <ul>
+ <li><a href="http://www.common-lisp.net">common-lisp.net</a></li>
+ <li>...</li>
+ </ul>
+ </li>
+ <li>...</li>
+ </ul>
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-04-12</strong><br>
+ Started the site.
+ </li>
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/list-template-class.html
hunk ./docs/html/list-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class LIST-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class LIST-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>LIST-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ LIST-TEMPLATE, SEQUENCE-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The LIST-TEMPLATE class denotes those object that are used
+ to unify against a LIST.</p>
+
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>list</b> . <i>&lt;destructuring template lambda list&gt;</i>)
+ </pre>
+ </p>
+
+ <p>The LIST-TEMPLATE syntax denotes a LIST object. A
+ LIST-TEMPLATE must be unified against a LIST object. The elements
+ of the list must be unified against the
+ <i>&lt;destructuring template lambda list&gt;</i>
+ [_$_]
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify '(0 1 42 3 4 5) #T(<b>list</b> 0 1 ?x 3 4 5)))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setq e (unify '(0 1 42 3 4 5) #T(<b>list</b> 0 1 "FOO" 3 4 5)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify '("foo" "bar" 42)) #T(<b>list</b> _ _ ?x))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setq e (unify #(1 2 3) #T(<b>list</b> _ &rest ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify (list "foo" '?foo 42)) #T(<b>list</b> _ 33 ?x))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (find-variable-value '?foo e)
+ 33
+ T
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying a LIST-TEMPLATE against a non-LIST object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>Unifying a LIST-TEMPLATE against a non-proper or circular list has undefined behavior.</p>
+
+ <p>The LIST-TEMPLATE class is the only one that is really needed in
+ order not to implode the overall unification machinery. But, since
+ it is needed, then it is worthwhile to build the whole template
+ hierarchy.</p>
+
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/mailing-lists.html
hunk ./docs/html/mailing-lists.html 1
+<html>
+ <head>
+ <title>CL Unification Mailing Lists Page</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="downloads.html" class="navigation-link-selected">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;<div class="sidebar"></div></td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>CL-UNIFICATION Mailing Lists</h1>
+
+
+ <p>There are three mailing lists set up at
+ <a href="http://common-lisp.net">common-lisp.net</a>.
+ <ul>
+ <li><a
+ href="http://common-lisp.net/cgi-bin/mailman/listinfo/cl-unification-announce">cl-unification-announce</a>:
+ low traffic mailing list for announcements about the library.</li>
+ <li><a
+ href="http://common-lisp.net/cgi-bin/mailman/listinfo/cl-unification-devel">cl-unification-devel</a>:
+ mailing list to discuss the development of the library.</li>
+ <li><a
+ href="http://common-lisp.net/cgi-bin/mailman/listinfo/cl-unification-cvs">cl-unification-cvs</a>:
+ CVS notifications.</li>
+ </ul>
+
+
+
+
+
+ [_$_]
+
+<!--
+;;; Copyright (c) 2004-2005 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+<!-- <h2>Site Map</h2> -->
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2005-01-28</strong><br>
+ Updated.
+ <li><strong>2004-05-05</strong><br>
+ Started the site.
+ </li>
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/main.css
hunk ./docs/html/main.css 1
+/*[_^M_][_$_]
+ * NYU Bioinformatics - Microarray group development[_^M_][_$_]
+ *[_^M_][_$_]
+ * Inspired by www.rhythmbox.org, (c) rhythmbox 2002[_^M_][_$_]
+ *[_^M_][_$_]
+ * New code, modifications[_^M_][_$_]
+ * (c) Idan Gazit 2002, and[_^M_][_$_]
+ * (c) Marco Antoniotti, 2003-2004[_^M_][_$_]
+ * NYU Bioinformatics[_^M_][_$_]
+ *[_^M_][_$_]
+ * Permission is hereby granted to use this style, etc etc etc.[_^M_][_$_]
+ */[_^M_][_$_]
+[_^M_][_$_]
+body[_^M_][_$_]
+{[_^M_][_$_]
+ margin: 0;[_^M_][_$_]
+ background: #ffffff;[_^M_][_$_]
+ font-family: Verdana, Arial, Helvetica;[_^M_][_$_]
+ /*font-size:12px;*/[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+ color:black;[_^M_][_$_]
+[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+a.navigation-link-selected[_^M_][_$_]
+{[_^M_][_$_]
+ text-decoration: none;[_^M_][_$_]
+ color: #ffffff;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+ font-style: italic;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+a.navigation-link-selected:hover[_^M_][_$_]
+{[_^M_][_$_]
+ text-decoration: underline;[_^M_][_$_]
+ color: #ffffff;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+ font-style: italic;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+a.navigation-link[_^M_][_$_]
+{[_^M_][_$_]
+ text-decoration: none;[_^M_][_$_]
+ color: rgb(100, 100, 100);[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+a.navigation-link:hover[_^M_][_$_]
+{[_^M_][_$_]
+ text-decoration: underline;[_^M_][_$_]
+ color: #ffffff;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+a.return[_^M_][_$_]
+{[_^M_][_$_]
+ text-decoration: none;[_^M_][_$_]
+ color: #41286f;[_^M_][_$_]
+ font-size: 8pt;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+a.return:hover;[_^M_][_$_]
+{[_^M_][_$_]
+ text-decoration: underline;[_^M_][_$_]
+ color: #68548D;[_^M_][_$_]
+ font-size: 8pt;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+a[_^M_][_$_]
+{[_^M_][_$_]
+ text-decoration: underline;[_^M_][_$_]
+ color: #41286f;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+a:hover[_^M_][_$_]
+{[_^M_][_$_]
+ text-decoration: underline;[_^M_][_$_]
+ color: #68548D;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+p[_^M_][_$_]
+{[_^M_][_$_]
+ font-family: Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size: 12px;[_^M_][_$_]
+ color: #000000;[_^M_][_$_]
+ font-weight: regular;[_^M_][_$_]
+ /* padding-bottom: 10px;[_^M_][_$_]
+ margin: 0px; */[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.header[_^M_][_$_]
+{[_^M_][_$_]
+ background: #9ebcb4;[_^M_][_$_]
+ /* background-image: url("./images/header_bg_1.gif"); */[_^M_][_$_]
+ background-repeat: no-repeat;[_^M_][_$_]
+ height: 50px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.navigation[_^M_][_$_]
+{[_^M_][_$_]
+ word-spacing: 5px;[_^M_][_$_]
+ position: absolute;[_^M_][_$_]
+ top: 35px;[_^M_][_$_]
+ right: 5px;[_^M_][_$_]
+ text-align: right;[_^M_][_$_]
+ font-family: Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size: 12px;[_^M_][_$_]
+ color: #ffffff;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+ word-spacing: 0px;[_^M_][_$_]
+ }[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+.sidebar[_^M_][_$_]
+{[_^M_][_$_]
+ font-family: Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size: 12px;[_^M_][_$_]
+ color: #000000;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+ padding-left: 15px;[_^M_][_$_]
+ padding-right: 5px;[_^M_][_$_]
+ position: fixed;[_^M_][_$_]
+ top: 10ex; right 1em;[_^M_][_$_]
+[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.text[_^M_][_$_]
+{[_^M_][_$_]
+ font-family: Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size: 12px;[_^M_][_$_]
+ color: #000000;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+li[_^M_][_$_]
+{[_^M_][_$_]
+ font-family: Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size: 12px;[_^M_][_$_]
+ color: #000000;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+pre[_^M_][_$_]
+{[_^M_][_$_]
+ background: 5px;[_^M_][_$_]
+ background-color: #e0e0e0;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+.label[_^M_][_$_]
+{[_^M_][_$_]
+ font-family: Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size: 12px;[_^M_][_$_]
+ color: #000000;[_^M_][_$_]
+ text-align: center;[_^M_][_$_]
+ font-style: italic;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.command[_^M_][_$_]
+{[_^M_][_$_]
+ font-family: Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size: 12px;[_^M_][_$_]
+ color: #000000;[_^M_][_$_]
+ background: #eae8e3;[_^M_][_$_]
+ font-weight: regular;[_^M_][_$_]
+ margin-bottom: 10px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.content[_^M_][_$_]
+{[_^M_][_$_]
+ background: #ffffff;[_^M_][_$_]
+ padding: 5px;[_^M_][_$_]
+ padding-right: 15px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.toc[_^M_][_$_]
+{[_^M_][_$_]
+ font-size: 10px;[_^M_][_$_]
+ background: #ffffff;[_^M_][_$_]
+ padding: 5px;[_^M_][_$_]
+ padding-right: 5px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.middle-bar[_^M_][_$_]
+{[_^M_][_$_]
+ height: 5px;[_^M_][_$_]
+ background: #A497BA;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.black-line[_^M_][_$_]
+{[_^M_][_$_]
+ height: 1px;[_^M_][_$_]
+ background: #000000;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.bottom[_^M_][_$_]
+{[_^M_][_$_]
+ position: absolute;[_^M_][_$_]
+ right: 5px;[_^M_][_$_]
+ bottom: 5px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.copyright[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size: 10px;[_^M_][_$_]
+ color: #808080;[_^M_][_$_]
+ font-weight: regular;[_^M_][_$_]
+ padding:5px;[_^M_][_$_]
+ text-align:right;[_^M_][_$_]
+ border-color:#808080;[_^M_][_$_]
+ border-width:0px;[_^M_][_$_]
+ border-style:dotted;[_^M_][_$_]
+ border-top-width:1px;[_^M_][_$_]
+ [_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.centerblock[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size: 12px;[_^M_][_$_]
+ color: black;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.tableheader[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size:12px;[_^M_][_$_]
+ color: white;[_^M_][_$_]
+ font-weight:bold;[_^M_][_$_]
+ background:#505050;[_^M_][_$_]
+ padding: 4px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.tablerow1[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size:12px;[_^M_][_$_]
+ color: black;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+ background:#e0e0e0;[_^M_][_$_]
+ padding:4px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.tablerow2[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size:12px;[_^M_][_$_]
+ color: black;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+ background:#f0f0f0;[_^M_][_$_]
+ padding: 4px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.tablerow_style[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size:12px;[_^M_][_$_]
+ color: black;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+ background:#f0f0f0;[_^M_][_$_]
+ padding: 4px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+h1[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size:18px;[_^M_][_$_]
+ color: #41286f;[_^M_][_$_]
+ font-weight:bold;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+h2[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size:16px;[_^M_][_$_]
+ color: #41286f;[_^M_][_$_]
+ font-weight:bold;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+h3[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size:14px;[_^M_][_$_]
+ color: #41286f;[_^M_][_$_]
+ font-weight:bold;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+h4[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size:12px;[_^M_][_$_]
+ color: #41286f;[_^M_][_$_]
+ font-weight:bold;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+h5[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Verdana, Arial, Helvetica;[_^M_][_$_]
+ font-size:10px;[_^M_][_$_]
+ color: #41286f;[_^M_][_$_]
+ font-weight:bold;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.captionimg[_^M_][_$_]
+{[_^M_][_$_]
+ align:right;[_^M_][_$_]
+ text-align:right;[_^M_][_$_]
+ font-style: italic;[_^M_][_$_]
+ font-weight: normal;[_^M_][_$_]
+ font-size:10px;[_^M_][_$_]
+ color: #303030;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.indent[_^M_][_$_]
+{[_^M_][_$_]
+ padding-left: 50px;[_^M_][_$_]
+}[_^M_][_$_]
+[_^M_][_$_]
+.command[_^M_][_$_]
+{[_^M_][_$_]
+ font-family:Courier;[_^M_][_$_]
+}[_^M_][_$_]
addfile ./docs/html/make-empty-environment-function.html
hunk ./docs/html/make-empty-environment-function.html 1
+<html>
+ <head>
+ <title>CL Unification: Function MAKE-EMPTY-ENVIRONMENT</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Function MAKE-EMPTY-ENVIRONMENT</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Function</i> <strong>MAKE-EMPTY-ENVIRONMENT</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>make-empty-environment</b>
+ => <i>unification-environment</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>unification-environment</code></i>---a fresh <i>unification-environment</i>
+
+
+
+ <h2>Description:</h2>
+
+ <p>The function MAKE-EMPTY-ENVIRONMENT constructs a new
+ object of type UNIFY:ENVIRONMENT. The new
+ <i>unification-environment</i> is empty, i.e. it does not contain
+ any <em>binding</em>.
+ [_$_]
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY:ENVIRONMENT, BINDING, FIND-VARIABLE-VALUE</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-04-12</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/make-shared-environment-function.html
hunk ./docs/html/make-shared-environment-function.html 1
+<html>
+ <head>
+ <title>CL Unification: Function MAKE-SHARED-ENVIRONMENT</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Function MAKE-SHARED-ENVIRONMENT</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Function</i> <strong>MAKE-SHARED-ENVIRONMENT</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>make-shared-environment</b> <i>env</i>
+ => <i>unification-environment</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>env</code></i>---an <i>unification-environment</i>.
+ <p><i><code>unification-environment</code></i>---a new <i>unification-environment</i>.
+
+
+
+ <h2>Description:</h2>
+
+ <p>The function MAKE-SHARED-ENVIRONMENT constructs a new
+ object of type UNIFY:ENVIRONMENT. The new
+ <i>unification-environment</i> shares the frames already present in <i>env</i>.</p>
+
+ <p>It is guaranteed that extending <i>unification-environment</i>
+ will not change <i>env</i>.</p>
+ [_$_]
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY:ENVIRONMENT, BINDING, FIND-VARIABLE-VALUE</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>This function is provided to allow for the construction of
+ "trees" of frames for interpreter-like environments. The macros
+ MATCH, MATCHING, and MATCH-CASE rely on this function, as they
+ immediately construct a "shared" environment.</p>
+
+ <h3>Current Implementation Note</h3>
+
+ <p>MAKE-SHARED-ENVIRONMENT relies on the LIST implementation of
+ environments.</p>
+
+ <p>The use of MAKE-SHARED-ENVIRONMENT in MATCHING and MATDCH-CASE is
+ still incomplete.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-11-04</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/match-case-macro.html
hunk ./docs/html/match-case-macro.html 1
+<html>
+ <head>
+ <title>CL Unification: Macro MATCH-CASE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Macro MATCH-CASE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Macro</i> <strong>MATCH-CASE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+
+ <p>
+ <pre>
+ <b>match-case</b> (<i>object</i> &amp;key <i>errorp</i>) &lt;clause&gt;*</i>
+ => <i>results</i>*
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ &lt;clause&gt; ::= &lt;regular clause&gt; | &lt;default clause&gt;
+ &lt;regular clause&gt; ::= (<i>template</i> &amp;body <i>forms</i>)
+ &lt;default clause&gt; ::= (t &amp;body <i>forms</i>)
+ | (otherwise &amp;body <i>forms</i>)
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>template</code></i>---a <i>unification template</i>
+ <p><i><code>object</code></i>---an <i>object</i>
+ <p><i><code>substitution</code></i>---a <i>substitution</i>
+ <p><i><code>errorp</code></i>---a <i>generalized boolean</i>
+ <p><i><code>error-value</code></i>---an <i>object</i>
+ <p><i><code>forms</code></i>---an <i>implicit progn</i>
+ <p><i><code>results</code></i>---the <i>values</i> returned by <i>forms</i>
+
+
+
+
+ <h2>Description:</h2>
+
+ <p>MATCH-CASE sets up a CASE-like environment for multiple template matching clauses.
+ Each clause evaluates its forms in an environment where the variables
+ present in the template are bound lexically. Note that both variable
+ names '?FOO' and 'FOO' are bound for convenience.</p>
+
+ <p>The values returned by the MATCH-CASE form are those of the last form in
+ the first clause that satisfies the match test. I.e. the first
+ clause for which the <i>template</i> UNIFYes against <i>object</i>.</p>
+
+ <p>If <i>errorp</i> is non-NIL then if none of the regular clauses matches, then
+ an error of type UNIFICATION-NON-EXHAUSTIVE is signalled, regardless of
+ any default clause. Otherwise, the default clause behaves as a
+ standard COND default clause. The default value of <i>errorp</i> is NIL.</p>
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>See above.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY, UNIFICATION-FAILURE, UNIFICATION-NON-EXHAUSTIVE</p>
+
+ <h2>Notes:</h2>
+
+ <p>Note that UNIFICATION-FAILUREs
+ raising from the evaluation of <i>forms</i> in each clause will
+ <em>not</em> be caught and handled by the enclosing MATCH-CASE block.</p>
+
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
addfile ./docs/html/match-macro.html
hunk ./docs/html/match-macro.html 1
+<html>
+ <head>
+ <title>CL Unification: Macro MATCH</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Macro MATCH</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Macro</i> <strong>MATCH</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+
+ <p>
+ <pre>
+ <b>match</b> (<i>template</i> <i>object</i> &amp;key <i>substitution</i> <i>errorp</i> <i>error-value</i>) &amp;body <i>forms</i>
+ => <i>results</i>*
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>template</code></i>---a <i>unification template</i>
+ <p><i><code>object</code></i>---an <i>object</i>
+ <p><i><code>substitution</code></i>---a <i>substitution</i>
+ <p><i><code>errorp</code></i>---a <i>generalized boolean</i>
+ <p><i><code>error-value</code></i>---an <i>object</i>
+ <p><i><code>forms</code></i>---an <i>implicit progn</i>
+ <p><i><code>results</code></i>---the <i>values</i> returned by <i>forms</i>
+
+
+
+
+ <h2>Description:</h2>
+
+ <p>
+ MATCH sets up a lexical environment to evaluate <i>forms</i> after a unification operation.
+ MATCH unifies a <i>template</i> and an <i>object</i> and then sets up a lexical
+ environment where the variables present in the template are bound
+ lexically. Note that both variable names '?FOO' and 'FOO' are bound
+ for convenience.</p>
+
+ <p>The MATCH form returns the values returned by the evaluation of the
+ last of the <i>forms</i>.</p>
+
+ <p>If <i>errorp</i> is non-NIL (the default) then the form raises a
+ UNIFICATION-FAILURE, otherwise the result of evaluating <i>error-value</i>,
+ whose default is NIL is returned.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>See above.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY, UNIFICATION-FAILURE</p>
+
+ <h2>Notes:</h2>
+
+ <p>Note that UNIFICATION-FAILUREs
+ raising from the evaluation of <i>forms</i> will also be caught and handled by the enclosing MATCH
+ according to <i>errorp</i> settings.</p>
+
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
addfile ./docs/html/matching-macro.html
hunk ./docs/html/matching-macro.html 1
+<html>
+ <head>
+ <title>CL Unification: Macro MATCHING</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Macro MATCHING</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Macro</i> <strong>MATCHING</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+
+ <p>
+ <pre>
+ <b>matching</b> (&amp;key <i>errorp</i>) &lt;clause&gt;*</i>
+ => <i>results</i>*
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ &lt;clause&gt; ::= &lt;regular clause&gt; | &lt;default clause&gt;
+ &lt;regular clause&gt; ::= ((<i>template</i> <i>object</i>) &amp;body <i>forms</i>)
+ &lt;default clause&gt; ::= (t &amp;body <i>forms</i>)
+ | (otherwise &amp;body <i>forms</i>)
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>template</code></i>---a <i>unification template</i>
+ <p><i><code>object</code></i>---an <i>object</i>
+ <p><i><code>substitution</code></i>---a <i>substitution</i>
+ <p><i><code>errorp</code></i>---a <i>generalized boolean</i>
+ <p><i><code>error-value</code></i>---an <i>object</i>
+ <p><i><code>forms</code></i>---an <i>implicit progn</i>
+ <p><i><code>results</code></i>---the <i>values</i> returned by <i>forms</i>
+
+
+
+
+ <h2>Description:</h2>
+
+ <p>MATCHING sets up a COND-like environment for multiple template matching clauses.
+ Each clause evaluates its forms in an environment where the variables
+ present in the template are bound lexically. Note that both variable
+ names '?FOO' and 'FOO' are bound for convenience.</p>
+
+ <p>The values returned by the MATCHING form are those of the last form in
+ the first clause that satisfies the match test.</p>
+
+ <p>If <i>errorp</i> is non-NIL then if none of the regular clauses matches, then
+ an error of type UNIFICATION-NON-EXHAUSTIVE is signalled, regardless of
+ any default clause. Otherwise, the default clause behaves as a
+ standard COND default clause. The default value of <i>errorp</i> is NIL.</p>
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>See above.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY, UNIFICATION-FAILURE, UNIFICATION-NON-EXHAUSTIVE</p>
+
+ <h2>Notes:</h2>
+
+ <p>Note that UNIFICATION-FAILUREs
+ raising from the evaluation of <i>forms</i> in each clause will
+ <em>not</em> be caught and handled by the enclosing MATCHING block..</p>
+
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
addfile ./docs/html/nil-template-class.html
hunk ./docs/html/nil-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class NIL-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class NIL-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>NIL-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ NIL-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The NIL-TEMPLATE class denotes those object that are used
+ to unify against a VECTOR.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #Tnil
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T()
+ </pre>
+ </p>
+
+
+ <p>The NIL-TEMPLATE syntax denotes NIL.
+ NIL-TEMPLATE can only unified against NIL.</p>
+
+ <p>The NIL-TEMPLATE is used for symmetry reasons, given that the
+ template hierarchy (almost) mirrors the regular <strong>CL</strong>
+ type hierarchy.</p>
+ [_$_]
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify nil #Tnil))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (setq e (unify 42 #T()))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an NIL-TEMPLATE against a non-NIL object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/nth-template-class.html
hunk ./docs/html/nth-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class NTH-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class NTH-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>NTH-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ NTH-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The NTH-TEMPLATE class denotes those object that are used
+ to unify against a particular element of a LIST.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>nth</b> <i>index</i> <i>item</i>)
+ </pre>
+ </p>
+
+ <p>The NTH-TEMPLATE syntax denotes the <i>item</i> at <i>index</i>
+ a LIST. A NTH-TEMPLATE must
+ be unified against a LIST object. <i>item</i> is <em>unified</em>
+ against the element extracted from the sequence object at
+ <i>index</i> by the standard function NTH.</p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify '(0 1 42 3 4 5) #T(<b>nth</b> 2 ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify '(0 1 42 3 4 5) #T(<b>nth</b> 42 ?x)))
+ --> Error: index 42 out of bounds. <STRONG>FIX THIS</STRONG>
+
+
+ cl-prompt> (setq e (unify #(a s d) #T(<b>nth</b> 1 ?x)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an NTH-TEMPLATE against a non-LIST object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/nthcdr-template-class.html
hunk ./docs/html/nthcdr-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class NTHCDR-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class NTHCDR-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>NTHCDR-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ NTHCDR-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The NTHCDR-TEMPLATE class denotes those object that are used
+ to unify against a particular CONS of a LIST.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>nthcdr</b> <i>index</i> <i>item</i>)
+ </pre>
+ </p>
+
+ <p>The NTHCDR-TEMPLATE syntax denotes the CONS <i>item</i> at <i>index</i>
+ a LIST. A NTHCDR-TEMPLATE must
+ be unified against a LIST object. <i>item</i> is <em>unified</em>
+ against the element extracted from the LIST object at
+ <i>index</i> by the standard function NTHCDR.</p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify '(0 1 42 3 4 5) #T(<b>nthcdr</b> 2 ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ (42 3 4 5)
+
+ cl-prompt> (setq e (unify '(0 1 42 3 4 5) #T(<b>nthcdr</b> 42 ?x)))
+ --> Error: index 42 out of bounds. <STRONG>FIX THIS</STRONG>
+
+
+ cl-prompt> (setq e (unify #(a s d) #T(<b>nthcdr</b> 1 ?x)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an NTHCDR-TEMPLATE against a non-LIST object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/number-template-class.html
hunk ./docs/html/number-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class NUMBER-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class NUMBER-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>NUMBER-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ NUMBER-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The NUMBER-TEMPLATE class denotes those object that are used
+ to unify against a VECTOR.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T42
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<b>number</b> 42)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<b>number</b> ?num)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T#C(1.2 3.4)
+ </pre>
+ </p>
+
+
+ <p>The NUMBER-TEMPLATE syntax denotes a NUMBER.
+ NUMBER-TEMPLATEs can only unified against a NUMBER.</p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify 42 #T42))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (setq e (unify 42 #T()))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setf e (unify 42 #T(<b>number</b> ?num)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?num e)
+ 42
+ T
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an NUMBER-TEMPLATE against a non-NUMBER object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>There is no COMPLEX-NUMBER-TEMPLATE class, although a case for it can be easily made..</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/sequence-template-class.html
hunk ./docs/html/sequence-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class SEQUENCE-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class SEQUENCE-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>SEQUENCE-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ SEQUENCE-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ VECTOR-TEMPLATE, LIST-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The SEQUENCE-TEMPLATE class denotes those object that are used
+ to unify against a SEQUENCE.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>sequence</b> . <i>&lt;destructuring template lambda list&gt;</i>)
+ </pre>
+ </p>
+
+ <p>The SEQUENCE-TEMPLATE syntax denotes a SEQUENCE object. A
+ SEQUENCE-TEMPLATE must be unified against a SEQUENCE object. The elements
+ of the sequence must be unified against the
+ <i>&lt;destructuring template lambda list&gt;</i>
+ [_$_]
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>sequence</b> 0 1 ?x 3 4 5)))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>sequence</b> 0 1 "FOO" 3 4 5)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify #("foo" "bar" 42)) #T(<b>sequence</b> _ _ ?x))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setq e (unify (list "foo" "bar" 42) #T(<b>sequence</b> _ &rest ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ ("bar" 42)
+
+ cl-prompt> (setq e (unify "I am a string" #T(<b>sequence</b> ?I _ &rest ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ "am a string"
+ T
+
+ cl-prompt> (find-variable-value '?I e)
+ #\I
+ T
+
+ cl-prompt> (setq e (unify 42 #T(<b>sequence</b> _ &rest ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify #("foo" ?foo 42)) #T(<b>sequence</b> _ 33 ?x))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (find-variable-value '?foo e)
+ 33
+ T
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an SEQUENCE-TEMPLATE against a non-SEQUENCE object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/standard-object-template-class.html
hunk ./docs/html/standard-object-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class STANDARD-OBJECT-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class STANDARD-OBJECT-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>STANDARD-OBJECT-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ STANDARD-OBJECT-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The STANDARD-OBJECT-TEMPLATE class denotes those object that are used
+ to unify against any STANDARD-OBJECT.</p>
+
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<i>&lt;<strong>CL</strong> class designator&gt;</i> <i>&lt;slot&nbsp;spec&gt;</i>*)
+
+ <i>&lt;slot&nbsp;spec&gt;</i> ::= <i>&lt;reader method&gt;</i> <i>&lt;object&gt;</i>
+ | (slot-value <i>&lt;slot name&gt;</i>) <i>&lt;object&gt;</i>
+ </pre>
+ </p>
+
+ <p>The STANDARD-OBJECT-TEMPLATE syntax denotes any
+ <strong>CL</strong> object that is an instance of a
+ STANDARD-OBJECT. The semantic of the template in a unification depends on which
+ <i>&lt;slot&nbsp;spec&gt;</i>'s appear. In the first case the meaning of
+ <i>&lt;slot&nbsp;spec&gt;</i> is such that the
+ <i>&lt;reader&nbsp;method&gt;</i> gets called against the instance
+ against which the STANDARD-OBJECT-TEMPLATE is being UNIFYed. In the
+ second case, SLOT-VALUE is called with the instance being UNIFYed
+ and <i>&lt;slot&nbsp;name&gt;</i>. The result value of the call to either
+ <i>&lt;reader&nbsp;method&gt;</i>, or SLOT-VALUE is UNIFYed against
+ <i>&lt;object&gt;</i>.</p>
+
+ <p><i>&lt;object&gt;</i> can be any <strong>CL</strong> object,
+ including a TEMPLATE (in which case the unification machinery
+ proceeds recursively.)</p>
+ [_$_]
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (defclass foo () ((a :initform 42 :accessor foo-a)))
+ #&lt;STANDARD-CLASS FOO XXXXX&gt;
+
+ cl-prompt> (defclass bar (foo) ())
+ #&lt;STANDARD-CLASS BAR XXXXX&gt;
+
+ cl-prompt> (defclass baz ()
+ ((a :reader the-a-in-a-baz)
+ (b :accessor bazb :initarg :b)))
+ #&lt;STANDARD-CLASS BAZ XXXXX&gt;
+
+ cl-prompt> (setf e (unify (make-instance 'foo) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz) #T(<em>baz</em> <em>the-a-in-baz</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz) #T(<em>baz</em> <em>(slot-value b)</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz :b '?e) #T(<em>baz</em> <em>bazb</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>baz</em> <em>foo-a</em> 42)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying a STANDARD-OBJECT-TEMPLATE against a non-STANDARD-OBJECT object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+ <p>Unifying a STANDARD-OBJECT-TEMPLATE denoting an instance of class
+ C1 against an instance of class C2, results in
+ an UNIFICATION-FAILURE error being signaled, when C1 is not in the
+ class precedence list of C2.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/string-template-class.html
hunk ./docs/html/string-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class STRING-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class STRING-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>STRING-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ STRING-TEMPLATE, VECTOR-TEMPLATE, SEQUENCE-TEMPLATE, ARRAY-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The STRING-TEMPLATE class denotes those object that are used
+ to unify against a STRING.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>string</b> . <i>&lt;destructuring template lambda list&gt;</i>)
+ </pre>
+ </p>
+
+
+ <p>The STRING-TEMPLATE syntax denotes a STRING object. A
+ STRING-TEMPLATE must be unified against a CHARACTER VECTOR
+ object. The elements of the string must be unified against the
+ <i>&lt;destructuring template lambda list&gt;</i></p>
+
+ <p>The <i>&lt;destructuring template lambda list&gt;</i> has a
+ slight different interpretation in this case, in order to provide
+ more flexibility to the user. Ordinarily, each component appearing
+ in a <i>&lt;destructuring template lambda list&gt;</i> is unified
+ "element-wise" with the underlying SEQUENCE or ARRAY object. In the
+ case of a STRING-TEMPLATE, each component of the
+ <i>&lt;destructuring template lambda list&gt;</i> is allowed to be a
+ STRING or a STRING-TEMPLATE itself. The STRING or STRING-TEMPLATE
+ is unified against a subsequence of the CHARACTER VECTOR.</p>
+
+
+
+
+ [_$_]
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify "foobar" #T(<b>string</b> "foob" ?x #\r)))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ #\a
+
+ cl-prompt> (setq e (unify "foobar" #T(<b>string</b> "FOO" #\b #\a #\r)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify "foobar") #T(<b>string</b> _ _ ?x _ _ _))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ #\o
+
+ cl-prompt> (setq e (unify "foobar" #T(<b>string</b> _ &rest ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ "oobar"
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>The value of the variable *UNIFY-STRING-CASE-INSENSITIVE-P*.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an STRING-TEMPLATE against a non CHARACTER VECTOR object
+ results in an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <h3>ARRAY Structural Properties</h3>
+
+ <p>There is no way to "unify" against structural properties of
+ vectors like fill pointers and displacements.</p>
+
+ <h3>Current Implementation Note</h3>
+
+ <p>The STRING-TEMPLATE class and the relevant UNIFY methods have not
+ been implemented yet.</p>
+ [_$_]
+ <p>The actual semantics of the STRING-TEMPLATE class is not
+ completely clear yet.</p>
+
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/structure-object-template-class.html
hunk ./docs/html/structure-object-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class STRUCTURE-OBJECT-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class STRUCTURE-OBJECT-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>STRUCTURE-OBJECT-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ STRUCTURE-OBJECT-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STRUCTURE-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The STRUCTURE-OBJECT-TEMPLATE class denotes those object that are used
+ to unify against any STRUCTURE-OBJECT.</p>
+
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<i>&lt;<strong>CL</strong> structure class designator&gt;</i> [<i>&lt;reader function&gt;</i> <i>&lt;object&gt;</i>]*)
+ </pre>
+ </p>
+
+ <p>The STRUCTURE-OBJECT-TEMPLATE syntax denotes any
+ <strong>CL</strong> object that is an instance of a
+ STRUCTURE-OBJECT. The syntax is such that the <i>&lt;reader
+ function&gt;</i> gets called against the instance against
+ which the STRUCTURE-OBJECT-TEMPLATE is being UNIFYed.
+ <i>&lt;object&gt;</i> can be any <strong>CL</strong> object,
+ including a TEMPLATE (in which case the unification machinery
+ proceeds recursively.)</p>
+ [_$_]
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (defstruct foo () (a 42))
+ FOO
+
+ cl-prompt> (defstruct (baz (:include foo)) (b 33))
+ BAZ
+
+ cl-prompt> (setf e (unify (make-foo) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (setf e (unify (make-baz) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz) #T(<em>baz</em> <em>the-a-in-baz</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz :b '?e) #T(<em>baz</em> <em>bazb</em> 42)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>baz</em> <em>foo-a</em> 42)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying a STRUCTURE-OBJECT-TEMPLATE against a non-STRUCTURE-OBJECT object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+ <p>Unifying a STRUCTURE-OBJECT-TEMPLATE denoting an instance of structure
+ S1 against an instance of structure S2, results in
+ an UNIFICATION-FAILURE error being signaled, when S1 is not in the
+ class precedence list of S2.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/subseq-template-class.html
hunk ./docs/html/subseq-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class SUBSEQ-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class SUBSEQ-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>SUBSEQ-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ SUBSEQ-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The SUBSEQ-TEMPLATE class denotes those object that are used
+ to unify against a particular element of an ARRAY.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>subseq</b> <i>start</i> <i>end</i> . <i>&lt;destructuring template lambda list&gt;</i>)
+ </pre>
+ </p>
+
+
+ <p>The SUBSEQ-TEMPLATE syntax is used to unify the elements of a
+ SEQUENCE starting from <i>start</i> and below <i>end</i>, against
+ the <i>&lt;destructuring template lambda list&gt;</i>.</p>
+
+ <p><i>start</i> and <i>end</i> must be supplied and must be valid
+ sequence indexes, i.e. most likely, FIXNUMs; however, <i>end</i> can
+ also be NIL, in which case the usual SUBSEQ semantics applies.</p>
+ [_$_]
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>subseq</b> 2 4 ?x ?y)))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (find-variable-value '?y e)
+ 3
+ T
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>subseq</b> 0 4 42 ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+
+ cl-prompt> (setq e (unify "This is a string!" #T(<b>subseq</b> 4 nil &amp;rest ?str)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?str e)
+ " is a string!"
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an SUBSEQ-TEMPLATE against a non-SEQUENCE object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./docs/html/symbol-template-class.html
hunk ./docs/html/symbol-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class SYMBOL-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class SYMBOL-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>SYMBOL-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ SYMBOL-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The SYMBOL-TEMPLATE class is the class of the objects that UNIFY
+ recognizes as symbol templates.</p>
+
+ <h3>Template Syntax</h3>
+
+ <p>The <i>specification</i> of a SYMBOL-TEMPLATE has one of the two
+ forms below:</p>
+
+ <p><pre>
+ #T<i>&lt;symbol&gt;</i>
+ </pre>
+
+ or
+
+ <pre>
+ #T(<b>symbol</b> <i>&lt;value&gt;</i>)
+ </pre>
+
+ where <i>value</i> must be either a <em>unification variable</em> or
+ a SYMBOL.
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+
+ <p>Unifying a SYMBOL-TEMPLATE against a non-SYMBOL object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY, NIL-TEMPLATE</p>
+
+ <h2>Notes:</h2>
+
+ <p>NIL-TEMPLATE should be used to specifically UNIFY against NIL.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- symbol-template-class.html -->
addfile ./docs/html/template-class.html
hunk ./docs/html/template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ EXPRESSION-TEMPLATE, TYPE-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>
+ <ul>
+ <li>SPEC<br>
+ Type: (OR SYMBOL CONS)<br>
+ Accessor: TEMPLATE-SPEC<br>
+ Initarg: <code>:spec</code> (default NIL)</li>
+ </ul>
+ </p>
+
+
+ <h2>Description:</h2>
+
+ <p>The TEMPLATE class is the root of the <em>template</em> hierarchy.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
addfile ./docs/html/template-p-function.html
hunk ./docs/html/template-p-function.html 1
+<html>
+ <head>
+ <title>CL Unification: Standard Generic Function TEMPLATE-P</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Standard Generic Function TEMPLATE-P</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Generic function</i> <strong>TEMPLATE-P</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>template-p</b> <i>object</i>
+ => <i>result</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>object</code></i>---an <i>object</i>
+ <p><i><code>result</code></i>---a <i>generalized boolean</i>
+
+
+
+ <h2>Description:</h2>
+
+ <p>The generic function TEMPLATE-P is the predicate that tests
+ whether an <i>object</i> is of class TEMPLATE. If <i>object</i> is
+ an instance of TEMPLATE or one of its sub-classes, then TEMPLATE-P
+ returns a non-NIL value.</p>
+ [_$_]
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>TEMPLATE</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-04-12</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/template-spec-accessor.html
hunk ./docs/html/template-spec-accessor.html 1
+<html>
+ <head>
+ <title>CL Unification: Accessor TEMPLATE-SPEC</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Standard Generic Function TEMPLATE-SPEC</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Accessor</i> <strong>TEMPLATE-SPEC</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>template-spec</b> <i>template</i>
+ => <i>spec</i>
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ (setf (<b>template-spec</b> <i>template</i>) <i>spec</i>)
+ => <i>spec</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>template</code></i>---a <i>template object</i>
+ <p><i><code>spec</code></i>---a <i>symbol</i>, or a <i>cons</i>
+
+
+ <h2>Description:</h2>
+
+ <p>The accessor TEMPLATE-SPEC extracts the <em>template
+ specification</em> <i>spec</i> out of an instance of the class
+ TEMPLATE or one of its sub-classes. The SETF form sets the
+ <i>spec</i>.</p>
+ [_$_]
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>TEMPLATE, the "Template Sub-language" section.</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-09</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/templates.html
hunk ./docs/html/templates.html 1
+<html>
+ <head>
+ <title>CL Unification Templates</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION TEMPLATES</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link-selected">Home</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>The UNIFICATION TEMPLATES Sub-language</h1>
+
+ <p>The unification machinery relies on a <em>template
+ sub-language</em> to express structural patterns containing
+ <em>unification variables</em>. The template sub-language comprises
+ several objects organized in a hierarchy that parallels most of the
+ standard <strong>CL</strong> type hierarchy.</p>
+
+
+ <h2>Unification Variables</h2>
+ [_$_]
+ <p><em>Unification variables</em> are symbols with a <code>#\?</code> as the
+ first character of the name. This is a rather traditional choice,
+ although a different one based on quoted symbols is possible.
+ Therefore, the following are examples of variables.
+ <pre>
+ ?A ?s ?qwe ?42z ?a-variable-with-a-very-long-name ?_
+ </pre>
+ There are two special variables, <code>?_</code> and <code>_</code>,
+ which are used as anonymous place holders, they match anything, but
+ never appear in a substitution.</p>
+
+ <h3>Destructuring Template Lambda List</h3>
+
+ <p><strong>CL</strong> has the concept of <em>destructuring lambda
+ list</em> which is used in conjunction with the form
+ DSTRUCTURING-BIND, and, to some extent, with LOOP. The unifier
+ machinery relies on a related notion dubbed <em>destructuring
+ template lambda list</em> for lack of a better name.</p>
+
+ <p>A <em>destructuring template lambda list</em> (or just
+ <em>template lambda list</em>) is just like a regular
+ <em>destructuring lambda list</em> (ANSI 3.4.5) with a number of
+ restrictions. The full syntax is the following.</p>
+
+ <p>
+ <pre>
+ template-lambda-list ::= (&lt;reqvars&gt; &lt;optvars&gt; &lt;restvar&gt; &lt;keyvars&gt;)
+ | (&lt;reqvars&gt; &lt;optvars&gt; . &lt;template&gt;)
+
+ reqvars ::= &lt;template&gt;*
+
+ optvars ::= [&optional &lt;template&gt;*]
+
+ restvar ::= [&rest &lt;template&gt;]
+
+ keyvars ::= [&key {&lt;template&gt; | ({&lt;template&gt; | (&lt;keyword-name&gt; &lt;template&gt;)})}*
+ [&allow-other-keys]]
+ </pre>
+ </p>
+
+ <p>Where <i>&lt;template&gt;</i> is either an object with syntax
+ defined in the next section or it can be a normal
+ <strong>CL</strong> object. The remaining non terminal grammar
+ symbols have the usual <strong>CL</strong> interpretation.</p>
+
+
+
+ <h2>Unification Templates</h2>
+ [_$_]
+ <p>The <em>unification templates</em> are organized in an object
+ hierachy. There is a standard <strong>CLOS</strong> class for each
+ template kind. The hierarchy is shown below.</p>
+
+ <p>
+ <img src="images/unif-templ-hier.gif"></p>
+ [_$_]
+ <p>The template hierarchy is rooted at the TEMPLATE class. There are
+ two <em>kinds</em> of templates: <em>type</em> templates, and
+ <em>expression</em> templates. Type templates are used as patterns
+ of regular objects. Expression templates are used to unify against
+ a specific sub-structure of a given object.</p>
+
+ <p>The predefined templates are:
+ <ul>
+ <li><a href="template-class.html">TEMPLATE</a></li>
+ <li><a href="expression-template-class.html">EXPRESSION-TEMPLATE</a></li>
+ <li><a href="element-template-class.html">ELEMENT-TEMPLATE</a></li>
+ <li><a href="aref-template-class.html">AREF-TEMPLATE</a></li>
+ <li><a href="elt-template-class.html">ELT-TEMPLATE</a></li>
+ <li><a href="nth-template-class.html">NTH-TEMPLATE</a></li>
+
+ <li><a href="subseq-template-class.html">SUBSEQ-TEMPLATE</a></li>
+
+ <li><a href="type-template-class.html">TYPE-TEMPLATE</a></li>
+ <li><a href="array-template-class.html">ARRAY-TEMPLATE</a></li>
+
+ <li><a href="sequence-template-class.html">SEQUENCE-TEMPLATE</a></li>
+
+ <li><a href="list-template-class.html">LIST-TEMPLATE</a></li>
+
+ <li><a href="vector-template-class.html">VECTOR-TEMPLATE</a></li>
+
+ <li><a href="string-template-class.html">STRING-TEMPLATE</a></li>
+
+ <li><a href="nil-template-class.html">NIL-TEMPLATE</a></li>
+
+ <li><a href="number-template-class.html">NUMBER-TEMPLATE</a></li>
+
+ <li><a href="standard-object-template-class.html">STANDARD-OBJECT-TEMPLATE</a></li>
+ <li><a href="structure-object-template-class.html">STRUCTURE-OBJECT-TEMPLATE</a></li>
+
+ <li><a href="symbol-template-class.html">SYMBOL-TEMPLATE</a></li>
+ </ul>
+
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-09</strong><br>
+ Document created
+ </li>
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/type-template-class.html
hunk ./docs/html/type-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class TYPE-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class TYPE-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>TYPE-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ ARRAY-TEMPLATE, NIL-TEMPLATE, NUMBER-TEMPLATE, SEQUENCE-TEMPLATE,
+ STANDARD-OBJECT-TEMPLATE, STRUCTURE-OBJECT-TEMPLATE, SYMBOL-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The TYPE-TEMPLATE class is the root of the <em>type template</em> sub-hierarchy.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
addfile ./docs/html/unification-dictionary.html
hunk ./docs/html/unification-dictionary.html 1
+<html>
+ <head>
+ <title>CL Unification Dictionary</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION Dictionary</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="index.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Common Lisp Extensions: UNIFICATION Dictionary</h1>
+
+ <ul>
+ <li><a href="unify-package.html"><i>Package</i> <b>CL.EXT.DACF.UNIFICATION</b></a>
+ <li><a href="unify-function.html"><i>Generic function</i> <b>UNIFY</b></a>
+ <li><a href="usci-variable.html"><i>Variable</i> <b>*UNIFY-STRING-CASE-INSENSITIVE*</b></a>
+
+ <li><a href="template-class.html"><i>Class</i> <b>TEMPLATE</b></a>
+ <li><a href="expression-template-class.html"><i>Class</i> <b>EXPRESSION-TEMPLATE</b></a>
+ <li><a href="element-template-class.html"><i>Class</i> <b>ELEMENT-TEMPLATE</b></a></li>
+ <li><a href="array-template-class.html"><i>Class</i> <b>ARRAY-TEMPLATE</b></a></li>
+ <li><a href="elt-template-class.html"><i>Class</i> <b>ELT-TEMPLATE</b></a></li>
+ <li><a href="nth-template-class.html"><i>Class</i> <b>NTH-TEMPLATE</b></a></li>
+ <li><a href="nthcdr-template-class.html"><i>Class</i> <b>NTHCDR-TEMPLATE</b></a></li>
+
+ <li><a href="type-template-class.html"><i>Class</i> <b>TYPE-TEMPLATE</b></a>
+ <li><a href="symbol-template-class.html"><i>Class</i> <b>SYMBOL-TEMPLATE</b></a>
+
+ <li><a href="make-template-function.html"><i>Function</i> <b>MAKE-TEMPLATE</b></a>
+ <li><a href="template-p-function.html"><i>Generic function</i> <b>TEMPLATE-P</b></a>
+ <li><a href="template-spec-accessor.html"><i>Accessor</i> <b>TEMPLATE-SPEC</b></a>
+ <li><a href="hash-t-read-macro.html"><i>Reader Macro</i> <b>#T</b></a>
+ <li><a href="make-empty-environment-function.html"><i>Function</i> <b>MAKE-EMPTY-ENVIRONMENT</b></a>
+ <li><a href="find-variable-value-function.html"><i>Function</i> <b>FIND-VARIABLE-VALUE</b></a>
+ <li><a href="match-macro.html"><i>Macro</i> <b>MATCH</b></a>
+ <li><a href="matching-macro.html"><i>Macro</i> <b>MATCHING</b></a>
+ <li><a href="match-case-macro.html"><i>Macro</i> <b>MATCH-CASE</b></a>
+ </ul>
+ [_$_]
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-05-05</strong><br>
+ Started the site.
+ </li>
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/unify-function.html
hunk ./docs/html/unify-function.html 1
+<html>
+ <head>
+ <title>CL Unification: Standard Generic Function UNIFY</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Standard Generic Function UNIFY</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Generic function</i> <strong>UNIFY</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>unify</b> <i>object1</i> <i>object2</i> &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>object1</code></i>---an <i>object</i>
+ <p><i><code>object2</code></i>---an <i>object</i>
+ <p><i><code>substitution</code></i>---a <i>substitution</i>
+
+
+
+
+ <h2>Description:</h2>
+
+ <p>The generic function UNIFY is the entry point in the unification
+ machinery. It takes two <strong>CL</strong> objects, <i>object1</i>
+ and <i>object2</i> and checks whether they can be <em>unified</em>
+ by constructing a (possibly empty) consistent substitution assigning
+ appropriate values to the <em>unification variables</em> appearing
+ each object. The rules by which the unification process is carried
+ on are dependent on the types of the two objects. The known rules
+ are described in the <a href="#known_methods">"known methods"</a>
+ section.</p>
+
+ <p>UNIFY takes a <em>substitution</em> as an optional argument. The
+ default value is a <em>fresh</em> empty substitution obtained by
+ calling MAKE-EMPTY-ENVIRONMENT.</p>
+
+ <h3><a name="known_methods">Known Methods</a>:</h3>
+
+ <p>Note that UNIFY is commutative in its two required arguments. Each
+ method listed exists also with <i>object1</i> and <i>object2</i>
+ reversed.</p>
+
+ <p>First, the methods defined on standard <strong>CL</strong> types
+ are described, and then all the methods involving <em>unification
+ templates</em> are described.</p>
+
+
+ <p>
+ <ul>
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>s1</i> symbol) (<i>s2</i> symbol) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+ [_$_]
+ <p>The unification of two symbols depends on whether one (or both)
+ of them is a unification variable (i.e. either the symbol with name
+ <code>"_"</code>, or a symbol with name starting with the character
+ <code>#\?</code>.)</p>
+
+ <p>If neither object is an unification variable, then UNIFY succeds
+ if and only if the two symbols <i>s1</i> and <i>s2</i> are EQ.</p>
+
+ <p>If <i>s1</i> is an unification variable, and either <i>s1</i> is not
+ bound in <i>substitution</i>, or <i>s1</i> is bound to <i>s2</i>
+ then UNIFY succeds. If <i>s1</i> was not bound in the
+ <i>substitution</i>, then a new binding for <i>s1</i> to <i>s2</i>
+ is created.</p>
+
+ <p>The symmetric case holds if <i>s1</i> is not an unification
+ variable but <i>s2</i> is.</p>
+
+ <p>Otherwise an error of type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>v</i> symbol) (<i>object</i> t) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>The symbol <i>v</i> must be an unification variable. If not, an
+ error of type UNIFICATION-FAILURE will be signaled.
+ Otherwise, the a new binding for the variable <i>v</i> with value
+ <i>object</i> will be created in the <i>substitution</i>.<p>
+
+ <p>The creation of the new binding for <i>v</i> in the
+ <i>substitution</i> is dependent on the <em>occur check</em>
+ implemented by the generic function OCCURS-IN-P. OCCURS-IN-P is
+ called by the unification machinery if the variable
+ *OCCURRENCE-CHECK-P* is non-NIL (the default.) If
+ *OCCURENCE-CHECK-P* is non-NIL, and if the variable
+ <i>v</i> <em>occurs</em> in the <i>object</i> (i.e. OCCURS-IN-P
+ returns a non-NIL value,) then an error of type UNIFICATION-FAILURE
+ is signaled.</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>n1</i> number) (<i>n2</i> number) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>Two numbers unify if and only if they are =, in which case
+ <i>substitution</i> is returned unmodified. Otherwise, an error of
+ type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>s1</i> string) (<i>s2</i> string) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>Two strings unify only is they are "equal", under the following
+ condition. If the variable *UNIFY-STRING-CASE-INSENSITIVE-P* is NIL
+ (the default) then the two strings <i>s1</i> and <i>s2</i> are
+ compared using STRING=, otherwise they are compared using STRING-EQUAL.
+ </p>
+
+ <p>If the two strings <i>s1</i> and <i>s2</i> are equal then
+ <i>substitution</i> is returned unchanged, otherwise an error of type
+ UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>v1</i> vector) (<i>v2</i> vector) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ <b>unify</b> (<i>l1</i> list) (<i>l2</i> list) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ <b>unify</b> (<i>s1</i> sequence) (<i>s2</i> sequence) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>The "sequence" methods (and the specialized ones, mostly for
+ efficiency) extend the <i>substitution</i> by calling UNIFY
+ recursively on each element of the two sequences, <i>s1</i> and
+ <i>s2</i> (respectively, <i>l1</i> and <i>l2</i>, <i>v1</i> and
+ <i>v2</i>.)
+ </p>
+
+ <p>An error of type UNIFICATION-FAILURE is signaled if the two
+ sequences are of different LENGTH or if any call to
+ UNIFY fails.</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>a1</i> array) (<i>a2</i> array) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>Two arrays <i>a1</i> and <i>a2</i> UNIFY if and only if each of
+ the respective elements does. The two arrays are traversed using
+ ROW-MAJOR-AREF. Otherwise an error of type UNIFICATION-FAILURE is
+ signaled.</p>
+
+ <p>An error of type UNIFICATION-FAILURE is also signaled if the two
+ arrays have different total size (as returned by ARRAY-TOTAL-SIZE.)</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>object1</i> t) (<i>object2</i> t) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>This is the catch all method that is called as a last resort.
+ No recursive call to UNIFY is attempted, and the call succeeds if and
+ only if <i>object1</i> and <i>object2</i> are EQUALP. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+ [_$_]
+ </ul>
+ </p>
+
+ <p>The next methods all involve a <em>unification template</em>.
+ Again all these methods are commutative in their required
+ arguments.</p>
+
+ <p>
+ <ul>
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>s</i> structure-object) (<i>st</i> structure-object-template) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>This method UNIFYs a <i>s</i> against a STRUCTURE-OBJECT-TEMPLATE
+ <i>st</i>. <i>st</i> has the following (general) structure.</p>
+ <pre>
+ (<i>&lt;structure-class specifier&gt;</i> [ (<i>&lt;reader&gt;</i> <i>&lt;value&gt;</i>) ]* )
+ </pre></p>
+
+ <p>The <i>structure-class specifier</i> is a symbol naming a
+ structure class, <i>reader</i> is one of the DEFSTRUCT-generated
+ accessors, and <i>value</i> is a regular <strong>CL</strong> object,
+ a unification variable, or a <em>unification template</em>.</p>
+
+ <p>The class of <i>s</i> must be a subclass of <i>structure-class
+ specifier</i>. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+
+ <p>UNIFY
+ is called recursively on each <i>value</i> and the result of
+ applying <i>reader</i> to <i>s</i>.</p>
+
+ <p>If all the (recursive) calls to UNIFY succeed, then a possibly
+ augmented <i>substitution</i> is returned. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>s</i> standard-object) (<i>st</i> standard-object-template) &amp;optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>This method UNIFYs a <i>s</i> against a STANDARD-OBJECT-TEMPLATE
+ <i>st</i>. <i>st</i> has the following (general) structure.</p>
+ <pre>
+ (<i>&lt;standard-class specifier&gt;</i> [ ([slot-value | slot-accessor] <i>&lt;slot-spec&gt;</i> <i>&lt;value&gt;</i>) ]* )
+ </pre></p>
+
+ <p>The <i>standard-class specifier</i> is a symbol naming a
+ class, <i>slot-spec</i> is a valid slot accessor when
+ <code>slot-value</code> is specified, or a valid slot name for the
+ class, when <code>slot-value</code> is specified, and <i>value</i>
+ is a regular <strong>CL</strong> object,
+ a unification variable, or a <em>unification template</em>.</p>
+
+ <p>The class of <i>s</i> must be a subclass of <i>standard-class
+ specifier</i>. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+
+ <p>UNIFY
+ is called recursively on each <i>value</i> and the result of
+ extracting the slot value from <i>s</i> using either the accessor
+ supplied, or SLOT-VALUE.</p>
+
+ <p>If all the (recursive) calls to UNIFY succeed, then a possibly
+ augmented <i>substitution</i> is returned. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+ </ul>
+ </p>
+ [_$_]
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>If <i>object1</i> and <i>object2</i> cannot be unified, then an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>MAKE-EMPTY-ENVIRONMENT, UNIFICATION-FAILURE,
+ *UNIFY-STRING-CASE-INSENSITIVE-P*, OCCURS-IN-P,
+ *OCCURENCE-CHECK-P*.</p>
+
+ <h2>Notes:</h2>
+
+ <p>The unification algorithm implemented is very flexible and
+ provides many hooks for customization. However, it is not
+ necessarily asymptotically efficient (it has a worst case
+ exponential time complexity.)</p>
+
+ <p>It would be interesting to reimplement the kernel of the system
+ using a linear unification algorithm like the one described in<p>
+
+ <p>[MM82] A. Martelli and U. Montanari, <i>An Efficient Unification
+ Algorithm</i>, ACM Transactions on Programming Languages and
+ Systems, Vol. 4, No. 2, April 1982, Pages 258--282.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-04-12</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/unify-package.html
hunk ./docs/html/unify-package.html 1
+<html>
+ <head>
+ <title>CL Unification: Package CL.EXT.DACF.UNIFICATION</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Package CL.EXT.DACF.UNIFICATION</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="../../../images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="../../../images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="../../../images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Package</i> <strong>CL.EXT.DACF.UNIFICATION</strong></h1>
+
+ <h2>Nicknames:</h2>
+
+ <p><code>UNIFY</code></p>
+
+ <h2>Uses:</h2>
+
+ <p><code>COMMON-LISP</code></p>
+
+
+ <h2>Description:</h2>
+
+ <p>This package contains all the definitions necessary for the general
+ Common Lisp unifier to work.</p>
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>None.</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-04-12</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/unifying-substitutions.html
hunk ./docs/html/unifying-substitutions.html 1
+<html>
+ <head>
+ <title>CL Unifying Substitutions</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFYING SUBSTITUTIONS</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link-selected">Home</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Unifying Substitutions</h1>
+
+ <p>The central notion of every unification machinery is that of
+ <em>unifying substitution</em>. A unifying substitution - or
+ <em>environment</em> - is a
+ mapping from <em>variable names</em> (or <em>variables</em>) to
+ <em>values</em> (which can be variables themselves.)</p>
+
+ <p>The generic function UNIFY, and several other functions and macros
+ in the package accept unifying substitutions as parameters, and
+ return them as values.</p>
+
+ <p>There are several notations to describe such unifying
+ substitutions. The one chosen here is simply the following:</p>
+
+ <p>
+ <pre>
+ {x<sub>1</sub> -> y<sub>1</sub>, x<sub>2</sub> -> y<sub>2</sub>, ..., x<sub>k</sub> -> y<sub>k</sub>}
+ </pre>
+ </p>
+
+ <p>The UNIFY library has a number of functions and data structures
+ that can be used to construct and manipulate unifying substitutions.</p>
+
+ <p>In order to facilitate the construction of interpreter-like
+ programs the UNIFICATION library provides data structures
+ representing <em>bindings</em>, <em>frames</em>, and
+ <em>environments</em> - i.e. the unifying substitions proper.</p>
+
+ <ul>
+ <li><em>Bindings</em>
+
+ <p>A <em>binding</em> simply represent the mapping between a variable and a
+ value.</p>
+
+ <p>
+ <pre>
+ <i>binding</i>: <i>variable</i> --> <i>value</i>
+ </pre>
+ </p>
+
+ <li><em>Frames</em>
+
+ <p>A <em>frame</em> is simply a collection of bindings.</p>
+
+ <p>
+ <pre>
+ <i>frame</i>: {<i>binding</i><sub>i</sub>}
+ </pre>
+ </p>
+ [_$_]
+
+ <li><em>Environments</em>
+
+ <p>An <em>environment</em> is simply a stack of frames.</p>
+
+ <p>
+ <pre>
+ <i>environment</i>: &lt;<i>frame</i><sub>0</sub>, <i>frame</i><sub>1</sub>, ..., <i>frame</i><sub>k</sub>&gt;
+ </pre>
+ </p>
+ </ul>
+
+ <p>The collection of operators described hereafter manipulates these
+ opaque data structures.</p>
+
+ <h1>Unifying Substitutions Dictionary</h1>
+
+ <ul>
+ <li><a href="find-variable-value-function.html">FIND-VARIABLE-VALUE</a></li>
+ <li><a href="make-empty-environment-function.html">MAKE-EMTPY-ENVIRONMENT</a></li>
+ <li><a href="make-shared-environment-function.html">MAKE-SHARED-ENVIRONMENT</a></li>
+
+ </ul>
+ [_$_]
+
+
+ <h1>Notes</h1>
+
+ <h2>Current Implementation Details</h2>
+
+ <p>The current implementation is rather straightforward. A binding
+ is a CONS, a frame is a wrapper around an A-LIST, and an environment
+ is a wrapper around a LIST (stack) of frames.</p>
+
+
+ <h2>Functional Style Unifying Substitutions</h2>
+
+ <p>There are very elegant implementations of unification and
+ substitutions based on curried functions. A typical exercise in
+ functional programming using ML or a similar language is to write a
+ simplified Milner Type Checker. Writing the unifying substitution
+ support can be achieved by using curried functions in that context.</p>
+
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Document created
+ </li>
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
addfile ./docs/html/usci-variable.html
hunk ./docs/html/usci-variable.html 1
+<html>
+ <head>
+ <title>CL Unification: Variable *UNIFY-STRING-CASE-INSENSITIVE-P*</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Variable *UNIFY-STRING-CASE-INSENSITIVE-P*</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Variable</i> <strong>*UNIFY-STRING-CASE-INSENSITIVE-P*</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Value Type:</h2>
+
+ <p>
+ A <i>generalized boolean</i>.
+ </p>
+
+
+ <h2>Initial Value:</h2>
+
+ <p>
+ NIL
+ </p>
+
+
+ <h2>Description:</h2>
+
+ <p>The value of *UNIFY-STRING-CASE-INSENSITIVE-P* controls the
+ behavior of the UNIFY method with signature <code>(<i>string</i> <i>string</i>)</code>.
+ If NIL (the default), the method will use STRING= to test for
+ equality of the two strings. Otherwise, the UNIFY method will use STRING-EQUAL.</p>
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
addfile ./docs/html/vector-template-class.html
hunk ./docs/html/vector-template-class.html 1
+<html>
+ <head>
+ <title>CL Unification: Class VECTOR-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+[_^I_][_$_]
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class VECTOR-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+[_^I_][_$_]
+ <h1><i>Class</i> <strong>VECTOR-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ VECTOR-TEMPLATE, SEQUENCE-TEMPLATE, ARRAY-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ STRING-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The VECTOR-TEMPLATE class denotes those object that are used
+ to unify against a VECTOR.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>vector</b> . <i>&lt;destructuring template lambda list&gt;</i>)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<i>&lt;<strong>CL</strong> vector type specifier&gt;</i> . <i>&lt;destructuring template lambda list&gt;</i>)
+ </pre>
+ </p>
+
+
+ <p>The VECTOR-TEMPLATE syntax denotes a VECTOR object. A
+ VECTOR-TEMPLATE must be unified against an VECTOR object. The elements
+ of the array must be unified against the
+ <i>&lt;destructuring template lambda list&gt;</i>
+ [_$_]
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>vector</b> 0 1 ?x 3 4 5)))
+ #&lt;ENVIRONMENT xxx&gt;
+ [_$_]
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>vector</b> 0 1 "FOO" 3 4 5)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify #("foo" "bar" 42)) #T(<b>vector</b> _ _ ?x))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #("foo" "bar" 42) #T(<b>vector</b> _ &rest ?x)))
+ #&lt;ENVIRONMENT xxx&gt;
+
+ cl-prompt> (find-variable-value '?x e)
+ #("bar" 42)
+
+ cl-prompt> (setq e (unify #("foo" "bar" 42) #T((<b>vector</b> fixnum) _ &rest ?x)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an VECTOR-TEMPLATE against a non-VECTOR object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <h3>ARRAY Structural Properties</h3>
+
+ <p>There is no way to "unify" against structural properties of
+ vectors like fill pointers and displacements.</p>
+
+ <h3>Current Implementation Note</h3>
+
+ <p>Type checking for templates like
+ <code>#T((<b>vector</b> fixnum) 1 2 3)</code>
+ is not yet implemented.</p>
+
+ </td>
+ [_$_]
+ <!-- <td height="100%">&nbsp;</td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%">&nbsp;</td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+[_^I_][_^I_][_^I_][_^I_][_^I_][_^I_][_$_]
+ </td>
+ [_$_]
+ <td height="100%">&nbsp;</td>
+ </tr>
+
+
+
+ [_$_]
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ &copy; 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+ [_$_]
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
addfile ./lambda-list-parsing.lisp
hunk ./lambda-list-parsing.lisp 1
+;;; -*- Mode: Lisp -*-[_^M_][_$_]
+[_^M_][_$_]
+;;; lambda-list-parsing.lisp --[_^M_][_$_]
+[_^M_][_$_]
+(in-package "UNIFY")[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(declaim (inline type-is-t-p))[_^M_][_$_]
+[_^M_][_$_]
+(defun type-is-t-p (type-spec)[_^M_][_$_]
+ (nth-value 0 (and (subtypep type-spec t) (subtypep t type-spec))))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(declaim (inline type-specifier-p))[_^M_][_$_]
+[_^M_][_$_]
+(defun type-specifier-p (x)[_^M_][_$_]
+ (nth-value 0 (ignore-errors (subtypep x t))))[_^M_][_$_]
+[_^M_][_$_]
+(defun normalize-lambda-list (lambda-list)[_^M_][_$_]
+ (mapcar (lambda (lambda-element)[_^M_][_$_]
+ (etypecase lambda-element[_^M_][_$_]
+ (symbol lambda-element)[_^M_][_$_]
+ (cons (first lambda-element))))[_^M_][_$_]
+ lambda-list))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(defstruct lambda-var-info[_^M_][_$_]
+ (name nil :read-only t)[_^M_][_$_]
+ (type t :read-only t)[_^M_][_$_]
+ )[_^M_][_$_]
+[_^M_][_$_]
+(defstruct (optional-lambda-var-info (:include lambda-var-info))[_^M_][_$_]
+ (default-value nil :read-only t)[_^M_][_$_]
+ (name-for-supplied-indicator nil :read-only t)[_^M_][_$_]
+ )[_^M_][_$_]
+[_^M_][_$_]
+(defstruct (aux-lambda-var-info (:include optional-lambda-var-info)))[_^M_][_$_]
+[_^M_][_$_]
+(defstruct (key-lambda-var-info (:include optional-lambda-var-info))[_^M_][_$_]
+ (keyword-name nil :read-only t)[_^M_][_$_]
+ )[_^M_][_$_]
+[_^M_][_$_]
+(defstruct (rest-lambda-var-info (:include lambda-var-info)[_^M_][_$_]
+ (:constructor make-rest-lambda-var-info (&key[_^M_][_$_]
+ name[_^M_][_$_]
+ (type 'list)[_^M_][_$_]
+ (element-type t))))[_^M_][_$_]
+ (element-type t :read-only t)[_^M_][_$_]
+ )[_^M_][_$_]
+[_^M_][_$_]
+;;; The next function is really implementation-dependent, give the[_^M_][_$_]
+;;; definition of LAMBDA-LIST-KEYWORDS [_^M_][_$_]
+[_^M_][_$_]
+(define-condition lambda-list-parsing-error (program-error)[_^M_][_$_]
+ ((item :reader lambda-list-parsing-error-item[_^M_][_$_]
+ :initarg :item)[_^M_][_$_]
+ )[_^M_][_$_]
+ )[_^M_][_$_]
+[_^M_][_$_]
+(defun symbol-or-cons-p (x)[_^M_][_$_]
+ (or (symbolp x) (consp x)))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(defun parse-extended-ordinary-lambda-list (lambda-list[_^M_][_$_]
+ &key[_^M_][_$_]
+ (ordinary-variable-test #'symbolp)[_^M_][_$_]
+ (optional-variable-test #'symbol-or-cons-p)[_^M_][_$_]
+ (rest-variable-test #'symbolp)[_^M_][_$_]
+ (key-variable-test #'symbol-or-cons-p)[_^M_][_$_]
+ (aux-variable-test #'symbol-or-cons-p)[_^M_][_$_]
+ )[_^M_][_$_]
+ (let ((vars ())[_^M_][_$_]
+ (optionals ())[_^M_][_$_]
+ (keywords ())[_^M_][_$_]
+ (rest ())[_^M_][_$_]
+ (auxiliary ())[_^M_][_$_]
+ )[_^M_][_$_]
+ (labels ((parse-named-arguments (lambda-list &aux (head (first lambda-list)))[_^M_][_$_]
+ (cond ((null lambda-list) nil)[_^M_][_$_]
+ ((and (symbolp head)[_^M_][_$_]
+ (member head lambda-list-keywords))[_^M_][_$_]
+ (case head[_^M_][_$_]
+ (&optional (parse-optional-arguments (rest lambda-list)))[_^M_][_$_]
+ (&key (parse-keyword-arguments (rest lambda-list)))[_^M_][_$_]
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))[_^M_][_$_]
+ (&rest (parse-rest-arguments (rest lambda-list)))[_^M_][_$_]
+ (otherwise[_^M_][_$_]
+ (warn "Keyword ~A is implementation dependent.~@ [_^M_][_$_]
+ The parsing may not work properly."[_^M_][_$_]
+ head)[_^M_][_$_]
+ (skip-until-next-lambda-list-keyword (rest lambda-list))[_^M_][_$_]
+ ))[_^M_][_$_]
+ )[_^M_][_$_]
+ ((funcall ordinary-variable-test head)[_^M_][_$_]
+ (push head vars)[_^M_][_$_]
+ (parse-named-arguments (rest lambda-list)))[_^M_][_$_]
+ (t (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ ))[_^M_][_$_]
+[_^M_][_$_]
+ (parse-optional-arguments (lambda-list &aux (head (first lambda-list)))[_^M_][_$_]
+ (cond ((null lambda-list) nil)[_^M_][_$_]
+ ((and (symbolp head)[_^M_][_$_]
+ (member head lambda-list-keywords))[_^M_][_$_]
+ (case head[_^M_][_$_]
+ (&optional (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (&key (parse-keyword-arguments (rest lambda-list)))[_^M_][_$_]
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))[_^M_][_$_]
+ (&rest (parse-rest-arguments (rest lambda-list)))[_^M_][_$_]
+ (otherwise[_^M_][_$_]
+ (warn "Keyword ~A is implementation dependent.~@ [_^M_][_$_]
+ The parsing may not work properly."[_^M_][_$_]
+ head)[_^M_][_$_]
+ (skip-until-next-lambda-list-keyword (rest lambda-list))[_^M_][_$_]
+ ))[_^M_][_$_]
+ )[_^M_][_$_]
+ ((funcall optional-variable-test head)[_^M_][_$_]
+ (push head optionals)[_^M_][_$_]
+ (parse-optional-arguments (rest lambda-list)))[_^M_][_$_]
+ (t (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ ))[_^M_][_$_]
+[_^M_][_$_]
+ (parse-keyword-arguments (lambda-list &aux (head (first lambda-list)))[_^M_][_$_]
+ (cond ((null lambda-list) nil)[_^M_][_$_]
+ ((and (symbolp head)[_^M_][_$_]
+ (member head lambda-list-keywords))[_^M_][_$_]
+ (case head[_^M_][_$_]
+ (&optional (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (&key (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))[_^M_][_$_]
+ (&rest (parse-rest-arguments (rest lambda-list)))[_^M_][_$_]
+ (&allow-other-keys[_^M_][_$_]
+ (unless (or (null (rest lambda-list))[_^M_][_$_]
+ (eql (cadr lambda-list) '&aux))[_^M_][_$_]
+ (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (skip-until-next-lambda-list-keyword (rest lambda-list)))[_^M_][_$_]
+ (otherwise[_^M_][_$_]
+ (warn "Keyword ~A is implementation dependent.~@ [_^M_][_$_]
+ The parsing may not work properly."[_^M_][_$_]
+ head)[_^M_][_$_]
+ (skip-until-next-lambda-list-keyword (rest lambda-list))[_^M_][_$_]
+ ))[_^M_][_$_]
+ )[_^M_][_$_]
+ ((funcall key-variable-test head)[_^M_][_$_]
+ (push head keywords)[_^M_][_$_]
+ (parse-keyword-arguments (rest lambda-list)))[_^M_][_$_]
+ (t (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ ))[_^M_][_$_]
+[_^M_][_$_]
+ (parse-rest-arguments (lambda-list &aux (head (first lambda-list)))[_^M_][_$_]
+ (cond ((null lambda-list) nil)[_^M_][_$_]
+ ((consp head)[_^M_][_$_]
+ (push head rest)[_^M_][_$_]
+ ;; Error checking here.[_^M_][_$_]
+ (parse-rest-arguments (rest lambda-list)))[_^M_][_$_]
+ ((and (symbolp head)[_^M_][_$_]
+ (member head lambda-list-keywords))[_^M_][_$_]
+ (case head[_^M_][_$_]
+ (&optional (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (&key (parse-keyword-arguments (rest lambda-list)))[_^M_][_$_]
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))[_^M_][_$_]
+ (&rest (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (otherwise[_^M_][_$_]
+ (warn "Keyword ~A is implementation dependent.~@ [_^M_][_$_]
+ The parsing may not work properly."[_^M_][_$_]
+ head)[_^M_][_$_]
+ (skip-until-next-lambda-list-keyword (rest lambda-list))[_^M_][_$_]
+ ))[_^M_][_$_]
+ )[_^M_][_$_]
+ ((funcall rest-variable-test head)[_^M_][_$_]
+ (push head rest)[_^M_][_$_]
+ (parse-rest-arguments (rest lambda-list)))[_^M_][_$_]
+ (t (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ ))[_^M_][_$_]
+[_^M_][_$_]
+ (parse-auxiliary-arguments (lambda-list &aux (head (first lambda-list)))[_^M_][_$_]
+ (cond ((null lambda-list) nil)[_^M_][_$_]
+ ((and (symbolp head)[_^M_][_$_]
+ (member head lambda-list-keywords))[_^M_][_$_]
+ (case head[_^M_][_$_]
+ (&optional (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (&key (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (&aux (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (&rest (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ (otherwise[_^M_][_$_]
+ (warn "Keyword ~A is implementation dependent.~@ [_^M_][_$_]
+ The parsing may not work properly."[_^M_][_$_]
+ head)[_^M_][_$_]
+ (skip-until-next-lambda-list-keyword (rest lambda-list))[_^M_][_$_]
+ ))[_^M_][_$_]
+ )[_^M_][_$_]
+ ((funcall aux-variable-test head)[_^M_][_$_]
+ (push head auxiliary)[_^M_][_$_]
+ (parse-auxiliary-arguments (rest lambda-list)))[_^M_][_$_]
+ (t (error 'lambda-list-parsing-error :item head))[_^M_][_$_]
+ ))[_^M_][_$_]
+[_^M_][_$_]
+ (skip-until-next-lambda-list-keyword (lambda-list[_^M_][_$_]
+ &aux (head (first lambda-list)))[_^M_][_$_]
+ (cond ((null lambda-list) nil)[_^M_][_$_]
+ ((and (symbolp head)[_^M_][_$_]
+ (member head lambda-list-keywords))[_^M_][_$_]
+ (case head[_^M_][_$_]
+ (&optional (parse-optional-arguments (rest lambda-list)))[_^M_][_$_]
+ (&key (parse-keyword-arguments (rest lambda-list)))[_^M_][_$_]
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))[_^M_][_$_]
+ (&rest (parse-rest-arguments (rest lambda-list)))[_^M_][_$_]
+ (otherwise[_^M_][_$_]
+ (warn "Keyword ~A is implementation dependent.~@ [_^M_][_$_]
+ The parsing may not work properly."[_^M_][_$_]
+ head)[_^M_][_$_]
+ (skip-until-next-lambda-list-keyword (rest lambda-list))[_^M_][_$_]
+ ))[_^M_][_$_]
+ )[_^M_][_$_]
+ ((symbol-or-cons-p head)[_^M_][_$_]
+ (skip-until-next-lambda-list-keyword (rest lambda-list)))[_^M_][_$_]
+ ))[_^M_][_$_]
+ )[_^M_][_$_]
+ (parse-named-arguments lambda-list)[_^M_][_$_]
+ (values (nreverse vars)[_^M_][_$_]
+ (nreverse optionals)[_^M_][_$_]
+ (nreverse keywords)[_^M_][_$_]
+ (nreverse rest)[_^M_][_$_]
+ (nreverse auxiliary))[_^M_][_$_]
+ )))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(defun parse-var-type-info (var)[_^M_][_$_]
+ (etypecase var[_^M_][_$_]
+ (symbol (make-lambda-var-info :name var))[_^M_][_$_]
+ (cons (make-lambda-var-info :name (first var) :type (second var)))))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(defun parse-optional-var-type-info (var)[_^M_][_$_]
+ (etypecase var[_^M_][_$_]
+ (symbol (make-optional-lambda-var-info :name var))[_^M_][_$_]
+ (cons (etypecase (first var)[_^M_][_$_]
+ (symbol (if (second var) ; special case (foo nil) and (foo)[_^M_][_$_]
+ (make-optional-lambda-var-info[_^M_][_$_]
+ :name (first var)[_^M_][_$_]
+ :type (or (and (constantp (second var)) (type-of (second var)))[_^M_][_$_]
+ t))[_^M_][_$_]
+ (make-optional-lambda-var-info :name (first var))))[_^M_][_$_]
+ (cons (make-optional-lambda-var-info[_^M_][_$_]
+ :name (caar var)[_^M_][_$_]
+ :type (cadar var)[_^M_][_$_]
+ :default-value (cadr var)))[_^M_][_$_]
+ ))[_^M_][_$_]
+ ))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(defun parse-auxiliary-var-type-info (var)[_^M_][_$_]
+ (parse-optional-var-type-info var))[_^M_][_$_]
+[_^M_][_$_]
+(defun parse-rest-var-type-info (var) ; See the FUNCTION type ANSI spec for an explanation.[_^M_][_$_]
+ (etypecase var[_^M_][_$_]
+ (symbol (make-rest-lambda-var-info :name var))[_^M_][_$_]
+ (cons (make-rest-lambda-var-info :name (first var) :element-type (second var)))))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(defun parse-key-var-type-info (var)[_^M_][_$_]
+ (etypecase var[_^M_][_$_]
+ (symbol (make-key-lambda-var-info :name var))[_^M_][_$_]
+ (cons (destructuring-bind (var &optional (init-value nil init-value-supplied-p))[_^M_][_$_]
+ var[_^M_][_$_]
+ (let ((init-value-type[_^M_][_$_]
+ (if init-value-supplied-p[_^M_][_$_]
+ (or (and (constantp init-value) (type-of init-value))[_^M_][_$_]
+ t)[_^M_][_$_]
+ t))[_^M_][_$_]
+ )[_^M_][_$_]
+ (etypecase var[_^M_][_$_]
+ (symbol (make-key-lambda-var-info :name var[_^M_][_$_]
+ :type init-value-type[_^M_][_$_]
+ :default-value init-value))[_^M_][_$_]
+ [_^M_][_$_]
+ (cons (destructuring-bind (kwd var)[_^M_][_$_]
+ var[_^M_][_$_]
+ (etypecase var[_^M_][_$_]
+ (symbol[_^M_][_$_]
+ (make-key-lambda-var-info :name var[_^M_][_$_]
+ :default-value init-value[_^M_][_$_]
+ :type init-value-type[_^M_][_$_]
+ :keyword-name kwd))[_^M_][_$_]
+ (cons[_^M_][_$_]
+ (make-key-lambda-var-info :name (first var)[_^M_][_$_]
+ :default-value init-value[_^M_][_$_]
+ :type (second var)[_^M_][_$_]
+ :keyword-name kwd))))[_^M_][_$_]
+ ))[_^M_][_$_]
+ )))[_^M_][_$_]
+ ))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+;;; end of file -- lambda-list-parsing.lisp --[_^M_][_$_]
adddir ./lib-dependent
addfile ./lib-dependent/cl-ppcre-template.asd
hunk ./lib-dependent/cl-ppcre-template.asd 1
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-ppcre-template.asd --
+;;;; ASDF system file.
+
+(asdf:defsystem cl-ppcre-template
+ :author "Marco Antoniotti"
+ :components ((:file "cl-ppcre-template"))
+ :depends-on (cl-ppcre cl-unification))
+
+;;;; end of file -- cl-ppcre-template.asd --
addfile ./lib-dependent/cl-ppcre-template.lisp
hunk ./lib-dependent/cl-ppcre-template.lisp 1
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-ppcre-template.lisp --
+;;;; REGEXP template dependent on CL-PPCRE.
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+
+;;;; REGEXP Templates.
+;;;; Another extension of the type specifier language.
+
+;;;; A template can also be
+;;;;
+;;;; <template> ::= #| templates from template-hierarchy.lisp |#
+;;;; | <regexp template>
+;;;;
+;;;; Hairier REGEXP template spec syntax:
+;;;;
+;;;; (regexp|regular-expression) <REGEXP> &optional <unification vars> &rest <keys>
+;;;;
+;;;; where
+;;;;
+;;;; <REGEXP> ::= <a CL-PPCRE regexp string or tree>
+;;;; <unification vars> ::= '(' <variable>* ')'
+;;;; <keys> ::= <CL-PPCRE (constant) keys to be passed to CL-PPCRE:CREATE-SCANNER>
+
+(defclass regular-expression-template (string-template)
+ ((scanner :reader scanner)
+ (regexp :reader regular-expression)
+ (vars :reader variables
+ :reader registers
+ :type list)
+ )
+ (:documentation "The Regular Expression Template.
+
+A template for matching strings using regular expressions.
+The actual matching is done thankes to the CL-PPCRE library.")
+ )
+
+
+
+(defgeneric regular-expression-template-p (x)
+ (:method ((x regular-expression-template)) t)
+ (:method ((x t)) nil))
+
+
+(defmethod make-template ((kind (eql 'regexp)) (spec cons))
+ (make-instance 'regular-expression-template :spec spec))
+
+(defmethod make-template ((kind (eql 'regular-expression)) (spec cons))
+ (make-template 'regexp spec))
+
+
+(defmethod initialize-instance :after ((re-t regular-expression-template) &key)
+ (destructuring-bind (re-kwd regexp &optional vars &rest keys)
+ (template-spec re-t)
+ (declare (ignore re-kwd))
+ (multiple-value-bind (scanner reg-names)
+ (let ((cl-ppcre:*allow-named-registers* t))
+ (apply #'cl-ppcre:create-scanner regexp keys))
+ (declare (ignorable reg-names))
+ (setf (slot-value re-t 'scanner)
+ scanner
+
+ (slot-value re-t 'regexp)
+ regexp
+
+ (slot-value re-t 'vars)
+ vars ; Maybe will merge with REG-NAMES...
+ )
+ )))
+
+#|
+(defmethod initialize-instance :after ((re-t regular-expression-template) &key)
+ ;; FIX: handling of CL-PPCRE:CREATE-SCANNER keywords. This can be
+ ;; done by using the "harier" syntax of SPEC (see above).
+ (destructuring-bind (re-kwd regexp &optional vars &rest keys)
+ (template-spec re-t)
+ (declare (ignore re-kwd)
+ (ignorable regexp vars keys))
+ (multiple-value-bind (scanner reg-names)
+ (let ((cl-ppcre:*allow-named-registers* t))
+ (cl-ppcre:create-scanner (second (template-spec re-t))))
+ (declare (ignorable reg-names))
+ (setf (slot-value re-t 'scanner)
+ scanner
+
+ (slot-value re-t 'regexp)
+ (second (template-spec re-t)) ; For the time being just stored and
+ ; used for debugging.
+ )
+ )))
+|#
+
+;;;;---------------------------------------------------------------------------
+;;;; Implementation.
+
+;;; Unification.
+
+(defmethod unify ((ret1 regular-expression-template)
+ (ret2 regular-expression-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (if (eq ret1 ret2)
+ env
+ ;; I could UNIFY the result of the CL-PPCRE:PARSE-STRINGs.
+ (error 'unification-failure
+ :format-control "Do not know how unify the two ~
+ regular-expression templates: ~S and ~S."
+ :format-arguments (list ret1 ret2))))
+
+
+(defmethod unify ((re-t regular-expression-template) (s string)
+ &optional (env (make-empty-environment))
+ &key
+ (start 0)
+ end
+ &allow-other-keys)
+ (declare (type (integer 0 #.most-positive-fixnum) start)
+ (type (or null (integer 0 #.most-positive-fixnum)) end))
+ (let ((end (or end (length s))))
+ (declare (type (integer 0 #.most-positive-fixnum) end))
+
+ (multiple-value-bind (matched-p strings)
+ (cl-ppcre:scan-to-strings (scanner re-t) s :start start :end end)
+ (unless matched-p
+ (error 'unification-failure
+ :format-control "String ~S cannot be matched against ~
+ regular expression ~S."
+ :format-arguments (list s
+ (regular-expression re-t))))
+ (let ((vars (variables re-t)))
+ (if (null vars)
+ env
+ (loop for r-string of-type string across strings
+ for v in vars
+ for result-env = (var-unify v r-string env)
+ then (var-unify v r-string result-env)
+ finally (return result-env))))
+ )))
+
+
+(defmethod unify ((s string) (re-t regular-expression-template)
+ &optional (env (make-empty-environment))
+ &key (start 0) end &allow-other-keys)
+ (unify re-t s env :start start :end end))
+ [_$_]
+
+;;;; end of file -- cl-ppcre-template.lisp --
addfile ./lib-dependent/cl-ppcre-template.system
hunk ./lib-dependent/cl-ppcre-template.system 1
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-ppcre-template.system --
+;;;; MK system file.
+
+(mk:defsystem "CL-PPCRE-TEMPLATE"
+ :author "Marco Antoniotti"
+ :non-required-p t
+ :components ((:file "cl-ppcre-template"))
+ :depends-on ("CL-PPCRE"))
+
+;;;; end of file -- cl-ppcre-template.system --
addfile ./match-block.lisp
hunk ./match-block.lisp 1
+;;; -*- Mode: Lisp -*-[_^M_][_$_]
+[_^M_][_$_]
+(in-package "UNIFY")[_^M_][_$_]
+[_^M_][_$_]
+(defun clean-unify-var-name (v)[_^M_][_$_]
+ (assert (variablep v))[_^M_][_$_]
+ (intern (subseq (symbol-name v) 1)[_^M_][_$_]
+ (symbol-package v)))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(defmacro match ((template object[_^M_][_$_]
+ &key[_^M_][_$_]
+ (substitution (make-empty-environment))[_^M_][_$_]
+ (errorp t)[_^M_][_$_]
+ (error-value nil))[_^M_][_$_]
+ &body forms)[_^M_][_$_]
+ "Sets up a lexical environment to evaluate FORMS after a unification operation.[_^M_][_$_]
+MATCH unifies a TEMPLATE and an OBJECT and then sets up a lexical[_^M_][_$_]
+environment where the variables present in the template are bound[_^M_][_$_]
+lexically. Note that both variable names '?FOO' and 'FOO' are bound[_^M_][_$_]
+for convenience.[_^M_][_$_]
+[_^M_][_$_]
+The MATCH form returns the values returned by the evaluation of the[_^M_][_$_]
+last of the FORMS.[_^M_][_$_]
+[_^M_][_$_]
+If ERRORP is non-NIL (the default) then the form raises a[_^M_][_$_]
+UNIFICATION-FAILURE, otherwise the result of evaluating ERROR-VALUE,[_^M_][_$_]
+whose default is NIL is returned. (Note that UNIFICATION-FAILUREs[_^M_][_$_]
+raising from the evaluation of FORMS will also be caught and handled[_^M_][_$_]
+according to ERRORP settings.)[_^M_][_$_]
+"[_^M_][_$_]
+ (let ((template-vars (collect-template-vars template))[_^M_][_$_]
+ (env-var (gensym "UNIFICATION-ENV-"))[_^M_][_$_]
+ )[_^M_][_$_]
+ (flet ((generate-var-bindings ()[_^M_][_$_]
+ (loop for v in template-vars[_^M_][_$_]
+ nconc (list `(,v (find-variable-value ',v ,env-var))[_^M_][_$_]
+ `(,(clean-unify-var-name v) ,v))))[_^M_][_$_]
+ )[_^M_][_$_]
+ `(block nil[_^M_][_$_]
+ (handler-case[_^M_][_$_]
+ (let* ((,env-var (unify ',template ,object ,substitution))[_^M_][_$_]
+ ,@(generate-var-bindings)[_^M_][_$_]
+ )[_^M_][_$_]
+ ,@forms)[_^M_][_$_]
+ (unification-failure (uf)[_^M_][_$_]
+ (if ,errorp[_^M_][_$_]
+ (signal uf)[_^M_][_$_]
+ ,error-value))[_^M_][_$_]
+ )))))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(define-condition unification-non-exhaustive (unification-failure)[_^M_][_$_]
+ ())[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+(defmacro matching ((&key errorp[_^M_][_$_]
+ (default-substitution (make-empty-environment)))[_^M_][_$_]
+ &rest match-clauses)[_^M_][_$_]
+ "MATCHING sets up a COND-like environment for multiple template matching clauses.[_^M_][_$_]
+The syntax of MATCHING comprises a number of clauses of the form[_^M_][_$_]
+[_^M_][_$_]
+ <clause> ::= <regular-clause> | <default-clause>[_^M_][_$_]
+ <regular-clause> ::= ((<template> <form>) &body <forms>)[_^M_][_$_]
+ <default-clause> ::= (t &body <forms>)[_^M_][_$_]
+ | (otherwise &body <forms>)[_^M_][_$_]
+<form> and <forms> are regular Common Lisp forms.[_^M_][_$_]
+<template> is a unification template.[_^M_][_$_]
+[_^M_][_$_]
+The full syntax of MATCHING is[_^M_][_$_]
+[_^M_][_$_]
+ matching (&key errorp default-substitution) <clauses>[_^M_][_$_]
+[_^M_][_$_]
+Each clause evaluates its forms in an environment where the variables[_^M_][_$_]
+present in the template are bound lexically. Note that both variable[_^M_][_$_]
+names '?FOO' and 'FOO' are bound for convenience.[_^M_][_$_]
+[_^M_][_$_]
+The values returned by the MATCHING form are those of the last form in[_^M_][_$_]
+the first clause that satisfies the match test.[_^M_][_$_]
+[_^M_][_$_]
+If ERRORP is non-NIL then if none of the regular clauses matches, then[_^M_][_$_]
+an error of type UNIFICATION-NON-EXAUSTIVE is signalled, regardless of[_^M_][_$_]
+any default clause. Otherwise, the default clause behaves as a[_^M_][_$_]
+standard COND default clause. The default value of ERRORP is NIL.[_^M_][_$_]
+"[_^M_][_$_]
+ (declare (ignore default-substitution)) ; For the time being.[_^M_][_$_]
+ (labels ((%%match%% (clause-var template object forms substitution)[_^M_][_$_]
+ (let ((template-vars (collect-template-vars template)))[_^M_][_$_]
+ (flet ((generate-var-bindings ()[_^M_][_$_]
+ (loop for v in template-vars[_^M_][_$_]
+ nconc (list `(,v (find-variable-value ',v ,clause-var))[_^M_][_$_]
+ `(,(clean-unify-var-name v) ,v))))[_^M_][_$_]
+ )[_^M_][_$_]
+ `((setf ,clause-var[_^M_][_$_]
+ (ignore-errors (unify ',template ,object ,substitution)))[_^M_][_$_]
+ (let* (,@(generate-var-bindings))[_^M_][_$_]
+ ,@forms))[_^M_][_$_]
+ )))[_^M_][_$_]
+[_^M_][_$_]
+ (build-match-clause (match-clause match-env-var)[_^M_][_$_]
+ (destructuring-bind ((template object) &body forms)[_^M_][_$_]
+ match-clause[_^M_][_$_]
+ (%%match%% match-env-var template object forms '(make-empty-environment))))[_^M_][_$_]
+ )[_^M_][_$_]
+ (when (or (> 1 (count t match-clauses :key #'first))[_^M_][_$_]
+ (> 1 (count 'otherwise match-clauses :key #'first)))[_^M_][_$_]
+ (error 'program-error))[_^M_][_$_]
+ (let* ((default-clause (or (find t match-clauses :key #'first)[_^M_][_$_]
+ (find 'otherwise match-clauses :key #'first)))[_^M_][_$_]
+ (match-clauses (delete default-clause match-clauses)) ; EQL test suffices.[_^M_][_$_]
+ )[_^M_][_$_]
+ `(block matching[_^M_][_$_]
+ (cond ,@(mapcar (lambda (match-clause match-clause-env-var)[_^M_][_$_]
+ (build-match-clause match-clause match-clause-env-var))[_^M_][_$_]
+ match-clauses[_^M_][_$_]
+ (mapcar (lambda (mc)[_^M_][_$_]
+ (declare (ignore mc))[_^M_][_$_]
+ (gensym "UNIFICATION-ENV-")[_^M_][_$_]
+ )[_^M_][_$_]
+ match-clauses))[_^M_][_$_]
+ (,errorp[_^M_][_$_]
+ (error 'unification-non-exhaustive[_^M_][_$_]
+ :format-control "Non exhaustive matching."))[_^M_][_$_]
+ ,@(when default-clause (list default-clause)))))[_^M_][_$_]
+ ))[_^M_][_$_]
+[_^M_][_$_]
+[_^M_][_$_]
+;;; end of file -- math-blocks.lisp --[_^M_][_$_]
addfile ./substitutions.lisp
hunk ./substitutions.lisp 1
+;;; -*- Mode: Lisp -*-
+
+;;; substitutions.lisp
+;;; General CL structures unifier.
+;;; Substitution definitions.
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+;;;---------------------------------------------------------------------------
+;;; Bindings.
+
+(deftype binding () 'cons)
+
+(deftype bindings () 'list) ; An A-LIST.
+
+(defun make-binding (variable value)
+ (cons variable value))
+
+(defun extend-bindings (variable value bindings)
+ (acons variable value bindings))
+
+
+(defun binding-variable (b)
+ (declare (type binding b))
+ (car b))
+
+(defun binding-value (b)
+ (declare (type binding b))
+ (cdr b))
+
+
+(define-condition unification-variable-unbound (unbound-variable)
+ ()
+ )
+
+(define-condition unification-failure (simple-error)
+ ())
+
+
+;;;---------------------------------------------------------------------------
+;;; Frames.
+
+(defstruct frame
+ (bindings () :type bindings))
+
+(defun empty-frame-p (f)
+ (declare (type frame f))
+ (null (frame-bindings f)))
+
+
+(defun find-variable-binding-in-frame (v f)
+ (declare (type frame f))
+ (assoc v (frame-bindings f)))
+
+
+(defun find-variable-value-in-frame (v f)
+ (declare (type frame f))
+ (let ((b (find-variable-binding-in-frame v f)))
+ (declare (type (or null binding) b))
+ (if b
+ (values (cdr b) t)
+ (values nil nil))))
+
+
+;;;---------------------------------------------------------------------------
+;;; Environments.
+
+(defstruct (environment (:print-object print-environment))
+ (frames () :type list))
+
+(defun print-environment (env stream)
+ (if *print-readably*
+ (format stream "#S(ENVIRONMENT FRAMES ~S)"
+ (environment-frames env))
+ (print-unreadable-object (env stream :type nil :identity t)
+ (format stream "~:[~;EMPTY ~]UNIFY ENVIRONMENT: ~D frame~:P"
+ (empty-environment-p env)
+ (list-length (environment-frames env))))))
+
+(deftype substitution () 'environment)
+
+(defun substitution-p (x) (environment-p x))
+
+(defun first-frame (env)
+ (first (environment-frames env)))
+
+
+(defun make-empty-environment ()
+ (make-environment :frames (list (make-frame))))
+
+(defun copy-environment (env)
+ (make-environment :frames (copy-list (environment-frames env))))
+
+(defun make-shared-environment (env)
+ (make-environment :frames (environment-frames env)))
+
+(defun empty-environment-p (env &aux (env-frames (environment-frames env)))
+ (declare (type environment env))
+ (and (= 1 (list-length env-frames))
+ (empty-frame-p (first env-frames))))
+
+(defparameter *null-environment* (make-empty-environment))
+
+
+(defun find-variable-value (variable &optional (env *null-environment*) errorp)
+ (declare (type environment env))
+ (labels ((find-var-value (frames)
+ (cond (frames
+ (multiple-value-bind (val foundp)
+ (find-variable-value-in-frame variable (first frames))
+ (if foundp
+ (values val t)
+ (find-var-value (rest frames)))))
+ (errorp
+ (error 'unification-variable-unbound :variable variable))
+ (t (values nil nil))))
+ )
+ (find-var-value (environment-frames env))))
+
+
+
+(defun extend-environment (var pat env)
+ (let ((first-frame (first-frame env)))
+ (setf (frame-bindings first-frame)
+ (extend-bindings var pat (frame-bindings first-frame)))
+ env))
+
+
+;;; end of file -- substitutions.lisp --
addfile ./templates-hierarchy-saved.lisp
hunk ./templates-hierarchy-saved.lisp 1
+;;; -*- Mode: Lisp -*-
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+;;; Templates.
+;;; Essentially we extend the type specifier language.
+;;; The interesting thing is that we need to specify how a "match"
+;;; between a template and a CL object is performed.
+
+;;; A template is one of the following
+;;;
+;;; <template> ::= <logical variable>
+;;; | <structure template>
+;;; | <instance template>
+;;; | <destructuring template>
+;;; | <vector template>
+;;; | <sequence template>
+;;; | <array template>
+;;; | <type template>
+;;; | <lisp object>
+;;;
+
+;;; Destructuring Template Lambda List (as per standard CL terminology)
+;;;
+;;; <destructuring template lambda list> ::= <a "destructuring LL" with <template> in lieu of <var>>
+
+;;; Templates for Structures and Instances
+;;;
+;;; <structure template> ::= (<class designator> <structure-slot-spec>*)
+;;;
+;;; <instance template> ::= (<class designator> <slot-spec>*)
+;;;
+;;; where
+;;;
+;;; <structure-slot-spec> ::= (<reader-name> <template>)
+;;; <instance-slot-spec> ::= (slot-access <accessor-name> <template>)
+;;; | (slot-value <slot-name> <template>)
+
+;;; Template for Sequences
+;;;
+;;; <sequence template> ::= (<container type> . <destructuring template lambda list>)
+;;; | (subseq <from> <to> . <destructuring template lambda list>)
+;;; <container type> ::= list | cons | vector | array
+
+;;; Templates for Vectors and Arrays.
+;;;
+;;; <vector template> ::= (vector . <destructuring template lambda list>)
+;;;
+;;; <array template> ::= (array <shape template>)
+;;; | (aref <index template> <template>)
+;;; <shape template> ::= (<destructuring template lambda list>)
+;;; | <sequence template>
+;;; | (<shape template>)
+
+;;; Templates for LIST and CONS
+;;; <list template> ::= (list <destructuring template lambda list>)
+;;; <cons template> ::= (cons <template> <template>)
+
+;;; A regular list or cons acts as a list or cons template.
+
+(define-condition unification-template-error (simple-error)
+ ())
+
+;;; Templates are introduced by the reader macro #T(...)
+
+(defclass template ()
+ ((spec :accessor template-spec :type (or symbol cons) :initarg :spec))
+ (:default-initargs :spec nil))
+
+(defgeneric template-p (x)
+ (:method ((x template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass type-template (template) ())
+
+(defgeneric type-template-p (x)
+ (:method ((x type-template)) t)
+ (:method ((x t)) nil))
+
+
+(defgeneric type-template-type-spec (x)
+ (:method ((x type-template))
+ (let ((spec (template-spec x)))
+ (if spec
+ (first spec)
+ 'null))))
+
+
+
+(defclass nil-template (type-template) ()) ; This is the point where we break the type hierarchy.
+
+(defgeneric nil-template-p (x)
+ (:method ((x nil-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass expression-template (template) ())
+
+(defgeneric expression-template-p (x)
+ (:method ((x expression-template)) t)
+ (:method ((x t)) nil))
+
+
+(defmethod print-object ((template template) (stream stream))
+ (format stream "#T~S" (template-spec template)))
+
+
+(defclass sequence-template (type-template) ())
+
+(defgeneric sequence-template-p (x)
+ (:method ((x sequence-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass list-template (sequence-template) ())
+
+(defgeneric list-template-p (x)
+ (:method ((x list-template)) t)
+ (:method ((x t)) nil))
+
+(defclass array-template (type-template) ())
+
+(defgeneric array-template-p (x)
+ (:method ((x array-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass vector-template (sequence-template array-template) ())
+
+(defgeneric vector-template-p (x)
+ (:method ((x vector-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass string-template (vector-template) ())
+
+(defgeneric string-template-p (x)
+ (:method ((x string-template)) t)
+ (:method ((x t)) nil))
+
+
+
+
+(defclass symbol-template (type-template) ())
+
+(defgeneric symbol-template-p (x)
+ (:method ((x symbol-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass number-template (type-template) ())
+
+(defgeneric number-template-p (x)
+ (:method ((x number-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass structure-object-template (type-template) ())
+
+(defgeneric structure-object-template-p (x)
+ (:method ((x structure-object-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass standard-object-template (type-template) ())
+
+(defgeneric standard-object-template-p (x)
+ (:method ((x standard-object-template)) t)
+ (:method ((x t)) nil))
+
+
+;;; Expression Templates.
+
+(defclass subseq-template (expression-template) ())
+
+(defgeneric subseq-template-p (x)
+ (:method ((x subseq-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass elt-template (expression-template) ())
+
+(defgeneric elt-template-p (x)
+ (:method ((x elt-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass aref-template (elt-template) ())
+
+(defgeneric aref-template-p (x)
+ (:method ((x aref-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass nth-template (elt-template) ())
+
+(defgeneric nth-template-p (x)
+ (:method ((x nth-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass nthcdr-template (elt-template) ())
+
+(defgeneric nthcdr-template-p (x)
+ (:method ((x nthcdr-template)) t)
+ (:method ((x t)) nil))
+
+
+(defgeneric make-template (kind spec))
+
+;;; Setting up the reader macro.
+
+(defun |#T-reader| (stream subchar arg)
+ (declare (ignore subchar arg))
+ (let ((spec (read stream t nil t)))
+ (typecase spec
+ (null (make-template nil spec))
+ (cons (make-template (first spec) spec))
+ (t (make-template spec spec)))))
+
+
+(eval-when (:load-toplevel :execute)
+ (set-dispatch-macro-character #\# #\T #'|#T-reader|))
+
+(defmethod make-template ((kind null) (spec symbol))
+ (assert (null spec) (spec) "MAKE-TEMPLATE called erroneously with ~S and ~S." kind spec)
+ (make-instance 'nil-template :spec spec))
+
+(defmethod make-template ((kind symbol) (spec symbol))
+ (make-instance 'symbol-template :spec spec))
+
+(defmethod make-template ((kind (eql 'symbol)) (spec cons))
+ (make-instance 'symbol-template :spec spec))
+
+(defmethod make-template ((kind symbol) (spec cons))
+ (cond ((subtypep kind 'number)
+ (make-instance 'number-template :spec spec))
+ ((subtypep kind 'structure-object)
+ (make-instance 'structure-object-template :spec spec))
+ ((subtypep kind 'standard-object)
+ (make-instance 'standard-object-template :spec spec))
+ (t
+ (error 'unification-template-error
+ :format-control "Unknown template specifier ~S."
+ :format-arguments (list kind)))
+ ))
+
+(defmethod make-template ((kind cons) (spec cons))
+ (cond ((subtypep kind 'number)
+ (make-instance 'number-template :spec spec))
+ ((subtypep kind 'string)
+ (make-instance 'string-template :spec spec))
+ ((subtypep kind 'vector)
+ (make-instance 'vector-template :spec spec))
+ ((subtypep kind 'array)
+ (make-instance 'array-template :spec spec))
+ (t
+ (error 'unification-template-error
+ :format-control "Unknown template specifier ~S."
+ :format-arguments (list kind)))
+ ))
+
+(defmethod make-template ((kind (eql 'sequence)) (spec cons))
+ (make-instance 'sequence-template :spec spec))
+
+(defmethod make-template ((kind (eql 'list)) (spec cons))
+ (make-instance 'list-template :spec spec))
+
+(defmethod make-template ((kind (eql 'vector)) (spec cons))
+ (make-instance 'vector-template :spec spec))
+
+(defmethod make-template ((kind (eql 'string)) (spec cons))
+ (make-instance 'stringvector-template :spec spec))
+
+(defmethod make-template ((kind (eql 'array)) (spec cons))
+ (make-instance 'array-template :spec spec))
+
+
+(defmethod make-template ((kind (eql 'subseq)) (spec cons))
+ (make-instance 'subseq-template :spec spec))
+
+(defmethod make-template ((kind (eql 'elt)) (spec cons))
+ (make-instance 'elt-template :spec spec))
+
+(defmethod make-template ((kind (eql 'aref)) (spec cons))
+ (make-instance 'aref-template :spec spec))
+
+(defmethod make-template ((kind (eql 'nth)) (spec cons))
+ (make-instance 'nth-template :spec spec))
+
+(defmethod make-template ((kind (eql 'nthcdr)) (spec cons))
+ (make-instance 'nthcdr-template :spec spec))
+
+
+
+
+;;; Implementation.
+
+;;; Symbol Templates.
+;;; Specification is
+;;;
+;;; (symbol <symbol>)
+
+(defun symbol-template-symbol (x)
+ (declare (type symbol-template x))
+ (assert (symbol-template-p x) (x) "Non symbol template ~S." x)
+ (let ((spec (template-spec x)))
+ (cond ((symbolp spec) spec)
+ ((consp spec) (second spec)))))
+
+
+;;; Number template
+;;; Specification is
+;;;
+;;; (<number type> <number>)
+;;; or
+;;;
+;;; <number>
+
+(defun number-template-number (x)
+ (declare (type number-template x))
+ (assert (number-template-p x) (x) "Non number template ~S." x)
+ (let ((spec (template-spec x)))
+ (etypecase spec
+ (symbol spec)
+ (number spec)
+ (consp (second spec)))))
+
+
+;;; Sequence Templates.
+;;; Specification is
+;;;
+;;; (<sequence subtype> . <destructuring template lambda list>)
+;;; or
+;;; (subseq <from> <to> . <destructuring template lambda list>)
+
+(defun sequence-template-lambda-list (x)
+ (declare (type sequence-template x))
+ (assert (sequence-template-p x) (x) "Non sequence template ~S." x)
+ (rest (template-spec x)))
+
+
+;;; Array Templates.
+;;; Specification is
+;;;
+;;; (array (['*' | <element type>] [<dimension spec>]) <shape template>)
+;;; or
+;;; (<array type specifier> <shape template>)
+
+
+(defun array-template-shape-template (x)
+ (declare (type array-template x))
+ (assert (array-template-p x) (x) "Non array template ~S." x)
+ (let ((spec (template-spec x)))
+ (third spec)))
+
+
+(defun array-template-type-template (x)
+ (declare (type array-template x))
+ (assert (array-template-p x) (x) "Non array template ~S." x)
+ (let ((spec (template-spec x)))
+ (second spec)))
+
+
+(defun aref-template-indexes (x)
+ (declare (type aref-template x))
+ (assert (aref-template-p x) (x) "Non aref template ~S." x)
+ (let ((spec (template-spec x)))
+ (second spec)))
+
+
+(defun aref-template-element (x)
+ (declare (type aref-template x))
+ (assert (aref-template-p x) (x) "Non array template ~S." x)
+ (let ((spec (template-spec x)))
+ (third spec)))
+
+
+;;; Vector Templates.
+;;; Specification is
+;;;
+;;; (vector . <destructuring template lambda list>)
+
+;;; Structure and Standard Object Templates.
+
+(defun structure-object-template-slots (x)
+ (and (structure-object-template-p x)
+ (rest (template-spec x))))
+
+
+(defun standard-object-template-slots (x)
+ (and (standard-object-template-p x)
+ (rest (template-spec x))))
+
+
+;;;===========================================================================
+;;; Template variables.
+;;; Let's walk down a template.
+;;; Note that there is an asymmetry here: I admit some containers to have
+;;; variables inside, but I do not search instances of a class for variables.
+;;; This is an asymmetry that would be way too hard to fix without more
+;;; introspective power (which is available in the MOP, but not standard.)
+
+(defgeneric collect-template-vars (template))
+
+(defmethod collect-template-vars ((template template))
+ (let ((spec (template-spec template)))
+ (nconc (collect-template-vars (car spec))
+ (collect-template-vars (cdr spec)))))
+
+(defmethod collect-template-vars ((template symbol-template))
+ (let ((template (symbol-template-symbol template)))
+ (when (and (variablep template) (not (variable-any-p template)))
+ (list template))))
+
+
+(defmethod collect-template-vars ((template number-template))
+ (let ((template (number-template-number template)))
+ (etypecase template
+ (number ())
+ (symbol (cond ((variablep template) template)
+ ((and (boundp template)
+ (numberp (symbol-value template)))
+ (symbol-value template))
+ (t
+ (error "Invalid number template ~S." template)))))))
+
+
+(defmethod collect-template-vars ((template symbol))
+ (when (and (variablep template) (not (variable-any-p template)))
+ (list template)))
+
+(defmethod collect-template-vars ((template null))
+ ())
+
+(defmethod collect-template-vars ((template cons))
+ (nconc (collect-template-vars (car template))
+ (collect-template-vars (cdr template))))
+
+(defmethod collect-template-vars ((template string))
+ ())
+
+
+(defmethod collect-template-vars ((template vector))
+ (loop for e across template
+ nconc (collect-template-vars e)))
+
+
+(defmethod collect-template-vars ((template array))
+ (loop for i below (array-total-size template)
+ nconc (collect-template-vars (row-major-aref template i))))
+
+
+(defmethod collect-template-vars ((template t))
+ ())
+
+;;; end of file -- templates.lisp --
addfile ./templates-hierarchy.lisp
hunk ./templates-hierarchy.lisp 1
+;;; -*- Mode: Lisp -*-
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+;;; Templates.
+;;; Essentially we extend the type specifier language.
+;;; The interesting thing is that we need to specify how a "match"
+;;; between a template and a CL object is performed.
+
+;;; A template is one of the following
+;;;
+;;; <template> ::= <logical variable>
+;;; | <structure template>
+;;; | <instance template>
+;;; | <destructuring template>
+;;; | <vector template>
+;;; | <sequence template>
+;;; | <array template>
+;;; | <type template>
+;;; | <lisp object>
+;;;
+
+;;; Destructuring Template Lambda List (as per standard CL terminology)
+;;;
+;;; <destructuring template lambda list> ::= <a "destructuring LL" with <template> in lieu of <var>>
+
+;;; Templates for Structures and Instances
+;;;
+;;; <structure template> ::= (<class designator> <structure-slot-spec>*)
+;;;
+;;; <instance template> ::= (<class designator> <slot-spec>*)
+;;;
+;;; where
+;;;
+;;; <structure-slot-spec> ::= <reader-name> <template>
+;;; <instance-slot-spec> ::= <accessor-name> <template>
+;;; | (slot-value <slot-name>) <template>
+
+;;; Template for Sequences
+;;;
+;;; <sequence template> ::= (<container type> . <destructuring template lambda list>)
+;;; | (subseq <from> <to> . <destructuring template lambda list>)
+;;; <container type> ::= list | cons | vector | array
+
+;;; Templates for Vectors and Arrays.
+;;;
+;;; <vector template> ::= (vector . <destructuring template lambda list>)
+;;;
+;;; <array template> ::= (array <shape template>)
+;;; | (<array CL type specifier> <shape template>)
+;;; | (array (['*' | <element type>] [<dimension spec>]]) <shape template>)
+;;; | (aref <index template> <template>)
+;;; <shape template> ::= <destructuring template lambda list>
+;;; | <sequence template>
+;;; | (<shape template>)
+
+;;; Templates for LIST and CONS
+;;; <list template> ::= (list . <destructuring template lambda list>)
+;;; <cons template> ::= (cons <template> <template>)
+
+;;; A regular list or cons acts as a list (hence as a sequence) template, or a cons template.
+
+(define-condition unification-template-error (simple-error)
+ ())
+
+;;; Templates are introduced by the reader macro #T(...)
+
+(defclass template ()
+ ((spec :accessor template-spec :type (or symbol cons) :initarg :spec))
+ (:default-initargs :spec nil))
+
+(defgeneric template-p (x)
+ (:method ((x template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass type-template (template) ())
+
+(defgeneric type-template-p (x)
+ (:method ((x type-template)) t)
+ (:method ((x t)) nil))
+
+
+(defgeneric type-template-type-spec (x)
+ (:method ((x type-template))
+ (let ((spec (template-spec x)))
+ (if spec
+ (first spec)
+ 'null))))
+
+
+
+(defclass nil-template (type-template) ()) ; This is the point where we break the type hierarchy.
+
+(defgeneric nil-template-p (x)
+ (:method ((x nil-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass expression-template (template) ())
+
+(defgeneric expression-template-p (x)
+ (:method ((x expression-template)) t)
+ (:method ((x t)) nil))
+
+
+(defmethod print-object ((template template) (stream stream))
+ (format stream "#T~S" (template-spec template)))
+
+
+(defclass sequence-template (type-template) ())
+
+(defgeneric sequence-template-p (x)
+ (:method ((x sequence-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass list-template (sequence-template) ())
+
+(defgeneric list-template-p (x)
+ (:method ((x list-template)) t)
+ (:method ((x t)) nil))
+
+(defclass array-template (type-template) ())
+
+(defgeneric array-template-p (x)
+ (:method ((x array-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass vector-template (sequence-template array-template) ())
+
+(defgeneric vector-template-p (x)
+ (:method ((x vector-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass string-template (vector-template) ())
+
+(defgeneric string-template-p (x)
+ (:method ((x string-template)) t)
+ (:method ((x t)) nil))
+
+
+
+
+(defclass symbol-template (type-template) ())
+
+(defgeneric symbol-template-p (x)
+ (:method ((x symbol-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass number-template (type-template) ())
+
+(defgeneric number-template-p (x)
+ (:method ((x number-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass structure-object-template (type-template) ())
+
+(defgeneric structure-object-template-p (x)
+ (:method ((x structure-object-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass standard-object-template (type-template) ())
+
+(defgeneric standard-object-template-p (x)
+ (:method ((x standard-object-template)) t)
+ (:method ((x t)) nil))
+
+
+;;; Expression Templates.
+
+(defclass subseq-template (expression-template) ())
+
+(defgeneric subseq-template-p (x)
+ (:method ((x subseq-template)) t)
+ (:method ((x t)) nil))
+
+
+
+(defclass element-template (expression-template) ())
+
+(defgeneric element-template-p (x)
+ (:method ((x element-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass elt-template (element-template) ())
+
+(defgeneric elt-template-p (x)
+ (:method ((x elt-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass aref-template (element-template) ())
+
+(defgeneric aref-template-p (x)
+ (:method ((x aref-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass nth-template (element-template) ())
+
+(defgeneric nth-template-p (x)
+ (:method ((x nth-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass nthcdr-template (element-template) ())
+
+(defgeneric nthcdr-template-p (x)
+ (:method ((x nthcdr-template)) t)
+ (:method ((x t)) nil))
+
+
+(defgeneric make-template (kind spec))
+
+;;; Setting up the reader macro.
+
+(defun |#T-reader| (stream subchar arg)
+ (declare (ignore subchar arg))
+ (let ((spec (read stream t nil t)))
+ (typecase spec
+ (null (make-template nil spec))
+ (cons (make-template (first spec) spec))
+ (t (make-template spec spec)))))
+
+
+(eval-when (:load-toplevel :execute)
+ (set-dispatch-macro-character #\# #\T #'|#T-reader|))
+
+(defmethod make-template ((kind null) (spec symbol))
+ (assert (null spec) (spec) "MAKE-TEMPLATE called erroneously with ~S and ~S." kind spec)
+ (make-instance 'nil-template :spec spec))
+
+(defmethod make-template ((kind symbol) (spec symbol))
+ (make-instance 'symbol-template :spec spec))
+
+(defmethod make-template ((kind (eql 'symbol)) (spec cons))
+ (make-instance 'symbol-template :spec spec))
+
+(defmethod make-template ((kind symbol) (spec cons))
+ (cond ((subtypep kind 'number)
+ (make-instance 'number-template :spec spec))
+ ((subtypep kind 'structure-object)
+ (make-instance 'structure-object-template :spec spec))
+ ((subtypep kind 'standard-object)
+ (make-instance 'standard-object-template :spec spec))
+ (t
+ (error 'unification-template-error
+ :format-control "Unknown template specifier ~S."
+ :format-arguments (list kind)))
+ ))
+
+(defmethod make-template ((kind cons) (spec cons))
+ (cond ((subtypep kind 'number)
+ (make-instance 'number-template :spec spec))
+ ((subtypep kind 'string)
+ (make-instance 'string-template :spec spec))
+ ((subtypep kind 'vector)
+ (make-instance 'vector-template :spec spec))
+ ((subtypep kind 'array)
+ (make-instance 'array-template :spec spec))
+ (t
+ (error 'unification-template-error
+ :format-control "Unknown template specifier ~S."
+ :format-arguments (list kind)))
+ ))
+
+(defmethod make-template ((kind number) (spec number))
+ (assert (= kind spec))
+ (make-instance 'number-template :spec spec))
+
+(defmethod make-template ((kind (eql 'sequence)) (spec cons))
+ (make-instance 'sequence-template :spec spec))
+
+(defmethod make-template ((kind (eql 'list)) (spec cons))
+ (make-instance 'list-template :spec spec))
+
+(defmethod make-template ((kind (eql 'vector)) (spec cons))
+ (make-instance 'vector-template :spec spec))
+
+(defmethod make-template ((kind (eql 'string)) (spec cons))
+ (make-instance 'string-template :spec spec))
+
+(defmethod make-template ((kind (eql 'array)) (spec cons))
+ (make-instance 'array-template :spec spec))
+
+
+(defmethod make-template ((kind (eql 'subseq)) (spec cons))
+ (make-instance 'subseq-template :spec spec))
+
+(defmethod make-template ((kind (eql 'elt)) (spec cons))
+ (make-instance 'elt-template :spec spec))
+
+(defmethod make-template ((kind (eql 'aref)) (spec cons))
+ (make-instance 'aref-template :spec spec))
+
+(defmethod make-template ((kind (eql 'nth)) (spec cons))
+ (make-instance 'nth-template :spec spec))
+
+(defmethod make-template ((kind (eql 'nthcdr)) (spec cons))
+ (make-instance 'nthcdr-template :spec spec))
+
+
+
+
+;;; Implementation.
+
+;;; Symbol Templates.
+;;; Specification is
+;;;
+;;; (symbol <symbol>)
+
+(defun symbol-template-symbol (x)
+ (declare (type symbol-template x))
+ (assert (symbol-template-p x) (x) "Non symbol template ~S." x)
+ (let ((spec (template-spec x)))
+ (cond ((symbolp spec) spec)
+ ((consp spec) (second spec)))))
+
+
+;;; Number template
+;;; Specification is
+;;;
+;;; (<number type> <number>)
+;;; or
+;;;
+;;; <number>
+
+(defun number-template-number (x)
+ (declare (type number-template x))
+ (assert (number-template-p x) (x) "Non number template ~S." x)
+ (let ((spec (template-spec x)))
+ (etypecase spec
+ (symbol spec)
+ (number spec)
+ (cons (second spec)))))
+
+
+;;; Sequence Templates.
+;;; Specification is
+;;;
+;;; (<sequence subtype> . <destructuring template lambda list>)
+;;; or
+;;; (subseq <from> <to> . <destructuring template lambda list>)
+
+(defun sequence-template-lambda-list (x)
+ (declare (type sequence-template x))
+ (assert (sequence-template-p x) (x) "Non sequence template ~S." x)
+ (rest (template-spec x)))
+
+
+;;; Vector Templates.
+;;; Specification is
+;;;
+;;; (<vector type specifier> . <destructuring template lambda list>)
+
+(defun vector-template-element-type (x)
+ (declare (type vector-template x))
+ (assert (vector-template-p x) (x) "Non vector template ~S." x)
+ (let ((spec (type-template-type-spec x)))
+ (if (consp spec)
+ (destructuring-bind (vector-kwd &optional (element-type '*) size)
+ spec
+ (declare (ignore vector-kwd size))
+ element-type)
+ '*)))
+
+
+(defun vector-template-size (x)
+ (declare (type vector-template x))
+ (assert (vector-template-p x) (x) "Non vector template ~S." x)
+ (let ((spec (type-template-type-spec x)))
+ (if (consp spec)
+ (destructuring-bind (vector-kwd &optional element-type (size '*))
+ spec
+ (declare (ignore vector-kwd element-type))
+ size)
+ '*)))
+
+
+;;; Array Templates.
+;;; Specification is
+;;;
+;;; (array (['*' | <element type>] [<dimension spec>]) <shape template>)
+;;; or
+;;; (<array type specifier> <shape template>)
+
+
+(defun array-template-shape-template (x)
+ (declare (type array-template x))
+ (assert (array-template-p x) (x) "Non array template ~S." x)
+ (let ((t-spec (template-spec x)))
+ (if (= 2 (list-length t-spec))
+ (second t-spec)
+ (third t-spec))))
+
+
+(defun array-template-element-type (x)
+ (declare (type array-template x))
+ (assert (array-template-p x) (x) "Non array template ~S." x)
+ (let ((type-spec (type-template-type-spec x)))
+ (if (consp type-spec)
+ (destructuring-bind (array-kwd &optional (element-type '*) dimension-spec)
+ type-spec
+ (declare (ignore array-kwd dimension-spec))
+ element-type)
+ '*)))
+
+
+(defun array-template-dimensions (x)
+ (declare (type array-template x))
+ (assert (array-template-p x) (x) "Non array template ~S." x)
+ (let ((type-spec (type-template-type-spec x)))
+ (if (consp type-spec)
+ (destructuring-bind (array-kwd &optional element-type (dimension-spec '*))
+ type-spec
+ (declare (ignore array-kwd element-type))
+ dimension-spec)
+ '*)))
+
+
+
+;;; Structure and Standard Object Templates.
+
+(defun structure-object-template-slots (x)
+ (and (structure-object-template-p x)
+ (rest (template-spec x))))
+
+
+(defun standard-object-template-slots (x)
+ (and (standard-object-template-p x)
+ (rest (template-spec x))))
+
+
+;;;---------------------------------------------------------------------------
+;;; Expression Templates.
+
+
+;;; AREF Templates.
+
+(defun aref-template-indexes (x)
+ (declare (type aref-template x))
+ (assert (aref-template-p x) (x) "Non aref template ~S." x)
+ (let ((spec (template-spec x)))
+ (second spec)))
+
+
+(defun aref-template-element (x)
+ (declare (type aref-template x))
+ (assert (aref-template-p x) (x) "Non array template ~S." x)
+ (let ((spec (template-spec x)))
+ (third spec)))
+
+
+
+
+;;;===========================================================================
+;;; Template variables.
+;;; Let's walk down a template.
+;;; Note that there is an asymmetry here: I admit some containers to have
+;;; variables inside, but I do not search instances of a class for variables.
+;;; This is an asymmetry that would be way too hard to fix without more
+;;; introspective power (which is available in the MOP, but not standard.)
+
+(defgeneric collect-template-vars (template))
+
+(defmethod collect-template-vars ((template template))
+ (let ((spec (template-spec template)))
+ (nconc (collect-template-vars (car spec))
+ (collect-template-vars (cdr spec)))))
+
+(defmethod collect-template-vars ((template symbol-template))
+ (let ((template (symbol-template-symbol template)))
+ (when (and (variablep template) (not (variable-any-p template)))
+ (list template))))
+
+
+(defmethod collect-template-vars ((template number-template))
+ (let ((template (number-template-number template)))
+ (etypecase template
+ (number ())
+ (symbol (cond ((variablep template) template)
+ ((and (boundp template)
+ (numberp (symbol-value template)))
+ (symbol-value template))
+ (t
+ (error "Invalid number template ~S." template)))))))
+
+
+(defmethod collect-template-vars ((template symbol))
+ (when (and (variablep template) (not (variable-any-p template)))
+ (list template)))
+
+(defmethod collect-template-vars ((template null))
+ ())
+
+(defmethod collect-template-vars ((template cons))
+ (nconc (collect-template-vars (car template))
+ (collect-template-vars (cdr template))))
+
+(defmethod collect-template-vars ((template string))
+ ())
+
+
+(defmethod collect-template-vars ((template vector))
+ (loop for e across template
+ nconc (collect-template-vars e)))
+
+
+(defmethod collect-template-vars ((template array))
+ (loop for i below (array-total-size template)
+ nconc (collect-template-vars (row-major-aref template i))))
+
+
+(defmethod collect-template-vars ((template t))
+ ())
+
+;;; end of file -- templates.lisp --
adddir ./test
addfile ./test/unification-tests.lisp
hunk ./test/unification-tests.lisp 1
+;;;; -*- Mode: Lisp -*-
+
+;;;; unification-tests.lisp --
+;;;; CL-UNIFICATION test suite. Requires Franz's util.test package.
+
+(in-package "UNIFY.TESTS")
+
+(use-package "UNIFY")
+(use-package "UTIL.TEST")
+
+(with-tests (:name "basic constant unification")
+ (test t (unify:environment-p (unify 42 42)))
+
+ (test-error (unify 42 12) :condition-type 'unification-failure)
+
+ (test-error (unify 42 'a) :condition-type 'unification-failure)
+
+ (test t (unify:environment-p (unify 'a 'a)))
+
+ (test t (unify:environment-p (unify '(a s d) '(a s d))))
+
+ (test t (unify:environment-p (unify '(a (s 42) d) '(a (s 42) d))))
+
+ (test-error (unify '(a (s forty-two) d) '(a (s 42) z))
+ :condition-type 'unification-failure)
+
+ (test t (unify:environment-p (unify #(a s d) #(a s d))))
+
+ (test t (unify:environment-p (unify #2a((a s d) (a s d))
+ #2a((a s d) (a s d)))))
+
+ (test-error (unify #2a((a s d) (a s d))
+ #2a((a s d) (a 42 d)))
+ :condition-type 'unification-failure)
+
+ (test t (unify:environment-p (unify "I am a string" "I am a string")))
+
+ (test-error (unify "I am a string" "I am A string")
+ :condition-type 'unification-failure)
+
+ (test t (let ((*unify-string-case-insensitive-p* t))
+ (unify:environment-p (unify "I am a string" "I am A string"))))
+
+ )
+
+
+(with-tests (:name "variables unification")
+ (test '(42 T) (find-variable-value '?x (unify 42 '?x))
+ :multiple-values t)
+ (test '(NIL NIL) (find-variable-value '?y (unify 42 '?x))
+ :multiple-values t)
+
+ (test '(42 T) (find-variable-value '?x (unify '?x 42))
+ :multiple-values t)
+
+ (test '(s T) (v? '?x (unify '(a (?x 42) d) '(a (s 42) d)))
+ :multiple-values t)
+ (test '(s T) (v? '?x (unify '(a (?x 42) d) '(a (s 42) d)))
+ :multiple-values t)
+
+ (test '((?x 42) T) (v? '?z (unify '(a (?x 42) d) '(a ?z d)))
+ :multiple-values t :test 'equal)
+
+ (test '(NIL T) (v? '?x (unify '(a (?x 42) d) '(a (() 42) d)))
+ :multiple-values t)
+
+ (test '(NIL NIL) (v? '?variable (unify '(a (() 42) d) '(a (?x 42) d)))
+ :multiple-values t)
+
+ (test t (unify:environment-p (unify '_ '(1 2 3))))
+
+ (test t (unify:environment-p (unify '_ '(1 _ 3))))
+
+ (test t (unify:environment-p (unify '(1 2 _) '(1 _ 3))))
+
+ (test t (unify:environment-p (unify '(1 2 _) '(1 _ 3))))
+
+ (test '(2 T) (v? '?x (unify #(1 2 _) #(1 ?x 3)))
+ :multiple-values t)
+
+ (test-error (unify '(1 2 _) #(1 _ 3))
+ :condition-type 'unification-failure
+ :known-failure t
+ :fail-info "Unification on SEQUENCEs does not discriminate type.")
+ )
+
+
+(with-tests (:name "basic templates unification")
+
+ (with-tests (:name "number templates unification")
+ (test t (unify:environment-p (unify #T(number 42) 42)))
+ (test t (unify:environment-p (unify 42 #T(number 42))))
+ (test t (unify:environment-p (unify 42 #T(integer 42))))
+ (test t (unify:environment-p (unify 42 #T(fixnum 42))))
+
+ (test t (unify:environment-p (unify 42.0 #T(real 42))))
+ (test t (unify:environment-p (unify #C(0 1) #T(complex #C(0 1)))))
+
+ (test '(42 T) (v? '?x (unify #T(number ?x) 42)) :multiple-values t)
+
+ (test-error (unify 42 #T(float 42.0))
+ :condition-type 'unification-failure
+ :known-failure t
+ :fail-info "Check rules for unification on numeric tower.")
+ )
+ )
+
+
+(defclass test1 ()
+ ((a :initarg :a :accessor a)
+ (b :initarg :b :accessor b)))
+
+(defstruct s-root a)
+(defstruct (s-child (:include s-root)) b)
+
+(with-tests (:name "advanced templates unification")
+
+ (test '(a T) (v? '?x (unify #2A((1 #T(symbol ?x) 3) (_ _ _))
+ #2A((1 a 3) (q w e))))
+ :multiple-values t)
+
+ (test '(#\Space T) (ignore-errors (v? '?x (unify "This is a string!" #T(elt 4 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (ignore-errors (v? '?x (unify '(0 1 42 3 4 5) #T(nth 2 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (ignore-errors (v? '?x (unify '(0 1 42 3 4 5) #T(elt 2 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (ignore-errors (v? '?x (unify #(0 1 42 3 4 5) #T(aref 2 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (ignore-errors (v? '?x (unify #(0 1 42 3 4 5) #T(elt 2 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (v? '?x (unify #2a((0 1 42 3 4 5)) #T(aref (0 2) ?x)))
+ :multiple-values t)
+
+ (test '(42 T) (v? '?x (unify #T(aref (0 2) 42) #2a((0 1 ?x 3 4 5))))
+ :multiple-values t)
+
+ (test '(42 T) (v? '?x (unify #2a((0 1 ?x 3 4 5)) #T(aref (0 2) 42)))
+ :multiple-values t)
+
+ (test-error (unify #(0 1 42 3 4 5) #T(nth 2 ?x))
+ :condition-type 'unification-failure
+ :announce t)
+
+ (test '(foo (1) (2) (3)) (let ((result-env (unify '(0 1 #T(list foo _ &rest ?z) 42)
+ '(0 1 (?y bar (1) (2) (3)) 42)))
+ )
+ (cons (v? '?y result-env)
+ (v? '?z result-env)))
+ :test #'equal)
+
+ (test '(2 T) (v? '?x (unify #T(test1 a #T(list 1 ?x 3 &rest) b "woot")
+ (make-instance 'test1 :a '(1 2 3) :b "woot")))
+ :multiple-values t)
+
+ (test-error (unify #T(s-root s-root-a '(1 ?x 3 4))
+ (make-s-root :a '(1 2 3 4)))
+ :condition-type 'unification-failure
+ :announce t
+ ;; #T reader non evaluating sub forms.
+ )
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a #T(list 1 ?x 3 4))
+ (make-s-root :a '(1 2 3 4))))
+ :multiple-values t)
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a (1 ?x 3 4))
+ (make-s-root :a '(1 2 3 4))))
+ :multiple-values t)
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a #T(list 1 ?x 3 &rest))
+ (make-s-root :a '(1 2 3 4))))
+ :multiple-values t)
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a #(1 ?x 3 4))
+ (make-s-root :a #(1 2 3 4))))
+ :multiple-values t)
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a #T(vector 1 ?x 3 &rest))
+ (make-s-root :a #(1 2 3 4))))
+ :multiple-values t)
+
+ )
+
+
+(defun nested-match-cases (input)
+ (match-case (input)
+ ('(:a ?a :b #T(list &rest ?bs))
+ (loop for b in ?bs
+ collect (match-case (b)
+ ('(:c ?c) ?c)
+ ('(:d ?d) ?d)
+ (otherwise (error "error-inner")))))
+ (otherwise (error "error-outer"))))
+
+(with-tests (:name "control flow")
+ (test-error (nested-match-cases '(:a 42 :b 33)) :announce t)
+
+ (test-error (nested-match-cases '(:a 42 :b (33 42))) :announce t)
+
+ (test '(42 43 44) (nested-match-cases '(:a 42 :b ((:d 42) (:c 43) (:c 44))))
+ :test #'equal)
+ )
+
+
+;;;; end of file -- unification-tests.lisp --
addfile ./unification-package.lisp
hunk ./unification-package.lisp 1
+;;; -*- Mode: Lisp -*-
+
+(defpackage "CL.EXT.DACF.UNIFICATION" (:use "CL")
+ (:nicknames "UNIFY")
+ (:documentation "The CL.EXT.DACF.UNIFICATION Package.
+This package contains all the definitions necessary for the general
+Common Lisp unifier to work.
+The package also has the \"UNIFY\" nickname.")
+ (:export
+ "MAKE-TEMPLATE"
+ "TEMPLATEP"
+ "TEMPLATE-SPEC")
+ (:export
+ "*UNIFY-STRING-CASE-INSENSITIVE-P*"
+ "UNIFY"
+ "FIND-VARIABLE-VALUE"
+ "MAKE-EMPTY-ENVIRONMENT")
+ (:export
+ "MATCH"
+ "MATCHING"))
+
+;;; end of file -- unification-package.lisp --
addfile ./unification.system
hunk ./unification.system 1
+;;; -*- Mode: Lisp -*-
+
+(mk:defsystem "UNIFICATION"
+ :components ("unification-package"
+ "variables"
+ "substitutions"
+ "lambda-list-parsing"
+ "templates-hierarchy"
+ "unifier"
+ "match-block"))
+ [_$_]
+;;; end of file -- unification.system --
addfile ./unifier.lisp
hunk ./unifier.lisp 1
+;;; -*- Mode: Lisp -*-
+
+;;; unifier.lisp
+;;; General CL structures unifier.
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+(defgeneric unify (a b &optional env)
+ (:documentation
+ "Unifies two objects A and B given a substitution ENV.
+A is a Common Lisp object and B is either a Common Lisp object or a
+\"template\", A and B can be commuted.
+
+The unification rules are rather complex. Each method of the generic
+function implements a specific rule of unification.
+
+The generic function returns a `substitution' upon success or it
+signals a UNIFICATION-FAILURE condition upon failure."))
+
+
+
+;;;===========================================================================
+;;; Simple, non template methods.
+
+(defmethod unify ((a symbol) (b list) &optional (env (make-empty-environment)))
+ "Unifies a symbol A and a list B in an environment ENV.
+If A is not a variable then an error of type UNIFICATION-FAILURE is
+signaled. If A is a unification variable, then the environment ENV is
+extended with a binding for A to B, unless the occurrence check is
+called and fails, in which case an error is signaled."
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a symbol with a list: ~S ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((b list) (a symbol) &optional (env (make-empty-environment)))
+ "Unifies a symbol B and a list A in an environment ENV.
+If A is not a variable then an error of type UNIFICATION-FAILURE is
+signaled. If A is a unification variable, then the environment ENV is
+extended with a binding for A to B, unless the occurrence check is
+called and fails, in which case an error is signaled."
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a list with a symbol: ~S ~S."
+ :format-arguments (list b a)))))
+
+
+(defmethod unify ((a list) (b list) &optional (env (make-empty-environment)))
+ "Unifies a list A and a list B in an environment ENV.
+The unification procedure proceedes recursively on each element of
+both lists. If two elements cannot be unified then an error of type
+UNIFICATION-FAILURE is signaled. Otherwise a possibly extended
+environment is returned."
+ (unify (rest a) (rest b) (unify (first a) (first b) env)))
+
+
+
+(defmethod unify ((a number) (b number) &optional (env (make-empty-environment)))
+ "Unifies two numbers A and B.
+Two numbers unify only if and only if they are equal as per the function #'=, in
+which case an unmodified envirironment ENV is returned.
+Otherwise an error of type UNIFICATION-FAILURE is signalled.
+Of course, asking for unification of two floating point numbers may
+not yield the expected result."
+ (if (= a b)
+ env
+ (error 'unification-failure
+ :format-control "Cannot unify two different numbers: ~S ~S."
+ :format-arguments (list a b))))
+
+
+(defparameter *unify-string-case-insensitive-p* nil)
+
+(defmethod unify ((a string) (b string) &optional (env (make-empty-environment)))
+ "Unifies two strings A and B.
+Two strings A and B unify if and only if they satisfy either #'STRING= or
+#'STRING-EQUAL. The choice of which of test to perform (#'STRING= or #'STRING-EQUAL)
+is made according to the value of the variable
+*UNIFY-STRING-CASE-INSENSITIVE-P*, which defaults to NIL.
+If A and B unify then an unmodified environment ENV is returned,
+otherwise an error of type UNIFICATION-FAILURE is signaled."
+ (cond ((and *unify-string-case-insensitive-p* (string-equal a b))
+ env)
+ ((string= a b)
+ env)
+ (t
+ (error 'unification-failure
+ :format-control "Connot unify two different strings: ~S ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((a symbol) (b string) &optional (env (make-empty-environment)))
+ (cond ((variable-any-p a) env)
+ ((variablep a) (extend-environment a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a symbol with a string: ~S ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((b string) (a symbol) &optional (env (make-empty-environment)))
+ (cond ((variable-any-p a) env)
+ ((variablep a) (extend-environment a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a string with a symbol: ~S ~S."
+ :format-arguments (list b a)))))
+
+
+(defmethod unify ((a symbol) (b symbol) &optional (env (make-empty-environment)))
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ ((variable-any-p b) env)
+ ((variablep b) (var-unify b a env))
+ ((eq a b) env)
+ (t (error 'unification-failure
+ :format-control "Cannot unify two different symbols: ~S ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((a symbol) (b t) &optional (env (make-empty-environment)))
+ (cond ((variable-any-p a) env)
+ ((variablep a) (extend-environment a b env))
+ (t (call-next-method))))
+
+
+(defmethod unify ((b t) (a symbol) &optional (env (make-empty-environment)))
+ (cond ((variable-any-p a) env)
+ ((variablep a) (extend-environment a b env))
+ (t (call-next-method))))
+
+
+(defmethod unify ((a symbol) (b array) &optional (env (make-empty-environment)))
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a symbol with an array or vector: ~S and ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((b array) (a symbol) &optional (env (make-empty-environment)))
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify an array or vector with a symbol: ~S and ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((as vector) (bs vector) &optional (env (make-empty-environment)))
+ (unless (= (length as) (length bs))
+ (error 'unification-failure
+ :format-control "Cannot unify two vectors of different length: ~D and ~D."
+ :format-arguments (list (length as) (length bs))))
+ (loop for a across as
+ for b across bs
+ for mgu = (unify a b env) then (unify a b mgu)
+ finally (return mgu)))
+
+
+(defmethod unify ((s1 sequence) (s2 sequence) &optional (env (make-empty-environment)))
+ (unless (= (length s1) (length s2))
+ (error 'unification-failure
+ :format-control "Cannot unify two sequences of different length: ~D and ~D."
+ :format-arguments (list (length s1) (length s2))))
+ (loop for i from 0 below (length s1)
+ for j from 0 below (length s2)
+ for mgu = (unify (elt s1 i) (elt s2 j) env) then (unify (elt s1 i) (elt s2 j) mgu)
+ finally (return mgu)))
+
+
+
+(defgeneric untyped-unify (a b &optional env))
+
+(defmethod untyped-unify ((as list) (bs vector) &optional (env (make-empty-environment)))
+ (loop for a in as
+ for b across bs
+ for mgu = (unify a b env) then (unify a b mgu)
+ finally (return mgu)))
+
+
+(defmethod untyped-unify ((as vector) (bs list) &optional (env (make-empty-environment)))
+ (untyped-unify bs as env))
+
+(defmethod untyped-unify ((a t) (b t) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+(defmethod unify ((as array) (bs array) &optional (env (make-empty-environment)))
+ (unless (= (array-total-size as) (array-total-size bs))
+ (error 'unification-failure
+ :format-control "Cannot unify two arrays of different total size: ~D and ~D."
+ :format-arguments (list (array-total-size as) (array-total-size bs))))
+ (loop for ai from 0 below (array-total-size as)
+ for bi from 0 below (array-total-size bs)
+ for mgu = (unify (row-major-aref as ai) (row-major-aref bs bi) env)
+ then (unify (row-major-aref as ai) (row-major-aref bs bi) mgu)
+ finally (return mgu)))
+
+
+;;; Catch all method.
+
+(defmethod unify ((a t) (b t) &optional (env (make-empty-environment)))
+ (if (equalp a b)
+ env
+ (error 'unification-failure
+ :format-control "Cannot unify a ~S and a ~S: ~S ~S."
+ :format-arguments (list (type-of a) (type-of b) a b))))
+
+
+;;;===========================================================================
+;;; Templates methods.
+
+
+;;; valid-template-p --
+;;; Useful later. Tests whether the object X can be considered a template.
+
+(defun valid-template-p (x)
+ (or (symbolp x)
+ (consp x)
+ (numberp x)
+ (template-p x)))
+
+
+;;; Special catch all method.
+
+(defmethod unify ((x template) (y template) &optional (env (make-empty-environment)))
+ (error 'unification-failure
+ :format-control "Unification of two templates of type ~A and ~A has not been yet implemented."
+ :format-arguments (list (class-name (class-of x))
+ (class-name (class-of y)))))
+
+
+;;;---------------------------------------------------------------------------
+;;; NIL special unification methods.
+
+(defmethod unify ((x null) (nt nil-template) &optional (env (make-empty-environment)))
+ env)
+
+
+(defmethod unify ((nt nil-template) (x null) &optional (env (make-empty-environment)))
+ env)
+
+
+(defmethod unify ((nt1 nil-template) (nt2 nil-template) &optional (env (make-empty-environment)))
+ env)
+
+
+;;;---------------------------------------------------------------------------
+;;; Symbol methods.
+
+(defmethod unify ((a symbol) (b symbol-template) &optional (env (make-empty-environment)))
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (unify a (symbol-template-symbol b) env))))
+
+
+(defmethod unify ((b symbol-template) (a symbol) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+(defmethod unify ((a symbol) (b template) &optional (env (make-empty-environment)))
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify symbol ~S with template ~S."
+ :format-arguments (list a b)))
+
+(defmethod unify ((b template) (a symbol) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+
+;;;---------------------------------------------------------------------------
+;;; Number template methods.
+
+(defmethod unify ((a number) (b number-template) &optional (env (make-empty-environment)))
+ (unify a (number-template-number b) env))
+
+
+(defmethod unify ((b number-template) (a number) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+(defmethod unify ((a number) (b template) &optional (env (make-empty-environment)))
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify the number ~S with template ~S."
+ :format-arguments (list a b)))
+
+(defmethod unify ((b template) (a number) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Sequence (List) template methods
+
+(defmethod unify ((a sequence) (b template) &optional (env (make-empty-environment)))
+ (error 'unification-failure
+ :format-control "Cannot unify a sequence with a non sequence or non sequence access template: ~S ~S."
+ :format-arguments (list a b)))
+
+
+(defmethod unify ((b template) (a sequence) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+;;; The next is incomplete and does not signal appropriate errors.
+
+(defmethod unify ((a list) (b template) &optional (env (make-empty-environment)))
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify a list with a non-list template: ~S ~S."
+ :format-arguments (list a b)))
+
+
+(defmethod unify ((a list) (b sequence-template) &optional (env (make-empty-environment)))
+ (let ((template-lambda-list (sequence-template-lambda-list b))
+ (ll (list-length a))
+ )
+ (multiple-value-bind (vars optionals keys rest)
+ (parse-extended-ordinary-lambda-list template-lambda-list
+ :ordinary-variable-test #'valid-template-p
+ :optional-variable-test #'valid-template-p
+ :key-variable-test #'valid-template-p
+ :rest-variable-test #'valid-template-p
+ )
+ [_$_]
+ (let* ((n-vars (list-length vars))
+ (n-optionals (list-length optionals))
+ (env (unify (subseq a 0 (list-length vars)) vars env))
+ )
+ (when (and optionals (>= ll (+ n-vars n-optionals)))
+ (setf env (unify (subseq a n-vars (+ n-vars n-optionals)) optionals env)))
+ (when (and rest (>= ll (+ n-vars n-optionals)))
+ (setf env (unify (subseq a (+ n-vars n-optionals)) (first rest) env)))
+ (when keys (warn "Sorry mathcing of keywords ~S not yet implemented." keys))
+ env
+ ))))
+
+
+
+(defmethod unify ((b template) (a list) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+
+;;;---------------------------------------------------------------------------
+;;; Vector template methods.
+
+(defmethod unify ((a vector) (b template) &optional (env (make-empty-environment)))
+ (error 'unification-failure
+ :format-control "Cannot unify a vector with a non-vector template: ~S ~S."
+ :format-arguments (list a b)))
+
+
+(defmethod unify ((a vector) (b vector-template) &optional (env (make-empty-environment)))
+ (let ((template-lambda-list (sequence-template-lambda-list b))
+ (vl (length a))
+ )
+ (multiple-value-bind (vars optionals keys rest)
+ (parse-extended-ordinary-lambda-list template-lambda-list
+ :ordinary-variable-test #'valid-template-p
+ :optional-variable-test #'valid-template-p
+ :key-variable-test #'valid-template-p
+ :rest-variable-test #'valid-template-p
+ )
+ [_$_]
+ (let ((n-vars (list-length vars))
+ (n-optionals (list-length optionals))
+ )
+ (loop for v in vars
+ for e across (subseq a 0 (list-length vars))
+ for mgu = (unify v e env) then (unify v e mgu)
+ finally (setf env mgu))
+ (when (and optionals (>= vl (+ n-vars n-optionals)))
+ (loop for v in optionals
+ for e across (subseq a n-vars (+ n-vars n-optionals))
+ for mgu = (unify v e env) then (unify v e mgu)
+ finally (setf env mgu)))
+ (when (and rest (>= vl (+ n-vars n-optionals)))
+ (setf env (unify (subseq a (+ n-vars n-optionals)) (first rest) env)))
+ (when keys (warn "Sorry matching of keywords ~S not yet implemented." keys))
+ env
+ ))))
+
+
+(defmethod unify ((b template) (a vector) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Array template methods.
+
+(defmethod unify ((a array) (b template) &optional (env (make-empty-environment)))
+ (error 'unification-failure
+ :format-control "Cannot unify an array with a non array or non array access template: ~S ~S."
+ :format-arguments (list a b)))
+
+(defmethod unify ((b template) (a array) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+(defun unify-array-row (array dims shape-template indexes env)
+ (cond ((null dims) env)
+ ((= (list-length dims) 1)
+ ;; Unify the row with the shape-template.
+ (let ((row (make-array (first dims)
+ :displaced-to array
+ :displaced-index-offset
+ (apply #'array-row-major-index array (append indexes (list 0))))))
+ (declare (dynamic-extent row)
+ (type array row))
+ (untyped-unify row shape-template env)))
+ (t
+ (loop for i from 0 below (first dims)
+ for row-template in shape-template
+ do (unify-array-row array
+ (rest dims)
+ row-template
+ (append indexes (list i))
+ env)
+ finally (return env)))
+ ))
+
+
+(defun unify-array-rows (array shape-template env)
+ (unify-array-row array (array-dimensions array) shape-template () env))
+
+
+(defmethod unify ((a array) (b array-template) &optional (env (make-empty-environment)))
+ (let ((template-spec (template-spec b)))
+ (if (= 2 (length template-spec))
+
+ ;; Template is (<array type specifier> <shape-template>)
+ (destructuring-bind (array-type-spec shape-template)
+ template-spec
+ (declare (ignore array-type-spec))
+ ;; Missing check for type-spec.
+ (unify-array-rows a shape-template env))
+
+ ;; Template is (array (['*' | <element type>] [<dimension spec>]) <shape template>)
+ (destructuring-bind (array-kwd type-spec shape-template)
+ template-spec
+ (declare (ignore array-kwd))
+ ;; Missing check for type-spec.
+ (unify-array-rows a shape-template env))
+ )))
+
+
+
+;;;---------------------------------------------------------------------------
+;;; Standard object template methods.
+
+(defmethod unify ((a standard-object) (b template) &optional (env (make-empty-environment)))
+ (error 'unification-failure
+ :format-control "Cannot unify a standard object with a non standard object template: ~S ~S."
+ :format-arguments (list a b)))
+
+#| Old version with heavy syntax
+(defmethod unify ((a standard-object) (b standard-object-template)
+ &optional (env (make-empty-environment)))
+ (destructuring-bind (class &rest template-slot-specs)
+ (template-spec b)
+ (unless (typep a class)
+ (error 'unification-failure
+ :format-control "Cannot unify an instance of ~S with a template for class ~S."
+ :format-arguments (list (class-of a) class)))
+ (flet ((slot-spec-unify (accessor-spec reader value-template mgu)
+ (ecase accessor-spec
+ (slot-value
+ (unify (slot-value a reader) value-template mgu))
+ (slot-accessor
+ (unify (funcall reader a) value-template mgu))))
+ )
+ (if template-slot-specs
+ (loop for (accessor-spec reader value-template) in template-slot-specs
+ for mgu = (slot-spec-unify accessor-spec reader value-template env)
+ then (slot-spec-unify accessor-spec reader value-template mgu)
+ finally (return mgu))
+ env))))
+|#
+
+
+(defmethod unify ((a standard-object) (b standard-object-template)
+ &optional (env (make-empty-environment)))
+ (destructuring-bind (class &rest template-slot-specs)
+ (template-spec b)
+ (unless (typep a class)
+ (error 'unification-failure
+ :format-control "Cannot unify an instance of ~S with a template for class ~S."
+ :format-arguments (list (class-of a) class)))
+ (flet ((slot-spec-unify (reader value-template mgu)
+ (etypecase reader
+ (list
+ (assert (eq (first reader) 'slot-value))
+ (unify (slot-value a (second reader)) value-template mgu))
+ ((or function symbol)
+ (unify (funcall reader a) value-template mgu))))
+ )
+ (if template-slot-specs
+ (loop for (reader value-template) on template-slot-specs by #'cddr
+ for mgu = (slot-spec-unify reader value-template env)
+ then (slot-spec-unify reader value-template mgu)
+ finally (return mgu))
+ env))))
+
+
+(defmethod unify ((b template) (a standard-object) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Structure object template methods.
+
+(defmethod unify ((a structure-object) (b template) &optional (env (make-empty-environment)))
+ (error 'unification-failure
+ :format-control "Cannot unify a structure object with a non structure object template: ~S ~S."
+ :format-arguments (list a b)))
+
+
+(defmethod unify ((a structure-object) (b structure-object-template)
+ &optional (env (make-empty-environment)))
+ (destructuring-bind (class &rest template-slot-specs)
+ (template-spec b)
+ (unless (typep a class)
+ (error 'unification-failure
+ :format-control "Cannot unify an instance of ~S with a template for structure ~S."
+ :format-arguments (list (class-of a) class)))
+ (if template-slot-specs
+ (loop for (reader value-template) on template-slot-specs by #'cddr
+ for mgu = (unify (funcall reader a) value-template env)
+ then (unify (funcall reader a) value-template mgu)
+ finally (return mgu))
+ env)))
+
+
+(defmethod unify ((b template) (a structure-object) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Expression template SUBSEQ methods.
+
+(defmethod unify ((a sequence) (b subseq-template) &optional (env (make-empty-environment)))
+ (destructuring-bind (subseq-kwd from to &rest spec)
+ (template-spec b)
+ (let* ((seq-type (type-of a))
+ (seq-template-kind (if (symbolp seq-type) seq-type (first seq-type))) ; Stupid FTTB.
+ )
+ (unify (subseq a from to) (make-template seq-template-kind `(,seq-template-kind ,@spec))))))
+
+
+(defmethod unify ((b subseq-template) (a sequence) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Expression template AREF methods.
+
+(defmethod unify ((a array) (b aref-template) &optional (env (make-empty-environment)))
+ (destructuring-bind (aref-kwd indexes value-template)
+ (template-spec b)
+ (declare (ignore aref-kwd))
+ ;; Missing check on index spec.
+ (unless (consp indexes)
+ (setf indexes (list indexes)))
+ (unify (apply #'aref a indexes) value-template env)))
+
+
+;;;---------------------------------------------------------------------------
+;;; VAR-UNIFY
+
+(defparameter *occurrence-check-p* t)
+
+(defgeneric occurs-in-p (var pat env))
+
+(defun var-unify (var pat env)
+ (if (eq var pat)
+ env
+ (multiple-value-bind (value foundp)
+ (find-variable-value var env)
+ (cond (foundp
+ (unify value pat env))
+ ((and *occurrence-check-p*
+ (occurs-in-p var pat env))
+ (error 'unification-failure
+ :format-control "Variable ~S occurs in ~S."
+ :format-arguments (list var pat)))
+ (t
+ (extend-environment var pat env))))))
+
+
+
+#|
+(defmethod occurs-in-p ((var symbol) pat env)
+ (cond ((variablep pat)
+ (or (eq var pat)
+ (multiple-value-bind (value foundp)
+ (find-variable-value pat env)
+ (when foundp
+ (occurs-in-p var value env)))
+ ))
+ ((atom pat) nil)
+ ((consp pat)
+ (or (occurs-in-p var (first pat) env)
+ (occurs-in-p var (rest pat) env)))
+ (t
+ (error "unimplemented"))))
+|#
+
+(defmethod occurs-in-p ((var symbol) (pat symbol) env)
+ (when (variablep pat)
+ (or (eq var pat)
+ (multiple-value-bind (value foundp)
+ (find-variable-value pat env)
+ (when foundp
+ (occurs-in-p var value env)))
+ )))
+
+(defmethod occurs-in-p ((var symbol) (pat list) env)
+ (or (occurs-in-p var (first pat) env)
+ (occurs-in-p var (rest pat) env)))
+
+(defmethod occurs-in-p ((var symbol) (pat array) env)
+ (loop for i from 0 below (array-total-size pat)
+ thereis (occurs-in-p var (row-major-aref pat i) env)))
+
+
+(defmethod occurs-in-p ((var symbol) (pat vector) env) ; This may be faster than the above.
+ (some #'(lambda (x) (occurs-in-p var x env)) pat))
+
+
+(defmethod occurs-in-p ((var symbol) (pat string) env) ; This is useless, but it's here for completeness.
+ (declare (ignore env))
+ nil)
+
+
+(defmethod occurs-in-p ((var symbol) (pat number) env)
+ (declare (ignore env))
+ nil)
+
+
+(defmethod occurs-in-p ((var symbol) (pat t) env)
+ (declare (ignore env))
+ (warn "Occurrence test unimplemented for pattern ~S of type ~S; returning false."
+ pat
+ (type-of pat))
+ nil)
+
+
+(defmethod occurs-in-p ((var t) (pat t) env)
+ (declare (ignore env))
+ (error "Occurrence test called on a non symbol ~S. Major problem."
+ var))
+
+;;; end of file -- unifier.lisp --
addfile ./variables.lisp
hunk ./variables.lisp 1
+;;; -*- Mode: Lisp -*-
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+(defun variablep (x)
+ (and (symbolp x)
+ (or (char= (char (symbol-name x) 0) #\?)
+ (string= x "_"))))
+
+(defun variable-any-p (x)
+ (and (symbolp x)
+ (or (string= x "_")
+ (string= x "?_"))))
+
+
+;;; end of file -- variables.lisp --