diff options
Diffstat (limited to 'libs/cairo-1.16.0/util')
72 files changed, 39468 insertions, 0 deletions
diff --git a/libs/cairo-1.16.0/util/COPYING b/libs/cairo-1.16.0/util/COPYING new file mode 100644 index 0000000..ea44bb6 --- /dev/null +++ b/libs/cairo-1.16.0/util/COPYING @@ -0,0 +1,4 @@ +Cairo is free software. + +These utilities are all free software, please see the licensing conditions +in the opening comments of each file. diff --git a/libs/cairo-1.16.0/util/Makefile.am b/libs/cairo-1.16.0/util/Makefile.am new file mode 100644 index 0000000..82d0a80 --- /dev/null +++ b/libs/cairo-1.16.0/util/Makefile.am @@ -0,0 +1,102 @@ +include $(top_srcdir)/build/Makefile.am.common + +SUBDIRS = . cairo-missing + +if CAIRO_HAS_GOBJECT_FUNCTIONS +SUBDIRS += cairo-gobject +endif + +if CAIRO_HAS_INTERPRETER +SUBDIRS += cairo-script +endif + +if CAIRO_HAS_TRACE +SUBDIRS += cairo-trace +if CAIRO_HAS_DLSYM +if CAIRO_HAS_SCRIPT_SURFACE +if CAIRO_HAS_TEE_SURFACE +SUBDIRS += cairo-fdr +endif +endif +endif +endif + +if BUILD_SPHINX +if CAIRO_HAS_DLSYM +if CAIRO_HAS_SCRIPT_SURFACE +if CAIRO_HAS_TEE_SURFACE +SUBDIRS += cairo-sphinx +endif +endif +endif +endif + +AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_builddir)/src \ + -I$(top_srcdir)/util/cairo-script \ + $(CAIRO_CFLAGS) + +EXTRA_PROGRAMS += show-contour show-traps show-edges show-polygon show-events +if CAIRO_HAS_INTERPRETER +EXTRA_PROGRAMS += trace-to-xml xml-to-trace +endif + +trace_to_xml_LDADD = cairo-script/libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LDADD) + +xml_to_trace_LDADD = -lexpat + +show_traps_SOURCES = show-traps.c +show_traps_CFLAGS = $(gtk_CFLAGS) +#show_traps_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_traps_LDADD = $(gtk_LIBS) + +show_polygon_SOURCES = show-polygon.c +show_polygon_CFLAGS = $(gtk_CFLAGS) +#show_polygon_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_polygon_LDADD = $(gtk_LIBS) + +show_edges_SOURCES = show-edges.c +show_edges_CFLAGS = $(gtk_CFLAGS) +#show_edges_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_edges_LDADD = $(gtk_LIBS) + +show_contour_SOURCES = show-contour.c +show_contour_CFLAGS = $(gtk_CFLAGS) +#show_contour_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_contour_LDADD = $(gtk_LIBS) + +show_events_SOURCES = show-events.c +show_events_CFLAGS = $(gtk_CFLAGS) +#show_events_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_events_LDADD = $(gtk_LIBS) + +util: malloc-stats.so backtrace-symbols.so + +.la.so: + $(RM) $@ + $(LN_S) .libs/$*.so $@ + +CLEANFILES += *.so + +# The -rpath is needed to build shared objects that are not installed, +# ie. with EXTRA_LTLIBRARIES +AM_LDFLAGS = -module -avoid-version -export-dynamic -rpath /dev/null + +EXTRA_LTLIBRARIES += malloc-stats.la backtrace-symbols.la + +backtrace_symbols_la_LIBADD = -lbfd -liberty + +#malloc_stats_la_LIBADD = $(backtrace_symbols_la_LIBADD) backtrace-symbols.lo + +if HAVE_GTK +EXTRA_PROGRAMS += font-view +font_view_CFLAGS = $(gtk_CFLAGS) +font_view_LDADD = ../src/libcairo.la $(gtk_LIBS) +endif + +EXTRA_DIST += \ + COPYING \ + xr2cairo \ + cairo-api-update \ + cairo-view \ + waterfall diff --git a/libs/cairo-1.16.0/util/Makefile.in b/libs/cairo-1.16.0/util/Makefile.in new file mode 100644 index 0000000..0482e9d --- /dev/null +++ b/libs/cairo-1.16.0/util/Makefile.in @@ -0,0 +1,1437 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +EXTRA_PROGRAMS = show-contour$(EXEEXT) show-traps$(EXEEXT) \ + show-edges$(EXEEXT) show-polygon$(EXEEXT) show-events$(EXEEXT) \ + $(am__EXEEXT_1) $(am__EXEEXT_2) +TESTS = +check_PROGRAMS = +@CAIRO_HAS_GOBJECT_FUNCTIONS_TRUE@am__append_1 = cairo-gobject +@CAIRO_HAS_INTERPRETER_TRUE@am__append_2 = cairo-script +@CAIRO_HAS_TRACE_TRUE@am__append_3 = cairo-trace +@CAIRO_HAS_DLSYM_TRUE@@CAIRO_HAS_SCRIPT_SURFACE_TRUE@@CAIRO_HAS_TEE_SURFACE_TRUE@@CAIRO_HAS_TRACE_TRUE@am__append_4 = cairo-fdr +@BUILD_SPHINX_TRUE@@CAIRO_HAS_DLSYM_TRUE@@CAIRO_HAS_SCRIPT_SURFACE_TRUE@@CAIRO_HAS_TEE_SURFACE_TRUE@am__append_5 = cairo-sphinx +@CAIRO_HAS_INTERPRETER_TRUE@am__append_6 = trace-to-xml xml-to-trace + +#malloc_stats_la_LIBADD = $(backtrace_symbols_la_LIBADD) backtrace-symbols.lo +@HAVE_GTK_TRUE@am__append_7 = font-view +subdir = util +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \ + $(top_srcdir)/build/aclocal.compare.m4 \ + $(top_srcdir)/build/aclocal.enable.m4 \ + $(top_srcdir)/build/aclocal.float.m4 \ + $(top_srcdir)/build/aclocal.makefile.m4 \ + $(top_srcdir)/build/aclocal.pkg.m4 \ + $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \ + $(top_srcdir)/build/ltoptions.m4 \ + $(top_srcdir)/build/ltsugar.m4 \ + $(top_srcdir)/build/ltversion.m4 \ + $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/cairo-version.h \ + $(top_srcdir)/build/configure.ac.version \ + $(top_srcdir)/build/configure.ac.tools \ + $(top_srcdir)/build/configure.ac.features \ + $(top_srcdir)/build/configure.ac.warnings \ + $(top_srcdir)/build/configure.ac.system \ + $(top_srcdir)/build/configure.ac.analysis \ + $(top_srcdir)/build/configure.ac.noversion \ + $(top_srcdir)/build/configure.ac.pthread \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +backtrace_symbols_la_DEPENDENCIES = +backtrace_symbols_la_SOURCES = backtrace-symbols.c +backtrace_symbols_la_OBJECTS = backtrace-symbols.lo +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +malloc_stats_la_LIBADD = +malloc_stats_la_SOURCES = malloc-stats.c +malloc_stats_la_OBJECTS = malloc-stats.lo +@CAIRO_HAS_INTERPRETER_TRUE@am__EXEEXT_1 = trace-to-xml$(EXEEXT) \ +@CAIRO_HAS_INTERPRETER_TRUE@ xml-to-trace$(EXEEXT) +@HAVE_GTK_TRUE@am__EXEEXT_2 = font-view$(EXEEXT) +font_view_SOURCES = font-view.c +font_view_OBJECTS = font_view-font-view.$(OBJEXT) +am__DEPENDENCIES_1 = +@HAVE_GTK_TRUE@font_view_DEPENDENCIES = ../src/libcairo.la \ +@HAVE_GTK_TRUE@ $(am__DEPENDENCIES_1) +font_view_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(font_view_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_show_contour_OBJECTS = show_contour-show-contour.$(OBJEXT) +show_contour_OBJECTS = $(am_show_contour_OBJECTS) +show_contour_DEPENDENCIES = $(am__DEPENDENCIES_1) +show_contour_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(show_contour_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_show_edges_OBJECTS = show_edges-show-edges.$(OBJEXT) +show_edges_OBJECTS = $(am_show_edges_OBJECTS) +show_edges_DEPENDENCIES = $(am__DEPENDENCIES_1) +show_edges_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(show_edges_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_show_events_OBJECTS = show_events-show-events.$(OBJEXT) +show_events_OBJECTS = $(am_show_events_OBJECTS) +show_events_DEPENDENCIES = $(am__DEPENDENCIES_1) +show_events_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(show_events_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_show_polygon_OBJECTS = show_polygon-show-polygon.$(OBJEXT) +show_polygon_OBJECTS = $(am_show_polygon_OBJECTS) +show_polygon_DEPENDENCIES = $(am__DEPENDENCIES_1) +show_polygon_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(show_polygon_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_show_traps_OBJECTS = show_traps-show-traps.$(OBJEXT) +show_traps_OBJECTS = $(am_show_traps_OBJECTS) +show_traps_DEPENDENCIES = $(am__DEPENDENCIES_1) +show_traps_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(show_traps_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +trace_to_xml_SOURCES = trace-to-xml.c +trace_to_xml_OBJECTS = trace-to-xml.$(OBJEXT) +trace_to_xml_DEPENDENCIES = \ + cairo-script/libcairo-script-interpreter.la \ + $(top_builddir)/src/libcairo.la +xml_to_trace_SOURCES = xml-to-trace.c +xml_to_trace_OBJECTS = xml-to-trace.$(OBJEXT) +xml_to_trace_DEPENDENCIES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = backtrace-symbols.c malloc-stats.c font-view.c \ + $(show_contour_SOURCES) $(show_edges_SOURCES) \ + $(show_events_SOURCES) $(show_polygon_SOURCES) \ + $(show_traps_SOURCES) trace-to-xml.c xml-to-trace.c +DIST_SOURCES = backtrace-symbols.c malloc-stats.c font-view.c \ + $(show_contour_SOURCES) $(show_edges_SOURCES) \ + $(show_events_SOURCES) $(show_polygon_SOURCES) \ + $(show_traps_SOURCES) trace-to-xml.c xml-to-trace.c +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + check recheck distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red='[0;31m'; \ + grn='[0;32m'; \ + lgn='[1;32m'; \ + blu='[1;34m'; \ + mgn='[0;35m'; \ + brg='[1m'; \ + std='[m'; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +DIST_SUBDIRS = . cairo-missing cairo-gobject cairo-script cairo-trace \ + cairo-fdr cairo-sphinx +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build/Makefile.am.common \ + $(top_srcdir)/build/depcomp $(top_srcdir)/build/test-driver \ + COPYING README +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BFD_LIBS = @BFD_LIBS@ +CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_LDFLAGS = @CAIRO_LDFLAGS@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@ +CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@ +CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@ +CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@ +CAIRO_REQUIRES = @CAIRO_REQUIRES@ +CAIRO_TEST_MODE = @CAIRO_TEST_MODE@ +CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@ +CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@ +CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@ +CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@ +CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIND = @FIND@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ +GOBJECT_LIBS = @GOBJECT_LIBS@ +GREP = @GREP@ +GS = @GS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +LIBRSVG_LIBS = @LIBRSVG_LIBS@ +LIBS = @LIBS@ +LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@ +LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LTP = @LTP@ +LTP_GENHTML = @LTP_GENHTML@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@ +PKG_CONFIG = @PKG_CONFIG@ +POPPLER_CFLAGS = @POPPLER_CFLAGS@ +POPPLER_LIBS = @POPPLER_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHLIB_EXT = @SHLIB_EXT@ +SHM_LIBS = @SHM_LIBS@ +SHTOOL = @SHTOOL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +XARGS = @XARGS@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cogl_CFLAGS = @cogl_CFLAGS@ +cogl_LIBS = @cogl_LIBS@ +datadir = @datadir@ +datarootdir = @datarootdir@ +directfb_CFLAGS = @directfb_CFLAGS@ +directfb_LIBS = @directfb_LIBS@ +docdir = @docdir@ +drm_CFLAGS = @drm_CFLAGS@ +drm_LIBS = @drm_LIBS@ +dvidir = @dvidir@ +egl_CFLAGS = @egl_CFLAGS@ +egl_LIBS = @egl_LIBS@ +exec_prefix = @exec_prefix@ +gallium_DIR = @gallium_DIR@ +gl_CFLAGS = @gl_CFLAGS@ +gl_LIBS = @gl_LIBS@ +glesv2_CFLAGS = @glesv2_CFLAGS@ +glesv2_LIBS = @glesv2_LIBS@ +glesv3_CFLAGS = @glesv3_CFLAGS@ +glesv3_LIBS = @glesv3_LIBS@ +glib_CFLAGS = @glib_CFLAGS@ +glib_LIBS = @glib_LIBS@ +gtk_CFLAGS = @gtk_CFLAGS@ +gtk_LIBS = @gtk_LIBS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lzo_LIBS = @lzo_LIBS@ +mandir = @mandir@ +mesa_DIR = @mesa_DIR@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pixman_CFLAGS = @pixman_CFLAGS@ +pixman_LIBS = @pixman_LIBS@ +png_CFLAGS = @png_CFLAGS@ +png_LIBS = @png_LIBS@ +png_REQUIRES = @png_REQUIRES@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pthread_CFLAGS = @pthread_CFLAGS@ +pthread_LIBS = @pthread_LIBS@ +qt_CFLAGS = @qt_CFLAGS@ +qt_LIBS = @qt_LIBS@ +real_pthread_CFLAGS = @real_pthread_CFLAGS@ +real_pthread_LIBS = @real_pthread_LIBS@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +shm_LIBS = @shm_LIBS@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xcb_CFLAGS = @xcb_CFLAGS@ +xcb_LIBS = @xcb_LIBS@ +xcb_shm_CFLAGS = @xcb_shm_CFLAGS@ +xcb_shm_LIBS = @xcb_shm_LIBS@ +xlib_CFLAGS = @xlib_CFLAGS@ +xlib_LIBS = @xlib_LIBS@ +xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@ +xlib_xcb_LIBS = @xlib_xcb_LIBS@ +xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@ +xlib_xrender_LIBS = @xlib_xrender_LIBS@ +BUILT_SOURCES = +CLEANFILES = *.i *.s *.gch $(EXTRA_LTLIBRARIES) $(EXTRA_PROGRAMS) \ + $(check_PROGRAMS) *.so +DISTCLEANFILES = $(BUILT_SOURCES) +EXTRA_DIST = COPYING xr2cairo cairo-api-update cairo-view waterfall +EXTRA_LTLIBRARIES = malloc-stats.la backtrace-symbols.la +MAINTAINERCLEANFILES = Makefile.in +SUBDIRS = . cairo-missing $(am__append_1) $(am__append_2) \ + $(am__append_3) $(am__append_4) $(am__append_5) +AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_builddir)/src \ + -I$(top_srcdir)/util/cairo-script \ + $(CAIRO_CFLAGS) + +trace_to_xml_LDADD = cairo-script/libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LDADD) +xml_to_trace_LDADD = -lexpat +show_traps_SOURCES = show-traps.c +show_traps_CFLAGS = $(gtk_CFLAGS) +#show_traps_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_traps_LDADD = $(gtk_LIBS) +show_polygon_SOURCES = show-polygon.c +show_polygon_CFLAGS = $(gtk_CFLAGS) +#show_polygon_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_polygon_LDADD = $(gtk_LIBS) +show_edges_SOURCES = show-edges.c +show_edges_CFLAGS = $(gtk_CFLAGS) +#show_edges_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_edges_LDADD = $(gtk_LIBS) +show_contour_SOURCES = show-contour.c +show_contour_CFLAGS = $(gtk_CFLAGS) +#show_contour_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_contour_LDADD = $(gtk_LIBS) +show_events_SOURCES = show-events.c +show_events_CFLAGS = $(gtk_CFLAGS) +#show_events_LDADD = $(top_builddir)/src/libcairo.la $(gtk_LIBS) +show_events_LDADD = $(gtk_LIBS) + +# The -rpath is needed to build shared objects that are not installed, +# ie. with EXTRA_LTLIBRARIES +AM_LDFLAGS = -module -avoid-version -export-dynamic -rpath /dev/null +backtrace_symbols_la_LIBADD = -lbfd -liberty +@HAVE_GTK_TRUE@font_view_CFLAGS = $(gtk_CFLAGS) +@HAVE_GTK_TRUE@font_view_LDADD = ../src/libcairo.la $(gtk_LIBS) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .la .lo .log .o .obj .so .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/build/Makefile.am.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign util/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(top_srcdir)/build/Makefile.am.common $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +backtrace-symbols.la: $(backtrace_symbols_la_OBJECTS) $(backtrace_symbols_la_DEPENDENCIES) $(EXTRA_backtrace_symbols_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(backtrace_symbols_la_OBJECTS) $(backtrace_symbols_la_LIBADD) $(LIBS) + +malloc-stats.la: $(malloc_stats_la_OBJECTS) $(malloc_stats_la_DEPENDENCIES) $(EXTRA_malloc_stats_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(malloc_stats_la_OBJECTS) $(malloc_stats_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +font-view$(EXEEXT): $(font_view_OBJECTS) $(font_view_DEPENDENCIES) $(EXTRA_font_view_DEPENDENCIES) + @rm -f font-view$(EXEEXT) + $(AM_V_CCLD)$(font_view_LINK) $(font_view_OBJECTS) $(font_view_LDADD) $(LIBS) + +show-contour$(EXEEXT): $(show_contour_OBJECTS) $(show_contour_DEPENDENCIES) $(EXTRA_show_contour_DEPENDENCIES) + @rm -f show-contour$(EXEEXT) + $(AM_V_CCLD)$(show_contour_LINK) $(show_contour_OBJECTS) $(show_contour_LDADD) $(LIBS) + +show-edges$(EXEEXT): $(show_edges_OBJECTS) $(show_edges_DEPENDENCIES) $(EXTRA_show_edges_DEPENDENCIES) + @rm -f show-edges$(EXEEXT) + $(AM_V_CCLD)$(show_edges_LINK) $(show_edges_OBJECTS) $(show_edges_LDADD) $(LIBS) + +show-events$(EXEEXT): $(show_events_OBJECTS) $(show_events_DEPENDENCIES) $(EXTRA_show_events_DEPENDENCIES) + @rm -f show-events$(EXEEXT) + $(AM_V_CCLD)$(show_events_LINK) $(show_events_OBJECTS) $(show_events_LDADD) $(LIBS) + +show-polygon$(EXEEXT): $(show_polygon_OBJECTS) $(show_polygon_DEPENDENCIES) $(EXTRA_show_polygon_DEPENDENCIES) + @rm -f show-polygon$(EXEEXT) + $(AM_V_CCLD)$(show_polygon_LINK) $(show_polygon_OBJECTS) $(show_polygon_LDADD) $(LIBS) + +show-traps$(EXEEXT): $(show_traps_OBJECTS) $(show_traps_DEPENDENCIES) $(EXTRA_show_traps_DEPENDENCIES) + @rm -f show-traps$(EXEEXT) + $(AM_V_CCLD)$(show_traps_LINK) $(show_traps_OBJECTS) $(show_traps_LDADD) $(LIBS) + +trace-to-xml$(EXEEXT): $(trace_to_xml_OBJECTS) $(trace_to_xml_DEPENDENCIES) $(EXTRA_trace_to_xml_DEPENDENCIES) + @rm -f trace-to-xml$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(trace_to_xml_OBJECTS) $(trace_to_xml_LDADD) $(LIBS) + +xml-to-trace$(EXEEXT): $(xml_to_trace_OBJECTS) $(xml_to_trace_DEPENDENCIES) $(EXTRA_xml_to_trace_DEPENDENCIES) + @rm -f xml-to-trace$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xml_to_trace_OBJECTS) $(xml_to_trace_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backtrace-symbols.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/font_view-font-view.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc-stats.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show_contour-show-contour.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show_edges-show-edges.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show_events-show-events.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show_polygon-show-polygon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show_traps-show-traps.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trace-to-xml.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml-to-trace.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +font_view-font-view.o: font-view.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(font_view_CFLAGS) $(CFLAGS) -MT font_view-font-view.o -MD -MP -MF $(DEPDIR)/font_view-font-view.Tpo -c -o font_view-font-view.o `test -f 'font-view.c' || echo '$(srcdir)/'`font-view.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/font_view-font-view.Tpo $(DEPDIR)/font_view-font-view.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font-view.c' object='font_view-font-view.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(font_view_CFLAGS) $(CFLAGS) -c -o font_view-font-view.o `test -f 'font-view.c' || echo '$(srcdir)/'`font-view.c + +font_view-font-view.obj: font-view.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(font_view_CFLAGS) $(CFLAGS) -MT font_view-font-view.obj -MD -MP -MF $(DEPDIR)/font_view-font-view.Tpo -c -o font_view-font-view.obj `if test -f 'font-view.c'; then $(CYGPATH_W) 'font-view.c'; else $(CYGPATH_W) '$(srcdir)/font-view.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/font_view-font-view.Tpo $(DEPDIR)/font_view-font-view.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font-view.c' object='font_view-font-view.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(font_view_CFLAGS) $(CFLAGS) -c -o font_view-font-view.obj `if test -f 'font-view.c'; then $(CYGPATH_W) 'font-view.c'; else $(CYGPATH_W) '$(srcdir)/font-view.c'; fi` + +show_contour-show-contour.o: show-contour.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_contour_CFLAGS) $(CFLAGS) -MT show_contour-show-contour.o -MD -MP -MF $(DEPDIR)/show_contour-show-contour.Tpo -c -o show_contour-show-contour.o `test -f 'show-contour.c' || echo '$(srcdir)/'`show-contour.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_contour-show-contour.Tpo $(DEPDIR)/show_contour-show-contour.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-contour.c' object='show_contour-show-contour.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_contour_CFLAGS) $(CFLAGS) -c -o show_contour-show-contour.o `test -f 'show-contour.c' || echo '$(srcdir)/'`show-contour.c + +show_contour-show-contour.obj: show-contour.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_contour_CFLAGS) $(CFLAGS) -MT show_contour-show-contour.obj -MD -MP -MF $(DEPDIR)/show_contour-show-contour.Tpo -c -o show_contour-show-contour.obj `if test -f 'show-contour.c'; then $(CYGPATH_W) 'show-contour.c'; else $(CYGPATH_W) '$(srcdir)/show-contour.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_contour-show-contour.Tpo $(DEPDIR)/show_contour-show-contour.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-contour.c' object='show_contour-show-contour.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_contour_CFLAGS) $(CFLAGS) -c -o show_contour-show-contour.obj `if test -f 'show-contour.c'; then $(CYGPATH_W) 'show-contour.c'; else $(CYGPATH_W) '$(srcdir)/show-contour.c'; fi` + +show_edges-show-edges.o: show-edges.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_edges_CFLAGS) $(CFLAGS) -MT show_edges-show-edges.o -MD -MP -MF $(DEPDIR)/show_edges-show-edges.Tpo -c -o show_edges-show-edges.o `test -f 'show-edges.c' || echo '$(srcdir)/'`show-edges.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_edges-show-edges.Tpo $(DEPDIR)/show_edges-show-edges.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-edges.c' object='show_edges-show-edges.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_edges_CFLAGS) $(CFLAGS) -c -o show_edges-show-edges.o `test -f 'show-edges.c' || echo '$(srcdir)/'`show-edges.c + +show_edges-show-edges.obj: show-edges.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_edges_CFLAGS) $(CFLAGS) -MT show_edges-show-edges.obj -MD -MP -MF $(DEPDIR)/show_edges-show-edges.Tpo -c -o show_edges-show-edges.obj `if test -f 'show-edges.c'; then $(CYGPATH_W) 'show-edges.c'; else $(CYGPATH_W) '$(srcdir)/show-edges.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_edges-show-edges.Tpo $(DEPDIR)/show_edges-show-edges.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-edges.c' object='show_edges-show-edges.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_edges_CFLAGS) $(CFLAGS) -c -o show_edges-show-edges.obj `if test -f 'show-edges.c'; then $(CYGPATH_W) 'show-edges.c'; else $(CYGPATH_W) '$(srcdir)/show-edges.c'; fi` + +show_events-show-events.o: show-events.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_events_CFLAGS) $(CFLAGS) -MT show_events-show-events.o -MD -MP -MF $(DEPDIR)/show_events-show-events.Tpo -c -o show_events-show-events.o `test -f 'show-events.c' || echo '$(srcdir)/'`show-events.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_events-show-events.Tpo $(DEPDIR)/show_events-show-events.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-events.c' object='show_events-show-events.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_events_CFLAGS) $(CFLAGS) -c -o show_events-show-events.o `test -f 'show-events.c' || echo '$(srcdir)/'`show-events.c + +show_events-show-events.obj: show-events.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_events_CFLAGS) $(CFLAGS) -MT show_events-show-events.obj -MD -MP -MF $(DEPDIR)/show_events-show-events.Tpo -c -o show_events-show-events.obj `if test -f 'show-events.c'; then $(CYGPATH_W) 'show-events.c'; else $(CYGPATH_W) '$(srcdir)/show-events.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_events-show-events.Tpo $(DEPDIR)/show_events-show-events.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-events.c' object='show_events-show-events.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_events_CFLAGS) $(CFLAGS) -c -o show_events-show-events.obj `if test -f 'show-events.c'; then $(CYGPATH_W) 'show-events.c'; else $(CYGPATH_W) '$(srcdir)/show-events.c'; fi` + +show_polygon-show-polygon.o: show-polygon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_polygon_CFLAGS) $(CFLAGS) -MT show_polygon-show-polygon.o -MD -MP -MF $(DEPDIR)/show_polygon-show-polygon.Tpo -c -o show_polygon-show-polygon.o `test -f 'show-polygon.c' || echo '$(srcdir)/'`show-polygon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_polygon-show-polygon.Tpo $(DEPDIR)/show_polygon-show-polygon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-polygon.c' object='show_polygon-show-polygon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_polygon_CFLAGS) $(CFLAGS) -c -o show_polygon-show-polygon.o `test -f 'show-polygon.c' || echo '$(srcdir)/'`show-polygon.c + +show_polygon-show-polygon.obj: show-polygon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_polygon_CFLAGS) $(CFLAGS) -MT show_polygon-show-polygon.obj -MD -MP -MF $(DEPDIR)/show_polygon-show-polygon.Tpo -c -o show_polygon-show-polygon.obj `if test -f 'show-polygon.c'; then $(CYGPATH_W) 'show-polygon.c'; else $(CYGPATH_W) '$(srcdir)/show-polygon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_polygon-show-polygon.Tpo $(DEPDIR)/show_polygon-show-polygon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-polygon.c' object='show_polygon-show-polygon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_polygon_CFLAGS) $(CFLAGS) -c -o show_polygon-show-polygon.obj `if test -f 'show-polygon.c'; then $(CYGPATH_W) 'show-polygon.c'; else $(CYGPATH_W) '$(srcdir)/show-polygon.c'; fi` + +show_traps-show-traps.o: show-traps.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_traps_CFLAGS) $(CFLAGS) -MT show_traps-show-traps.o -MD -MP -MF $(DEPDIR)/show_traps-show-traps.Tpo -c -o show_traps-show-traps.o `test -f 'show-traps.c' || echo '$(srcdir)/'`show-traps.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_traps-show-traps.Tpo $(DEPDIR)/show_traps-show-traps.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-traps.c' object='show_traps-show-traps.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_traps_CFLAGS) $(CFLAGS) -c -o show_traps-show-traps.o `test -f 'show-traps.c' || echo '$(srcdir)/'`show-traps.c + +show_traps-show-traps.obj: show-traps.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_traps_CFLAGS) $(CFLAGS) -MT show_traps-show-traps.obj -MD -MP -MF $(DEPDIR)/show_traps-show-traps.Tpo -c -o show_traps-show-traps.obj `if test -f 'show-traps.c'; then $(CYGPATH_W) 'show-traps.c'; else $(CYGPATH_W) '$(srcdir)/show-traps.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/show_traps-show-traps.Tpo $(DEPDIR)/show_traps-show-traps.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='show-traps.c' object='show_traps-show-traps.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(show_traps_CFLAGS) $(CFLAGS) -c -o show_traps-show-traps.obj `if test -f 'show-traps.c'; then $(CYGPATH_W) 'show-traps.c'; else $(CYGPATH_W) '$(srcdir)/show-traps.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) all check check-am install install-am \ + install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-TESTS check-am clean clean-checkPROGRAMS clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ + uninstall uninstall-am + +.PRECIOUS: Makefile + + +util: malloc-stats.so backtrace-symbols.so + +.la.so: + $(RM) $@ + $(LN_S) .libs/$*.so $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libs/cairo-1.16.0/util/README b/libs/cairo-1.16.0/util/README new file mode 100644 index 0000000..39560a8 --- /dev/null +++ b/libs/cairo-1.16.0/util/README @@ -0,0 +1,67 @@ +Cairo Utilities +=============== + +There are a varieties of utilities we use with cairo. + + +backtrace-symbols +----------------- + +This is a small shared library designed to be preloaded by the +linker and its purpose is to make the backtrace_symbols() function +of glibc produce more useful source reference information. + +Build by: + + make backtrace-symbols.so + +and use by: + + LD_PRELOAD=$PWD/backtrace-symbols.so app-to-run + +This code should be contributed back to glibc at some point. + + +malloc-stats +------------ + +This is a small shared library designed to be preloaded by the +linker and its purpose is to make the malloc_stats() function +of glibc produce more useful information. + +Build by: + + make malloc-stats.so + +and use by: + + LD_PRELOAD=$PWD/malloc-stats.so app-to-run + +This works best when backtrace-symbols is in use. That is: + + LD_PRELOAD="$PWD/backtrace-symbols.so $PWD/malloc-stats.so" app-to-run + + +cairo-trace +----------- + +This tool can be used to trace all the cairo function calls made by an +applications. This is useful for either extracting a test case triggering +a bug from an application, or simply to get a general idea of how an +application is using cairo. + + +cairo-api-update and xr2cairo +----------------------------- + +These two scripts were used to convert source code written for pre-1.0 +cairo to newer API. See $(top_srcdir)/PORTING_GUIDE for more information. + +These files are obsolete now and may be removed in a future version. + + +cairo-view and waterfall +------------------------ + +These are two pycairo scripts useful for testing the toy font backend. + diff --git a/libs/cairo-1.16.0/util/backtrace-symbols.c b/libs/cairo-1.16.0/util/backtrace-symbols.c new file mode 100644 index 0000000..9931413 --- /dev/null +++ b/libs/cairo-1.16.0/util/backtrace-symbols.c @@ -0,0 +1,377 @@ +/* + A hacky replacement for backtrace_symbols in glibc + + backtrace_symbols in glibc looks up symbols using dladdr which is limited in + the symbols that it sees. libbacktracesymbols opens the executable and shared + libraries using libbfd and will look up backtrace information using the symbol + table and the dwarf line information. + + It may make more sense for this program to use libelf instead of libbfd. + However, I have not investigated that yet. + + Derived from addr2line.c from GNU Binutils by Jeff Muizelaar + + Copyright 2007 Jeff Muizelaar +*/ + +/* addr2line.c -- convert addresses to line number and function name + Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Contributed by Ulrich Lauther <Ulrich.Lauther@mchp.siemens.de> + + This file was part of GNU Binutils. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. */ + +#define fatal(a, b) exit(1) +#define bfd_fatal(a) exit(1) +#define bfd_nonfatal(a) exit(1) +#define list_matching_formats(a) exit(1) + +/* 2 characters for each byte, plus 1 each for 0, x, and NULL */ +#define PTRSTR_LEN (sizeof(void *) * 2 + 3) +#define true 1 +#define false 0 + +#define _GNU_SOURCE +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <execinfo.h> +#include <bfd.h> +#include <libiberty.h> +#include <dlfcn.h> +#include <link.h> +#if 0 + +void (*dbfd_init)(void); +bfd_vma (*dbfd_scan_vma)(const char *string, const char **end, int base); +bfd* (*dbfd_openr)(const char *filename, const char *target); +bfd_boolean (*dbfd_check_format)(bfd *abfd, bfd_format format); +bfd_boolean (*dbfd_check_format_matches)(bfd *abfd, bfd_format format, char ***matching); +bfd_boolean (*dbfd_close)(bfd *abfd); +bfd_boolean (*dbfd_map_over_sections)(bfd *abfd, void (*func)(bfd *abfd, asection *sect, void *obj), + void *obj); +#define bfd_init dbfd_init + +static void load_funcs(void) +{ + void * handle = dlopen("libbfd.so", RTLD_NOW); + dbfd_init = dlsym(handle, "bfd_init"); + dbfd_scan_vma = dlsym(handle, "bfd_scan_vma"); + dbfd_openr = dlsym(handle, "bfd_openr"); + dbfd_check_format = dlsym(handle, "bfd_check_format"); + dbfd_check_format_matches = dlsym(handle, "bfd_check_format_matches"); + dbfd_close = dlsym(handle, "bfd_close"); + dbfd_map_over_sections = dlsym(handle, "bfd_map_over_sections"); +} + +#endif + + +static asymbol **syms; /* Symbol table. */ + +/* 150 isn't special; it's just an arbitrary non-ASCII char value. */ +#define OPTION_DEMANGLER (150) + +static void slurp_symtab(bfd * abfd); +static void find_address_in_section(bfd *abfd, asection *section, void *data); + +/* Read in the symbol table. */ + +static void slurp_symtab(bfd * abfd) +{ + long symcount; + unsigned int size; + + if ((bfd_get_file_flags(abfd) & HAS_SYMS) == 0) + return; + + symcount = bfd_read_minisymbols(abfd, false, (PTR) & syms, &size); + if (symcount == 0) + symcount = bfd_read_minisymbols(abfd, true /* dynamic */ , + (PTR) & syms, &size); + + if (symcount < 0) + bfd_fatal(bfd_get_filename(abfd)); +} + +/* These global variables are used to pass information between + translate_addresses and find_address_in_section. */ + +static bfd_vma pc; +static const char *filename; +static const char *functionname; +static unsigned int line; +static int found; + +/* Look for an address in a section. This is called via + bfd_map_over_sections. */ + +static void find_address_in_section(bfd *abfd, asection *section, void *data __attribute__ ((__unused__)) ) +{ + bfd_vma vma; + bfd_size_type size; + + if (found) + return; + + if ((bfd_get_section_flags(abfd, section) & SEC_ALLOC) == 0) + return; + + vma = bfd_get_section_vma(abfd, section); + if (pc < vma) + return; + + size = bfd_section_size(abfd, section); + if (pc >= vma + size) + return; + + found = bfd_find_nearest_line(abfd, section, syms, pc - vma, + &filename, &functionname, &line); +} + +/* Read hexadecimal addresses from stdin, translate into + file_name:line_number and optionally function name. */ +#if 0 +static void translate_addresses(bfd * abfd, char (*addr)[PTRSTR_LEN], int naddr) +{ + while (naddr) { + pc = bfd_scan_vma(addr[naddr-1], NULL, 16); + + found = false; + bfd_map_over_sections(abfd, find_address_in_section, + (PTR) NULL); + + if (!found) { + printf("[%s] \?\?() \?\?:0\n",addr[naddr-1]); + } else { + const char *name; + + name = functionname; + if (name == NULL || *name == '\0') + name = "??"; + if (filename != NULL) { + char *h; + + h = strrchr(filename, '/'); + if (h != NULL) + filename = h + 1; + } + + printf("\t%s:%u\t", filename ? filename : "??", + line); + + printf("%s()\n", name); + + } + + /* fflush() is essential for using this command as a server + child process that reads addresses from a pipe and responds + with line number information, processing one address at a + time. */ + fflush(stdout); + naddr--; + } +} +#endif + +static char** translate_addresses_buf(bfd * abfd, bfd_vma *addr, int naddr) +{ + int naddr_orig = naddr; + char b; + int total = 0; + enum { Count, Print } state; + char *buf = &b; + int len = 0; + char **ret_buf = NULL; + /* iterate over the formatting twice. + * the first time we count how much space we need + * the second time we do the actual printing */ + for (state=Count; state<=Print; state++) { + if (state == Print) { + ret_buf = malloc(total + sizeof(char*)*naddr); + buf = (char*)(ret_buf + naddr); + len = total; + } + while (naddr) { + if (state == Print) + ret_buf[naddr-1] = buf; + pc = addr[naddr-1]; + + found = false; + bfd_map_over_sections(abfd, find_address_in_section, + (PTR) NULL); + + if (!found) { + total += snprintf(buf, len, "[0x%llx] \?\?() \?\?:0",(long long unsigned int) addr[naddr-1]) + 1; + } else { + const char *name; + + name = functionname; + if (name == NULL || *name == '\0') + name = "??"; + if (filename != NULL) { + char *h; + + h = strrchr(filename, '/'); + if (h != NULL) + filename = h + 1; + } + total += snprintf(buf, len, "%s:%u\t%s()", filename ? filename : "??", + line, name) + 1; + + } + if (state == Print) { + /* set buf just past the end of string */ + buf = buf + total + 1; + } + naddr--; + } + naddr = naddr_orig; + } + return ret_buf; +} +/* Process a file. */ + +static char **process_file(const char *file_name, bfd_vma *addr, int naddr) +{ + bfd *abfd; + char **matching; + char **ret_buf; + + abfd = bfd_openr(file_name, NULL); + + if (abfd == NULL) + bfd_fatal(file_name); + + if (bfd_check_format(abfd, bfd_archive)) + fatal("%s: can not get addresses from archive", file_name); + + if (!bfd_check_format_matches(abfd, bfd_object, &matching)) { + bfd_nonfatal(bfd_get_filename(abfd)); + if (bfd_get_error() == + bfd_error_file_ambiguously_recognized) { + list_matching_formats(matching); + free(matching); + } + xexit(1); + } + + slurp_symtab(abfd); + + ret_buf = translate_addresses_buf(abfd, addr, naddr); + + free (syms); + syms = NULL; + + bfd_close(abfd); + return ret_buf; +} + +#define MAX_DEPTH 16 + +struct file_match { + const char *file; + void *address; + void *base; + void *hdr; +}; + +static int find_matching_file(struct dl_phdr_info *info, + size_t size, void *data) +{ + struct file_match *match = data; + /* This code is modeled from Gfind_proc_info-lsb.c:callback() from libunwind */ + long n; + const ElfW(Phdr) *phdr; + ElfW(Addr) load_base = info->dlpi_addr; + phdr = info->dlpi_phdr; + for (n = info->dlpi_phnum; --n >= 0; phdr++) { + if (phdr->p_type == PT_LOAD) { + ElfW(Addr) vaddr = phdr->p_vaddr + load_base; + if (match->address >= vaddr && match->address < vaddr + phdr->p_memsz) { + /* we found a match */ + match->file = info->dlpi_name; + match->base = info->dlpi_addr; + } + } + } + return 0; +} + +char **backtrace_symbols(void *const *buffer, int size) +{ + int stack_depth = size - 1; + int x,y; + /* discard calling function */ + int total = 0; + + char ***locations; + char **final; + char *f_strings; + + locations = malloc(sizeof(char**) * (stack_depth+1)); + + bfd_init(); + for(x=stack_depth, y=0; x>=0; x--, y++){ + struct file_match match = { .address = buffer[x] }; + char **ret_buf; + bfd_vma addr; + dl_iterate_phdr(find_matching_file, &match); + addr = buffer[x] - match.base; + if (match.file && strlen(match.file)) + ret_buf = process_file(match.file, &addr, 1); + else + ret_buf = process_file("/proc/self/exe", &addr, 1); + locations[x] = ret_buf; + total += strlen(ret_buf[0]) + 1; + } + + /* allocate the array of char* we are going to return and extra space for + * all of the strings */ + final = malloc(total + (stack_depth + 1) * sizeof(char*)); + /* get a pointer to the extra space */ + f_strings = (char*)(final + stack_depth + 1); + + /* fill in all of strings and pointers */ + for(x=stack_depth; x>=0; x--){ + strcpy(f_strings, locations[x][0]); + free(locations[x]); + final[x] = f_strings; + f_strings += strlen(f_strings) + 1; + } + + free(locations); + + return final; +} + +void +backtrace_symbols_fd(void *const *buffer, int size, int fd) +{ + int j; + char **strings; + + strings = backtrace_symbols(buffer, size); + if (strings == NULL) { + perror("backtrace_symbols"); + exit(EXIT_FAILURE); + } + + for (j = 0; j < size; j++) + printf("%s\n", strings[j]); + + free(strings); +} diff --git a/libs/cairo-1.16.0/util/cairo-api-update b/libs/cairo-1.16.0/util/cairo-api-update new file mode 100755 index 0000000..e16df43 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-api-update @@ -0,0 +1,72 @@ +#!/bin/sh +set -e + +if [ $# -lt 1 ]; then + argv0=`basename $0` + echo "$argv0: Update source code to the lastest Cairo API" >&2 + echo "" >&2 + echo "Usage: $argv0 file [...]" >&2 + exit 1 +fi + +cairo_api_update() { + file=$1 + backup=$file.bak + + cp $file $backup + sed -e '/\(DEPRECATED\|REPLACED\)_BY/! { + s/cairo_current_font_extents/cairo_font_extents/g + s/cairo_get_font_extents/cairo_font_extents/g + s/cairo_current_operator/cairo_get_operator/g + s/cairo_current_tolerance/cairo_get_tolerance/g + s/cairo_current_point/cairo_get_current_point/g + s/cairo_current_fill_rule/cairo_get_fill_rule/g + s/cairo_current_line_width/cairo_get_line_width/g + s/cairo_current_line_cap/cairo_get_line_cap/g + s/cairo_current_line_join/cairo_get_line_join/g + s/cairo_current_miter_limit/cairo_get_miter_limit/g + s/cairo_current_matrix/cairo_get_matrix/g + s/cairo_current_pattern/cairo_get_source/g + s/cairo_current_target_surface/cairo_get_target/g + s/cairo_get_status/cairo_status/g + s/cairo_get_status_string/cairo_status_string/g + s/cairo_concat_matrix/cairo_transform/g + s/cairo_scale_font/cairo_set_font_size/g + s/cairo_select_font\([^_]\)/cairo_select_font_face\1/g + s/cairo_transform_font/cairo_set_font_matrix/g + s/cairo_transform_point/cairo_user_to_device/g + s/cairo_transform_distance/cairo_user_to_device_distance/g + s/cairo_inverse_transform_point/cairo_device_to_user/g + s/cairo_inverse_transform_distance/cairo_device_to_user_distance/g + s/cairo_init_clip/cairo_reset_clip/g + s/cairo_surface_create_for_image/cairo_image_surface_create_for_data/g + s/cairo_default_matrix/cairo_identity_matrix/g + s/cairo_matrix_set_affine/cairo_matrix_init/g + s/cairo_matrix_set_identity/cairo_matrix_init_identity/g + s/\([^_]\)cairo_pattern_add_color_stop\([^_]\)/\1cairo_pattern_add_color_stop_rgba\2/g + s/cairo_set_rgb_color/cairo_set_source_rgb/g + s/cairo_set_pattern/cairo_set_source/g + s/CAIRO_OPERATOR_SRC/CAIRO_OPERATOR_SOURCE/g + s/CAIRO_OPERATOR_DST/CAIRO_OPERATOR_DEST/g + s/CAIRO_OPERATOR_OVER_REVERSE/CAIRO_OPERATOR_DEST_OVER/g + s/CAIRO_OPERATOR_IN_REVERSE/CAIRO_OPERATOR_DEST_IN/g + s/CAIRO_OPERATOR_OUT_REVERSE/CAIRO_OPERATOR_DEST_OUT/g + s/CAIRO_OPERATOR_ATOP_REVERSE/CAIRO_OPERATOR_DEST_ATOP/g + } + ' $backup > $file + + grep -n 'cairo_create[ ]*([ ]*)' $file /dev/null | sed 's/^\(.*:[0-9]\+:\).*/\1 cairo_create must now accept a target surface/' + grep -n 'cairo_set_target_image' $file /dev/null | sed 's/^\(.*:[0-9]\+:\).*/\1 cairo_set_target_image should be reworked to use cairo_image_surface_create_for_data, likely before cairo_create/' + grep -n 'cairo_set_target_surface' $file /dev/null | sed 's/^\(.*:[0-9]\+:\).*/\1 cairo_set_target_surface for temporarily changing the target should now be rworked to create a temporary context with cairo_create/' + grep -n 'cairo_set_target_png' $file /dev/null | sed 's/^\(.*:[0-9]\+:\).*/\1 cairo_set_target_png should be reworked to use cairo_image_surface_create followed by cairo_surface_write_to_png/' + grep -n 'cairo_set_target_drawable' $file /dev/null | sed 's/^\(.*:[0-9]\+:\).*/\1 cairo_set_target_drawable should be reworked to use cairo_xlib_surface_create, likely before cairo_create/' + grep -n 'cairo_set_target_[^dis][^n]' $file /dev/null | sed 's/^\(.*:[0-9]\+:\).*cairo_set_target_\([a-z]*\).*/\1 cairo_set_target_\2 should be reworked to use cairo_\2_surface_create, likely before cairo_create/' + grep -n 'cairo_set_alpha' $file /dev/null | sed 's/\(.*:[0-9]\+:\).*/\1 cairo_set_alpha should be replaced by turning a nearby cairo_set_source_rgb into cairo_set_source_rgba or turning a nearby cairo_paint into cairo_paint_with_alpha/' +} + +while [ $# -gt 0 ]; do + file=$1 + shift + cairo_api_update $file +done + diff --git a/libs/cairo-1.16.0/util/cairo-fdr/Makefile.am b/libs/cairo-1.16.0/util/cairo-fdr/Makefile.am new file mode 100644 index 0000000..5cd5422 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-fdr/Makefile.am @@ -0,0 +1,15 @@ +cairolibdir = $(libdir)/cairo + +#bin_SCRIPTS = cairo-fdr +cairolib_LTLIBRARIES = cairo-fdr.la + +AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_builddir)/src + +cairo_fdr_la_SOURCES = fdr.c +cairo_fdr_la_CPPFLAGS = $(AM_CPPFLAGS) +cairo_fdr_la_CFLAGS = $(CAIRO_CFLAGS) +cairo_fdr_la_LDFLAGS = -module -no-undefined -avoid-version +if CAIRO_HAS_DL +cairo_fdr_la_LIBADD = -ldl +endif diff --git a/libs/cairo-1.16.0/util/cairo-fdr/Makefile.in b/libs/cairo-1.16.0/util/cairo-fdr/Makefile.in new file mode 100644 index 0000000..a71f6f5 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-fdr/Makefile.in @@ -0,0 +1,779 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = util/cairo-fdr +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \ + $(top_srcdir)/build/aclocal.compare.m4 \ + $(top_srcdir)/build/aclocal.enable.m4 \ + $(top_srcdir)/build/aclocal.float.m4 \ + $(top_srcdir)/build/aclocal.makefile.m4 \ + $(top_srcdir)/build/aclocal.pkg.m4 \ + $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \ + $(top_srcdir)/build/ltoptions.m4 \ + $(top_srcdir)/build/ltsugar.m4 \ + $(top_srcdir)/build/ltversion.m4 \ + $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/cairo-version.h \ + $(top_srcdir)/build/configure.ac.version \ + $(top_srcdir)/build/configure.ac.tools \ + $(top_srcdir)/build/configure.ac.features \ + $(top_srcdir)/build/configure.ac.warnings \ + $(top_srcdir)/build/configure.ac.system \ + $(top_srcdir)/build/configure.ac.analysis \ + $(top_srcdir)/build/configure.ac.noversion \ + $(top_srcdir)/build/configure.ac.pthread \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(cairolibdir)" +LTLIBRARIES = $(cairolib_LTLIBRARIES) +cairo_fdr_la_DEPENDENCIES = +am_cairo_fdr_la_OBJECTS = cairo_fdr_la-fdr.lo +cairo_fdr_la_OBJECTS = $(am_cairo_fdr_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +cairo_fdr_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(cairo_fdr_la_CFLAGS) \ + $(CFLAGS) $(cairo_fdr_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(cairo_fdr_la_SOURCES) +DIST_SOURCES = $(cairo_fdr_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/build/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BFD_LIBS = @BFD_LIBS@ +CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_LDFLAGS = @CAIRO_LDFLAGS@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@ +CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@ +CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@ +CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@ +CAIRO_REQUIRES = @CAIRO_REQUIRES@ +CAIRO_TEST_MODE = @CAIRO_TEST_MODE@ +CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@ +CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@ +CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@ +CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@ +CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIND = @FIND@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ +GOBJECT_LIBS = @GOBJECT_LIBS@ +GREP = @GREP@ +GS = @GS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +LIBRSVG_LIBS = @LIBRSVG_LIBS@ +LIBS = @LIBS@ +LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@ +LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LTP = @LTP@ +LTP_GENHTML = @LTP_GENHTML@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@ +PKG_CONFIG = @PKG_CONFIG@ +POPPLER_CFLAGS = @POPPLER_CFLAGS@ +POPPLER_LIBS = @POPPLER_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHLIB_EXT = @SHLIB_EXT@ +SHM_LIBS = @SHM_LIBS@ +SHTOOL = @SHTOOL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +XARGS = @XARGS@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cogl_CFLAGS = @cogl_CFLAGS@ +cogl_LIBS = @cogl_LIBS@ +datadir = @datadir@ +datarootdir = @datarootdir@ +directfb_CFLAGS = @directfb_CFLAGS@ +directfb_LIBS = @directfb_LIBS@ +docdir = @docdir@ +drm_CFLAGS = @drm_CFLAGS@ +drm_LIBS = @drm_LIBS@ +dvidir = @dvidir@ +egl_CFLAGS = @egl_CFLAGS@ +egl_LIBS = @egl_LIBS@ +exec_prefix = @exec_prefix@ +gallium_DIR = @gallium_DIR@ +gl_CFLAGS = @gl_CFLAGS@ +gl_LIBS = @gl_LIBS@ +glesv2_CFLAGS = @glesv2_CFLAGS@ +glesv2_LIBS = @glesv2_LIBS@ +glesv3_CFLAGS = @glesv3_CFLAGS@ +glesv3_LIBS = @glesv3_LIBS@ +glib_CFLAGS = @glib_CFLAGS@ +glib_LIBS = @glib_LIBS@ +gtk_CFLAGS = @gtk_CFLAGS@ +gtk_LIBS = @gtk_LIBS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lzo_LIBS = @lzo_LIBS@ +mandir = @mandir@ +mesa_DIR = @mesa_DIR@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pixman_CFLAGS = @pixman_CFLAGS@ +pixman_LIBS = @pixman_LIBS@ +png_CFLAGS = @png_CFLAGS@ +png_LIBS = @png_LIBS@ +png_REQUIRES = @png_REQUIRES@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pthread_CFLAGS = @pthread_CFLAGS@ +pthread_LIBS = @pthread_LIBS@ +qt_CFLAGS = @qt_CFLAGS@ +qt_LIBS = @qt_LIBS@ +real_pthread_CFLAGS = @real_pthread_CFLAGS@ +real_pthread_LIBS = @real_pthread_LIBS@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +shm_LIBS = @shm_LIBS@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xcb_CFLAGS = @xcb_CFLAGS@ +xcb_LIBS = @xcb_LIBS@ +xcb_shm_CFLAGS = @xcb_shm_CFLAGS@ +xcb_shm_LIBS = @xcb_shm_LIBS@ +xlib_CFLAGS = @xlib_CFLAGS@ +xlib_LIBS = @xlib_LIBS@ +xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@ +xlib_xcb_LIBS = @xlib_xcb_LIBS@ +xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@ +xlib_xrender_LIBS = @xlib_xrender_LIBS@ +cairolibdir = $(libdir)/cairo + +#bin_SCRIPTS = cairo-fdr +cairolib_LTLIBRARIES = cairo-fdr.la +AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_builddir)/src + +cairo_fdr_la_SOURCES = fdr.c +cairo_fdr_la_CPPFLAGS = $(AM_CPPFLAGS) +cairo_fdr_la_CFLAGS = $(CAIRO_CFLAGS) +cairo_fdr_la_LDFLAGS = -module -no-undefined -avoid-version +@CAIRO_HAS_DL_TRUE@cairo_fdr_la_LIBADD = -ldl +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/cairo-fdr/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign util/cairo-fdr/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-cairolibLTLIBRARIES: $(cairolib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(cairolib_LTLIBRARIES)'; test -n "$(cairolibdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(cairolibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(cairolibdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(cairolibdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(cairolibdir)"; \ + } + +uninstall-cairolibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(cairolib_LTLIBRARIES)'; test -n "$(cairolibdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(cairolibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(cairolibdir)/$$f"; \ + done + +clean-cairolibLTLIBRARIES: + -test -z "$(cairolib_LTLIBRARIES)" || rm -f $(cairolib_LTLIBRARIES) + @list='$(cairolib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +cairo-fdr.la: $(cairo_fdr_la_OBJECTS) $(cairo_fdr_la_DEPENDENCIES) $(EXTRA_cairo_fdr_la_DEPENDENCIES) + $(AM_V_CCLD)$(cairo_fdr_la_LINK) -rpath $(cairolibdir) $(cairo_fdr_la_OBJECTS) $(cairo_fdr_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_fdr_la-fdr.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +cairo_fdr_la-fdr.lo: fdr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cairo_fdr_la_CPPFLAGS) $(CPPFLAGS) $(cairo_fdr_la_CFLAGS) $(CFLAGS) -MT cairo_fdr_la-fdr.lo -MD -MP -MF $(DEPDIR)/cairo_fdr_la-fdr.Tpo -c -o cairo_fdr_la-fdr.lo `test -f 'fdr.c' || echo '$(srcdir)/'`fdr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_fdr_la-fdr.Tpo $(DEPDIR)/cairo_fdr_la-fdr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fdr.c' object='cairo_fdr_la-fdr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cairo_fdr_la_CPPFLAGS) $(CPPFLAGS) $(cairo_fdr_la_CFLAGS) $(CFLAGS) -c -o cairo_fdr_la-fdr.lo `test -f 'fdr.c' || echo '$(srcdir)/'`fdr.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(cairolibdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-cairolibLTLIBRARIES clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-cairolibLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-cairolibLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-cairolibLTLIBRARIES clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-cairolibLTLIBRARIES install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-cairolibLTLIBRARIES + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libs/cairo-1.16.0/util/cairo-fdr/fdr.c b/libs/cairo-1.16.0/util/cairo-fdr/fdr.c new file mode 100644 index 0000000..08d9c01 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-fdr/fdr.c @@ -0,0 +1,331 @@ +/* cairo-fdr - a 'flight data recorder', a black box, for cairo + * + * Copyright © 2009 Chris Wilson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#define _GNU_SOURCE + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <cairo.h> +#include <cairo-script.h> +#include <cairo-tee.h> +#include <stdlib.h> +#include <assert.h> +#include <signal.h> + +#include <dlfcn.h> + +static void *_dlhandle = RTLD_NEXT; +#define DLCALL(name, args...) ({ \ + static typeof (&name) name##_real; \ + if (name##_real == NULL) { \ + name##_real = dlsym (_dlhandle, #name); \ + if (name##_real == NULL && _dlhandle == RTLD_NEXT) { \ + _dlhandle = dlopen ("libcairo.so", RTLD_LAZY); \ + name##_real = dlsym (_dlhandle, #name); \ + assert (name##_real != NULL); \ + } \ + } \ + (*name##_real) (args); \ +}) + +#define RINGBUFFER_SIZE 16 +static cairo_surface_t *fdr_ringbuffer[RINGBUFFER_SIZE]; +static int fdr_position; +static int fdr_dump; + +static const cairo_user_data_key_t fdr_key; + +static void +fdr_replay_to_script (cairo_surface_t *recording, cairo_device_t *ctx) +{ + if (recording != NULL) { + DLCALL (cairo_script_write_comment, ctx, "--- fdr ---", -1); + DLCALL (cairo_script_from_recording_surface, ctx, recording); + } +} + +static void +fdr_dump_ringbuffer (void) +{ + cairo_device_t *ctx; + int n; + + ctx = DLCALL (cairo_script_create, "/tmp/fdr.trace"); + + for (n = fdr_position; n < RINGBUFFER_SIZE; n++) + fdr_replay_to_script (fdr_ringbuffer[n], ctx); + + for (n = 0; n < fdr_position; n++) + fdr_replay_to_script (fdr_ringbuffer[n], ctx); + + DLCALL (cairo_device_destroy, ctx); +} + +static void +fdr_sighandler (int sig) +{ + fdr_dump = 1; +} + +static void +fdr_urgent_sighandler (int sig) +{ + fdr_dump_ringbuffer (); +} + +static void +fdr_atexit (void) +{ + if (fdr_dump) + fdr_dump_ringbuffer (); +} + +static void +fdr_pending_signals (void) +{ + static int initialized; + + if (! initialized) { + initialized = 1; + + signal (SIGUSR1, fdr_sighandler); + + signal (SIGSEGV, fdr_urgent_sighandler); + signal (SIGABRT, fdr_urgent_sighandler); + atexit (fdr_atexit); + } + + if (fdr_dump) { + fdr_dump_ringbuffer (); + fdr_dump = 0; + } +} + +static void +fdr_get_extents (cairo_surface_t *surface, + cairo_rectangle_t *extents) +{ + cairo_t *cr; + + cr = DLCALL (cairo_create, surface); + DLCALL (cairo_clip_extents, cr, + &extents->x, &extents->y, &extents->width, &extents->height); + DLCALL (cairo_destroy, cr); + + extents->width -= extents->x; + extents->height -= extents->y; +} + +static void +fdr_surface_destroy (void *surface) +{ + DLCALL (cairo_surface_destroy, surface); +} + +static void +fdr_surface_reference (void *surface) +{ + DLCALL (cairo_surface_reference, surface); +} + +static cairo_surface_t * +fdr_surface_get_tee (cairo_surface_t *surface) +{ + return DLCALL (cairo_surface_get_user_data, surface, &fdr_key); +} + +static cairo_surface_t * +fdr_tee_surface_index (cairo_surface_t *surface, int index) +{ + return DLCALL (cairo_tee_surface_index, surface, index); +} + +cairo_t * +cairo_create (cairo_surface_t *surface) +{ + cairo_surface_t *record, *tee; + + fdr_pending_signals (); + + tee = fdr_surface_get_tee (surface); + if (tee == NULL) { + cairo_rectangle_t extents; + cairo_content_t content; + + fdr_get_extents (surface, &extents); + content = DLCALL (cairo_surface_get_content, surface); + + tee = DLCALL (cairo_tee_surface_create, surface); + record = DLCALL (cairo_recording_surface_create, content, &extents); + DLCALL (cairo_tee_surface_add, tee, record); + + DLCALL (cairo_surface_set_user_data, surface, + &fdr_key, tee, fdr_surface_destroy); + } else { + int n; + + record = fdr_tee_surface_index (tee, 1); + + /* update the position of the recording surface in the ringbuffer */ + for (n = 0; n < RINGBUFFER_SIZE; n++) { + if (record == fdr_ringbuffer[n]) { + fdr_ringbuffer[n] = NULL; + break; + } + } + } + + fdr_surface_destroy (fdr_ringbuffer[fdr_position]); + fdr_ringbuffer[fdr_position] = record; + fdr_position = (fdr_position + 1) % RINGBUFFER_SIZE; + + return DLCALL (cairo_create, tee); +} + +static void +fdr_remove_tee (cairo_surface_t *surface) +{ + fdr_surface_reference (surface); + DLCALL (cairo_surface_set_user_data, surface, &fdr_key, NULL, NULL); + fdr_surface_destroy (surface); +} + +void +cairo_destroy (cairo_t *cr) +{ + cairo_surface_t *tee; + + tee = DLCALL (cairo_get_target, cr); + DLCALL (cairo_destroy, cr); + + if (DLCALL (cairo_surface_get_reference_count, tee) == 1) + fdr_remove_tee (fdr_tee_surface_index (tee, 0)); +} + +void +cairo_pattern_destroy (cairo_pattern_t *pattern) +{ + if (DLCALL (cairo_pattern_get_type, pattern) == CAIRO_PATTERN_TYPE_SURFACE) { + cairo_surface_t *surface; + + if (DLCALL (cairo_pattern_get_surface, pattern, &surface) == CAIRO_STATUS_SUCCESS && + DLCALL (cairo_surface_get_type, surface) == CAIRO_SURFACE_TYPE_TEE && + DLCALL (cairo_surface_get_reference_count, surface) == 2) + { + fdr_remove_tee (fdr_tee_surface_index (surface, 0)); + } + } + + DLCALL (cairo_pattern_destroy, pattern); +} + +cairo_surface_t * +cairo_get_target (cairo_t *cr) +{ + cairo_surface_t *tee; + + tee = DLCALL (cairo_get_target, cr); + return fdr_tee_surface_index (tee, 0); +} + +cairo_surface_t * +cairo_get_group_target (cairo_t *cr) +{ + cairo_surface_t *tee; + + tee = DLCALL (cairo_get_group_target, cr); + return fdr_tee_surface_index (tee, 0); +} + +cairo_pattern_t * +cairo_pattern_create_for_surface (cairo_surface_t *surface) +{ + cairo_surface_t *tee; + + tee = fdr_surface_get_tee (surface); + if (tee != NULL) + surface = tee; + + return DLCALL (cairo_pattern_create_for_surface, surface); +} + +cairo_status_t +cairo_pattern_get_surface (cairo_pattern_t *pattern, + cairo_surface_t **surface) +{ + cairo_status_t status; + cairo_surface_t *tee; + + status = DLCALL (cairo_pattern_get_surface, pattern, surface); + if (status != CAIRO_STATUS_SUCCESS) + return status; + + tee = fdr_surface_get_tee (*surface); + if (tee != NULL) + *surface = tee; + + return CAIRO_STATUS_SUCCESS; +} + +void +cairo_set_source_surface (cairo_t *cr, + cairo_surface_t *surface, + double x, double y) +{ + cairo_surface_t *tee; + + tee = fdr_surface_get_tee (surface); + if (tee != NULL) + surface = tee; + + DLCALL (cairo_set_source_surface, cr, surface, x, y); +} + +cairo_surface_t * +cairo_surface_create_similar (cairo_surface_t *surface, + cairo_content_t content, + int width, int height) +{ + cairo_surface_t *tee; + + tee = fdr_surface_get_tee (surface); + if (tee != NULL) + surface = tee; + + return DLCALL (cairo_surface_create_similar, + surface, content, width, height); +} + +cairo_surface_t * +cairo_surface_create_for_rectangle (cairo_surface_t *surface, + double x, + double y, + double width, + double height) +{ + cairo_surface_t *tee; + + tee = fdr_surface_get_tee (surface); + if (tee != NULL) + surface = tee; + + return DLCALL (cairo_surface_create_for_rectangle, + surface, x, y, width, height); +} diff --git a/libs/cairo-1.16.0/util/cairo-gobject/Makefile.am b/libs/cairo-1.16.0/util/cairo-gobject/Makefile.am new file mode 100644 index 0000000..22c1a27 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-gobject/Makefile.am @@ -0,0 +1,15 @@ +lib_LTLIBRARIES = libcairo-gobject.la + +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src + +cairoincludedir=$(includedir)/cairo +cairoinclude_HEADERS = cairo-gobject.h +libcairo_gobject_la_SOURCES = \ + cairo-gobject-enums.c \ + cairo-gobject-structs.c \ + $(NULL) + +libcairo_gobject_la_CFLAGS = $(CAIRO_CFLAGS) $(GOBJECT_CFLAGS) +libcairo_gobject_la_LDFLAGS = -version-info $(CAIRO_LIBTOOL_VERSION_INFO) -no-undefined $(export_symbols) +libcairo_gobject_la_LIBADD = $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) $(GOBJECT_LIBS) + diff --git a/libs/cairo-1.16.0/util/cairo-gobject/Makefile.in b/libs/cairo-1.16.0/util/cairo-gobject/Makefile.in new file mode 100644 index 0000000..d0b6656 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-gobject/Makefile.in @@ -0,0 +1,817 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = util/cairo-gobject +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \ + $(top_srcdir)/build/aclocal.compare.m4 \ + $(top_srcdir)/build/aclocal.enable.m4 \ + $(top_srcdir)/build/aclocal.float.m4 \ + $(top_srcdir)/build/aclocal.makefile.m4 \ + $(top_srcdir)/build/aclocal.pkg.m4 \ + $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \ + $(top_srcdir)/build/ltoptions.m4 \ + $(top_srcdir)/build/ltsugar.m4 \ + $(top_srcdir)/build/ltversion.m4 \ + $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/cairo-version.h \ + $(top_srcdir)/build/configure.ac.version \ + $(top_srcdir)/build/configure.ac.tools \ + $(top_srcdir)/build/configure.ac.features \ + $(top_srcdir)/build/configure.ac.warnings \ + $(top_srcdir)/build/configure.ac.system \ + $(top_srcdir)/build/configure.ac.analysis \ + $(top_srcdir)/build/configure.ac.noversion \ + $(top_srcdir)/build/configure.ac.pthread \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(cairoinclude_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cairoincludedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libcairo_gobject_la_DEPENDENCIES = $(top_builddir)/src/libcairo.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_libcairo_gobject_la_OBJECTS = \ + libcairo_gobject_la-cairo-gobject-enums.lo \ + libcairo_gobject_la-cairo-gobject-structs.lo +libcairo_gobject_la_OBJECTS = $(am_libcairo_gobject_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libcairo_gobject_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libcairo_gobject_la_CFLAGS) $(CFLAGS) \ + $(libcairo_gobject_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libcairo_gobject_la_SOURCES) +DIST_SOURCES = $(libcairo_gobject_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(cairoinclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/build/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BFD_LIBS = @BFD_LIBS@ +CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_LDFLAGS = @CAIRO_LDFLAGS@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@ +CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@ +CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@ +CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@ +CAIRO_REQUIRES = @CAIRO_REQUIRES@ +CAIRO_TEST_MODE = @CAIRO_TEST_MODE@ +CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@ +CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@ +CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@ +CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@ +CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIND = @FIND@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ +GOBJECT_LIBS = @GOBJECT_LIBS@ +GREP = @GREP@ +GS = @GS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +LIBRSVG_LIBS = @LIBRSVG_LIBS@ +LIBS = @LIBS@ +LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@ +LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LTP = @LTP@ +LTP_GENHTML = @LTP_GENHTML@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@ +PKG_CONFIG = @PKG_CONFIG@ +POPPLER_CFLAGS = @POPPLER_CFLAGS@ +POPPLER_LIBS = @POPPLER_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHLIB_EXT = @SHLIB_EXT@ +SHM_LIBS = @SHM_LIBS@ +SHTOOL = @SHTOOL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +XARGS = @XARGS@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cogl_CFLAGS = @cogl_CFLAGS@ +cogl_LIBS = @cogl_LIBS@ +datadir = @datadir@ +datarootdir = @datarootdir@ +directfb_CFLAGS = @directfb_CFLAGS@ +directfb_LIBS = @directfb_LIBS@ +docdir = @docdir@ +drm_CFLAGS = @drm_CFLAGS@ +drm_LIBS = @drm_LIBS@ +dvidir = @dvidir@ +egl_CFLAGS = @egl_CFLAGS@ +egl_LIBS = @egl_LIBS@ +exec_prefix = @exec_prefix@ +gallium_DIR = @gallium_DIR@ +gl_CFLAGS = @gl_CFLAGS@ +gl_LIBS = @gl_LIBS@ +glesv2_CFLAGS = @glesv2_CFLAGS@ +glesv2_LIBS = @glesv2_LIBS@ +glesv3_CFLAGS = @glesv3_CFLAGS@ +glesv3_LIBS = @glesv3_LIBS@ +glib_CFLAGS = @glib_CFLAGS@ +glib_LIBS = @glib_LIBS@ +gtk_CFLAGS = @gtk_CFLAGS@ +gtk_LIBS = @gtk_LIBS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lzo_LIBS = @lzo_LIBS@ +mandir = @mandir@ +mesa_DIR = @mesa_DIR@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pixman_CFLAGS = @pixman_CFLAGS@ +pixman_LIBS = @pixman_LIBS@ +png_CFLAGS = @png_CFLAGS@ +png_LIBS = @png_LIBS@ +png_REQUIRES = @png_REQUIRES@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pthread_CFLAGS = @pthread_CFLAGS@ +pthread_LIBS = @pthread_LIBS@ +qt_CFLAGS = @qt_CFLAGS@ +qt_LIBS = @qt_LIBS@ +real_pthread_CFLAGS = @real_pthread_CFLAGS@ +real_pthread_LIBS = @real_pthread_LIBS@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +shm_LIBS = @shm_LIBS@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xcb_CFLAGS = @xcb_CFLAGS@ +xcb_LIBS = @xcb_LIBS@ +xcb_shm_CFLAGS = @xcb_shm_CFLAGS@ +xcb_shm_LIBS = @xcb_shm_LIBS@ +xlib_CFLAGS = @xlib_CFLAGS@ +xlib_LIBS = @xlib_LIBS@ +xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@ +xlib_xcb_LIBS = @xlib_xcb_LIBS@ +xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@ +xlib_xrender_LIBS = @xlib_xrender_LIBS@ +lib_LTLIBRARIES = libcairo-gobject.la +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src +cairoincludedir = $(includedir)/cairo +cairoinclude_HEADERS = cairo-gobject.h +libcairo_gobject_la_SOURCES = \ + cairo-gobject-enums.c \ + cairo-gobject-structs.c \ + $(NULL) + +libcairo_gobject_la_CFLAGS = $(CAIRO_CFLAGS) $(GOBJECT_CFLAGS) +libcairo_gobject_la_LDFLAGS = -version-info $(CAIRO_LIBTOOL_VERSION_INFO) -no-undefined $(export_symbols) +libcairo_gobject_la_LIBADD = $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) $(GOBJECT_LIBS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/cairo-gobject/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign util/cairo-gobject/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libcairo-gobject.la: $(libcairo_gobject_la_OBJECTS) $(libcairo_gobject_la_DEPENDENCIES) $(EXTRA_libcairo_gobject_la_DEPENDENCIES) + $(AM_V_CCLD)$(libcairo_gobject_la_LINK) -rpath $(libdir) $(libcairo_gobject_la_OBJECTS) $(libcairo_gobject_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_gobject_la-cairo-gobject-enums.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_gobject_la-cairo-gobject-structs.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libcairo_gobject_la-cairo-gobject-enums.lo: cairo-gobject-enums.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_gobject_la_CFLAGS) $(CFLAGS) -MT libcairo_gobject_la-cairo-gobject-enums.lo -MD -MP -MF $(DEPDIR)/libcairo_gobject_la-cairo-gobject-enums.Tpo -c -o libcairo_gobject_la-cairo-gobject-enums.lo `test -f 'cairo-gobject-enums.c' || echo '$(srcdir)/'`cairo-gobject-enums.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_gobject_la-cairo-gobject-enums.Tpo $(DEPDIR)/libcairo_gobject_la-cairo-gobject-enums.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cairo-gobject-enums.c' object='libcairo_gobject_la-cairo-gobject-enums.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_gobject_la_CFLAGS) $(CFLAGS) -c -o libcairo_gobject_la-cairo-gobject-enums.lo `test -f 'cairo-gobject-enums.c' || echo '$(srcdir)/'`cairo-gobject-enums.c + +libcairo_gobject_la-cairo-gobject-structs.lo: cairo-gobject-structs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_gobject_la_CFLAGS) $(CFLAGS) -MT libcairo_gobject_la-cairo-gobject-structs.lo -MD -MP -MF $(DEPDIR)/libcairo_gobject_la-cairo-gobject-structs.Tpo -c -o libcairo_gobject_la-cairo-gobject-structs.lo `test -f 'cairo-gobject-structs.c' || echo '$(srcdir)/'`cairo-gobject-structs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_gobject_la-cairo-gobject-structs.Tpo $(DEPDIR)/libcairo_gobject_la-cairo-gobject-structs.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cairo-gobject-structs.c' object='libcairo_gobject_la-cairo-gobject-structs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_gobject_la_CFLAGS) $(CFLAGS) -c -o libcairo_gobject_la-cairo-gobject-structs.lo `test -f 'cairo-gobject-structs.c' || echo '$(srcdir)/'`cairo-gobject-structs.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-cairoincludeHEADERS: $(cairoinclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(cairoinclude_HEADERS)'; test -n "$(cairoincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(cairoincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(cairoincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(cairoincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(cairoincludedir)" || exit $$?; \ + done + +uninstall-cairoincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(cairoinclude_HEADERS)'; test -n "$(cairoincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(cairoincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cairoincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-cairoincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-cairoincludeHEADERS uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am \ + install-cairoincludeHEADERS install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am \ + uninstall-cairoincludeHEADERS uninstall-libLTLIBRARIES + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libs/cairo-1.16.0/util/cairo-gobject/cairo-gobject-enums.c b/libs/cairo-1.16.0/util/cairo-gobject/cairo-gobject-enums.c new file mode 100644 index 0000000..0c50694 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-gobject/cairo-gobject-enums.c @@ -0,0 +1,516 @@ + +/* Generated data (by glib-mkenums) */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "cairo-gobject.h" + +GType +cairo_gobject_status_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_STATUS_SUCCESS, "CAIRO_STATUS_SUCCESS", "success" }, + { CAIRO_STATUS_NO_MEMORY, "CAIRO_STATUS_NO_MEMORY", "no-memory" }, + { CAIRO_STATUS_INVALID_RESTORE, "CAIRO_STATUS_INVALID_RESTORE", "invalid-restore" }, + { CAIRO_STATUS_INVALID_POP_GROUP, "CAIRO_STATUS_INVALID_POP_GROUP", "invalid-pop-group" }, + { CAIRO_STATUS_NO_CURRENT_POINT, "CAIRO_STATUS_NO_CURRENT_POINT", "no-current-point" }, + { CAIRO_STATUS_INVALID_MATRIX, "CAIRO_STATUS_INVALID_MATRIX", "invalid-matrix" }, + { CAIRO_STATUS_INVALID_STATUS, "CAIRO_STATUS_INVALID_STATUS", "invalid-status" }, + { CAIRO_STATUS_NULL_POINTER, "CAIRO_STATUS_NULL_POINTER", "null-pointer" }, + { CAIRO_STATUS_INVALID_STRING, "CAIRO_STATUS_INVALID_STRING", "invalid-string" }, + { CAIRO_STATUS_INVALID_PATH_DATA, "CAIRO_STATUS_INVALID_PATH_DATA", "invalid-path-data" }, + { CAIRO_STATUS_READ_ERROR, "CAIRO_STATUS_READ_ERROR", "read-error" }, + { CAIRO_STATUS_WRITE_ERROR, "CAIRO_STATUS_WRITE_ERROR", "write-error" }, + { CAIRO_STATUS_SURFACE_FINISHED, "CAIRO_STATUS_SURFACE_FINISHED", "surface-finished" }, + { CAIRO_STATUS_SURFACE_TYPE_MISMATCH, "CAIRO_STATUS_SURFACE_TYPE_MISMATCH", "surface-type-mismatch" }, + { CAIRO_STATUS_PATTERN_TYPE_MISMATCH, "CAIRO_STATUS_PATTERN_TYPE_MISMATCH", "pattern-type-mismatch" }, + { CAIRO_STATUS_INVALID_CONTENT, "CAIRO_STATUS_INVALID_CONTENT", "invalid-content" }, + { CAIRO_STATUS_INVALID_FORMAT, "CAIRO_STATUS_INVALID_FORMAT", "invalid-format" }, + { CAIRO_STATUS_INVALID_VISUAL, "CAIRO_STATUS_INVALID_VISUAL", "invalid-visual" }, + { CAIRO_STATUS_FILE_NOT_FOUND, "CAIRO_STATUS_FILE_NOT_FOUND", "file-not-found" }, + { CAIRO_STATUS_INVALID_DASH, "CAIRO_STATUS_INVALID_DASH", "invalid-dash" }, + { CAIRO_STATUS_INVALID_DSC_COMMENT, "CAIRO_STATUS_INVALID_DSC_COMMENT", "invalid-dsc-comment" }, + { CAIRO_STATUS_INVALID_INDEX, "CAIRO_STATUS_INVALID_INDEX", "invalid-index" }, + { CAIRO_STATUS_CLIP_NOT_REPRESENTABLE, "CAIRO_STATUS_CLIP_NOT_REPRESENTABLE", "clip-not-representable" }, + { CAIRO_STATUS_TEMP_FILE_ERROR, "CAIRO_STATUS_TEMP_FILE_ERROR", "temp-file-error" }, + { CAIRO_STATUS_INVALID_STRIDE, "CAIRO_STATUS_INVALID_STRIDE", "invalid-stride" }, + { CAIRO_STATUS_FONT_TYPE_MISMATCH, "CAIRO_STATUS_FONT_TYPE_MISMATCH", "font-type-mismatch" }, + { CAIRO_STATUS_USER_FONT_IMMUTABLE, "CAIRO_STATUS_USER_FONT_IMMUTABLE", "user-font-immutable" }, + { CAIRO_STATUS_USER_FONT_ERROR, "CAIRO_STATUS_USER_FONT_ERROR", "user-font-error" }, + { CAIRO_STATUS_NEGATIVE_COUNT, "CAIRO_STATUS_NEGATIVE_COUNT", "negative-count" }, + { CAIRO_STATUS_INVALID_CLUSTERS, "CAIRO_STATUS_INVALID_CLUSTERS", "invalid-clusters" }, + { CAIRO_STATUS_INVALID_SLANT, "CAIRO_STATUS_INVALID_SLANT", "invalid-slant" }, + { CAIRO_STATUS_INVALID_WEIGHT, "CAIRO_STATUS_INVALID_WEIGHT", "invalid-weight" }, + { CAIRO_STATUS_INVALID_SIZE, "CAIRO_STATUS_INVALID_SIZE", "invalid-size" }, + { CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED, "CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED", "user-font-not-implemented" }, + { CAIRO_STATUS_DEVICE_TYPE_MISMATCH, "CAIRO_STATUS_DEVICE_TYPE_MISMATCH", "device-type-mismatch" }, + { CAIRO_STATUS_DEVICE_ERROR, "CAIRO_STATUS_DEVICE_ERROR", "device-error" }, + { CAIRO_STATUS_INVALID_MESH_CONSTRUCTION, "CAIRO_STATUS_INVALID_MESH_CONSTRUCTION", "invalid-mesh-construction" }, + { CAIRO_STATUS_DEVICE_FINISHED, "CAIRO_STATUS_DEVICE_FINISHED", "device-finished" }, + { CAIRO_STATUS_JBIG2_GLOBAL_MISSING, "CAIRO_STATUS_JBIG2_GLOBAL_MISSING", "jbig2-global_missing" }, + { CAIRO_STATUS_PNG_ERROR, "CAIRO_STATUS_PNG_ERROR", "png-error" }, + { CAIRO_STATUS_FREETYPE_ERROR, "CAIRO_STATUS_FREETYPE_ERROR", "freetype-error" }, + { CAIRO_STATUS_LAST_STATUS, "CAIRO_STATUS_LAST_STATUS", "last-status" }, + { CAIRO_STATUS_WIN32_GDI_ERROR, "CAIRO_STATUS_WIN32_GDI_ERROR", "win32-gdi-error" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_status_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_content_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_CONTENT_COLOR, "CAIRO_CONTENT_COLOR", "color" }, + { CAIRO_CONTENT_ALPHA, "CAIRO_CONTENT_ALPHA", "alpha" }, + { CAIRO_CONTENT_COLOR_ALPHA, "CAIRO_CONTENT_COLOR_ALPHA", "color-alpha" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_content_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_operator_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_OPERATOR_CLEAR, "CAIRO_OPERATOR_CLEAR", "clear" }, + { CAIRO_OPERATOR_SOURCE, "CAIRO_OPERATOR_SOURCE", "source" }, + { CAIRO_OPERATOR_OVER, "CAIRO_OPERATOR_OVER", "over" }, + { CAIRO_OPERATOR_IN, "CAIRO_OPERATOR_IN", "in" }, + { CAIRO_OPERATOR_OUT, "CAIRO_OPERATOR_OUT", "out" }, + { CAIRO_OPERATOR_ATOP, "CAIRO_OPERATOR_ATOP", "atop" }, + { CAIRO_OPERATOR_DEST, "CAIRO_OPERATOR_DEST", "dest" }, + { CAIRO_OPERATOR_DEST_OVER, "CAIRO_OPERATOR_DEST_OVER", "dest-over" }, + { CAIRO_OPERATOR_DEST_IN, "CAIRO_OPERATOR_DEST_IN", "dest-in" }, + { CAIRO_OPERATOR_DEST_OUT, "CAIRO_OPERATOR_DEST_OUT", "dest-out" }, + { CAIRO_OPERATOR_DEST_ATOP, "CAIRO_OPERATOR_DEST_ATOP", "dest-atop" }, + { CAIRO_OPERATOR_XOR, "CAIRO_OPERATOR_XOR", "xor" }, + { CAIRO_OPERATOR_ADD, "CAIRO_OPERATOR_ADD", "add" }, + { CAIRO_OPERATOR_SATURATE, "CAIRO_OPERATOR_SATURATE", "saturate" }, + { CAIRO_OPERATOR_MULTIPLY, "CAIRO_OPERATOR_MULTIPLY", "multiply" }, + { CAIRO_OPERATOR_SCREEN, "CAIRO_OPERATOR_SCREEN", "screen" }, + { CAIRO_OPERATOR_OVERLAY, "CAIRO_OPERATOR_OVERLAY", "overlay" }, + { CAIRO_OPERATOR_DARKEN, "CAIRO_OPERATOR_DARKEN", "darken" }, + { CAIRO_OPERATOR_LIGHTEN, "CAIRO_OPERATOR_LIGHTEN", "lighten" }, + { CAIRO_OPERATOR_COLOR_DODGE, "CAIRO_OPERATOR_COLOR_DODGE", "color-dodge" }, + { CAIRO_OPERATOR_COLOR_BURN, "CAIRO_OPERATOR_COLOR_BURN", "color-burn" }, + { CAIRO_OPERATOR_HARD_LIGHT, "CAIRO_OPERATOR_HARD_LIGHT", "hard-light" }, + { CAIRO_OPERATOR_SOFT_LIGHT, "CAIRO_OPERATOR_SOFT_LIGHT", "soft-light" }, + { CAIRO_OPERATOR_DIFFERENCE, "CAIRO_OPERATOR_DIFFERENCE", "difference" }, + { CAIRO_OPERATOR_EXCLUSION, "CAIRO_OPERATOR_EXCLUSION", "exclusion" }, + { CAIRO_OPERATOR_HSL_HUE, "CAIRO_OPERATOR_HSL_HUE", "hsl-hue" }, + { CAIRO_OPERATOR_HSL_SATURATION, "CAIRO_OPERATOR_HSL_SATURATION", "hsl-saturation" }, + { CAIRO_OPERATOR_HSL_COLOR, "CAIRO_OPERATOR_HSL_COLOR", "hsl-color" }, + { CAIRO_OPERATOR_HSL_LUMINOSITY, "CAIRO_OPERATOR_HSL_LUMINOSITY", "hsl-luminosity" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_operator_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_antialias_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_ANTIALIAS_DEFAULT, "CAIRO_ANTIALIAS_DEFAULT", "default" }, + + { CAIRO_ANTIALIAS_NONE, "CAIRO_ANTIALIAS_NONE", "none" }, + { CAIRO_ANTIALIAS_GRAY, "CAIRO_ANTIALIAS_GRAY", "gray" }, + { CAIRO_ANTIALIAS_SUBPIXEL, "CAIRO_ANTIALIAS_SUBPIXEL", "subpixel" }, + + { CAIRO_ANTIALIAS_FAST, "CAIRO_ANTIALIAS_FAST", "fast" }, + { CAIRO_ANTIALIAS_GOOD, "CAIRO_ANTIALIAS_GOOD", "good" }, + { CAIRO_ANTIALIAS_BEST, "CAIRO_ANTIALIAS_BEST", "best" }, + + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_antialias_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_fill_rule_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_FILL_RULE_WINDING, "CAIRO_FILL_RULE_WINDING", "winding" }, + { CAIRO_FILL_RULE_EVEN_ODD, "CAIRO_FILL_RULE_EVEN_ODD", "even-odd" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_fill_rule_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_line_cap_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_LINE_CAP_BUTT, "CAIRO_LINE_CAP_BUTT", "butt" }, + { CAIRO_LINE_CAP_ROUND, "CAIRO_LINE_CAP_ROUND", "round" }, + { CAIRO_LINE_CAP_SQUARE, "CAIRO_LINE_CAP_SQUARE", "square" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_line_cap_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_line_join_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_LINE_JOIN_MITER, "CAIRO_LINE_JOIN_MITER", "miter" }, + { CAIRO_LINE_JOIN_ROUND, "CAIRO_LINE_JOIN_ROUND", "round" }, + { CAIRO_LINE_JOIN_BEVEL, "CAIRO_LINE_JOIN_BEVEL", "bevel" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_line_join_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_text_cluster_flags_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_TEXT_CLUSTER_FLAG_BACKWARD, "CAIRO_TEXT_CLUSTER_FLAG_BACKWARD", "backward" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_text_cluster_flags_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_font_slant_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_FONT_SLANT_NORMAL, "CAIRO_FONT_SLANT_NORMAL", "normal" }, + { CAIRO_FONT_SLANT_ITALIC, "CAIRO_FONT_SLANT_ITALIC", "italic" }, + { CAIRO_FONT_SLANT_OBLIQUE, "CAIRO_FONT_SLANT_OBLIQUE", "oblique" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_font_slant_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_font_weight_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_FONT_WEIGHT_NORMAL, "CAIRO_FONT_WEIGHT_NORMAL", "normal" }, + { CAIRO_FONT_WEIGHT_BOLD, "CAIRO_FONT_WEIGHT_BOLD", "bold" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_font_weight_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_subpixel_order_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_SUBPIXEL_ORDER_DEFAULT, "CAIRO_SUBPIXEL_ORDER_DEFAULT", "default" }, + { CAIRO_SUBPIXEL_ORDER_RGB, "CAIRO_SUBPIXEL_ORDER_RGB", "rgb" }, + { CAIRO_SUBPIXEL_ORDER_BGR, "CAIRO_SUBPIXEL_ORDER_BGR", "bgr" }, + { CAIRO_SUBPIXEL_ORDER_VRGB, "CAIRO_SUBPIXEL_ORDER_VRGB", "vrgb" }, + { CAIRO_SUBPIXEL_ORDER_VBGR, "CAIRO_SUBPIXEL_ORDER_VBGR", "vbgr" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_subpixel_order_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_hint_style_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_HINT_STYLE_DEFAULT, "CAIRO_HINT_STYLE_DEFAULT", "default" }, + { CAIRO_HINT_STYLE_NONE, "CAIRO_HINT_STYLE_NONE", "none" }, + { CAIRO_HINT_STYLE_SLIGHT, "CAIRO_HINT_STYLE_SLIGHT", "slight" }, + { CAIRO_HINT_STYLE_MEDIUM, "CAIRO_HINT_STYLE_MEDIUM", "medium" }, + { CAIRO_HINT_STYLE_FULL, "CAIRO_HINT_STYLE_FULL", "full" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_hint_style_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_hint_metrics_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_HINT_METRICS_DEFAULT, "CAIRO_HINT_METRICS_DEFAULT", "default" }, + { CAIRO_HINT_METRICS_OFF, "CAIRO_HINT_METRICS_OFF", "off" }, + { CAIRO_HINT_METRICS_ON, "CAIRO_HINT_METRICS_ON", "on" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_hint_metrics_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_font_type_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_FONT_TYPE_TOY, "CAIRO_FONT_TYPE_TOY", "toy" }, + { CAIRO_FONT_TYPE_FT, "CAIRO_FONT_TYPE_FT", "ft" }, + { CAIRO_FONT_TYPE_WIN32, "CAIRO_FONT_TYPE_WIN32", "win32" }, + { CAIRO_FONT_TYPE_QUARTZ, "CAIRO_FONT_TYPE_QUARTZ", "quartz" }, + { CAIRO_FONT_TYPE_USER, "CAIRO_FONT_TYPE_USER", "user" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_font_type_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_path_data_type_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_PATH_MOVE_TO, "CAIRO_PATH_MOVE_TO", "move-to" }, + { CAIRO_PATH_LINE_TO, "CAIRO_PATH_LINE_TO", "line-to" }, + { CAIRO_PATH_CURVE_TO, "CAIRO_PATH_CURVE_TO", "curve-to" }, + { CAIRO_PATH_CLOSE_PATH, "CAIRO_PATH_CLOSE_PATH", "close-path" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_path_data_type_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_device_type_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_DEVICE_TYPE_DRM, "CAIRO_DEVICE_TYPE_DRM", "drm" }, + { CAIRO_DEVICE_TYPE_GL, "CAIRO_DEVICE_TYPE_GL", "gl" }, + { CAIRO_DEVICE_TYPE_SCRIPT, "CAIRO_DEVICE_TYPE_SCRIPT", "script" }, + { CAIRO_DEVICE_TYPE_XCB, "CAIRO_DEVICE_TYPE_XCB", "xcb" }, + { CAIRO_DEVICE_TYPE_XLIB, "CAIRO_DEVICE_TYPE_XLIB", "xlib" }, + { CAIRO_DEVICE_TYPE_XML, "CAIRO_DEVICE_TYPE_XML", "xml" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_device_type_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_surface_type_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_SURFACE_TYPE_IMAGE, "CAIRO_SURFACE_TYPE_IMAGE", "image" }, + { CAIRO_SURFACE_TYPE_PDF, "CAIRO_SURFACE_TYPE_PDF", "pdf" }, + { CAIRO_SURFACE_TYPE_PS, "CAIRO_SURFACE_TYPE_PS", "ps" }, + { CAIRO_SURFACE_TYPE_XLIB, "CAIRO_SURFACE_TYPE_XLIB", "xlib" }, + { CAIRO_SURFACE_TYPE_XCB, "CAIRO_SURFACE_TYPE_XCB", "xcb" }, + { CAIRO_SURFACE_TYPE_GLITZ, "CAIRO_SURFACE_TYPE_GLITZ", "glitz" }, + { CAIRO_SURFACE_TYPE_QUARTZ, "CAIRO_SURFACE_TYPE_QUARTZ", "quartz" }, + { CAIRO_SURFACE_TYPE_WIN32, "CAIRO_SURFACE_TYPE_WIN32", "win32" }, + { CAIRO_SURFACE_TYPE_BEOS, "CAIRO_SURFACE_TYPE_BEOS", "beos" }, + { CAIRO_SURFACE_TYPE_DIRECTFB, "CAIRO_SURFACE_TYPE_DIRECTFB", "directfb" }, + { CAIRO_SURFACE_TYPE_SVG, "CAIRO_SURFACE_TYPE_SVG", "svg" }, + { CAIRO_SURFACE_TYPE_OS2, "CAIRO_SURFACE_TYPE_OS2", "os2" }, + { CAIRO_SURFACE_TYPE_WIN32_PRINTING, "CAIRO_SURFACE_TYPE_WIN32_PRINTING", "win32-printing" }, + { CAIRO_SURFACE_TYPE_QUARTZ_IMAGE, "CAIRO_SURFACE_TYPE_QUARTZ_IMAGE", "quartz-image" }, + { CAIRO_SURFACE_TYPE_SCRIPT, "CAIRO_SURFACE_TYPE_SCRIPT", "script" }, + { CAIRO_SURFACE_TYPE_QT, "CAIRO_SURFACE_TYPE_QT", "qt" }, + { CAIRO_SURFACE_TYPE_RECORDING, "CAIRO_SURFACE_TYPE_RECORDING", "recording" }, + { CAIRO_SURFACE_TYPE_VG, "CAIRO_SURFACE_TYPE_VG", "vg" }, + { CAIRO_SURFACE_TYPE_GL, "CAIRO_SURFACE_TYPE_GL", "gl" }, + { CAIRO_SURFACE_TYPE_DRM, "CAIRO_SURFACE_TYPE_DRM", "drm" }, + { CAIRO_SURFACE_TYPE_TEE, "CAIRO_SURFACE_TYPE_TEE", "tee" }, + { CAIRO_SURFACE_TYPE_XML, "CAIRO_SURFACE_TYPE_XML", "xml" }, + { CAIRO_SURFACE_TYPE_SKIA, "CAIRO_SURFACE_TYPE_SKIA", "skia" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_surface_type_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_format_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_FORMAT_INVALID, "CAIRO_FORMAT_INVALID", "invalid" }, + { CAIRO_FORMAT_ARGB32, "CAIRO_FORMAT_ARGB32", "argb32" }, + { CAIRO_FORMAT_RGB24, "CAIRO_FORMAT_RGB24", "rgb24" }, + { CAIRO_FORMAT_A8, "CAIRO_FORMAT_A8", "a8" }, + { CAIRO_FORMAT_A1, "CAIRO_FORMAT_A1", "a1" }, + { CAIRO_FORMAT_RGB16_565, "CAIRO_FORMAT_RGB16_565", "rgb16-565" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_format_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_pattern_type_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_PATTERN_TYPE_SOLID, "CAIRO_PATTERN_TYPE_SOLID", "solid" }, + { CAIRO_PATTERN_TYPE_SURFACE, "CAIRO_PATTERN_TYPE_SURFACE", "surface" }, + { CAIRO_PATTERN_TYPE_LINEAR, "CAIRO_PATTERN_TYPE_LINEAR", "linear" }, + { CAIRO_PATTERN_TYPE_RADIAL, "CAIRO_PATTERN_TYPE_RADIAL", "radial" }, + { CAIRO_PATTERN_TYPE_MESH, "CAIRO_PATTERN_TYPE_MESH", "mesh" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_pattern_type_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_extend_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_EXTEND_NONE, "CAIRO_EXTEND_NONE", "none" }, + { CAIRO_EXTEND_REPEAT, "CAIRO_EXTEND_REPEAT", "repeat" }, + { CAIRO_EXTEND_REFLECT, "CAIRO_EXTEND_REFLECT", "reflect" }, + { CAIRO_EXTEND_PAD, "CAIRO_EXTEND_PAD", "pad" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_extend_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_filter_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_FILTER_FAST, "CAIRO_FILTER_FAST", "fast" }, + { CAIRO_FILTER_GOOD, "CAIRO_FILTER_GOOD", "good" }, + { CAIRO_FILTER_BEST, "CAIRO_FILTER_BEST", "best" }, + { CAIRO_FILTER_NEAREST, "CAIRO_FILTER_NEAREST", "nearest" }, + { CAIRO_FILTER_BILINEAR, "CAIRO_FILTER_BILINEAR", "bilinear" }, + { CAIRO_FILTER_GAUSSIAN, "CAIRO_FILTER_GAUSSIAN", "gaussian" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_filter_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + +GType +cairo_gobject_region_overlap_get_type (void) +{ + static volatile gsize type_volatile = 0; + if (g_once_init_enter (&type_volatile)) { + static const GEnumValue values[] = { + { CAIRO_REGION_OVERLAP_IN, "CAIRO_REGION_OVERLAP_IN", "in" }, + { CAIRO_REGION_OVERLAP_OUT, "CAIRO_REGION_OVERLAP_OUT", "out" }, + { CAIRO_REGION_OVERLAP_PART, "CAIRO_REGION_OVERLAP_PART", "part" }, + { 0, NULL, NULL } + }; + GType type = g_enum_register_static (g_intern_static_string ("cairo_region_overlap_t"), values); + + g_once_init_leave (&type_volatile, type); + } + return type_volatile; +} + + +/* Generated data ends here */ + diff --git a/libs/cairo-1.16.0/util/cairo-gobject/cairo-gobject-structs.c b/libs/cairo-1.16.0/util/cairo-gobject/cairo-gobject-structs.c new file mode 100644 index 0000000..4bbf11b --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-gobject/cairo-gobject-structs.c @@ -0,0 +1,89 @@ +/* cairo - a vector graphics library with display and print output + * + * Copyright © 2010 Red Hat Inc. + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is University of Southern + * California. + * + * Contributor(s): + * Benjamin Otte <otte@redhat.com> + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "cairo-gobject.h" + +#define CAIRO_DEFINE_BOXED(Name,underscore_name,copy_func,free_func) \ +GType \ +underscore_name ## _get_type (void) \ +{ \ + static volatile gsize type_volatile = 0; \ + if (g_once_init_enter (&type_volatile)) { \ + GType type = g_boxed_type_register_static (g_intern_static_string (Name), \ + (GBoxedCopyFunc)copy_func, \ + (GBoxedFreeFunc)free_func); \ + g_once_init_leave (&type_volatile, type); \ + } \ + return type_volatile; \ +} + +CAIRO_DEFINE_BOXED ("CairoContext", cairo_gobject_context, + cairo_reference, cairo_destroy); +CAIRO_DEFINE_BOXED ("CairoDevice", cairo_gobject_device, + cairo_device_reference, cairo_device_destroy); +CAIRO_DEFINE_BOXED ("CairoPattern", cairo_gobject_pattern, + cairo_pattern_reference, cairo_pattern_destroy); +CAIRO_DEFINE_BOXED ("CairoSurface", cairo_gobject_surface, + cairo_surface_reference, cairo_surface_destroy); +CAIRO_DEFINE_BOXED ("CairoScaledFont", cairo_gobject_scaled_font, + cairo_scaled_font_reference, cairo_scaled_font_destroy); +CAIRO_DEFINE_BOXED ("CairoFontFace", cairo_gobject_font_face, + cairo_font_face_reference, cairo_font_face_destroy); +CAIRO_DEFINE_BOXED ("CairoFontOptions", cairo_gobject_font_options, + cairo_font_options_copy, cairo_font_options_destroy); +CAIRO_DEFINE_BOXED ("CairoRegion", cairo_gobject_region, + cairo_region_reference, cairo_region_destroy); + +#define COPY_FUNC(name) \ +static gpointer \ +cairo_gobject_cairo_ ## name ## _copy (gpointer src) \ +{ \ + return g_memdup (src, sizeof (cairo_ ## name ## _t)); \ +} + +COPY_FUNC (matrix) +CAIRO_DEFINE_BOXED ("CairoMatrix", cairo_gobject_matrix, + cairo_gobject_cairo_matrix_copy, g_free); +COPY_FUNC (rectangle) +CAIRO_DEFINE_BOXED ("CairoRectangle", cairo_gobject_rectangle, + cairo_gobject_cairo_rectangle_copy, g_free); +COPY_FUNC (rectangle_int) +CAIRO_DEFINE_BOXED ("CairoRectangleInt", cairo_gobject_rectangle_int, + cairo_gobject_cairo_rectangle_int_copy, g_free); diff --git a/libs/cairo-1.16.0/util/cairo-gobject/cairo-gobject.h b/libs/cairo-1.16.0/util/cairo-gobject/cairo-gobject.h new file mode 100644 index 0000000..459074e --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-gobject/cairo-gobject.h @@ -0,0 +1,192 @@ +/* cairo - a vector graphics library with display and print output + * + * Copyright © 2010 Red Hat Inc. + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is University of Southern + * California. + * + * Contributor(s): + * Benjamin Otte <otte@redhat.com> + */ + +#ifndef CAIRO_GOBJECT_H +#define CAIRO_GOBJECT_H + +#include <cairo.h> + +#if CAIRO_HAS_GOBJECT_FUNCTIONS + +#include <glib-object.h> + +CAIRO_BEGIN_DECLS + +/* structs */ + +#define CAIRO_GOBJECT_TYPE_CONTEXT cairo_gobject_context_get_type () +cairo_public GType +cairo_gobject_context_get_type (void); + +#define CAIRO_GOBJECT_TYPE_DEVICE cairo_gobject_device_get_type () +cairo_public GType +cairo_gobject_device_get_type (void); + +#define CAIRO_GOBJECT_TYPE_MATRIX cairo_gobject_matrix_get_type () +cairo_public GType +cairo_gobject_matrix_get_type (void); + +#define CAIRO_GOBJECT_TYPE_PATTERN cairo_gobject_pattern_get_type () +cairo_public GType +cairo_gobject_pattern_get_type (void); + +#define CAIRO_GOBJECT_TYPE_SURFACE cairo_gobject_surface_get_type () +cairo_public GType +cairo_gobject_surface_get_type (void); + +#define CAIRO_GOBJECT_TYPE_RECTANGLE cairo_gobject_rectangle_get_type () +cairo_public GType +cairo_gobject_rectangle_get_type (void); + +#define CAIRO_GOBJECT_TYPE_SCALED_FONT cairo_gobject_scaled_font_get_type () +cairo_public GType +cairo_gobject_scaled_font_get_type (void); + +#define CAIRO_GOBJECT_TYPE_FONT_FACE cairo_gobject_font_face_get_type () +cairo_public GType +cairo_gobject_font_face_get_type (void); + +#define CAIRO_GOBJECT_TYPE_FONT_OPTIONS cairo_gobject_font_options_get_type () +cairo_public GType +cairo_gobject_font_options_get_type (void); + +#define CAIRO_GOBJECT_TYPE_RECTANGLE_INT cairo_gobject_rectangle_int_get_type () +cairo_public GType +cairo_gobject_rectangle_int_get_type (void); + +#define CAIRO_GOBJECT_TYPE_REGION cairo_gobject_region_get_type () +cairo_public GType +cairo_gobject_region_get_type (void); + +/* enums */ + +#define CAIRO_GOBJECT_TYPE_STATUS cairo_gobject_status_get_type () +cairo_public GType +cairo_gobject_status_get_type (void); + +#define CAIRO_GOBJECT_TYPE_CONTENT cairo_gobject_content_get_type () +cairo_public GType +cairo_gobject_content_get_type (void); + +#define CAIRO_GOBJECT_TYPE_OPERATOR cairo_gobject_operator_get_type () +cairo_public GType +cairo_gobject_operator_get_type (void); + +#define CAIRO_GOBJECT_TYPE_ANTIALIAS cairo_gobject_antialias_get_type () +cairo_public GType +cairo_gobject_antialias_get_type (void); + +#define CAIRO_GOBJECT_TYPE_FILL_RULE cairo_gobject_fill_rule_get_type () +cairo_public GType +cairo_gobject_fill_rule_get_type (void); + +#define CAIRO_GOBJECT_TYPE_LINE_CAP cairo_gobject_line_cap_get_type () +cairo_public GType +cairo_gobject_line_cap_get_type (void); + +#define CAIRO_GOBJECT_TYPE_LINE_JOIN cairo_gobject_line_join_get_type () +cairo_public GType +cairo_gobject_line_join_get_type (void); + +#define CAIRO_GOBJECT_TYPE_TEXT_CLUSTER_FLAGS cairo_gobject_text_cluster_flags_get_type () +cairo_public GType +cairo_gobject_text_cluster_flags_get_type (void); + +#define CAIRO_GOBJECT_TYPE_FONT_SLANT cairo_gobject_font_slant_get_type () +cairo_public GType +cairo_gobject_font_slant_get_type (void); + +#define CAIRO_GOBJECT_TYPE_FONT_WEIGHT cairo_gobject_font_weight_get_type () +cairo_public GType +cairo_gobject_font_weight_get_type (void); + +#define CAIRO_GOBJECT_TYPE_SUBPIXEL_ORDER cairo_gobject_subpixel_order_get_type () +cairo_public GType +cairo_gobject_subpixel_order_get_type (void); + +#define CAIRO_GOBJECT_TYPE_HINT_STYLE cairo_gobject_hint_style_get_type () +cairo_public GType +cairo_gobject_hint_style_get_type (void); + +/* historical accident */ +#define CAIRO_GOBJECT_TYPE_HNT_METRICS cairo_gobject_hint_metrics_get_type () +#define CAIRO_GOBJECT_TYPE_HINT_METRICS cairo_gobject_hint_metrics_get_type () +cairo_public GType +cairo_gobject_hint_metrics_get_type (void); + +#define CAIRO_GOBJECT_TYPE_FONT_TYPE cairo_gobject_font_type_get_type () +cairo_public GType +cairo_gobject_font_type_get_type (void); + +#define CAIRO_GOBJECT_TYPE_PATH_DATA_TYPE cairo_gobject_path_data_type_get_type () +cairo_public GType +cairo_gobject_path_data_type_get_type (void); + +#define CAIRO_GOBJECT_TYPE_DEVICE_TYPE cairo_gobject_device_type_get_type () +cairo_public GType +cairo_gobject_device_type_get_type (void); + +#define CAIRO_GOBJECT_TYPE_SURFACE_TYPE cairo_gobject_surface_type_get_type () +cairo_public GType +cairo_gobject_surface_type_get_type (void); + +#define CAIRO_GOBJECT_TYPE_FORMAT cairo_gobject_format_get_type () +cairo_public GType +cairo_gobject_format_get_type (void); + +#define CAIRO_GOBJECT_TYPE_PATTERN_TYPE cairo_gobject_pattern_type_get_type () +cairo_public GType +cairo_gobject_pattern_type_get_type (void); + +#define CAIRO_GOBJECT_TYPE_EXTEND cairo_gobject_extend_get_type () +cairo_public GType +cairo_gobject_extend_get_type (void); + +#define CAIRO_GOBJECT_TYPE_FILTER cairo_gobject_filter_get_type () +cairo_public GType +cairo_gobject_filter_get_type (void); + +#define CAIRO_GOBJECT_TYPE_REGION_OVERLAP cairo_gobject_region_overlap_get_type () +cairo_public GType +cairo_gobject_region_overlap_get_type (void); + +CAIRO_END_DECLS + +#else /* CAIRO_HAS_GOBJECT_FUNCTIONS */ +# error Cairo was not compiled with support for GObject +#endif /* CAIRO_HAS_GOBJECT_FUNCTIONS */ + +#endif /* CAIRO_GOBJECT_H */ diff --git a/libs/cairo-1.16.0/util/cairo-missing/Makefile.am b/libs/cairo-1.16.0/util/cairo-missing/Makefile.am new file mode 100644 index 0000000..9078610 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-missing/Makefile.am @@ -0,0 +1,10 @@ +include $(top_srcdir)/util/cairo-missing/Makefile.sources + +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src + +noinst_LTLIBRARIES = libcairo-missing.la + +libcairo_missing_la_SOURCES = \ + $(libcairo_missing_sources) \ + $(libcairo_missing_headers) \ + $(NULL) diff --git a/libs/cairo-1.16.0/util/cairo-missing/Makefile.in b/libs/cairo-1.16.0/util/cairo-missing/Makefile.in new file mode 100644 index 0000000..d0ec174 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-missing/Makefile.in @@ -0,0 +1,722 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = util/cairo-missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \ + $(top_srcdir)/build/aclocal.compare.m4 \ + $(top_srcdir)/build/aclocal.enable.m4 \ + $(top_srcdir)/build/aclocal.float.m4 \ + $(top_srcdir)/build/aclocal.makefile.m4 \ + $(top_srcdir)/build/aclocal.pkg.m4 \ + $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \ + $(top_srcdir)/build/ltoptions.m4 \ + $(top_srcdir)/build/ltsugar.m4 \ + $(top_srcdir)/build/ltversion.m4 \ + $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/cairo-version.h \ + $(top_srcdir)/build/configure.ac.version \ + $(top_srcdir)/build/configure.ac.tools \ + $(top_srcdir)/build/configure.ac.features \ + $(top_srcdir)/build/configure.ac.warnings \ + $(top_srcdir)/build/configure.ac.system \ + $(top_srcdir)/build/configure.ac.analysis \ + $(top_srcdir)/build/configure.ac.noversion \ + $(top_srcdir)/build/configure.ac.pthread \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libcairo_missing_la_LIBADD = +am__objects_1 = strndup.lo getline.lo +am__objects_2 = +am_libcairo_missing_la_OBJECTS = $(am__objects_1) $(am__objects_2) +libcairo_missing_la_OBJECTS = $(am_libcairo_missing_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libcairo_missing_la_SOURCES) +DIST_SOURCES = $(libcairo_missing_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/build/depcomp \ + $(top_srcdir)/util/cairo-missing/Makefile.sources +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BFD_LIBS = @BFD_LIBS@ +CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_LDFLAGS = @CAIRO_LDFLAGS@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@ +CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@ +CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@ +CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@ +CAIRO_REQUIRES = @CAIRO_REQUIRES@ +CAIRO_TEST_MODE = @CAIRO_TEST_MODE@ +CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@ +CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@ +CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@ +CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@ +CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIND = @FIND@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ +GOBJECT_LIBS = @GOBJECT_LIBS@ +GREP = @GREP@ +GS = @GS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +LIBRSVG_LIBS = @LIBRSVG_LIBS@ +LIBS = @LIBS@ +LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@ +LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LTP = @LTP@ +LTP_GENHTML = @LTP_GENHTML@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@ +PKG_CONFIG = @PKG_CONFIG@ +POPPLER_CFLAGS = @POPPLER_CFLAGS@ +POPPLER_LIBS = @POPPLER_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHLIB_EXT = @SHLIB_EXT@ +SHM_LIBS = @SHM_LIBS@ +SHTOOL = @SHTOOL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +XARGS = @XARGS@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cogl_CFLAGS = @cogl_CFLAGS@ +cogl_LIBS = @cogl_LIBS@ +datadir = @datadir@ +datarootdir = @datarootdir@ +directfb_CFLAGS = @directfb_CFLAGS@ +directfb_LIBS = @directfb_LIBS@ +docdir = @docdir@ +drm_CFLAGS = @drm_CFLAGS@ +drm_LIBS = @drm_LIBS@ +dvidir = @dvidir@ +egl_CFLAGS = @egl_CFLAGS@ +egl_LIBS = @egl_LIBS@ +exec_prefix = @exec_prefix@ +gallium_DIR = @gallium_DIR@ +gl_CFLAGS = @gl_CFLAGS@ +gl_LIBS = @gl_LIBS@ +glesv2_CFLAGS = @glesv2_CFLAGS@ +glesv2_LIBS = @glesv2_LIBS@ +glesv3_CFLAGS = @glesv3_CFLAGS@ +glesv3_LIBS = @glesv3_LIBS@ +glib_CFLAGS = @glib_CFLAGS@ +glib_LIBS = @glib_LIBS@ +gtk_CFLAGS = @gtk_CFLAGS@ +gtk_LIBS = @gtk_LIBS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lzo_LIBS = @lzo_LIBS@ +mandir = @mandir@ +mesa_DIR = @mesa_DIR@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pixman_CFLAGS = @pixman_CFLAGS@ +pixman_LIBS = @pixman_LIBS@ +png_CFLAGS = @png_CFLAGS@ +png_LIBS = @png_LIBS@ +png_REQUIRES = @png_REQUIRES@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pthread_CFLAGS = @pthread_CFLAGS@ +pthread_LIBS = @pthread_LIBS@ +qt_CFLAGS = @qt_CFLAGS@ +qt_LIBS = @qt_LIBS@ +real_pthread_CFLAGS = @real_pthread_CFLAGS@ +real_pthread_LIBS = @real_pthread_LIBS@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +shm_LIBS = @shm_LIBS@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xcb_CFLAGS = @xcb_CFLAGS@ +xcb_LIBS = @xcb_LIBS@ +xcb_shm_CFLAGS = @xcb_shm_CFLAGS@ +xcb_shm_LIBS = @xcb_shm_LIBS@ +xlib_CFLAGS = @xlib_CFLAGS@ +xlib_LIBS = @xlib_LIBS@ +xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@ +xlib_xcb_LIBS = @xlib_xcb_LIBS@ +xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@ +xlib_xrender_LIBS = @xlib_xrender_LIBS@ +libcairo_missing_sources = \ + strndup.c \ + getline.c \ + $(NULL) + +libcairo_missing_headers = \ + cairo-missing.h \ + $(NULL) + +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src +noinst_LTLIBRARIES = libcairo-missing.la +libcairo_missing_la_SOURCES = \ + $(libcairo_missing_sources) \ + $(libcairo_missing_headers) \ + $(NULL) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/util/cairo-missing/Makefile.sources $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/cairo-missing/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign util/cairo-missing/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(top_srcdir)/util/cairo-missing/Makefile.sources $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libcairo-missing.la: $(libcairo_missing_la_OBJECTS) $(libcairo_missing_la_DEPENDENCIES) $(EXTRA_libcairo_missing_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libcairo_missing_la_OBJECTS) $(libcairo_missing_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libs/cairo-1.16.0/util/cairo-missing/Makefile.sources b/libs/cairo-1.16.0/util/cairo-missing/Makefile.sources new file mode 100644 index 0000000..1a30631 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-missing/Makefile.sources @@ -0,0 +1,8 @@ +libcairo_missing_sources = \ + strndup.c \ + getline.c \ + $(NULL) + +libcairo_missing_headers = \ + cairo-missing.h \ + $(NULL) diff --git a/libs/cairo-1.16.0/util/cairo-missing/cairo-missing.h b/libs/cairo-1.16.0/util/cairo-missing/cairo-missing.h new file mode 100644 index 0000000..741b498 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-missing/cairo-missing.h @@ -0,0 +1,59 @@ +/* cairo - a vector graphics library with display and print output + * + * Copyright © 2006 Red Hat, Inc. + * Copyright © 2011 Andrea Canciani + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of the + * copyright holders not be used in advertising or publicity + * pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied + * warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + * + * Authors: Carl Worth <cworth@cworth.org> + * Andrea Canciani <ranma42@gmail.com> + */ + +#ifndef CAIRO_MISSING_H +#define CAIRO_MISSING_H + +#include "cairo-compiler-private.h" + +#include <stdio.h> +#include <string.h> +#include <sys/types.h> + +#ifdef _WIN32 +#define WIN32_LEAN_AND_MEAN +#include <windows.h> + +#if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_) +typedef SSIZE_T ssize_t; +#endif +#endif + +#ifndef HAVE_GETLINE +cairo_private ssize_t +getline (char **lineptr, size_t *n, FILE *stream); +#endif + +#ifndef HAVE_STRNDUP +cairo_private char * +strndup (const char *s, size_t n); +#endif + +#endif diff --git a/libs/cairo-1.16.0/util/cairo-missing/getline.c b/libs/cairo-1.16.0/util/cairo-missing/getline.c new file mode 100644 index 0000000..8585cfd --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-missing/getline.c @@ -0,0 +1,90 @@ +/* cairo - a vector graphics library with display and print output + * + * Copyright © 2006 Red Hat, Inc. + * Copyright © 2011 Andrea Canciani + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of the + * copyright holders not be used in advertising or publicity + * pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied + * warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + * + * Authors: Carl Worth <cworth@cworth.org> + * Andrea Canciani <ranma42@gmail.com> + */ + +#include "cairo-missing.h" + +#ifndef HAVE_GETLINE +#include "cairo-malloc-private.h" + +#define GETLINE_MIN_BUFFER_SIZE 128 +ssize_t +getline (char **lineptr, + size_t *n, + FILE *stream) +{ + char *line, *tmpline; + size_t len, offset; + ssize_t ret; + + offset = 0; + len = *n; + line = *lineptr; + if (len < GETLINE_MIN_BUFFER_SIZE) { + len = GETLINE_MIN_BUFFER_SIZE; + line = NULL; + } + + if (line == NULL) { + line = (char *) _cairo_malloc (len); + if (unlikely (line == NULL)) + return -1; + } + + while (1) { + if (offset + 1 == len) { + tmpline = (char *) _cairo_realloc_ab (line, len, 2); + if (unlikely (tmpline == NULL)) { + if (line != *lineptr) + free (line); + return -1; + } + len *= 2; + line = tmpline; + } + + ret = getc (stream); + if (ret == -1) + break; + + line[offset++] = ret; + if (ret == '\n') { + ret = offset; + break; + } + } + + line[offset++] = '\0'; + *lineptr = line; + *n = len; + + return ret; +} +#undef GETLINE_BUFFER_SIZE +#endif diff --git a/libs/cairo-1.16.0/util/cairo-missing/strndup.c b/libs/cairo-1.16.0/util/cairo-missing/strndup.c new file mode 100644 index 0000000..280ea30 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-missing/strndup.c @@ -0,0 +1,57 @@ +/* cairo - a vector graphics library with display and print output + * + * Copyright © 2006 Red Hat, Inc. + * Copyright © 2011 Andrea Canciani + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of the + * copyright holders not be used in advertising or publicity + * pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied + * warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + * + * Authors: Carl Worth <cworth@cworth.org> + * Andrea Canciani <ranma42@gmail.com> + */ + +#include "cairo-missing.h" + +#ifndef HAVE_STRNDUP +#include "cairo-malloc-private.h" + +char * +strndup (const char *s, + size_t n) +{ + size_t len; + char *sdup; + + if (s == NULL) + return NULL; + + len = strlen (s); + if (len > n) + len = n; + sdup = (char *) _cairo_malloc (len + 1); + if (sdup != NULL) { + memcpy (sdup, s, len); + sdup[len] = '\0'; + } + + return sdup; +} +#endif diff --git a/libs/cairo-1.16.0/util/cairo-script/COPYING b/libs/cairo-1.16.0/util/cairo-script/COPYING new file mode 100644 index 0000000..66ad784 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/COPYING @@ -0,0 +1,17 @@ +Cairo is free software. + +Every source file in the implementation of cairo is available to be +redistributed and/or modified under the terms of either the GNU Lesser +General Public License (LGPL) version 2.1 or the Mozilla Public +License (MPL) version 1.1. Some files are available under more +liberal terms, but we believe that in all cases, each file may be used +under either the LGPL or the MPL. + +See the following files in this directory for the precise terms and +conditions of either license: + + COPYING-LGPL-2.1 + COPYING-MPL-1.1 + +Please see each file in the implementation for copyright and licensing +information, (in the opening comment of each file). diff --git a/libs/cairo-1.16.0/util/cairo-script/Makefile.am b/libs/cairo-1.16.0/util/cairo-script/Makefile.am new file mode 100644 index 0000000..d5c2998 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/Makefile.am @@ -0,0 +1,34 @@ +include $(top_srcdir)/util/cairo-script/Makefile.sources + +SUBDIRS = examples + +lib_LTLIBRARIES = libcairo-script-interpreter.la +EXTRA_PROGRAMS = csi-replay csi-exec csi-bind + +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src + +cairoincludedir=$(includedir)/cairo +cairoinclude_HEADERS = cairo-script-interpreter.h +libcairo_script_interpreter_la_SOURCES = \ + $(libcairo_script_interpreter_sources) \ + $(libcairo_script_interpreter_headers) \ + $(NULL) +libcairo_script_interpreter_la_CFLAGS = $(CAIRO_CFLAGS) +libcairo_script_interpreter_la_LDFLAGS = -version-info $(CAIRO_LIBTOOL_VERSION_INFO) -no-undefined $(export_symbols) +libcairo_script_interpreter_la_LIBADD = $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) $(lzo_LIBS) -lz + +csi_replay_SOURCES = csi-replay.c +csi_replay_CFLAGS = $(CAIRO_CFLAGS) +csi_replay_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) + +csi_exec_SOURCES = csi-exec.c +csi_exec_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) + +if CAIRO_HAS_SCRIPT_SURFACE +EXTRA_PROGRAMS += csi-trace +csi_trace_SOURCES = csi-trace.c +csi_trace_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) +endif + +EXTRA_DIST = \ + COPYING diff --git a/libs/cairo-1.16.0/util/cairo-script/Makefile.in b/libs/cairo-1.16.0/util/cairo-script/Makefile.in new file mode 100644 index 0000000..2837480 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/Makefile.in @@ -0,0 +1,1071 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +EXTRA_PROGRAMS = csi-replay$(EXEEXT) csi-exec$(EXEEXT) \ + csi-bind$(EXEEXT) $(am__EXEEXT_1) +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@am__append_1 = csi-trace +subdir = util/cairo-script +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \ + $(top_srcdir)/build/aclocal.compare.m4 \ + $(top_srcdir)/build/aclocal.enable.m4 \ + $(top_srcdir)/build/aclocal.float.m4 \ + $(top_srcdir)/build/aclocal.makefile.m4 \ + $(top_srcdir)/build/aclocal.pkg.m4 \ + $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \ + $(top_srcdir)/build/ltoptions.m4 \ + $(top_srcdir)/build/ltsugar.m4 \ + $(top_srcdir)/build/ltversion.m4 \ + $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/cairo-version.h \ + $(top_srcdir)/build/configure.ac.version \ + $(top_srcdir)/build/configure.ac.tools \ + $(top_srcdir)/build/configure.ac.features \ + $(top_srcdir)/build/configure.ac.warnings \ + $(top_srcdir)/build/configure.ac.system \ + $(top_srcdir)/build/configure.ac.analysis \ + $(top_srcdir)/build/configure.ac.noversion \ + $(top_srcdir)/build/configure.ac.pthread \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(cairoinclude_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cairoincludedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libcairo_script_interpreter_la_DEPENDENCIES = \ + $(top_builddir)/src/libcairo.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am__objects_1 = libcairo_script_interpreter_la-cairo-script-file.lo \ + libcairo_script_interpreter_la-cairo-script-hash.lo \ + libcairo_script_interpreter_la-cairo-script-interpreter.lo \ + libcairo_script_interpreter_la-cairo-script-objects.lo \ + libcairo_script_interpreter_la-cairo-script-operators.lo \ + libcairo_script_interpreter_la-cairo-script-scanner.lo \ + libcairo_script_interpreter_la-cairo-script-stack.lo +am__objects_2 = +am_libcairo_script_interpreter_la_OBJECTS = $(am__objects_1) \ + $(am__objects_2) +libcairo_script_interpreter_la_OBJECTS = \ + $(am_libcairo_script_interpreter_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libcairo_script_interpreter_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) \ + $(libcairo_script_interpreter_la_LDFLAGS) $(LDFLAGS) -o $@ +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@am__EXEEXT_1 = csi-trace$(EXEEXT) +csi_bind_SOURCES = csi-bind.c +csi_bind_OBJECTS = csi-bind.$(OBJEXT) +csi_bind_LDADD = $(LDADD) +am_csi_exec_OBJECTS = csi-exec.$(OBJEXT) +csi_exec_OBJECTS = $(am_csi_exec_OBJECTS) +csi_exec_DEPENDENCIES = libcairo-script-interpreter.la \ + $(top_builddir)/src/libcairo.la $(am__DEPENDENCIES_1) +am_csi_replay_OBJECTS = csi_replay-csi-replay.$(OBJEXT) +csi_replay_OBJECTS = $(am_csi_replay_OBJECTS) +csi_replay_DEPENDENCIES = libcairo-script-interpreter.la \ + $(top_builddir)/src/libcairo.la $(am__DEPENDENCIES_1) +csi_replay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(csi_replay_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am__csi_trace_SOURCES_DIST = csi-trace.c +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@am_csi_trace_OBJECTS = \ +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@ csi-trace.$(OBJEXT) +csi_trace_OBJECTS = $(am_csi_trace_OBJECTS) +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@csi_trace_DEPENDENCIES = \ +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@ libcairo-script-interpreter.la \ +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@ $(top_builddir)/src/libcairo.la \ +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@ $(am__DEPENDENCIES_1) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libcairo_script_interpreter_la_SOURCES) csi-bind.c \ + $(csi_exec_SOURCES) $(csi_replay_SOURCES) $(csi_trace_SOURCES) +DIST_SOURCES = $(libcairo_script_interpreter_la_SOURCES) csi-bind.c \ + $(csi_exec_SOURCES) $(csi_replay_SOURCES) \ + $(am__csi_trace_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(cairoinclude_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/build/depcomp \ + $(top_srcdir)/util/cairo-script/Makefile.sources COPYING +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BFD_LIBS = @BFD_LIBS@ +CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_LDFLAGS = @CAIRO_LDFLAGS@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@ +CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@ +CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@ +CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@ +CAIRO_REQUIRES = @CAIRO_REQUIRES@ +CAIRO_TEST_MODE = @CAIRO_TEST_MODE@ +CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@ +CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@ +CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@ +CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@ +CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIND = @FIND@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ +GOBJECT_LIBS = @GOBJECT_LIBS@ +GREP = @GREP@ +GS = @GS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +LIBRSVG_LIBS = @LIBRSVG_LIBS@ +LIBS = @LIBS@ +LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@ +LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LTP = @LTP@ +LTP_GENHTML = @LTP_GENHTML@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@ +PKG_CONFIG = @PKG_CONFIG@ +POPPLER_CFLAGS = @POPPLER_CFLAGS@ +POPPLER_LIBS = @POPPLER_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHLIB_EXT = @SHLIB_EXT@ +SHM_LIBS = @SHM_LIBS@ +SHTOOL = @SHTOOL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +XARGS = @XARGS@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cogl_CFLAGS = @cogl_CFLAGS@ +cogl_LIBS = @cogl_LIBS@ +datadir = @datadir@ +datarootdir = @datarootdir@ +directfb_CFLAGS = @directfb_CFLAGS@ +directfb_LIBS = @directfb_LIBS@ +docdir = @docdir@ +drm_CFLAGS = @drm_CFLAGS@ +drm_LIBS = @drm_LIBS@ +dvidir = @dvidir@ +egl_CFLAGS = @egl_CFLAGS@ +egl_LIBS = @egl_LIBS@ +exec_prefix = @exec_prefix@ +gallium_DIR = @gallium_DIR@ +gl_CFLAGS = @gl_CFLAGS@ +gl_LIBS = @gl_LIBS@ +glesv2_CFLAGS = @glesv2_CFLAGS@ +glesv2_LIBS = @glesv2_LIBS@ +glesv3_CFLAGS = @glesv3_CFLAGS@ +glesv3_LIBS = @glesv3_LIBS@ +glib_CFLAGS = @glib_CFLAGS@ +glib_LIBS = @glib_LIBS@ +gtk_CFLAGS = @gtk_CFLAGS@ +gtk_LIBS = @gtk_LIBS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lzo_LIBS = @lzo_LIBS@ +mandir = @mandir@ +mesa_DIR = @mesa_DIR@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pixman_CFLAGS = @pixman_CFLAGS@ +pixman_LIBS = @pixman_LIBS@ +png_CFLAGS = @png_CFLAGS@ +png_LIBS = @png_LIBS@ +png_REQUIRES = @png_REQUIRES@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pthread_CFLAGS = @pthread_CFLAGS@ +pthread_LIBS = @pthread_LIBS@ +qt_CFLAGS = @qt_CFLAGS@ +qt_LIBS = @qt_LIBS@ +real_pthread_CFLAGS = @real_pthread_CFLAGS@ +real_pthread_LIBS = @real_pthread_LIBS@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +shm_LIBS = @shm_LIBS@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xcb_CFLAGS = @xcb_CFLAGS@ +xcb_LIBS = @xcb_LIBS@ +xcb_shm_CFLAGS = @xcb_shm_CFLAGS@ +xcb_shm_LIBS = @xcb_shm_LIBS@ +xlib_CFLAGS = @xlib_CFLAGS@ +xlib_LIBS = @xlib_LIBS@ +xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@ +xlib_xcb_LIBS = @xlib_xcb_LIBS@ +xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@ +xlib_xrender_LIBS = @xlib_xrender_LIBS@ +libcairo_script_interpreter_sources = \ + cairo-script-file.c \ + cairo-script-hash.c \ + cairo-script-interpreter.c \ + cairo-script-objects.c \ + cairo-script-operators.c \ + cairo-script-scanner.c \ + cairo-script-stack.c \ + $(NULL) + +libcairo_script_interpreter_headers = \ + cairo-script-private.h \ + $(NULL) + +SUBDIRS = examples +lib_LTLIBRARIES = libcairo-script-interpreter.la +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src +cairoincludedir = $(includedir)/cairo +cairoinclude_HEADERS = cairo-script-interpreter.h +libcairo_script_interpreter_la_SOURCES = \ + $(libcairo_script_interpreter_sources) \ + $(libcairo_script_interpreter_headers) \ + $(NULL) + +libcairo_script_interpreter_la_CFLAGS = $(CAIRO_CFLAGS) +libcairo_script_interpreter_la_LDFLAGS = -version-info $(CAIRO_LIBTOOL_VERSION_INFO) -no-undefined $(export_symbols) +libcairo_script_interpreter_la_LIBADD = $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) $(lzo_LIBS) -lz +csi_replay_SOURCES = csi-replay.c +csi_replay_CFLAGS = $(CAIRO_CFLAGS) +csi_replay_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) +csi_exec_SOURCES = csi-exec.c +csi_exec_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@csi_trace_SOURCES = csi-trace.c +@CAIRO_HAS_SCRIPT_SURFACE_TRUE@csi_trace_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) +EXTRA_DIST = \ + COPYING + +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/util/cairo-script/Makefile.sources $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/cairo-script/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign util/cairo-script/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(top_srcdir)/util/cairo-script/Makefile.sources $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libcairo-script-interpreter.la: $(libcairo_script_interpreter_la_OBJECTS) $(libcairo_script_interpreter_la_DEPENDENCIES) $(EXTRA_libcairo_script_interpreter_la_DEPENDENCIES) + $(AM_V_CCLD)$(libcairo_script_interpreter_la_LINK) -rpath $(libdir) $(libcairo_script_interpreter_la_OBJECTS) $(libcairo_script_interpreter_la_LIBADD) $(LIBS) + +csi-bind$(EXEEXT): $(csi_bind_OBJECTS) $(csi_bind_DEPENDENCIES) $(EXTRA_csi_bind_DEPENDENCIES) + @rm -f csi-bind$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(csi_bind_OBJECTS) $(csi_bind_LDADD) $(LIBS) + +csi-exec$(EXEEXT): $(csi_exec_OBJECTS) $(csi_exec_DEPENDENCIES) $(EXTRA_csi_exec_DEPENDENCIES) + @rm -f csi-exec$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(csi_exec_OBJECTS) $(csi_exec_LDADD) $(LIBS) + +csi-replay$(EXEEXT): $(csi_replay_OBJECTS) $(csi_replay_DEPENDENCIES) $(EXTRA_csi_replay_DEPENDENCIES) + @rm -f csi-replay$(EXEEXT) + $(AM_V_CCLD)$(csi_replay_LINK) $(csi_replay_OBJECTS) $(csi_replay_LDADD) $(LIBS) + +csi-trace$(EXEEXT): $(csi_trace_OBJECTS) $(csi_trace_DEPENDENCIES) $(EXTRA_csi_trace_DEPENDENCIES) + @rm -f csi-trace$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(csi_trace_OBJECTS) $(csi_trace_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csi-bind.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csi-exec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csi-trace.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csi_replay-csi-replay.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_script_interpreter_la-cairo-script-file.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_script_interpreter_la-cairo-script-hash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_script_interpreter_la-cairo-script-interpreter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_script_interpreter_la-cairo-script-objects.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_script_interpreter_la-cairo-script-operators.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_script_interpreter_la-cairo-script-scanner.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_script_interpreter_la-cairo-script-stack.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libcairo_script_interpreter_la-cairo-script-file.lo: cairo-script-file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -MT libcairo_script_interpreter_la-cairo-script-file.lo -MD -MP -MF $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-file.Tpo -c -o libcairo_script_interpreter_la-cairo-script-file.lo `test -f 'cairo-script-file.c' || echo '$(srcdir)/'`cairo-script-file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-file.Tpo $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-file.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cairo-script-file.c' object='libcairo_script_interpreter_la-cairo-script-file.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -c -o libcairo_script_interpreter_la-cairo-script-file.lo `test -f 'cairo-script-file.c' || echo '$(srcdir)/'`cairo-script-file.c + +libcairo_script_interpreter_la-cairo-script-hash.lo: cairo-script-hash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -MT libcairo_script_interpreter_la-cairo-script-hash.lo -MD -MP -MF $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-hash.Tpo -c -o libcairo_script_interpreter_la-cairo-script-hash.lo `test -f 'cairo-script-hash.c' || echo '$(srcdir)/'`cairo-script-hash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-hash.Tpo $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-hash.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cairo-script-hash.c' object='libcairo_script_interpreter_la-cairo-script-hash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -c -o libcairo_script_interpreter_la-cairo-script-hash.lo `test -f 'cairo-script-hash.c' || echo '$(srcdir)/'`cairo-script-hash.c + +libcairo_script_interpreter_la-cairo-script-interpreter.lo: cairo-script-interpreter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -MT libcairo_script_interpreter_la-cairo-script-interpreter.lo -MD -MP -MF $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-interpreter.Tpo -c -o libcairo_script_interpreter_la-cairo-script-interpreter.lo `test -f 'cairo-script-interpreter.c' || echo '$(srcdir)/'`cairo-script-interpreter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-interpreter.Tpo $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-interpreter.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cairo-script-interpreter.c' object='libcairo_script_interpreter_la-cairo-script-interpreter.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -c -o libcairo_script_interpreter_la-cairo-script-interpreter.lo `test -f 'cairo-script-interpreter.c' || echo '$(srcdir)/'`cairo-script-interpreter.c + +libcairo_script_interpreter_la-cairo-script-objects.lo: cairo-script-objects.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -MT libcairo_script_interpreter_la-cairo-script-objects.lo -MD -MP -MF $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-objects.Tpo -c -o libcairo_script_interpreter_la-cairo-script-objects.lo `test -f 'cairo-script-objects.c' || echo '$(srcdir)/'`cairo-script-objects.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-objects.Tpo $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-objects.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cairo-script-objects.c' object='libcairo_script_interpreter_la-cairo-script-objects.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -c -o libcairo_script_interpreter_la-cairo-script-objects.lo `test -f 'cairo-script-objects.c' || echo '$(srcdir)/'`cairo-script-objects.c + +libcairo_script_interpreter_la-cairo-script-operators.lo: cairo-script-operators.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -MT libcairo_script_interpreter_la-cairo-script-operators.lo -MD -MP -MF $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-operators.Tpo -c -o libcairo_script_interpreter_la-cairo-script-operators.lo `test -f 'cairo-script-operators.c' || echo '$(srcdir)/'`cairo-script-operators.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-operators.Tpo $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-operators.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cairo-script-operators.c' object='libcairo_script_interpreter_la-cairo-script-operators.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -c -o libcairo_script_interpreter_la-cairo-script-operators.lo `test -f 'cairo-script-operators.c' || echo '$(srcdir)/'`cairo-script-operators.c + +libcairo_script_interpreter_la-cairo-script-scanner.lo: cairo-script-scanner.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -MT libcairo_script_interpreter_la-cairo-script-scanner.lo -MD -MP -MF $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-scanner.Tpo -c -o libcairo_script_interpreter_la-cairo-script-scanner.lo `test -f 'cairo-script-scanner.c' || echo '$(srcdir)/'`cairo-script-scanner.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-scanner.Tpo $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-scanner.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cairo-script-scanner.c' object='libcairo_script_interpreter_la-cairo-script-scanner.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -c -o libcairo_script_interpreter_la-cairo-script-scanner.lo `test -f 'cairo-script-scanner.c' || echo '$(srcdir)/'`cairo-script-scanner.c + +libcairo_script_interpreter_la-cairo-script-stack.lo: cairo-script-stack.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -MT libcairo_script_interpreter_la-cairo-script-stack.lo -MD -MP -MF $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-stack.Tpo -c -o libcairo_script_interpreter_la-cairo-script-stack.lo `test -f 'cairo-script-stack.c' || echo '$(srcdir)/'`cairo-script-stack.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-stack.Tpo $(DEPDIR)/libcairo_script_interpreter_la-cairo-script-stack.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cairo-script-stack.c' object='libcairo_script_interpreter_la-cairo-script-stack.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcairo_script_interpreter_la_CFLAGS) $(CFLAGS) -c -o libcairo_script_interpreter_la-cairo-script-stack.lo `test -f 'cairo-script-stack.c' || echo '$(srcdir)/'`cairo-script-stack.c + +csi_replay-csi-replay.o: csi-replay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(csi_replay_CFLAGS) $(CFLAGS) -MT csi_replay-csi-replay.o -MD -MP -MF $(DEPDIR)/csi_replay-csi-replay.Tpo -c -o csi_replay-csi-replay.o `test -f 'csi-replay.c' || echo '$(srcdir)/'`csi-replay.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/csi_replay-csi-replay.Tpo $(DEPDIR)/csi_replay-csi-replay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csi-replay.c' object='csi_replay-csi-replay.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(csi_replay_CFLAGS) $(CFLAGS) -c -o csi_replay-csi-replay.o `test -f 'csi-replay.c' || echo '$(srcdir)/'`csi-replay.c + +csi_replay-csi-replay.obj: csi-replay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(csi_replay_CFLAGS) $(CFLAGS) -MT csi_replay-csi-replay.obj -MD -MP -MF $(DEPDIR)/csi_replay-csi-replay.Tpo -c -o csi_replay-csi-replay.obj `if test -f 'csi-replay.c'; then $(CYGPATH_W) 'csi-replay.c'; else $(CYGPATH_W) '$(srcdir)/csi-replay.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/csi_replay-csi-replay.Tpo $(DEPDIR)/csi_replay-csi-replay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csi-replay.c' object='csi_replay-csi-replay.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(csi_replay_CFLAGS) $(CFLAGS) -c -o csi_replay-csi-replay.obj `if test -f 'csi-replay.c'; then $(CYGPATH_W) 'csi-replay.c'; else $(CYGPATH_W) '$(srcdir)/csi-replay.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-cairoincludeHEADERS: $(cairoinclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(cairoinclude_HEADERS)'; test -n "$(cairoincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(cairoincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(cairoincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(cairoincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(cairoincludedir)" || exit $$?; \ + done + +uninstall-cairoincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(cairoinclude_HEADERS)'; test -n "$(cairoincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(cairoincludedir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cairoincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-cairoincludeHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-cairoincludeHEADERS uninstall-libLTLIBRARIES + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libLTLIBRARIES \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-cairoincludeHEADERS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-cairoincludeHEADERS uninstall-libLTLIBRARIES + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libs/cairo-1.16.0/util/cairo-script/Makefile.sources b/libs/cairo-1.16.0/util/cairo-script/Makefile.sources new file mode 100644 index 0000000..fd73a17 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/Makefile.sources @@ -0,0 +1,13 @@ +libcairo_script_interpreter_sources = \ + cairo-script-file.c \ + cairo-script-hash.c \ + cairo-script-interpreter.c \ + cairo-script-objects.c \ + cairo-script-operators.c \ + cairo-script-scanner.c \ + cairo-script-stack.c \ + $(NULL) + +libcairo_script_interpreter_headers = \ + cairo-script-private.h \ + $(NULL) diff --git a/libs/cairo-1.16.0/util/cairo-script/cairo-script-file.c b/libs/cairo-1.16.0/util/cairo-script/cairo-script-file.c new file mode 100644 index 0000000..e7c5376 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/cairo-script-file.c @@ -0,0 +1,1109 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +#include "cairo-script-private.h" + +#include <stdio.h> +#include <limits.h> /* INT_MAX */ +#include <string.h> +#include <zlib.h> + +#if HAVE_LZO +#include <lzo/lzo2a.h> +#endif + +#define CHUNK_SIZE 32768 + +#define OWN_STREAM 0x1 + +csi_status_t +csi_file_new (csi_t *ctx, + csi_object_t *obj, + const char *path, const char *mode) +{ + csi_file_t *file; + + file = _csi_slab_alloc (ctx, sizeof (csi_file_t)); + if (file == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + file->base.type = CSI_OBJECT_TYPE_FILE; + file->base.ref = 1; + + file->data = NULL; + file->type = STDIO; + file->flags = OWN_STREAM; + file->src = fopen (path, mode); + if (file->src == NULL) { + _csi_slab_free (ctx, file, sizeof (csi_file_t)); + return _csi_error (CAIRO_STATUS_FILE_NOT_FOUND); + } + + file->data = _csi_alloc (ctx, CHUNK_SIZE); + if (file->data == NULL) { + _csi_slab_free (ctx, file, sizeof (csi_file_t)); + return _csi_error (CAIRO_STATUS_NO_MEMORY); + } + file->bp = file->data; + file->rem = 0; + + obj->type = CSI_OBJECT_TYPE_FILE; + obj->datum.file = file; + return CAIRO_STATUS_SUCCESS; +} + +csi_status_t +csi_file_new_for_stream (csi_t *ctx, + csi_object_t *obj, + FILE *stream) +{ + csi_file_t *file; + + file = _csi_slab_alloc (ctx, sizeof (csi_file_t)); + if (file == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + file->base.type = CSI_OBJECT_TYPE_FILE; + file->base.ref = 1; + + file->data = NULL; + file->type = STDIO; + file->flags = 0; + file->src = stream; + if (file->src == NULL) { + _csi_slab_free (ctx, file, sizeof (csi_file_t)); + return _csi_error (CAIRO_STATUS_FILE_NOT_FOUND); + } + + file->data = _csi_alloc (ctx, CHUNK_SIZE); + if (file->data == NULL) { + _csi_slab_free (ctx, file, sizeof (csi_file_t)); + return _csi_error (CAIRO_STATUS_NO_MEMORY); + } + file->bp = file->data; + file->rem = 0; + + obj->type = CSI_OBJECT_TYPE_FILE; + obj->datum.file = file; + return CAIRO_STATUS_SUCCESS; +} + +csi_status_t +csi_file_new_for_bytes (csi_t *ctx, + csi_object_t *obj, + const char *bytes, + unsigned int length) +{ + csi_file_t *file; + + file = _csi_slab_alloc (ctx, sizeof (csi_file_t)); + if (file == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + file->base.type = CSI_OBJECT_TYPE_FILE; + file->base.ref = 1; + + file->type = BYTES; + file->src = (uint8_t *) bytes; + file->data = (uint8_t *) bytes; + file->bp = (uint8_t *) bytes; + file->rem = length; + + obj->type = CSI_OBJECT_TYPE_FILE; + obj->datum.file = file; + return CAIRO_STATUS_SUCCESS; +} + +csi_status_t +csi_file_new_from_string (csi_t *ctx, + csi_object_t *obj, + csi_string_t *src) +{ + csi_file_t *file; + + file = _csi_slab_alloc (ctx, sizeof (csi_file_t)); + if (_csi_unlikely (file == NULL)) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + file->base.type = CSI_OBJECT_TYPE_FILE; + file->base.ref = 1; + + if (src->deflate) { + uLongf len = src->deflate; + csi_object_t tmp_obj; + csi_string_t *tmp_str; + csi_status_t status; + + status = csi_string_new (ctx, &tmp_obj, NULL, src->deflate); + if (_csi_unlikely (status)) + return status; + + tmp_str = tmp_obj.datum.string; + switch (src->method) { + case NONE: + default: + status = _csi_error (CAIRO_STATUS_NO_MEMORY); + break; + + case ZLIB: +#if HAVE_ZLIB + if (uncompress ((Bytef *) tmp_str->string, &len, + (Bytef *) src->string, src->len) != Z_OK) +#endif + status = _csi_error (CAIRO_STATUS_NO_MEMORY); + break; + case LZO: +#if HAVE_LZO + if (lzo2a_decompress ((lzo_bytep) src->string, src->len, + (lzo_bytep) tmp_str->string, &len, + NULL)) +#endif + status = _csi_error (CAIRO_STATUS_NO_MEMORY); + break; + } + if (_csi_unlikely (status)) { + csi_string_free (ctx, tmp_str); + _csi_slab_free (ctx, file, sizeof (csi_file_t)); + return status; + } + + file->src = tmp_str; + file->data = tmp_str->string; + file->rem = tmp_str->len; + } else { + file->src = src; src->base.ref++; + file->data = src->string; + file->rem = src->len; + } + file->type = BYTES; + file->bp = file->data; + + obj->type = CSI_OBJECT_TYPE_FILE; + obj->datum.file = file; + return CAIRO_STATUS_SUCCESS; +} + +static csi_status_t +_csi_file_new_filter (csi_t *ctx, + csi_object_t *obj, + csi_object_t *src, + const csi_filter_funcs_t *funcs, + void *data) +{ + csi_file_t *file; + csi_object_t src_file; + csi_status_t status; + + file = _csi_slab_alloc (ctx, sizeof (csi_file_t)); + if (file == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + obj->type = CSI_OBJECT_TYPE_FILE; + obj->datum.file = file; + + file->base.type = CSI_OBJECT_TYPE_FILE; + file->base.ref = 1; + + file->type = FILTER; + file->data = data; + file->filter = funcs; + status = csi_object_as_file (ctx, src, &src_file); + if (status) { + csi_object_free (ctx, obj); + return status; + } + file->src = src_file.datum.file; + + return CAIRO_STATUS_SUCCESS; +} + + +#if 0 +csi_status_t +csi_file_new_from_stream (csi_t *ctx, + FILE *file, + csi_object_t **out) +{ + csi_file_t *obj; + + obj = (csi_file_t *) _csi_object_new (ctx, CSI_OBJECT_TYPE_FILE); + if (obj == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + obj->type = STDIO; + obj->src = file; + obj->data = _csi_alloc (ctx, CHUNK_SIZE); + if (obj->data == NULL) { + csi_object_free (&obj->base); + return _csi_error (CAIRO_STATUS_UNDEFINED_FILENAME_ERROR); + } + obj->bp = obj->data; + obj->rem = 0; + + *out = &obj->base; + return CAIRO_STATUS_SUCCESS; +} + +static csi_object_t * +_csi_file_new_from_procedure (csi_t *ctx, csi_object_t *src) +{ + csi_file_t *obj; + + obj = (csi_file_t *) _csi_object_new (ctx, CSI_OBJECT_TYPE_FILE); + if (obj == NULL) + return NULL; + + obj->type = PROCEDURE; + obj->src = csi_object_reference (src); + obj->data = NULL; + + return &obj->base; +} +#endif + +typedef struct _ascii85_decode_data { + uint8_t buf[CHUNK_SIZE]; + uint8_t *bp; + short bytes_available; + short eod; +} _ascii85_decode_data_t; + +static int +_getc_skip_whitespace (csi_file_t *src) +{ + int c; + + do switch ((c = csi_file_getc (src))) { + case 0x0: + case 0x9: + case 0xa: + case 0xc: + case 0xd: + case 0x20: + continue; + + default: + return c; + } while (TRUE); + + return c; +} + +static void +_ascii85_decode (csi_file_t *file) +{ + _ascii85_decode_data_t *data = file->data; + unsigned int n; + + if (data->eod) + return; + + data->bp = data->buf; + + n = 0; + do { + unsigned int v = _getc_skip_whitespace (file->src); + if (v == 'z') { + data->buf[n+0] = 0; + data->buf[n+1] = 0; + data->buf[n+2] = 0; + data->buf[n+3] = 0; + } else if (v == '~') { + _getc_skip_whitespace (file->src); /* == '>' || IO_ERROR */ + data->eod = TRUE; + break; + } else if (v < '!' || v > 'u') { + /* IO_ERROR */ + data->eod = TRUE; + break; + } else { + unsigned int i; + + v -= '!'; + for (i = 1; i < 5; i++) { + int c = _getc_skip_whitespace (file->src); + if (c == '~') { /* short tuple */ + _getc_skip_whitespace (file->src); /* == '>' || IO_ERROR */ + data->eod = TRUE; + switch (i) { + case 0: + case 1: + /* IO_ERROR */ + break; + case 2: + v = v * (85*85*85) + 85*85*85 -1; + goto odd1; + case 3: + v = v * (85*85) + 85*85 -1; + goto odd2; + case 4: + v = v * 85 + 84; + data->buf[n+2] = v >> 8 & 0xff; +odd2: + data->buf[n+1] = v >> 16 & 0xff; +odd1: + data->buf[n+0] = v >> 24 & 0xff; + data->bytes_available = n + i - 1; + return; + } + break; + } + v = 85*v + c-'!'; + } + + data->buf[n+0] = v >> 24 & 0xff; + data->buf[n+1] = v >> 16 & 0xff; + data->buf[n+2] = v >> 8 & 0xff; + data->buf[n+3] = v >> 0 & 0xff; + } + n += 4; + } while (n < sizeof (data->buf) && data->eod == FALSE); + + data->bytes_available = n; +} + +static int +_ascii85_decode_getc (csi_file_t *file) +{ + _ascii85_decode_data_t *data = file->data; + + if (data->bytes_available == 0) { + _ascii85_decode (file); + + if (data->bytes_available == 0) + return EOF; + } + + data->bytes_available--; + return *data->bp++; +} + +static void +_ascii85_decode_putc (csi_file_t *file, int c) +{ + _ascii85_decode_data_t *data = file->data; + data->bytes_available++; + data->bp--; +} + +static int +_ascii85_decode_read (csi_file_t *file, uint8_t *buf, int len) +{ + _ascii85_decode_data_t *data = file->data; + + if (data->bytes_available == 0) { + _ascii85_decode (file); + + if (data->bytes_available == 0) + return 0; + } + + if (len > data->bytes_available) + len = data->bytes_available; + memcpy (buf, data->bp, len); + data->bp += len; + data->bytes_available -= len; + return len; +} + +csi_status_t +csi_file_new_ascii85_decode (csi_t *ctx, + csi_object_t *obj, + csi_dictionary_t *dict, + csi_object_t *src) +{ + static const csi_filter_funcs_t funcs = { + _ascii85_decode_getc, + _ascii85_decode_putc, + _ascii85_decode_read, + _csi_free, + }; + _ascii85_decode_data_t *data; + + data = _csi_alloc0 (ctx, sizeof (_ascii85_decode_data_t)); + if (data == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + return _csi_file_new_filter (ctx, obj, src, &funcs, data); +} + +#if HAVE_ZLIB +#include <zlib.h> + +typedef struct _deflate_decode_data { + z_stream zlib_stream; + + uint8_t in[CHUNK_SIZE]; + uint8_t out[CHUNK_SIZE]; + + int bytes_available; + uint8_t *bp; +} _deflate_decode_data_t; + +static void +_deflate_decode (csi_file_t *file) +{ + _deflate_decode_data_t *data = file->data; + uint8_t *bp; + int len; + + data->zlib_stream.next_out = data->out; + data->zlib_stream.avail_out = sizeof (data->out); + + bp = data->in; + len = sizeof (data->in); + if (data->zlib_stream.avail_in) { + memmove (data->in, + data->zlib_stream.next_in, + data->zlib_stream.avail_in); + len -= data->zlib_stream.avail_in; + bp += data->zlib_stream.avail_in; + } + + len = csi_file_read (file->src, bp, len); + + data->zlib_stream.next_in = data->in; + data->zlib_stream.avail_in += len; + + inflate (&data->zlib_stream, len == 0 ? Z_FINISH : Z_NO_FLUSH); + + data->bytes_available = data->zlib_stream.next_out - data->out; + data->bp = data->out; +} + +static int +_deflate_decode_getc (csi_file_t *file) +{ + _deflate_decode_data_t *data = file->data; + + if (data->bytes_available == 0) { + _deflate_decode (file); + + if (data->bytes_available == 0) + return EOF; + } + + data->bytes_available--; + return *data->bp++; +} + +static void +_deflate_decode_putc (csi_file_t *file, int c) +{ + _deflate_decode_data_t *data = file->data; + data->bytes_available++; + data->bp--; +} + +static int +_deflate_decode_read (csi_file_t *file, uint8_t *buf, int len) +{ + _deflate_decode_data_t *data = file->data; + + if (data->bytes_available == 0) { + _deflate_decode (file); + + if (data->bytes_available == 0) + return 0; + } + + if (len > (int) data->bytes_available) + len = data->bytes_available; + memcpy (buf, data->bp, len); + data->bp += len; + data->bytes_available -= len; + return len; +} + +static void +_deflate_destroy (csi_t *ctx, void *closure) +{ + _deflate_decode_data_t *data; + + data = closure; + + inflateEnd (&data->zlib_stream); + + _csi_free (ctx, data); +} + +csi_status_t +csi_file_new_deflate_decode (csi_t *ctx, + csi_object_t *obj, + csi_dictionary_t *dict, + csi_object_t *src) +{ + static const csi_filter_funcs_t funcs = { + _deflate_decode_getc, + _deflate_decode_putc, + _deflate_decode_read, + _deflate_destroy, + }; + _deflate_decode_data_t *data; + + data = _csi_alloc (ctx, sizeof (_deflate_decode_data_t)); + if (data == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + data->zlib_stream.zalloc = Z_NULL; + data->zlib_stream.zfree = Z_NULL; + data->zlib_stream.opaque = Z_NULL; + data->zlib_stream.next_in = data->in; + data->zlib_stream.avail_in = 0; + data->zlib_stream.next_out = data->out; + data->zlib_stream.avail_out = sizeof (data->out); + data->bytes_available = 0; + + if (inflateInit (&data->zlib_stream) != Z_OK) { + _csi_free (ctx, data); + return _csi_error (CAIRO_STATUS_NO_MEMORY); + } + + return _csi_file_new_filter (ctx, obj, src, &funcs, data); +} +#endif + +#if 0 +static int +hex_value (int c) +{ + if (c < '0') + return EOF; + if (c <= '9') + return c - '0'; + c |= 32; + if (c < 'a') + return EOF; + if (c <= 'f') + return c - 'a' + 0xa; + return EOF; +} + +/* Adobe Type 1 Font Format book: p63 */ +typedef struct _decrypt_data { + uint8_t putback[32]; + uint8_t nputback; + csi_bool_t is_hexadecimal; + unsigned short R; + int eod; +} _decrypt_data_t; + +static uint8_t +_decrypt (unsigned short *R, uint8_t cypher) +{ +#define c1 52845 +#define c2 22719 + uint8_t plain; + + plain = cypher ^ (*R >> 8); + *R = (cypher + *R) * c1 + c2; + return plain; +#undef c1 +#undef c2 +} + +int +csi_decrypt (uint8_t *in, int length, + unsigned short salt, int binary, + uint8_t *out) +{ + const uint8_t * const end = in + length; + uint8_t *base = out; + + while (in < end) { + int c; + + if (! binary) { + int c_hi = -1, c_lo = 0; + + while (in < end && (c_hi = *in++)) { + switch (c_hi) { + case 0x0: + case 0x9: + case 0xa: + case 0xc: + case 0xd: + case 0x20: + continue; + + default: + break; + } + } + if (c_hi < 0) + break; + + while (in < end && (c_lo = *in++)) { + switch (c_lo) { + case 0x0: + case 0x9: + case 0xa: + case 0xc: + case 0xd: + case 0x20: + continue; + + default: + break; + } + } + + c = (hex_value (c_hi) << 4) | hex_value (c_lo); + } else + c = *in++; + + *out++ = _decrypt (&salt, c); + } + + return out - base; +} + +static uint8_t +_encrypt (unsigned short *R, uint8_t plain) +{ +#define c1 52845 +#define c2 22719 + uint8_t cypher; + + cypher = plain ^ (*R >> 8); + *R = (cypher + *R) * c1 + c2; + return cypher; +#undef c1 +#undef c2 +} + +int +csi_encrypt (uint8_t *in, int length, + unsigned short salt, int discard, int binary, + uint8_t *out) +{ + const char hex[]="0123456789abcdef"; + const uint8_t * const end = in + length; + uint8_t *base = out; + int col = 0; + + while (discard--) { + if (! binary) { + int c = _encrypt (&salt, ' '); + *out++ = hex[(c >> 4) & 0xf]; + *out++ = hex[(c >> 0) & 0xf]; + } else + *out++ = _encrypt (&salt, 0); + } + + while (in < end) { + int c; + + c = _encrypt (&salt, *in++); + if (! binary) { + if (col == 78) { + *out++ = '\n'; + col = 0; + } + *out++ = hex[(c >> 4) & 0xf]; + *out++ = hex[(c >> 0) & 0xf]; + col += 2; + } else + *out++ = c; + } + + return out - base; +} + +static int +_decrypt_getc (csi_file_t *file) +{ + _decrypt_data_t *data = file->data; + int c; + + if (data->nputback) + return data->putback[--data->nputback]; + + if (data->is_hexadecimal) { + int c_hi, c_lo; + + c_hi = _getc_skip_whitespace (file->src); + c_lo = _getc_skip_whitespace (file->src); + c = (hex_value (c_hi) << 4) | hex_value (c_lo); + } else + c = csi_file_getc (file->src); + + if (c == EOF) + return EOF; + + return _decrypt (&data->R, c); +} + +static void +_decrypt_putc (csi_file_t *file, int c) +{ + _decrypt_data_t *data; + + data = file->data; + + data->putback[data->nputback++] = c; +} + +csi_object_t * +csi_file_new_decrypt (csi_t *ctx, csi_object_t *src, int salt, int discard) +{ + csi_object_t *obj; + _decrypt_data_t *data; + int n; + + data = _csi_alloc0 (ctx, sizeof (_decrypt_data_t)); + if (data == NULL) + return NULL; + + data->R = salt; + + obj = _csi_file_new_filter (ctx, src, + _decrypt_getc, + _decrypt_putc, + NULL, + _csi_free, + data); + if (obj == NULL) + return NULL; + + /* XXX determine encoding, eexec only? */ + data->is_hexadecimal = salt != 4330; + for (n = 0; n < discard; n++) { + int c; + c = csi_file_getc (obj); + if (c == EOF) { + return obj; + } + } + return obj; +} +#endif + +csi_status_t +_csi_file_execute (csi_t *ctx, csi_file_t *obj) +{ + return _csi_scan_file (ctx, obj); +} + +int +csi_file_getc (csi_file_t *file) +{ + int c; + + if (_csi_unlikely (file->src == NULL)) + return EOF; + + switch (file->type) { + case STDIO: + if (_csi_likely (file->rem)) { + c = *file->bp++; + file->rem--; + } else { + file->rem = fread (file->bp = file->data, 1, CHUNK_SIZE, file->src); + case BYTES: + if (_csi_likely (file->rem)) { + c = *file->bp++; + file->rem--; + } else + c = EOF; + } + break; + + case PROCEDURE: +#if 0 + if (file->data == NULL) { + csi_status_t status; + csi_object_t *string; + +RERUN_PROCEDURE: + status = csi_object_execute (file->src); + if (status) + return EOF; + + string = csi_pop_operand (file->base.ctx); + if (string == NULL) + return EOF; + file->data = csi_object_as_file (file->base.ctx, string); + csi_object_free (string); + if (file->data == NULL) + return EOF; + } + c = csi_file_getc (file->data); + if (c == EOF) { + csi_object_free (file->data); + file->data = NULL; + goto RERUN_PROCEDURE; + } +#else + c = EOF; +#endif + break; + + case FILTER: + c = file->filter->filter_getc (file); + break; + + default: + c = EOF; + break; + } + + return c; +} + +int +csi_file_read (csi_file_t *file, void *buf, int len) +{ + int ret; + + if (file->src == NULL) + return 0; + + switch (file->type) { + case STDIO: + if (file->rem > 0) { + ret = len; + if (file->rem < ret) + ret = file->rem; + memcpy (buf, file->bp, ret); + file->bp += ret; + file->rem -= ret; + } else + ret = fread (buf, 1, len, file->src); + break; + + case BYTES: + if (file->rem > 0) { + ret = len; + if (file->rem < ret) + ret = file->rem; + memcpy (buf, file->bp, ret); + file->bp += ret; + file->rem -= ret; + } else + ret = 0; + break; + + case PROCEDURE: +#if 0 + if (file->data == NULL) { + csi_status_t status; + csi_object_t *string; + +RERUN_PROCEDURE: + status = csi_object_execute (file->src); + if (status) + return 0; + + string = csi_pop_operand (file->base.ctx); + if (string == NULL) + return 0; + file->data = csi_object_as_file (file->base.ctx, string); + csi_object_free (string); + if (file->data == NULL) + return 0; + } + ret = csi_file_read (file->data, buf, len); + if (ret == 0) { + csi_object_free (file->data); + file->data = NULL; + goto RERUN_PROCEDURE; + } +#else + ret = 0; +#endif + break; + + case FILTER: + ret = file->filter->filter_read (file, buf, len); + break; + + default: + ret = 0; + break; + } + + return ret; +} + +void +csi_file_putc (csi_file_t *file, int c) +{ + if (file->src == NULL) + return; + + switch ((int) file->type) { + case STDIO: + case BYTES: + file->bp--; + file->rem++; + break; + case FILTER: + file->filter->filter_putc (file, c); + break; + default: + break; + } +} + +void +csi_file_flush (csi_file_t *file) +{ + if (file->src == NULL) + return; + + switch ((int) file->type) { + case FILTER: /* need to eat EOD */ + while (csi_file_getc (file) != EOF) + ; + break; + default: + break; + } +} + +void +csi_file_close (csi_t *ctx, csi_file_t *file) +{ + if (file->src == NULL) + return; + + switch (file->type) { + case STDIO: + if (file->flags & OWN_STREAM) + fclose (file->src); + break; + case BYTES: + if (file->src != file->data) { + csi_string_t *src = file->src; + if (src != NULL && --src->base.ref == 0) + csi_string_free (ctx, src); + } + break; + case FILTER: + { + csi_file_t *src = file->src; + if (src != NULL && --src->base.ref == 0) + _csi_file_free (ctx, src); + } + break; + case PROCEDURE: + default: + break; + } + file->src = NULL; +} + +void +_csi_file_free (csi_t *ctx, csi_file_t *file) +{ + csi_file_flush (file); + /* XXX putback */ + csi_file_close (ctx, file); + + switch (file->type) { + case BYTES: + break; + case PROCEDURE: +#if 0 + csi_object_free (ctx, file->data); +#endif + break; + case STDIO: + _csi_free (ctx, file->data); + break; + case FILTER: + file->filter->filter_destroy (ctx, file->data); + break; + default: + break; + } + + _csi_slab_free (ctx, file, sizeof (csi_file_t)); +} + +csi_status_t +_csi_file_as_string (csi_t *ctx, + csi_file_t *file, + csi_object_t *obj) +{ + char *bytes; + unsigned int len; + unsigned int allocated; + csi_status_t status; + + allocated = 16384; + bytes = _csi_alloc (ctx, allocated); + if (bytes == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + len = 0; + do { + int ret; + + ret = csi_file_read (file, bytes + len, allocated - len); + if (ret == 0) + break; + + len += ret; + if (len + 1 > allocated / 2) { + char *newbytes; + int newlen; + + if (_csi_unlikely (allocated > INT_MAX / 2)) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + newlen = allocated * 2; + newbytes = _csi_realloc (ctx, bytes, newlen); + if (_csi_unlikely (newbytes == NULL)) { + _csi_free (ctx, bytes); + return _csi_error (CAIRO_STATUS_NO_MEMORY); + } + bytes = newbytes; + allocated = newlen; + } + } while (TRUE); + + bytes[len] = '\0'; /* better safe than sorry! */ + status = csi_string_new_from_bytes (ctx, obj, bytes, len); + if (status) { + _csi_free (ctx, bytes); + return status; + } + + return CAIRO_STATUS_SUCCESS; +} + diff --git a/libs/cairo-1.16.0/util/cairo-script/cairo-script-hash.c b/libs/cairo-1.16.0/util/cairo-script/cairo-script-hash.c new file mode 100644 index 0000000..58786fc --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/cairo-script-hash.c @@ -0,0 +1,484 @@ +/* + * Copyright © 2004 Red Hat, Inc. + * Copyright © 2005 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Red Hat, Inc. + * + * Contributor(s): + * Keith Packard <keithp@keithp.com> + * Graydon Hoare <graydon@redhat.com> + * Carl Worth <cworth@cworth.org> + * Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation + */ + +#include "config.h" + +#include "cairo-script-private.h" + +#include <stdlib.h> + +/* + * An entry can be in one of three states: + * + * FREE: Entry has never been used, terminates all searches. + * Appears in the table as a %NULL pointer. + * + * DEAD: Entry had been live in the past. A dead entry can be reused + * but does not terminate a search for an exact entry. + * Appears in the table as a pointer to DEAD_ENTRY. + * + * LIVE: Entry is currently being used. + * Appears in the table as any non-%NULL, non-DEAD_ENTRY pointer. + */ + +#define DEAD_ENTRY ((csi_hash_entry_t *) 0x1) + +#define ENTRY_IS_FREE(entry) ((entry) == NULL) +#define ENTRY_IS_DEAD(entry) ((entry) == DEAD_ENTRY) +#define ENTRY_IS_LIVE(entry) ((entry) > DEAD_ENTRY) + + +/* This table is open-addressed with double hashing. Each table size is a + * prime chosen to be a little more than double the high water mark for a + * given arrangement, so the tables should remain < 50% full. The table + * size makes for the "first" hash modulus; a second prime (2 less than the + * first prime) serves as the "second" hash modulus, which is co-prime and + * thus guarantees a complete permutation of table indices. + * + * This structure, and accompanying table, is borrowed/modified from the + * file xserver/render/glyph.c in the freedesktop.org x server, with + * permission (and suggested modification of doubling sizes) by Keith + * Packard. + */ + +static const csi_hash_table_arrangement_t hash_table_arrangements [] = { + { 16, 43, 41 }, + { 32, 73, 71 }, + { 64, 151, 149 }, + { 128, 283, 281 }, + { 256, 571, 569 }, + { 512, 1153, 1151 }, + { 1024, 2269, 2267 }, + { 2048, 4519, 4517 }, + { 4096, 9013, 9011 }, + { 8192, 18043, 18041 }, + { 16384, 36109, 36107 }, + { 32768, 72091, 72089 }, + { 65536, 144409, 144407 }, + { 131072, 288361, 288359 }, + { 262144, 576883, 576881 }, + { 524288, 1153459, 1153457 }, + { 1048576, 2307163, 2307161 }, + { 2097152, 4613893, 4613891 }, + { 4194304, 9227641, 9227639 }, + { 8388608, 18455029, 18455027 }, + { 16777216, 36911011, 36911009 }, + { 33554432, 73819861, 73819859 }, + { 67108864, 147639589, 147639587 }, + { 134217728, 295279081, 295279079 }, + { 268435456, 590559793, 590559791 } +}; + +#define NUM_HASH_TABLE_ARRANGEMENTS ARRAY_LENGTH (hash_table_arrangements) + +/** + * _csi_hash_table_create: + * @keys_equal: a function to return %TRUE if two keys are equal + * + * Creates a new hash table which will use the keys_equal() function + * to compare hash keys. Data is provided to the hash table in the + * form of user-derived versions of #csi_hash_entry_t. A hash entry + * must be able to hold both a key (including a hash code) and a + * value. Sometimes only the key will be necessary, (as in + * _csi_hash_table_remove), and other times both a key and a value + * will be necessary, (as in _csi_hash_table_insert). + * + * See #csi_hash_entry_t for more details. + * + * Return value: the new hash table or %NULL if out of memory. + **/ +csi_status_t +_csi_hash_table_init (csi_hash_table_t *hash_table, + csi_hash_keys_equal_func_t keys_equal) +{ + hash_table->keys_equal = keys_equal; + + hash_table->arrangement = &hash_table_arrangements[0]; + + hash_table->entries = calloc (hash_table->arrangement->size, + sizeof(csi_hash_entry_t *)); + if (hash_table->entries == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + hash_table->live_entries = 0; + hash_table->used_entries = 0; + hash_table->iterating = 0; + + return CSI_STATUS_SUCCESS; +} + +/** + * _csi_hash_table_destroy: + * @hash_table: an empty hash table to destroy + * + * Immediately destroys the given hash table, freeing all resources + * associated with it. + * + * WARNING: The hash_table must have no live entries in it before + * _csi_hash_table_destroy is called. It is a fatal error otherwise, + * and this function will halt. The rationale for this behavior is to + * avoid memory leaks and to avoid needless complication of the API + * with destroy notifiy callbacks. + * + * WARNING: The hash_table must have no running iterators in it when + * _csi_hash_table_destroy is called. It is a fatal error otherwise, + * and this function will halt. + **/ +void +_csi_hash_table_fini (csi_hash_table_t *hash_table) +{ + free (hash_table->entries); +} + +static csi_hash_entry_t ** +_csi_hash_table_lookup_unique_key (csi_hash_table_t *hash_table, + csi_hash_entry_t *key) +{ + unsigned long table_size, i, idx, step; + csi_hash_entry_t **entry; + + table_size = hash_table->arrangement->size; + idx = key->hash % table_size; + + entry = &hash_table->entries[idx]; + if (! ENTRY_IS_LIVE (*entry)) + return entry; + + i = 1; + step = key->hash % hash_table->arrangement->rehash; + if (step == 0) + step = 1; + do { + idx += step; + if (idx >= table_size) + idx -= table_size; + + entry = &hash_table->entries[idx]; + if (! ENTRY_IS_LIVE (*entry)) + return entry; + } while (++i < table_size); + + return NULL; +} + +/** + * _csi_hash_table_manage: + * @hash_table: a hash table + * + * Resize the hash table if the number of entries has gotten much + * bigger or smaller than the ideal number of entries for the current + * size, or control the number of dead entries by moving the entries + * within the table. + * + * Return value: %CAIRO_STATUS_SUCCESS if successful or + * %CAIRO_STATUS_NO_MEMORY if out of memory. + **/ +static csi_status_t +_csi_hash_table_manage (csi_hash_table_t *hash_table) +{ + csi_hash_table_t tmp; + csi_boolean_t realloc = TRUE; + unsigned long i; + + /* This keeps the size of the hash table between 2 and approximately 8 + * times the number of live entries and keeps the proportion of free + * entries (search-terminations) > 25%. + */ + unsigned long high = hash_table->arrangement->high_water_mark; + unsigned long low = high >> 2; + unsigned long max_used = high + high / 2; + + tmp = *hash_table; + + if (hash_table->live_entries > high) { + tmp.arrangement = hash_table->arrangement + 1; + /* This code is being abused if we can't make a table big enough. */ + } else if (hash_table->live_entries < low && + /* Can't shrink if we're at the smallest size */ + hash_table->arrangement != &hash_table_arrangements[0]) + { + tmp.arrangement = hash_table->arrangement - 1; + } + else if (hash_table->used_entries > max_used) + { + /* Clean out dead entries to prevent lookups from becoming too slow. */ + for (i = 0; i < hash_table->arrangement->size; ++i) { + if (ENTRY_IS_DEAD (hash_table->entries[i])) + hash_table->entries[i] = NULL; + } + hash_table->used_entries = hash_table->live_entries; + + /* There is no need to reallocate but some entries may need to be + * moved. Typically the proportion of entries needing to be moved is + * small, but, if the moving should leave a large number of dead + * entries, they will be cleaned out next time this code is + * executed. */ + realloc = FALSE; + } + else + { + return CAIRO_STATUS_SUCCESS; + } + + if (realloc) { + tmp.entries = calloc (tmp.arrangement->size, + sizeof (csi_hash_entry_t*)); + if (tmp.entries == NULL) + return _csi_error (CAIRO_STATUS_NO_MEMORY); + + hash_table->used_entries = 0; + } + + for (i = 0; i < hash_table->arrangement->size; ++i) { + csi_hash_entry_t *entry, **pos; + + entry = hash_table->entries[i]; + if (ENTRY_IS_LIVE (entry)) { + hash_table->entries[i] = DEAD_ENTRY; + + pos = _csi_hash_table_lookup_unique_key (&tmp, entry); + if (ENTRY_IS_FREE (*pos)) + hash_table->used_entries++; + + *pos = entry; + } + } + + if (realloc) { + free (hash_table->entries); + hash_table->entries = tmp.entries; + hash_table->arrangement = tmp.arrangement; + } + + return CAIRO_STATUS_SUCCESS; +} + +/** + * _csi_hash_table_lookup: + * @hash_table: a hash table + * @key: the key of interest + * + * Performs a lookup in @hash_table looking for an entry which has a + * key that matches @key, (as determined by the keys_equal() function + * passed to _csi_hash_table_create). + * + * Return value: the matching entry, of %NULL if no match was found. + **/ +void * +_csi_hash_table_lookup (csi_hash_table_t *hash_table, + csi_hash_entry_t *key) +{ + csi_hash_entry_t **entry; + unsigned long table_size, i, idx, step; + + table_size = hash_table->arrangement->size; + idx = key->hash % table_size; + entry = &hash_table->entries[idx]; + + if (ENTRY_IS_LIVE (*entry)) { + if ((*entry)->hash == key->hash && hash_table->keys_equal (key, *entry)) + return *entry; + } else if (ENTRY_IS_FREE (*entry)) + return NULL; + + i = 1; + step = key->hash % hash_table->arrangement->rehash; + if (step == 0) + step = 1; + do { + idx += step; + if (idx >= table_size) + idx -= table_size; + + entry = &hash_table->entries[idx]; + if (ENTRY_IS_LIVE (*entry)) { + if ((*entry)->hash == key->hash && + hash_table->keys_equal (key, *entry)) + { + return *entry; + } + } else if (ENTRY_IS_FREE (*entry)) + return NULL; + } while (++i < table_size); + + return NULL; +} + +/** + * _csi_hash_table_insert: + * @hash_table: a hash table + * @key_and_value: an entry to be inserted + * + * Insert the entry #key_and_value into the hash table. + * + * WARNING: There must not be an existing entry in the hash table + * with a matching key. + * + * WARNING: It is a fatal error to insert an element while + * an iterator is running + * + * Instead of using insert to replace an entry, consider just editing + * the entry obtained with _csi_hash_table_lookup. Or if absolutely + * necessary, use _csi_hash_table_remove first. + * + * Return value: %CAIRO_STATUS_SUCCESS if successful or + * %CAIRO_STATUS_NO_MEMORY if insufficient memory is available. + **/ +csi_status_t +_csi_hash_table_insert (csi_hash_table_t *hash_table, + csi_hash_entry_t *key_and_value) +{ + csi_status_t status; + csi_hash_entry_t **entry; + + hash_table->live_entries++; + status = _csi_hash_table_manage (hash_table); + if (_csi_unlikely (status)) { + /* abort the insert... */ + hash_table->live_entries--; + return status; + } + + entry = _csi_hash_table_lookup_unique_key (hash_table, + key_and_value); + if (ENTRY_IS_FREE (*entry)) + hash_table->used_entries++; + + *entry = key_and_value; + return CAIRO_STATUS_SUCCESS; +} + +static csi_hash_entry_t ** +_csi_hash_table_lookup_exact_key (csi_hash_table_t *hash_table, + csi_hash_entry_t *key) +{ + unsigned long table_size, i, idx, step; + csi_hash_entry_t **entry; + + table_size = hash_table->arrangement->size; + idx = key->hash % table_size; + + entry = &hash_table->entries[idx]; + if (*entry == key) + return entry; + + i = 1; + step = key->hash % hash_table->arrangement->rehash; + if (step == 0) + step = 1; + do { + idx += step; + if (idx >= table_size) + idx -= table_size; + + entry = &hash_table->entries[idx]; + if (*entry == key) + return entry; + } while (++i < table_size); + + return NULL; +} +/** + * _csi_hash_table_remove: + * @hash_table: a hash table + * @key: key of entry to be removed + * + * Remove an entry from the hash table which points to @key. + * + * Return value: %CAIRO_STATUS_SUCCESS if successful or + * %CAIRO_STATUS_NO_MEMORY if out of memory. + **/ +void +_csi_hash_table_remove (csi_hash_table_t *hash_table, + csi_hash_entry_t *key) +{ + *_csi_hash_table_lookup_exact_key (hash_table, key) = DEAD_ENTRY; + hash_table->live_entries--; + + /* Check for table resize. Don't do this when iterating as this will + * reorder elements of the table and cause the iteration to potentially + * skip some elements. */ + if (hash_table->iterating == 0) { + /* This call _can_ fail, but only in failing to allocate new + * memory to shrink the hash table. It does leave the table in a + * consistent state, and we've already succeeded in removing the + * entry, so we don't examine the failure status of this call. */ + _csi_hash_table_manage (hash_table); + } +} + +/** + * _csi_hash_table_foreach: + * @hash_table: a hash table + * @hash_callback: function to be called for each live entry + * @closure: additional argument to be passed to @hash_callback + * + * Call @hash_callback for each live entry in the hash table, in a + * non-specified order. + * + * Entries in @hash_table may be removed by code executed from @hash_callback. + * + * Entries may not be inserted to @hash_table, nor may @hash_table + * be destroyed by code executed from @hash_callback. The relevant + * functions will halt in these cases. + **/ +void +_csi_hash_table_foreach (csi_hash_table_t *hash_table, + csi_hash_callback_func_t hash_callback, + void *closure) +{ + unsigned long i; + csi_hash_entry_t *entry; + + /* Mark the table for iteration */ + ++hash_table->iterating; + for (i = 0; i < hash_table->arrangement->size; i++) { + entry = hash_table->entries[i]; + if (ENTRY_IS_LIVE(entry)) + hash_callback (entry, closure); + } + /* If some elements were deleted during the iteration, + * the table may need resizing. Just do this every time + * as the check is inexpensive. + */ + if (--hash_table->iterating == 0) { + /* Should we fail to shrink the hash table, it is left unaltered, + * and we don't need to propagate the error status. */ + _csi_hash_table_manage (hash_table); + } +} diff --git a/libs/cairo-1.16.0/util/cairo-script/cairo-script-interpreter.c b/libs/cairo-1.16.0/util/cairo-script/cairo-script-interpreter.c new file mode 100644 index 0000000..a578ec4 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/cairo-script-interpreter.c @@ -0,0 +1,711 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +#include "cairo-script-private.h" +#include "cairo.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include <assert.h> + +#ifndef MAX +#define MAX(a,b) (((a)>=(b))?(a):(b)) +#endif + +csi_status_t +_csi_error (csi_status_t status) +{ + return status; +} + +/* XXX track global/local memory, cap etc, mark/sweep GC */ +void * +_csi_alloc (csi_t *ctx, int size) +{ + return malloc (size); +} + +void * +_csi_alloc0 (csi_t *ctx, int size) +{ + void *ptr; + + ptr = _csi_alloc (ctx, size); + if (_csi_likely (ptr != NULL)) + memset (ptr, 0, size); + + return ptr; +} + +void * +_csi_realloc (csi_t *ctx, void *ptr, int size) +{ + return realloc (ptr, size); +} + +void +_csi_free (csi_t *ctx, void *ptr) +{ + if (_csi_unlikely (ptr == NULL)) + return; + + free (ptr); +} + +void * +_csi_perm_alloc (csi_t *ctx, int size) +{ + csi_chunk_t *chunk; + void *ptr; + + size = (size + sizeof (void *)-1) & -sizeof (void *); + + chunk = ctx->perm_chunk; + if (chunk == NULL || chunk->rem < size) { + int chunk_size = (size + 8191) & -8192; + chunk = _csi_alloc (ctx, sizeof (csi_chunk_t) + chunk_size); + if (_csi_unlikely (chunk == NULL)) + return NULL; + + chunk->rem = chunk_size; + chunk->ptr = (char *) (chunk + 1); + chunk->next = ctx->perm_chunk; + ctx->perm_chunk = chunk; + } + + ptr = chunk->ptr; + chunk->ptr += size; + chunk->rem -= size; + + return ptr; +} + +void * +_csi_slab_alloc (csi_t *ctx, int size) +{ +#if CSI_DEBUG_MALLOC + return malloc (size); +#else + int chunk_size; + csi_chunk_t *chunk; + void *ptr; + + chunk_size = 2 * sizeof (void *); + chunk_size = (size + chunk_size - 1) / chunk_size; + + if (ctx->slabs[chunk_size].free_list) { + ptr = ctx->slabs[chunk_size].free_list; + ctx->slabs[chunk_size].free_list = *(void **) ptr; + return ptr; + } + + chunk = ctx->slabs[chunk_size].chunk; + if (chunk == NULL || ! chunk->rem) { + int cnt = MAX (128, 8192 / (chunk_size * 2 * sizeof (void *))); + + chunk = _csi_alloc (ctx, + sizeof (csi_chunk_t) + + cnt * chunk_size * 2 * sizeof (void *)); + if (_csi_unlikely (chunk == NULL)) + return NULL; + + chunk->rem = cnt; + chunk->ptr = (char *) (chunk + 1); + chunk->next = ctx->slabs[chunk_size].chunk; + ctx->slabs[chunk_size].chunk = chunk; + } + + ptr = chunk->ptr; + chunk->ptr += chunk_size * 2 * sizeof (void *); + chunk->rem--; + + return ptr; +#endif +} + +void +_csi_slab_free (csi_t *ctx, void *ptr, int size) +{ + int chunk_size; + void **free_list; + + if (_csi_unlikely (ptr == NULL)) + return; + +#if CSI_DEBUG_MALLOC + free (ptr); +#else + chunk_size = 2 * sizeof (void *); + chunk_size = (size + chunk_size - 1) / chunk_size; + + free_list = ptr; + *free_list = ctx->slabs[chunk_size].free_list; + ctx->slabs[chunk_size].free_list = ptr; +#endif +} + +csi_status_t +_csi_stack_push (csi_t *ctx, csi_stack_t *stack, + const csi_object_t *obj) +{ + if (_csi_unlikely (stack->len == stack->size)) + return _csi_stack_push_internal (ctx, stack, obj); + + stack->objects[stack->len++] = *obj; + return CSI_STATUS_SUCCESS; +} + +static void +_csi_perm_fini (csi_t *ctx) +{ + while (ctx->perm_chunk != NULL) { + csi_chunk_t *chunk = ctx->perm_chunk; + ctx->perm_chunk = chunk->next; + _csi_free (ctx, chunk); + } +} + +static void +_csi_slab_fini (csi_t *ctx) +{ + unsigned int i; + + for (i = 0; i < sizeof (ctx->slabs) / sizeof (ctx->slabs[0]); i++) { + while (ctx->slabs[i].chunk != NULL) { + csi_chunk_t *chunk = ctx->slabs[i].chunk; + ctx->slabs[i].chunk = chunk->next; + _csi_free (ctx, chunk); + } + } +} + +static csi_status_t +_add_operator (csi_t *ctx, + csi_dictionary_t *dict, + const csi_operator_def_t *def) +{ + csi_object_t name; + csi_object_t operator; + csi_status_t status; + + status = csi_name_new_static (ctx, &name, def->name); + if (status) + return status; + + csi_operator_new (&operator, def->op); + + return csi_dictionary_put (ctx, dict, name.datum.name, &operator); +} + +static csi_status_t +_add_integer_constant (csi_t *ctx, + csi_dictionary_t *dict, + const csi_integer_constant_def_t *def) +{ + csi_object_t name; + csi_object_t constant; + csi_status_t status; + + status = csi_name_new_static (ctx, &name, def->name); + if (status) + return status; + + csi_integer_new (&constant, def->value); + + return csi_dictionary_put (ctx, dict, name.datum.name, &constant); +} + +static csi_status_t +_add_real_constant (csi_t *ctx, + csi_dictionary_t *dict, + const csi_real_constant_def_t *def) +{ + csi_object_t name; + csi_object_t constant; + csi_status_t status; + + status = csi_name_new_static (ctx, &name, def->name); + if (status) + return status; + + csi_real_new (&constant, def->value); + + return csi_dictionary_put (ctx, dict, name.datum.name, &constant); +} + +static csi_status_t +_init_dictionaries (csi_t *ctx) +{ + csi_status_t status; + csi_stack_t *stack; + csi_object_t obj; + csi_dictionary_t *dict, *opcodes; + const csi_operator_def_t *odef; + const csi_integer_constant_def_t *idef; + const csi_real_constant_def_t *rdef; + unsigned n; + + stack = &ctx->dstack; + + status = _csi_stack_init (ctx, stack, 4); + if (_csi_unlikely (status)) + return status; + + /* systemdict */ + status = csi_dictionary_new (ctx, &obj); + if (_csi_unlikely (status)) + return status; + + status = _csi_stack_push (ctx, stack, &obj); + if (_csi_unlikely (status)) + return status; + + dict = obj.datum.dictionary; + + status = csi_dictionary_new (ctx, &obj); + if (_csi_unlikely (status)) + return status; + + opcodes = obj.datum.dictionary; + + n = 0; + csi_integer_new (&obj, n); + status = csi_dictionary_put (ctx, opcodes, 0, &obj); + if (_csi_unlikely (status)) + return status; + ctx->opcode[n++] = NULL; + + /* fill systemdict with operators */ + for (odef = _csi_operators (); odef->name != NULL; odef++) { + status = _add_operator (ctx, dict, odef); + if (_csi_unlikely (status)) + return status; + + if (! csi_dictionary_has (opcodes, (csi_name_t) odef->op)) { + csi_integer_new (&obj, n); + status = csi_dictionary_put (ctx, + opcodes, (csi_name_t) odef->op, &obj); + if (_csi_unlikely (status)) + return status; + + assert (n < sizeof (ctx->opcode) / sizeof (ctx->opcode[0])); + ctx->opcode[n++] = odef->op; + } + } + csi_dictionary_free (ctx, opcodes); + + /* add constants */ + for (idef = _csi_integer_constants (); idef->name != NULL; idef++) { + status = _add_integer_constant (ctx, dict, idef); + if (_csi_unlikely (status)) + return status; + } + for (rdef = _csi_real_constants (); rdef->name != NULL; rdef++) { + status = _add_real_constant (ctx, dict, rdef); + if (_csi_unlikely (status)) + return status; + } + + /* and seal */ + //dict.type &= ~CSI_OBJECT_ATTR_WRITABLE; + + + /* globaldict */ + status = csi_dictionary_new (ctx, &obj); + if (_csi_unlikely (status)) + return status; + status = _csi_stack_push (ctx, stack, &obj); + if (_csi_unlikely (status)) + return status; + + /* userdict */ + status = csi_dictionary_new (ctx, &obj); + if (_csi_unlikely (status)) + return status; + status = _csi_stack_push (ctx, stack, &obj); + if (_csi_unlikely (status)) + return status; + + return CSI_STATUS_SUCCESS; +} + +/* intern string */ + +typedef struct _cairo_intern_string { + csi_hash_entry_t hash_entry; + int len; + char *string; +} csi_intern_string_t; + +static unsigned long +_intern_string_hash (const char *str, int len) +{ + const signed char *p = (const signed char *) str; + if (len > 0) { + unsigned int h = *p; + + while (--len) + h = (h << 5) - h + *++p; + + return h; + } + return 0; +} + +static cairo_bool_t +_intern_string_equal (const void *_a, const void *_b) +{ + const csi_intern_string_t *a = _a; + const csi_intern_string_t *b = _b; + + if (a->len != b->len) + return FALSE; + + return memcmp (a->string, b->string, a->len) == 0; +} + +static void +_csi_init (csi_t *ctx) +{ + csi_status_t status; + + memset (ctx, 0, sizeof (*ctx)); + + ctx->status = CSI_STATUS_SUCCESS; + ctx->ref_count = 1; + ctx->scanner.line_number = -1; + + status = _csi_hash_table_init (&ctx->strings, _intern_string_equal); + if (status) + goto FAIL; + + status = _csi_stack_init (ctx, &ctx->ostack, 2048); + if (status) + goto FAIL; + status = _init_dictionaries (ctx); + if (status) + goto FAIL; + + status = _csi_scanner_init (ctx, &ctx->scanner); + if (status) + goto FAIL; + + return; + +FAIL: + if (ctx->status == CSI_STATUS_SUCCESS) + ctx->status = status; +} + +static void +_csi_finish (csi_t *ctx) +{ + _csi_stack_fini (ctx, &ctx->ostack); + _csi_stack_fini (ctx, &ctx->dstack); + _csi_scanner_fini (ctx, &ctx->scanner); + + _csi_hash_table_fini (&ctx->strings); +} + +csi_status_t +_csi_name_define (csi_t *ctx, csi_name_t name, csi_object_t *obj) +{ + return csi_dictionary_put (ctx, + ctx->dstack.objects[ctx->dstack.len-1].datum.dictionary, + name, + obj); +} + +csi_status_t +_csi_name_lookup (csi_t *ctx, csi_name_t name, csi_object_t *obj) +{ + int i; + + for (i = ctx->dstack.len; i--; ) { + csi_dictionary_t *dict; + csi_dictionary_entry_t *entry; + + dict = ctx->dstack.objects[i].datum.dictionary; + entry = _csi_hash_table_lookup (&dict->hash_table, + (csi_hash_entry_t *) &name); + if (entry != NULL) { + *obj = entry->value; + return CSI_STATUS_SUCCESS; + } + } + + return _csi_error (CSI_STATUS_INVALID_SCRIPT); +} + +csi_status_t +_csi_name_undefine (csi_t *ctx, csi_name_t name) +{ + unsigned int i; + + for (i = ctx->dstack.len; --i; ) { + if (csi_dictionary_has (ctx->dstack.objects[i].datum.dictionary, + name)) + { + csi_dictionary_remove (ctx, + ctx->dstack.objects[i].datum.dictionary, + name); + return CSI_STATUS_SUCCESS; + } + } + + return _csi_error (CSI_STATUS_INVALID_SCRIPT); +} + +csi_status_t +_csi_intern_string (csi_t *ctx, const char **str_inout, int len) +{ + char *str = (char *) *str_inout; + csi_intern_string_t tmpl, *istring; + csi_status_t status = CSI_STATUS_SUCCESS; + + tmpl.hash_entry.hash = _intern_string_hash (str, len); + tmpl.len = len; + tmpl.string = (char *) str; + + istring = _csi_hash_table_lookup (&ctx->strings, &tmpl.hash_entry); + if (istring == NULL) { + istring = _csi_perm_alloc (ctx, + sizeof (csi_intern_string_t) + len + 1); + if (istring != NULL) { + istring->hash_entry.hash = tmpl.hash_entry.hash; + istring->len = tmpl.len; + istring->string = (char *) (istring + 1); + memcpy (istring->string, str, len); + istring->string[len] = '\0'; + + status = _csi_hash_table_insert (&ctx->strings, + &istring->hash_entry); + if (_csi_unlikely (status)) { + _csi_free (ctx, istring); + return status; + } + } else + return _csi_error (CSI_STATUS_NO_MEMORY); + } + + *str_inout = istring->string; + return CSI_STATUS_SUCCESS; +} + +/* Public */ + +static csi_t _csi_nil = { -1, CSI_STATUS_NO_MEMORY }; + +csi_t * +cairo_script_interpreter_create (void) +{ + csi_t *ctx; + + ctx = malloc (sizeof (csi_t)); + if (ctx == NULL) + return (csi_t *) &_csi_nil; + + _csi_init (ctx); + + return ctx; +} + +void +cairo_script_interpreter_install_hooks (csi_t *ctx, + const csi_hooks_t *hooks) +{ + if (ctx->status) + return; + + ctx->hooks = *hooks; +} + +cairo_status_t +cairo_script_interpreter_run (csi_t *ctx, const char *filename) +{ + csi_object_t file; + + if (ctx->status) + return ctx->status; + if (ctx->finished) + return ctx->status = CSI_STATUS_INTERPRETER_FINISHED; + + ctx->status = csi_file_new (ctx, &file, filename, "r"); + if (ctx->status) + return ctx->status; + + file.type |= CSI_OBJECT_ATTR_EXECUTABLE; + + ctx->status = csi_object_execute (ctx, &file); + csi_object_free (ctx, &file); + + return ctx->status; +} + +cairo_status_t +cairo_script_interpreter_feed_stream (csi_t *ctx, FILE *stream) +{ + csi_object_t file; + + if (ctx->status) + return ctx->status; + if (ctx->finished) + return ctx->status = CSI_STATUS_INTERPRETER_FINISHED; + + ctx->status = csi_file_new_for_stream (ctx, &file, stream); + if (ctx->status) + return ctx->status; + + file.type |= CSI_OBJECT_ATTR_EXECUTABLE; + + ctx->status = csi_object_execute (ctx, &file); + csi_object_free (ctx, &file); + + return ctx->status; +} + +cairo_status_t +cairo_script_interpreter_feed_string (csi_t *ctx, const char *line, int len) +{ + csi_object_t file; + + if (ctx->status) + return ctx->status; + if (ctx->finished) + return ctx->status = CSI_STATUS_INTERPRETER_FINISHED; + + if (len < 0) + len = strlen (line); + ctx->status = csi_file_new_for_bytes (ctx, &file, line, len); + if (ctx->status) + return ctx->status; + + file.type |= CSI_OBJECT_ATTR_EXECUTABLE; + + ctx->status = csi_object_execute (ctx, &file); + csi_object_free (ctx, &file); + + return ctx->status; +} + +unsigned int +cairo_script_interpreter_get_line_number (csi_t *ctx) +{ + return ctx->scanner.line_number + 1; /* 1 index based */ +} + +csi_t * +cairo_script_interpreter_reference (csi_t *ctx) +{ + ctx->ref_count++; + return ctx; +} +slim_hidden_def (cairo_script_interpreter_reference); + +cairo_status_t +cairo_script_interpreter_finish (csi_t *ctx) +{ + csi_status_t status; + + status = ctx->status; + if (! ctx->finished) { + _csi_finish (ctx); + ctx->finished = 1; + } else if (status == CSI_STATUS_SUCCESS) { + status = ctx->status = CSI_STATUS_INTERPRETER_FINISHED; + } + + return status; +} + +static void +_csi_fini (csi_t *ctx) +{ + if (! ctx->finished) + _csi_finish (ctx); + + if (ctx->free_array != NULL) + csi_array_free (ctx, ctx->free_array); + if (ctx->free_dictionary != NULL) + csi_dictionary_free (ctx, ctx->free_dictionary); + if (ctx->free_string != NULL) + csi_string_free (ctx, ctx->free_string); + + _csi_slab_fini (ctx); + _csi_perm_fini (ctx); +} + +cairo_status_t +cairo_script_interpreter_destroy (csi_t *ctx) +{ + csi_status_t status; + + status = ctx->status; + if (--ctx->ref_count) + return status; + + _csi_fini (ctx); + free (ctx); + + return status; +} +slim_hidden_def (cairo_script_interpreter_destroy); + +cairo_status_t +cairo_script_interpreter_translate_stream (FILE *stream, + cairo_write_func_t write_func, + void *closure) +{ + csi_t ctx; + csi_object_t src; + csi_status_t status; + + _csi_init (&ctx); + + status = csi_file_new_for_stream (&ctx, &src, stream); + if (status) + goto BAIL; + + status = _csi_translate_file (&ctx, src.datum.file, write_func, closure); + +BAIL: + csi_object_free (&ctx, &src); + _csi_fini (&ctx); + + return status; +} diff --git a/libs/cairo-1.16.0/util/cairo-script/cairo-script-interpreter.h b/libs/cairo-1.16.0/util/cairo-script/cairo-script-interpreter.h new file mode 100644 index 0000000..27fb986 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/cairo-script-interpreter.h @@ -0,0 +1,124 @@ +/* cairo - a vector graphics library with display and print output + * + * Copyright © 2008 Chris Wilson + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#ifndef CAIRO_SCRIPT_INTERPRETER_H +#define CAIRO_SCRIPT_INTERPRETER_H + +#include <cairo.h> +#include <stdio.h> + +CAIRO_BEGIN_DECLS + +typedef struct _cairo_script_interpreter cairo_script_interpreter_t; + +/* XXX expose csi_dictionary_t and pass to hooks */ +typedef void +(*csi_destroy_func_t) (void *closure, + void *ptr); + +typedef cairo_surface_t * +(*csi_surface_create_func_t) (void *closure, + cairo_content_t content, + double width, + double height, + long uid); +typedef cairo_t * +(*csi_context_create_func_t) (void *closure, + cairo_surface_t *surface); +typedef void +(*csi_show_page_func_t) (void *closure, + cairo_t *cr); + +typedef void +(*csi_copy_page_func_t) (void *closure, + cairo_t *cr); + +typedef cairo_surface_t * +(*csi_create_source_image_t) (void *closure, + cairo_format_t format, + int width, int height, + long uid); + +typedef struct _cairo_script_interpreter_hooks { + void *closure; + csi_surface_create_func_t surface_create; + csi_destroy_func_t surface_destroy; + csi_context_create_func_t context_create; + csi_destroy_func_t context_destroy; + csi_show_page_func_t show_page; + csi_copy_page_func_t copy_page; + csi_create_source_image_t create_source_image; +} cairo_script_interpreter_hooks_t; + +cairo_public cairo_script_interpreter_t * +cairo_script_interpreter_create (void); + +cairo_public void +cairo_script_interpreter_install_hooks (cairo_script_interpreter_t *ctx, + const cairo_script_interpreter_hooks_t *hooks); + +cairo_public cairo_status_t +cairo_script_interpreter_run (cairo_script_interpreter_t *ctx, + const char *filename); + +cairo_public cairo_status_t +cairo_script_interpreter_feed_stream (cairo_script_interpreter_t *ctx, + FILE *stream); + +cairo_public cairo_status_t +cairo_script_interpreter_feed_string (cairo_script_interpreter_t *ctx, + const char *line, + int len); + +cairo_public unsigned int +cairo_script_interpreter_get_line_number (cairo_script_interpreter_t *ctx); + +cairo_public cairo_script_interpreter_t * +cairo_script_interpreter_reference (cairo_script_interpreter_t *ctx); + +cairo_public cairo_status_t +cairo_script_interpreter_finish (cairo_script_interpreter_t *ctx); + +cairo_public cairo_status_t +cairo_script_interpreter_destroy (cairo_script_interpreter_t *ctx); + +cairo_public cairo_status_t +cairo_script_interpreter_translate_stream (FILE *stream, + cairo_write_func_t write_func, + void *closure); + +CAIRO_END_DECLS + +#endif /*CAIRO_SCRIPT_INTERPRETER_H*/ diff --git a/libs/cairo-1.16.0/util/cairo-script/cairo-script-objects.c b/libs/cairo-1.16.0/util/cairo-script/cairo-script-objects.c new file mode 100644 index 0000000..2d7937b --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/cairo-script-objects.c @@ -0,0 +1,938 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +#include "cairo-script-private.h" + +#include <limits.h> /* INT_MAX */ +#include <string.h> + +csi_status_t +csi_array_new (csi_t *ctx, + csi_integer_t initial_size, + csi_object_t *obj) + +{ + csi_array_t *array; + + if (ctx->free_array == NULL || + ctx->free_array->stack.size <= initial_size) + { + csi_status_t status; + + array = _csi_slab_alloc (ctx, sizeof (csi_array_t)); + if (_csi_unlikely (array == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + status = _csi_stack_init (ctx, &array->stack, + initial_size ? initial_size : 32); + if (_csi_unlikely (status)) { + _csi_slab_free (ctx, array, sizeof (csi_array_t)); + return status; + } + } else { + array = ctx->free_array; + ctx->free_array = NULL; + } + + array->base.type = CSI_OBJECT_TYPE_ARRAY; + array->base.ref = 1; + + obj->type = CSI_OBJECT_TYPE_ARRAY; + obj->datum.array = array; + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_array_put (csi_t *ctx, + csi_array_t *array, + csi_integer_t elem, + csi_object_t *value) +{ + if (_csi_unlikely (elem < 0)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + if (_csi_unlikely (elem >= array->stack.len)) { + csi_status_t status; + + status = _csi_stack_grow (ctx, &array->stack, elem + 1); + if (_csi_unlikely (status)) + return status; + + memset (array->stack.objects + array->stack.len, + 0, (elem - array->stack.len + 1) * sizeof (csi_object_t)); + array->stack.len = elem + 1; + } + + csi_object_free (ctx, &array->stack.objects[elem]); + array->stack.objects[elem] = *csi_object_reference (value); + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_array_get (csi_t *ctx, + csi_array_t *array, + csi_integer_t elem, + csi_object_t *value) +{ + if (_csi_unlikely (elem < 0)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + if (_csi_unlikely (elem > array->stack.len)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + *value = array->stack.objects[elem]; + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_array_append (csi_t *ctx, + csi_array_t *array, + csi_object_t *obj) +{ + return _csi_stack_push (ctx, &array->stack, csi_object_reference (obj)); +} + +inline csi_status_t +_csi_array_execute (csi_t *ctx, csi_array_t *array) +{ + csi_integer_t i; + csi_status_t status; + + if (_csi_unlikely (array->stack.len == 0)) + return CSI_STATUS_SUCCESS; + + for (i = 0; i < array->stack.len; i++) { + csi_object_t *obj = &array->stack.objects[i]; + + if (obj->type & CSI_OBJECT_ATTR_EXECUTABLE) { + if (obj->type == (CSI_OBJECT_TYPE_ARRAY | + CSI_OBJECT_ATTR_EXECUTABLE)) + { + status = _csi_push_ostack_copy (ctx, &array->stack.objects[i]); + } + else + status = csi_object_execute (ctx, &array->stack.objects[i]); + } else + status = _csi_push_ostack_copy (ctx, &array->stack.objects[i]); + if (_csi_unlikely (status)) + return status; + } + + return CSI_STATUS_SUCCESS; +} + +void +csi_array_free (csi_t *ctx, csi_array_t *array) +{ +#if CSI_DEBUG_MALLOC + _csi_stack_fini (ctx, &array->stack); + _csi_slab_free (ctx, array, sizeof (csi_array_t)); +#else + csi_integer_t n; + + for (n = 0; n < array->stack.len; n++) + csi_object_free (ctx, &array->stack.objects[n]); + array->stack.len = 0; + + if (ctx->free_array != NULL) { + if (array->stack.size > ctx->free_array->stack.size) { + csi_array_t *tmp = ctx->free_array; + ctx->free_array = array; + array = tmp; + } + + _csi_stack_fini (ctx, &array->stack); + _csi_slab_free (ctx, array, sizeof (csi_array_t)); + } else + ctx->free_array = array; +#endif +} + +static cairo_bool_t +_dictionary_name_equal (const void *_a, const void *_b) +{ + return TRUE; +} + +csi_status_t +csi_dictionary_new (csi_t *ctx, + csi_object_t *obj) + +{ + csi_dictionary_t *dict; + + if (ctx->free_dictionary != NULL) { + dict = ctx->free_dictionary; + ctx->free_dictionary = NULL; + } else { + csi_status_t status; + + dict = _csi_slab_alloc (ctx, sizeof (csi_dictionary_t)); + if (_csi_unlikely (dict == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + status = _csi_hash_table_init (&dict->hash_table, + _dictionary_name_equal); + if (_csi_unlikely (status)) { + _csi_slab_free (ctx, dict, sizeof (csi_dictionary_t)); + return status; + } + } + + dict->base.type = CSI_OBJECT_TYPE_DICTIONARY; + dict->base.ref = 1; + + obj->type = CSI_OBJECT_TYPE_DICTIONARY; + obj->datum.dictionary = dict; + + return CSI_STATUS_SUCCESS; +} + +struct _dictionary_entry_pluck { + csi_t *ctx; + csi_hash_table_t *hash_table; +}; + +static void +_dictionary_entry_pluck (void *entry, void *data) +{ + csi_dictionary_entry_t *dict_entry; + struct _dictionary_entry_pluck *pluck_data; + + dict_entry = entry; + pluck_data = data; + + _csi_hash_table_remove (pluck_data->hash_table, entry); + csi_object_free (pluck_data->ctx, &dict_entry->value); + _csi_slab_free (pluck_data->ctx, entry, sizeof (csi_dictionary_entry_t)); +} + +void +csi_dictionary_free (csi_t *ctx, + csi_dictionary_t *dict) +{ + struct _dictionary_entry_pluck data; + + data.ctx = ctx; + data.hash_table = &dict->hash_table; + _csi_hash_table_foreach (&dict->hash_table, + _dictionary_entry_pluck, + &data); + +#if CSI_DEBUG_MALLOC + _csi_hash_table_fini (&dict->hash_table); + _csi_slab_free (ctx, dict, sizeof (csi_dictionary_t)); +#else + if (ctx->free_dictionary != NULL) { + _csi_hash_table_fini (&dict->hash_table); + _csi_slab_free (ctx, dict, sizeof (csi_dictionary_t)); + } else + ctx->free_dictionary = dict; +#endif +} + +csi_status_t +csi_dictionary_put (csi_t *ctx, + csi_dictionary_t *dict, + csi_name_t name, + csi_object_t *value) +{ + csi_dictionary_entry_t *entry; + csi_status_t status; + + entry = _csi_hash_table_lookup (&dict->hash_table, + (csi_hash_entry_t *) &name); + if (entry != NULL) { + /* replace the existing entry */ + csi_object_free (ctx, &entry->value); + entry->value = *csi_object_reference (value); + return CSI_STATUS_SUCCESS; + } + + entry = _csi_slab_alloc (ctx, sizeof (*entry)); + if (_csi_unlikely (entry == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + entry->hash_entry.hash = name; + status = _csi_hash_table_insert (&dict->hash_table, &entry->hash_entry); + if (_csi_unlikely (status)) { + _csi_slab_free (ctx, entry, sizeof (*entry)); + return status; + } + + entry->value = *csi_object_reference (value); + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_dictionary_get (csi_t *ctx, + csi_dictionary_t *dict, + csi_name_t name, + csi_object_t *value) +{ + csi_dictionary_entry_t *entry; + + entry = _csi_hash_table_lookup (&dict->hash_table, + (csi_hash_entry_t *) &name); + if (_csi_unlikely (entry == NULL)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + *value = entry->value; + return CSI_STATUS_SUCCESS; +} + +csi_boolean_t +csi_dictionary_has (csi_dictionary_t *dict, + csi_name_t name) +{ + return _csi_hash_table_lookup (&dict->hash_table, + (csi_hash_entry_t *) &name) != NULL; +} + +void +csi_dictionary_remove (csi_t *ctx, + csi_dictionary_t *dict, + csi_name_t name) +{ + csi_dictionary_entry_t *entry; + + entry = _csi_hash_table_lookup (&dict->hash_table, + (csi_hash_entry_t *) &name); + if (entry != NULL) { + _csi_hash_table_remove (&dict->hash_table, &entry->hash_entry); + csi_object_free (ctx, &entry->value); + _csi_slab_free (ctx, entry, sizeof (csi_dictionary_entry_t)); + } +} + +csi_status_t +csi_matrix_new (csi_t *ctx, + csi_object_t *obj) +{ + csi_matrix_t *matrix; + + matrix = _csi_slab_alloc (ctx, sizeof (csi_matrix_t)); + if (_csi_unlikely (matrix == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + matrix->base.type = CSI_OBJECT_TYPE_MATRIX; + matrix->base.ref = 1; + cairo_matrix_init_identity (&matrix->matrix); + + obj->type = CSI_OBJECT_TYPE_MATRIX; + obj->datum.matrix = matrix; + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_matrix_new_from_array (csi_t *ctx, + csi_object_t *obj, + csi_array_t *array) +{ + csi_matrix_t *matrix; + + if (_csi_unlikely (array->stack.len != 6)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + matrix = _csi_slab_alloc (ctx, sizeof (csi_matrix_t)); + if (_csi_unlikely (matrix == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + matrix->base.type = CSI_OBJECT_TYPE_MATRIX; + matrix->base.ref = 1; + cairo_matrix_init (&matrix->matrix, + csi_number_get_value (&array->stack.objects[0]), + csi_number_get_value (&array->stack.objects[1]), + csi_number_get_value (&array->stack.objects[2]), + csi_number_get_value (&array->stack.objects[3]), + csi_number_get_value (&array->stack.objects[4]), + csi_number_get_value (&array->stack.objects[5])); + + obj->type = CSI_OBJECT_TYPE_MATRIX; + obj->datum.matrix = matrix; + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_matrix_new_from_matrix (csi_t *ctx, + csi_object_t *obj, + const cairo_matrix_t *m) +{ + csi_matrix_t *matrix; + + matrix = _csi_slab_alloc (ctx, sizeof (csi_matrix_t)); + if (_csi_unlikely (matrix == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + matrix->base.type = CSI_OBJECT_TYPE_MATRIX; + matrix->base.ref = 1; + matrix->matrix = *m; + + obj->type = CSI_OBJECT_TYPE_MATRIX; + obj->datum.matrix = matrix; + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_matrix_new_from_values (csi_t *ctx, + csi_object_t *obj, + double v[6]) +{ + csi_matrix_t *matrix; + + matrix = _csi_slab_alloc (ctx, sizeof (csi_matrix_t)); + if (_csi_unlikely (matrix == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + matrix->base.type = CSI_OBJECT_TYPE_MATRIX; + matrix->base.ref = 1; + cairo_matrix_init (&matrix->matrix, v[0], v[1], v[2], v[3], v[4], v[5]); + + obj->type = CSI_OBJECT_TYPE_MATRIX; + obj->datum.matrix = matrix; + + return CSI_STATUS_SUCCESS; +} + +void +csi_matrix_free (csi_t *ctx, + csi_matrix_t *obj) +{ + _csi_slab_free (ctx, obj, sizeof (csi_matrix_t)); +} + + +csi_status_t +csi_name_new (csi_t *ctx, + csi_object_t *obj, + const char *str, + int len) +{ + csi_status_t status; + + status = _csi_intern_string (ctx, &str, len); + if (_csi_unlikely (status)) + return status; + + obj->type = CSI_OBJECT_TYPE_NAME; + obj->datum.name = (csi_name_t) str; + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_name_new_static (csi_t *ctx, + csi_object_t *obj, + const char *str) +{ + csi_status_t status; + + status = _csi_intern_string (ctx, &str, strlen (str)); + if (_csi_unlikely (status)) + return status; + + obj->type = CSI_OBJECT_TYPE_NAME; + obj->datum.name = (csi_name_t) str; + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_string_new (csi_t *ctx, + csi_object_t *obj, + const char *str, + int len) +{ + csi_string_t *string; + + if (len < 0) + len = strlen (str); + if (_csi_unlikely (len >= INT_MAX)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + if (ctx->free_string == NULL || ctx->free_string->len <= len) { + string = _csi_slab_alloc (ctx, sizeof (csi_string_t)); + if (_csi_unlikely (string == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + string->string = _csi_alloc (ctx, len + 1); + if (_csi_unlikely (string->string == NULL)) { + _csi_slab_free (ctx, string, sizeof (csi_string_t)); + return _csi_error (CSI_STATUS_NO_MEMORY); + } + } else { + string = ctx->free_string; + ctx->free_string = NULL; + } + + if (str != NULL) { + memcpy (string->string, str, len); + string->string[len] = '\0'; + } + string->len = len; + string->deflate = 0; + string->method = NONE; + + string->base.type = CSI_OBJECT_TYPE_STRING; + string->base.ref = 1; + + obj->type = CSI_OBJECT_TYPE_STRING; + obj->datum.string = string; + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_string_deflate_new (csi_t *ctx, + csi_object_t *obj, + void *bytes, + int in_len, + int out_len) +{ + csi_status_t status; + csi_string_t *string; + + status = csi_string_new (ctx, obj, bytes, in_len); + if (_csi_unlikely (status)) + return status; + + string = obj->datum.string; + string->deflate = out_len; + string->method = ZLIB; + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +csi_string_new_from_bytes (csi_t *ctx, + csi_object_t *obj, + char *bytes, + unsigned int len) +{ + csi_string_t *string; + + if (_csi_unlikely (len >= INT_MAX)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + string = _csi_slab_alloc (ctx, sizeof (csi_string_t)); + if (_csi_unlikely (string == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + string->string = bytes; + string->len = len; + string->deflate = 0; + string->method = NONE; + + string->base.type = CSI_OBJECT_TYPE_STRING; + string->base.ref = 1; + + obj->type = CSI_OBJECT_TYPE_STRING; + obj->datum.string = string; + + return CSI_STATUS_SUCCESS; +} + +static inline csi_status_t +_csi_string_execute (csi_t *ctx, csi_string_t *string) +{ + csi_status_t status; + csi_object_t obj; + + if (_csi_unlikely (string->len == 0)) + return CSI_STATUS_SUCCESS; + + status = csi_file_new_for_bytes (ctx, &obj, string->string, string->len); + if (_csi_unlikely (status)) + return status; + + status = _csi_scan_file (ctx, obj.datum.file); + csi_object_free (ctx, &obj); + + return status; +} + +void +csi_string_free (csi_t *ctx, csi_string_t *string) +{ +#if CSI_DEBUG_MALLOC + _csi_free (ctx, string->string); + _csi_slab_free (ctx, string, sizeof (csi_string_t)); +#else + if (ctx->free_string != NULL) { + if (string->len > ctx->free_string->len) { + csi_string_t *tmp = ctx->free_string; + ctx->free_string = string; + string = tmp; + } + + _csi_free (ctx, string->string); + _csi_slab_free (ctx, string, sizeof (csi_string_t)); + } else + ctx->free_string = string; +#endif +} + +csi_status_t +csi_object_execute (csi_t *ctx, csi_object_t *obj) +{ + csi_status_t status; + csi_object_t indirect; + + INDIRECT: + switch (obj->type & CSI_OBJECT_TYPE_MASK) { + case CSI_OBJECT_TYPE_NAME: + status = _csi_name_lookup (ctx, obj->datum.name, &indirect); + if (_csi_unlikely (status)) + return status; + if (indirect.type & CSI_OBJECT_ATTR_EXECUTABLE) { + obj = &indirect; + goto INDIRECT; + } else + return _csi_push_ostack_copy (ctx, &indirect); + + case CSI_OBJECT_TYPE_OPERATOR: + return obj->datum.op (ctx); + + case CSI_OBJECT_TYPE_ARRAY: + return _csi_array_execute (ctx, obj->datum.array); + case CSI_OBJECT_TYPE_FILE: + return _csi_file_execute (ctx, obj->datum.file); + case CSI_OBJECT_TYPE_STRING: + return _csi_string_execute (ctx, obj->datum.string); + + default: + return _csi_push_ostack_copy (ctx, obj); + } +} + +csi_object_t * +csi_object_reference (csi_object_t *obj) +{ + if (CSI_OBJECT_IS_CAIRO (obj)) { + switch (obj->type & CSI_OBJECT_TYPE_MASK) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_reference (obj->datum.cr); + break; + case CSI_OBJECT_TYPE_FONT: + cairo_font_face_reference (obj->datum.font_face); + break; + case CSI_OBJECT_TYPE_PATTERN: + cairo_pattern_reference (obj->datum.pattern); + break; + case CSI_OBJECT_TYPE_SCALED_FONT: + cairo_scaled_font_reference (obj->datum.scaled_font); + break; + case CSI_OBJECT_TYPE_SURFACE: + cairo_surface_reference (obj->datum.surface); + break; + } + } else if (CSI_OBJECT_IS_COMPOUND (obj)) { + obj->datum.object->ref++; + } + + return obj; +} + +void +csi_object_free (csi_t *ctx, + csi_object_t *obj) +{ + if (CSI_OBJECT_IS_CAIRO (obj)) { + switch (obj->type & CSI_OBJECT_TYPE_MASK) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_destroy (obj->datum.cr); + break; + case CSI_OBJECT_TYPE_FONT: + cairo_font_face_destroy (obj->datum.font_face); + break; + case CSI_OBJECT_TYPE_PATTERN: + cairo_pattern_destroy (obj->datum.pattern); + break; + case CSI_OBJECT_TYPE_SCALED_FONT: + cairo_scaled_font_destroy (obj->datum.scaled_font); + break; + case CSI_OBJECT_TYPE_SURFACE: + cairo_surface_destroy (obj->datum.surface); + break; + } + } else if (CSI_OBJECT_IS_COMPOUND (obj)) { + if (--obj->datum.object->ref) + return; + + switch (obj->type & CSI_OBJECT_TYPE_MASK) { + case CSI_OBJECT_TYPE_ARRAY: + csi_array_free (ctx, obj->datum.array); + break; + case CSI_OBJECT_TYPE_DICTIONARY: + csi_dictionary_free (ctx, obj->datum.dictionary); + break; + case CSI_OBJECT_TYPE_FILE: + _csi_file_free (ctx, obj->datum.file); + break; + case CSI_OBJECT_TYPE_MATRIX: + csi_matrix_free (ctx, obj->datum.matrix); + break; + case CSI_OBJECT_TYPE_STRING: + csi_string_free (ctx, obj->datum.string); + break; + default: + break; + } + } +} + +csi_status_t +csi_object_as_file (csi_t *ctx, + csi_object_t *src, + csi_object_t *file) +{ + int type = csi_object_get_type (src); + switch (type) { + case CSI_OBJECT_TYPE_FILE: + *file = *csi_object_reference (src); + return CSI_STATUS_SUCCESS; + case CSI_OBJECT_TYPE_STRING: + return csi_file_new_from_string (ctx, file, src->datum.string); + case CSI_OBJECT_TYPE_ARRAY: +#if 0 + if (src->type & CSI_OBJECT_ATTR_EXECUTABLE) + return _csi_file_new_from_procedure (cs, src); +#endif + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } +} + +static int +lexcmp (void const *a, size_t alen, + void const *b, size_t blen) +{ + size_t len = alen < blen ? alen : blen; + int cmp = memcmp (a, b, len); + if (cmp) + return cmp; + if (alen == blen) + return 0; + return alen < blen ? -1 : +1; +} + +csi_boolean_t +csi_object_eq (csi_object_t *a, + csi_object_t *b) +{ + csi_object_type_t atype = csi_object_get_type (a); + csi_object_type_t btype = csi_object_get_type (b); + + if (atype == btype) { + switch (atype) { + case CSI_OBJECT_TYPE_BOOLEAN: + return a->datum.boolean == b->datum.boolean; + case CSI_OBJECT_TYPE_INTEGER: + return a->datum.integer == b->datum.integer; + case CSI_OBJECT_TYPE_REAL: + return a->datum.real == b->datum.real; + case CSI_OBJECT_TYPE_NAME: + return a->datum.name == b->datum.name; + case CSI_OBJECT_TYPE_STRING: + return 0 == lexcmp (a->datum.string->string, + a->datum.string->len, + b->datum.string->string, + b->datum.string->len); + case CSI_OBJECT_TYPE_NULL: + case CSI_OBJECT_TYPE_MARK: + return TRUE; + case CSI_OBJECT_TYPE_OPERATOR: + return a->datum.op == b->datum.op; + case CSI_OBJECT_TYPE_ARRAY: + case CSI_OBJECT_TYPE_DICTIONARY: + case CSI_OBJECT_TYPE_FILE: + case CSI_OBJECT_TYPE_MATRIX: + case CSI_OBJECT_TYPE_CONTEXT: + case CSI_OBJECT_TYPE_FONT: + case CSI_OBJECT_TYPE_PATTERN: + case CSI_OBJECT_TYPE_SCALED_FONT: + case CSI_OBJECT_TYPE_SURFACE: + return a->datum.ptr == b->datum.ptr; + } + } + + if (atype < btype) { + csi_object_t *c; + csi_object_type_t ctype; + c = a; a = b; b = c; + ctype = atype; atype = btype; btype = ctype; + } + + switch ((int) atype) { + case CSI_OBJECT_TYPE_INTEGER: + if (btype == CSI_OBJECT_TYPE_BOOLEAN) { + return a->datum.integer == b->datum.boolean; + } + break; + case CSI_OBJECT_TYPE_REAL: + if (btype == CSI_OBJECT_TYPE_INTEGER) { + return a->datum.real == b->datum.integer; + } + else if (btype == CSI_OBJECT_TYPE_BOOLEAN) { + return a->datum.real == b->datum.boolean; + } + break; + + case CSI_OBJECT_TYPE_STRING: + if (btype == CSI_OBJECT_TYPE_NAME) { + const char *bstr = (const char *) b->datum.name; + return 0 == lexcmp (a->datum.string->string, + a->datum.string->len, + bstr, + strlen (bstr)); + } + break; + + default: + break; + } + + return FALSE; +} + +csi_status_t +csi_object_compare (csi_object_t *a, + csi_object_t *b, + int *out) +{ + csi_object_type_t atype = csi_object_get_type (a); + csi_object_type_t btype = csi_object_get_type (b); + int sign; + + if (csi_object_eq (a, b)){ + *out = 0; + return CSI_STATUS_SUCCESS; + } + +#define CMP(x,y) ((x) < (y) ? -1 : +1) + + if (atype == btype) { + switch (atype) { + case CSI_OBJECT_TYPE_BOOLEAN: + *out = CMP (a->datum.boolean, b->datum.boolean); + return CSI_STATUS_SUCCESS; + case CSI_OBJECT_TYPE_INTEGER: + *out = CMP (a->datum.integer, b->datum.integer); + return CSI_STATUS_SUCCESS; + case CSI_OBJECT_TYPE_REAL: + *out = CMP (a->datum.real, b->datum.real); + return CSI_STATUS_SUCCESS; + case CSI_OBJECT_TYPE_NAME: { + const char *x = (char const *) a->datum.name; + const char *y = (char const *) b->datum.name; + *out = lexcmp (x, strlen(x), y, strlen (y)); + return CSI_STATUS_SUCCESS; + } + case CSI_OBJECT_TYPE_STRING: + *out = lexcmp (a->datum.string->string, + a->datum.string->len, + b->datum.string->string, + b->datum.string->len); + return CSI_STATUS_SUCCESS; + case CSI_OBJECT_TYPE_NULL: + case CSI_OBJECT_TYPE_MARK: + case CSI_OBJECT_TYPE_OPERATOR: + case CSI_OBJECT_TYPE_ARRAY: + case CSI_OBJECT_TYPE_DICTIONARY: + case CSI_OBJECT_TYPE_FILE: + case CSI_OBJECT_TYPE_MATRIX: + case CSI_OBJECT_TYPE_CONTEXT: + case CSI_OBJECT_TYPE_FONT: + case CSI_OBJECT_TYPE_PATTERN: + case CSI_OBJECT_TYPE_SCALED_FONT: + case CSI_OBJECT_TYPE_SURFACE: + goto TYPE_CHECK_ERROR; + } + } + + sign = +1; + if (atype < btype) { + csi_object_t *c; + csi_object_type_t ctype; + c = a; a = b; b = c; + ctype = atype; atype = btype; btype = ctype; + sign = -1; + } + + switch ((int) atype) { + case CSI_OBJECT_TYPE_INTEGER: + if (btype == CSI_OBJECT_TYPE_BOOLEAN) { + *out = sign * CMP (a->datum.integer, !!b->datum.boolean); + return CSI_STATUS_SUCCESS; + } + break; + case CSI_OBJECT_TYPE_REAL: + if (btype == CSI_OBJECT_TYPE_INTEGER) { + *out = sign * CMP (a->datum.real, b->datum.integer); + return CSI_STATUS_SUCCESS; + } + else if (btype == CSI_OBJECT_TYPE_BOOLEAN) { + *out = sign * CMP (a->datum.real, !!b->datum.boolean); + return CSI_STATUS_SUCCESS; + } + break; + + case CSI_OBJECT_TYPE_STRING: + if (btype == CSI_OBJECT_TYPE_NAME) { + const char *bstr = (const char *) b->datum.name; + *out = sign * lexcmp (a->datum.string->string, + a->datum.string->len, + bstr, + strlen (bstr)); + return CSI_STATUS_SUCCESS; + } + break; + + default: + break; + } + +#undef CMP + + TYPE_CHECK_ERROR: + return _csi_error (CSI_STATUS_SCRIPT_INVALID_TYPE); +} diff --git a/libs/cairo-1.16.0/util/cairo-script/cairo-script-operators.c b/libs/cairo-1.16.0/util/cairo-script/cairo-script-operators.c new file mode 100644 index 0000000..e493311 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/cairo-script-operators.c @@ -0,0 +1,6793 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +/* TODO real path type */ + +#include "cairo-script-private.h" + +#if CAIRO_HAS_SCRIPT_SURFACE +#include "cairo-script.h" +#endif + +#include <stdio.h> /* snprintf */ +#include <stdlib.h> /* mkstemp */ +#include <string.h> + +#ifdef _MSC_VER +#define _USE_MATH_DEFINES /* for M_LN2, M_PI and M_SQRT2 on win32 */ +#define snprintf _snprintf +#endif + +#include <math.h> +#include <limits.h> /* INT_MAX */ +#include <assert.h> + +#if HAVE_ZLIB +#include <zlib.h> +#endif + +#if HAVE_LZO +#include <lzo/lzo2a.h> +#endif + +#ifdef HAVE_MMAP +# ifdef HAVE_UNISTD_H +# include <sys/mman.h> +# include <unistd.h> +# else +# undef HAVE_MMAP +# endif +#endif + +typedef struct _csi_proxy { + csi_t *ctx; + void *ptr; + csi_dictionary_t *dictionary; + csi_destroy_func_t destroy_func; + void *destroy_data; +} csi_proxy_t; + +typedef struct _csi_blob { + csi_list_t list; + unsigned long hash; + uint8_t *bytes; + unsigned int len; +} csi_blob_t; + +static const cairo_user_data_key_t _csi_proxy_key; +static const cairo_user_data_key_t _csi_blob_key; + +enum mime_type { + MIME_TYPE_NONE = 0, + MIME_TYPE_PNG +}; + +#define check(CNT) do {\ + if (_csi_unlikely (! _csi_check_ostack (ctx, (CNT)))) \ + return _csi_error (CSI_STATUS_INVALID_SCRIPT); \ +} while (0) +#define pop(CNT) _csi_pop_ostack (ctx, (CNT)) +#define push(OBJ) _csi_push_ostack (ctx, (OBJ)) + +static csi_proxy_t * +_csi_proxy_create (csi_t *ctx, + void *ptr, + csi_dictionary_t *dictionary, + csi_destroy_func_t destroy_func, + void *destroy_data) +{ + csi_proxy_t *proxy; + + proxy = _csi_slab_alloc (ctx, sizeof (csi_proxy_t)); + if (proxy == NULL) + return NULL; + + proxy->ctx = cairo_script_interpreter_reference (ctx); + proxy->ptr = ptr; + proxy->destroy_func = destroy_func; + proxy->destroy_data = destroy_data; + proxy->dictionary = dictionary; + if (dictionary != NULL) + dictionary->base.ref++; + + return proxy; +} + +static void +_csi_proxy_destroy (void *closure) +{ + csi_proxy_t *proxy = closure; + csi_t *ctx = proxy->ctx; + + /* XXX this doesn't work because user_data_destroy is called too late. + * Considering another hook into the (cairo internal) object system. + */ + if (proxy->destroy_func != NULL) + proxy->destroy_func (proxy->destroy_data, proxy->ptr); + + if (proxy->dictionary != NULL && --proxy->dictionary->base.ref == 0) + csi_dictionary_free (ctx, proxy->dictionary); + + _csi_slab_free (ctx, proxy, sizeof (csi_proxy_t)); + cairo_script_interpreter_destroy (ctx); +} + +static void +_csi_blob_hash (csi_blob_t *blob, const uint32_t *data, int len) +{ + unsigned long hash = blob->hash; + /* very simple! */ + while (len--) { + unsigned long c = *data++; + hash *= 33; + hash ^= c; + } + blob->hash = hash; +} + +static csi_boolean_t +_csi_blob_equal (const csi_list_t *link, void *data) +{ + csi_blob_t *A, *B; + + A = csi_container_of (link, csi_blob_t, list); + B = data; + + if (A->len != B->len) + return FALSE; + + if (A->hash != B->hash) + return FALSE; + + return memcmp (A->bytes, B->bytes, A->len) == 0; +} + +static void +_csi_blob_init (csi_blob_t *blob, uint8_t *bytes, int len) +{ + blob->hash = 5381; + blob->len = len; + blob->bytes = bytes; +} + +static csi_list_t * +_csi_list_unlink (csi_list_t *head, csi_list_t *link) +{ + if (link->next != NULL) + link->next->prev = link->prev; + if (link->prev != NULL) + link->prev->next = link->next; + else + head = link->next; + return head; +} + +static csi_list_t * +_csi_list_prepend (csi_list_t *head, csi_list_t *link) +{ + if (head != NULL) + head->prev = link; + link->next = head; + link->prev = NULL; + return link; +} + +static csi_list_t * +_csi_list_find (csi_list_t *head, + csi_boolean_t (*predicate) (const csi_list_t *link, void *data), + void *data) +{ + while (head != NULL) { + if (predicate (head, data)) + return head; + head = head->next; + } + + return NULL; +} + +static csi_status_t +_csi_ostack_get_boolean (csi_t *ctx, unsigned int i, csi_boolean_t *out) +{ + csi_object_t *obj; + int type; + + obj = _csi_peek_ostack (ctx, i); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_BOOLEAN: + *out = obj->datum.boolean; + break; + case CSI_OBJECT_TYPE_INTEGER: + *out = !! obj->datum.integer; + break; + case CSI_OBJECT_TYPE_REAL: + *out = obj->datum.real != 0.; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_integer (csi_t *ctx, unsigned int i, csi_integer_t *out) +{ + csi_object_t *obj; + int type; + + obj = _csi_peek_ostack (ctx, i); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_BOOLEAN: + *out = obj->datum.boolean; + break; + case CSI_OBJECT_TYPE_INTEGER: + *out = obj->datum.integer; + break; + case CSI_OBJECT_TYPE_REAL: + *out = obj->datum.real; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_number (csi_t *ctx, unsigned int i, double *out) +{ + csi_object_t *obj; + int type; + + obj = _csi_peek_ostack (ctx, i); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_BOOLEAN: + *out = obj->datum.boolean; + break; + case CSI_OBJECT_TYPE_INTEGER: + *out = obj->datum.integer; + break; + case CSI_OBJECT_TYPE_REAL: + *out = obj->datum.real; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + return CSI_STATUS_SUCCESS; +} + +static double +_csi_object_as_real (csi_object_t *obj) +{ + int type; + + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_BOOLEAN: + return obj->datum.boolean; + case CSI_OBJECT_TYPE_INTEGER: + return obj->datum.integer; + case CSI_OBJECT_TYPE_REAL: + return obj->datum.real; + default: + return 0; + } +} + +static csi_status_t +_csi_ostack_get_name (csi_t *ctx, unsigned int i, csi_name_t *out) +{ + csi_object_t *obj; + + obj = _csi_peek_ostack (ctx, i); + if (_csi_unlikely (csi_object_get_type (obj) != CSI_OBJECT_TYPE_NAME)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + *out = obj->datum.name; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_context (csi_t *ctx, unsigned int i, cairo_t **out) +{ + csi_object_t *obj; + + obj = _csi_peek_ostack (ctx, i); + if (_csi_unlikely (csi_object_get_type (obj) != CSI_OBJECT_TYPE_CONTEXT)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + *out = obj->datum.cr; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_font_face (csi_t *ctx, unsigned int i, cairo_font_face_t **out) +{ + csi_object_t *obj; + + obj = _csi_peek_ostack (ctx, i); + if (_csi_unlikely (csi_object_get_type (obj) != CSI_OBJECT_TYPE_FONT)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + *out = obj->datum.font_face; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_pattern (csi_t *ctx, unsigned int i, cairo_pattern_t **out) +{ + csi_object_t *obj; + + obj = _csi_peek_ostack (ctx, i); + if (_csi_unlikely (csi_object_get_type (obj) != CSI_OBJECT_TYPE_PATTERN)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + *out = obj->datum.pattern; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_scaled_font (csi_t *ctx, unsigned int i, + cairo_scaled_font_t **out) +{ + csi_object_t *obj; + + obj = _csi_peek_ostack (ctx, i); + if (_csi_unlikely + (csi_object_get_type (obj) != CSI_OBJECT_TYPE_SCALED_FONT)) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + *out = obj->datum.scaled_font; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_surface (csi_t *ctx, unsigned int i, cairo_surface_t **out) +{ + csi_object_t *obj; + int type; + + obj = _csi_peek_ostack (ctx, i); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + *out = cairo_get_target (obj->datum.cr); + break; + case CSI_OBJECT_TYPE_SURFACE: + *out = obj->datum.surface; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_array (csi_t *ctx, unsigned int i, csi_array_t **out) +{ + csi_object_t *obj; + + obj = _csi_peek_ostack (ctx, i); + if (_csi_unlikely (csi_object_get_type (obj) != CSI_OBJECT_TYPE_ARRAY)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + *out = obj->datum.array; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_procedure (csi_t *ctx, unsigned int i, csi_array_t **out) +{ + csi_object_t *obj; + + obj = _csi_peek_ostack (ctx, i); + if (_csi_unlikely (! csi_object_is_procedure (obj))) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + *out = obj->datum.array; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_dictionary (csi_t *ctx, unsigned int i, csi_dictionary_t **out) +{ + csi_object_t *obj; + + obj = _csi_peek_ostack (ctx, i); + if (_csi_unlikely + (csi_object_get_type (obj) != CSI_OBJECT_TYPE_DICTIONARY)) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + *out = obj->datum.dictionary; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_matrix (csi_t *ctx, unsigned int i, cairo_matrix_t *out) +{ + csi_object_t *obj; + int type; + + obj = _csi_peek_ostack (ctx, i); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_MATRIX: + *out = obj->datum.matrix->matrix; + return CSI_STATUS_SUCCESS; + + case CSI_OBJECT_TYPE_ARRAY: + if (obj->datum.array->stack.len == 6) { + cairo_matrix_init (out, + csi_number_get_value (&obj->datum.array->stack.objects[0]), + csi_number_get_value (&obj->datum.array->stack.objects[1]), + csi_number_get_value (&obj->datum.array->stack.objects[2]), + csi_number_get_value (&obj->datum.array->stack.objects[3]), + csi_number_get_value (&obj->datum.array->stack.objects[4]), + csi_number_get_value (&obj->datum.array->stack.objects[5])); + return CSI_STATUS_SUCCESS; + } + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } +} + +static csi_status_t +_csi_dictionary_get_integer (csi_t *ctx, + csi_dictionary_t *dict, + const char *name, + csi_boolean_t optional, + long *value) +{ + csi_status_t status; + csi_object_t key, obj; + int type; + + status = csi_name_new_static (ctx, &key, name); + if (_csi_unlikely (status)) + return status; + + if (optional && ! csi_dictionary_has (dict, key.datum.name)) + return CSI_STATUS_SUCCESS; + + status = csi_dictionary_get (ctx, dict, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + + type = csi_object_get_type (&obj); + switch (type) { + case CSI_OBJECT_TYPE_BOOLEAN: + *value = obj.datum.boolean; + break; + case CSI_OBJECT_TYPE_INTEGER: + *value = obj.datum.integer; + break; + case CSI_OBJECT_TYPE_REAL: + *value = obj.datum.real; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_dictionary_get_number (csi_t *ctx, + csi_dictionary_t *dict, + const char *name, + csi_boolean_t optional, + double *value) +{ + csi_status_t status; + csi_object_t key, obj; + + status = csi_name_new_static (ctx, &key, name); + if (_csi_unlikely (status)) + return status; + + if (optional && ! csi_dictionary_has (dict, key.datum.name)) + return CSI_STATUS_SUCCESS; + + status = csi_dictionary_get (ctx, dict, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + + *value = csi_number_get_value (&obj); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_string (csi_t *ctx, unsigned int i, csi_string_t **out) +{ + csi_object_t *obj; + + obj = _csi_peek_ostack (ctx, i); + if (_csi_unlikely (csi_object_get_type (obj) != CSI_OBJECT_TYPE_STRING)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + *out = obj->datum.string; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_csi_ostack_get_string_constant (csi_t *ctx, unsigned int i, const char **out) +{ + csi_object_t *obj; + int type; + + obj = _csi_peek_ostack (ctx, i); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_NAME: + *out = (const char *) obj->datum.name; + break; + case CSI_OBJECT_TYPE_STRING: + *out = obj->datum.string->string; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_do_cairo_op (csi_t *ctx, void (*op) (cairo_t *)) +{ + cairo_t *cr; + csi_status_t status; + + check (1); + + status = _csi_ostack_get_context (ctx, 0, &cr); + if (_csi_unlikely (status)) + return status; + + op (cr); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +end_dict_construction (csi_t *ctx) +{ + csi_object_t obj; + csi_dictionary_t *dict; + csi_status_t status; + + status = csi_dictionary_new (ctx, &obj); + if (_csi_unlikely (status)) + return status; + + dict = obj.datum.dictionary; + do { + csi_object_t *name, *value; + + check (1); + + value = _csi_peek_ostack (ctx, 0); + if (csi_object_get_type (value) == CSI_OBJECT_TYPE_MARK) { + pop (1); + break; + } + + check (2); + + name = _csi_peek_ostack (ctx, 1); + if (_csi_unlikely + (csi_object_get_type (name) != CSI_OBJECT_TYPE_NAME)) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + status = csi_dictionary_put (ctx, dict, name->datum.name, value); + if (_csi_unlikely (status)) + return status; + + pop (2); + } while (TRUE); + + return push (&obj); +} + +static csi_status_t +end_array_construction (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + int len = 0; + + do { + check (len + 1); + + if (csi_object_get_type (_csi_peek_ostack (ctx, len)) == + CSI_OBJECT_TYPE_MARK) + { + break; + } + + len++; + } while (TRUE); + + status = csi_array_new (ctx, len, &obj); + if (_csi_unlikely (status)) + return status; + + if (len != 0) { + csi_array_t *array; + + array = obj.datum.array; + memcpy (array->stack.objects, + _csi_peek_ostack (ctx, len - 1), + sizeof (csi_object_t) * len); + array->stack.len = len; + } + ctx->ostack.len -= len + 1; + + return push (&obj); +} + +static csi_status_t +_alpha (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + double a; + + check (1); + + status = _csi_ostack_get_number (ctx, 0, &a); + if (_csi_unlikely (status)) + return status; + + pop (1); + + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pattern_create_rgba (0, 0, 0, a); + return push (&obj); +} + +static csi_status_t +_add (csi_t *ctx) +{ + csi_object_t *A; + csi_object_t *B; + csi_object_type_t type_a, type_b; + + check (2); + + B = _csi_peek_ostack (ctx, 0); + A = _csi_peek_ostack (ctx, 1); + + type_a = csi_object_get_type (A); + if (_csi_unlikely (! (type_a == CSI_OBJECT_TYPE_INTEGER || + type_a == CSI_OBJECT_TYPE_REAL))) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + type_b = csi_object_get_type (B); + if (_csi_unlikely (! (type_b == CSI_OBJECT_TYPE_INTEGER || + type_b == CSI_OBJECT_TYPE_REAL))) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (2); + + if (type_a == CSI_OBJECT_TYPE_REAL && + type_b == CSI_OBJECT_TYPE_REAL) + { + return _csi_push_ostack_real (ctx, A->datum.real + B->datum.real); + + } + else if (type_a == CSI_OBJECT_TYPE_INTEGER && + type_b == CSI_OBJECT_TYPE_INTEGER) + { + return _csi_push_ostack_integer (ctx, + A->datum.integer + B->datum.integer); + } + else + { + double v; + + if (type_a == CSI_OBJECT_TYPE_REAL) + v = A->datum.real; + else + v = A->datum.integer; + + if (type_b == CSI_OBJECT_TYPE_REAL) + v += B->datum.real; + else + v += B->datum.integer; + + return _csi_push_ostack_real (ctx, v); + } +} + +static csi_status_t +_add_color_stop (csi_t *ctx) +{ + csi_status_t status; + double offset, r, g, b, a; + cairo_pattern_t *pattern = NULL; /* silence the compiler */ + + check (6); + + status = _csi_ostack_get_number (ctx, 0, &a); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &b); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &g); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &r); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 4, &offset); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_pattern (ctx, 5, &pattern); + if (_csi_unlikely (status)) + return status; + + cairo_pattern_add_color_stop_rgba (pattern, offset, r, g, b, a); + + pop (5); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_and (csi_t *ctx) +{ + csi_object_t *a, *b; + int type; + + check (2); + + a = _csi_peek_ostack (ctx, 0); + b = _csi_peek_ostack (ctx, 1); + if (_csi_unlikely (csi_object_get_type (a) != csi_object_get_type (b))) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + pop (2); + type = csi_object_get_type (a); + switch (type) { + case CSI_OBJECT_TYPE_INTEGER: + return _csi_push_ostack_integer (ctx, + a->datum.integer & b->datum.integer); + case CSI_OBJECT_TYPE_BOOLEAN: + return _csi_push_ostack_boolean (ctx, + a->datum.boolean & b->datum.boolean); + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } +} + +static csi_status_t +_arc (csi_t *ctx) +{ + csi_status_t status; + double x, y, r; + double theta1, theta2; + cairo_t *cr; + + check (6); + + status = _csi_ostack_get_number (ctx, 0, &theta2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &theta1); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &r); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 4, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 5, &cr); + if (_csi_unlikely (status)) + return status; + + /* XXX handle path object */ + + cairo_arc (cr, x, y, r, theta1, theta2); + pop (5); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_arc_negative (csi_t *ctx) +{ + csi_status_t status; + double x, y, r; + double theta1, theta2; + cairo_t *cr; + + check (6); + + status = _csi_ostack_get_number (ctx, 0, &theta2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &theta1); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &r); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 4, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 5, &cr); + if (_csi_unlikely (status)) + return status; + + /* XXX handle path object */ + + cairo_arc_negative (cr, x, y, r, theta1, theta2); + pop (5); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_array (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + + status = csi_array_new (ctx, 0, &obj); + if (_csi_unlikely (status)) + return status; + + return push (&obj); +} + +static csi_status_t +_bind_substitute (csi_t *ctx, csi_array_t *array) +{ + csi_status_t status; + csi_integer_t i, n; + csi_dictionary_t *dict; + + /* perform operator substitution on the executable array (procedure) */ + dict = ctx->dstack.objects[0].datum.dictionary; + n = array->stack.len; + for (i = 0; i < n; i++) { + csi_object_t *obj = &array->stack.objects[i]; + + if (obj->type == (CSI_OBJECT_TYPE_NAME | CSI_OBJECT_ATTR_EXECUTABLE)) { + csi_dictionary_entry_t *entry; + + entry = _csi_hash_table_lookup (&dict->hash_table, + (csi_hash_entry_t *) + &obj->datum.name); + if (entry != NULL) + *obj = entry->value; + } else if (csi_object_is_procedure (obj)) { + status = _bind_substitute (ctx, obj->datum.array); + if (_csi_unlikely (status)) + return status; + } + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_idiom_substitute (csi_t *ctx, csi_array_t *array) +{ +#if 0 + csi_status_t status; + csi_integer_t i, j; + + /* XXX substring search, build array once then search for + * longest matching idiom, repeat. */ + + /* scan the top-most array for sequences we can pre-compile */ + + /* now recurse for subroutines */ + j = array->stack.len; + for (i = 0; i < j; i++) { + csi_object_t *obj = &array->stack.objects[i]; + + if (csi_object_is_procedure (obj)) { + status = _idiom_substitute (ctx, obj->datum.array); + if (_csi_unlikely (_cairo_is_error (status)) + return status; + } + } +#endif + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_bind (csi_t *ctx) +{ + csi_array_t *array; + csi_status_t status; + + check (1); + + status = _csi_ostack_get_procedure (ctx, 0, &array); + if (_csi_unlikely (status)) + return status; + + status = _bind_substitute (ctx, array); + if (_csi_unlikely (status)) + return status; + + status = _idiom_substitute (ctx, array); + if (_csi_unlikely (status)) + return status; + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_bitshift (csi_t *ctx) +{ + long v, shift; + csi_status_t status; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &shift); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 1, &v); + if (_csi_unlikely (status)) + return status; + + if (shift < 0) { + shift = -shift; + v >>= shift; + } else + v <<= shift; + + pop (1); + _csi_peek_ostack (ctx, 0)->datum.integer = v; + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_clip (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_clip); +} + +static csi_status_t +_clip_preserve (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_clip_preserve); +} + +static csi_status_t +_close_path (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_close_path); +} + +static csi_status_t +_context (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + cairo_surface_t *surface; + cairo_t *cr; + csi_context_create_func_t hook; + csi_proxy_t *proxy; + + check (1); + + status = _csi_ostack_get_surface (ctx, 0, &surface); + if (_csi_unlikely (status)) + return status; + + hook = ctx->hooks.context_create; + if (hook != NULL) + cr = hook (ctx->hooks.closure, surface); + else + cr = cairo_create (surface); + + proxy = _csi_proxy_create (ctx, cr, NULL, + ctx->hooks.context_destroy, + ctx->hooks.closure); + if (_csi_unlikely (proxy == NULL)) { + cairo_destroy (cr); + return _csi_error (CSI_STATUS_NO_MEMORY); + } + + status = cairo_set_user_data (cr, &_csi_proxy_key, + proxy, _csi_proxy_destroy); + if (_csi_unlikely (status)) { + _csi_proxy_destroy (proxy); + cairo_destroy (cr); + return status; + } + + pop (1); + obj.type = CSI_OBJECT_TYPE_CONTEXT; + obj.datum.cr = cr; + return push (&obj); +} + +static csi_status_t +_copy (csi_t *ctx) +{ + csi_object_t *obj; + int type; + + check (1); + + obj = csi_object_reference (_csi_peek_ostack (ctx, 0)); + pop (1); + + type = csi_object_get_type (obj); + switch (type) { + /*XXX array, string, dictionary, etc */ + case CSI_OBJECT_TYPE_INTEGER: + { + long i, n; + + n = obj->datum.integer; + if (_csi_unlikely (n < 0)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + check (n); + + for (i = n; i--; ) { + csi_status_t status; + + status = _csi_push_ostack_copy (ctx, + _csi_peek_ostack (ctx, n-1)); + if (_csi_unlikely (status)) + return status; + } + break; + } + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_copy_page (csi_t *ctx) +{ + csi_object_t *obj; + int type; + + check (1); + + obj = _csi_peek_ostack (ctx, 0); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_copy_page (obj->datum.cr); + if (ctx->hooks.copy_page != NULL) + ctx->hooks.copy_page (ctx->hooks.closure, obj->datum.cr); + break; + case CSI_OBJECT_TYPE_SURFACE: + cairo_surface_copy_page (obj->datum.surface); + /* XXX hook? */ + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_curve_to (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *obj; + int type; + double x1, y1; + double x2, y2; + double x3, y3; + + check (7); + + status = _csi_ostack_get_number (ctx, 0, &y3); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x3); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &y2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &x2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 4, &y1); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 5, &x1); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 6); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_curve_to (obj->datum.cr, x1, y1, x2, y2, x3, y3); + break; + case CSI_OBJECT_TYPE_PATTERN: + cairo_mesh_pattern_curve_to (obj->datum.pattern, + x1, y1, x2, y2, x3, y3); + break; + /* XXX handle path object */ + } + + pop (6); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_cvi (csi_t *ctx) +{ + csi_object_t *val, obj; + int type; + + check (1); + + val = _csi_peek_ostack (ctx, 0); + type = csi_object_get_type (val); + switch (type) { + case CSI_OBJECT_TYPE_INTEGER: + return CSI_STATUS_SUCCESS; + + case CSI_OBJECT_TYPE_REAL: + pop (1); + return _csi_push_ostack_integer (ctx, val->datum.real); + + case CSI_OBJECT_TYPE_STRING: + if (! _csi_parse_number (&obj, + val->datum.string->string, + val->datum.string->len)) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (1); + if (csi_object_get_type (&obj) == CSI_OBJECT_TYPE_INTEGER) + return push (&obj); + else + return _csi_push_ostack_integer (ctx, obj.datum.real); + + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } +} + +static csi_status_t +_cvr (csi_t *ctx) +{ + csi_object_t *val, obj; + int type; + + check (1); + + val = _csi_peek_ostack (ctx, 0); + type = csi_object_get_type (val); + switch (type) { + case CSI_OBJECT_TYPE_REAL: + return CSI_STATUS_SUCCESS; + + case CSI_OBJECT_TYPE_INTEGER: + pop (1); + return _csi_push_ostack_real (ctx, val->datum.integer); + + case CSI_OBJECT_TYPE_STRING: + if (! _csi_parse_number (&obj, + val->datum.string->string, + val->datum.string->len)) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (1); + if (csi_object_get_type (&obj) == CSI_OBJECT_TYPE_REAL) + return push (&obj); + else + return _csi_push_ostack_real (ctx, obj.datum.integer); + + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } +} + +static csi_status_t +_def (csi_t *ctx) +{ + csi_name_t name = 0; /* silence the compiler */ + csi_status_t status; + + check (2); + + status = _csi_ostack_get_name (ctx, 1, &name); + if (_csi_unlikely (status)) + return status; + + status = _csi_name_define (ctx, name, _csi_peek_ostack (ctx, 0)); + if (_csi_unlikely (status)) + return status; + + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_dict (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + + status = csi_dictionary_new (ctx, &obj); + if (_csi_unlikely (status)) + return status; + + return push (&obj); +} + +static csi_status_t +_div (csi_t *ctx) +{ + csi_object_t *A; + csi_object_t *B; + csi_object_type_t type_a, type_b; + + check (2); + + B = _csi_peek_ostack (ctx, 0); + A = _csi_peek_ostack (ctx, 1); + + type_a = csi_object_get_type (A); + if (_csi_unlikely (! (type_a == CSI_OBJECT_TYPE_INTEGER || + type_a == CSI_OBJECT_TYPE_REAL))) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + type_b = csi_object_get_type (B); + if (_csi_unlikely (! (type_b == CSI_OBJECT_TYPE_INTEGER || + type_b == CSI_OBJECT_TYPE_REAL))) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (2); + + if (type_a == CSI_OBJECT_TYPE_REAL && + type_b == CSI_OBJECT_TYPE_REAL) + { + return _csi_push_ostack_real (ctx, A->datum.real / B->datum.real); + + } + else if (type_a == CSI_OBJECT_TYPE_INTEGER && + type_b == CSI_OBJECT_TYPE_INTEGER) + { + return _csi_push_ostack_integer (ctx, + A->datum.integer / B->datum.integer); + } + else + { + double v; + + if (type_a == CSI_OBJECT_TYPE_REAL) + v = A->datum.real; + else + v = A->datum.integer; + + if (type_b == CSI_OBJECT_TYPE_REAL) + v /= B->datum.real; + else + v /= B->datum.integer; + + return _csi_push_ostack_real (ctx, v); + } +} + +static csi_status_t +_duplicate (csi_t *ctx) +{ + check (1); + + return _csi_push_ostack_copy (ctx, _csi_peek_ostack (ctx, 0)); +} + +static csi_status_t +_eq (csi_t *ctx) +{ + csi_object_t *a, *b; + csi_boolean_t v; + + check (2); + + b = _csi_peek_ostack (ctx, 0); + a = _csi_peek_ostack (ctx, 1); + + v = csi_object_eq (a, b); + + pop (2); + return _csi_push_ostack_boolean (ctx, v); +} + +static csi_status_t +_exch (csi_t *ctx) +{ + return _csi_stack_exch (&ctx->ostack); +} + +static csi_status_t +_false (csi_t *ctx) +{ + return _csi_push_ostack_boolean (ctx, FALSE); +} + +static csi_status_t +_fill (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_fill); +} + +static csi_status_t +_fill_preserve (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_fill_preserve); +} + +static csi_status_t +_filter (csi_t *ctx) +{ + csi_object_t *src; + csi_dictionary_t *dict = NULL; + csi_status_t status; + const char *name = NULL; /* silence the compiler */ + const struct filters { + const char *name; + csi_status_t (*constructor) (csi_t *t, + csi_object_t *, + csi_dictionary_t *, + csi_object_t *); + } filters[] = { + { "ascii85", csi_file_new_ascii85_decode }, +#if HAVE_ZLIB + { "deflate", csi_file_new_deflate_decode }, +#endif +#if 0 + { "lzw", csi_file_new_lzw_decode }, +#endif + { NULL, NULL } + }, *filter; + int cnt; + + check (2); + + status = _csi_ostack_get_string_constant (ctx, 0, &name); + if (_csi_unlikely (status)) + return status; + + src = _csi_peek_ostack (ctx, 1); + cnt = 2; + if (csi_object_get_type (src) == CSI_OBJECT_TYPE_DICTIONARY) { + dict = src->datum.dictionary; + + check (3); + + src = _csi_peek_ostack (ctx, 2); + cnt = 3; + } + + for (filter = filters; filter->name != NULL; filter++) { + if (strcmp (name, filter->name) == 0) { + csi_object_t file; + + status = filter->constructor (ctx, &file, dict, src); + if (_csi_unlikely (status)) + return status; + + pop (cnt); + return push (&file); + } + } + + return _csi_error (CSI_STATUS_INVALID_SCRIPT); +} + +static cairo_status_t +_type3_init (cairo_scaled_font_t *scaled_font, + cairo_t *cr, + cairo_font_extents_t *metrics) +{ + cairo_font_face_t *face; + csi_proxy_t *proxy; + csi_t *ctx; + csi_dictionary_t *font; + csi_object_t key; + csi_object_t obj; + csi_array_t *array; + csi_status_t status; + + face = cairo_scaled_font_get_font_face (scaled_font); + proxy = cairo_font_face_get_user_data (face, &_csi_proxy_key); + if (_csi_unlikely (proxy == NULL)) + return CAIRO_STATUS_NO_MEMORY; + + ctx = proxy->ctx; + font = proxy->dictionary; + + status = csi_name_new_static (ctx, &key, "metrics"); + if (_csi_unlikely (status)) + return CAIRO_STATUS_NO_MEMORY; + + if (! csi_dictionary_has (font, key.datum.name)) + return CAIRO_STATUS_SUCCESS; + + status = csi_dictionary_get (ctx, font, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + + if (csi_object_get_type (&obj) != CSI_OBJECT_TYPE_ARRAY) + return CAIRO_STATUS_USER_FONT_ERROR; + + array = obj.datum.array; + if (array->stack.len != 5) + return CAIRO_STATUS_USER_FONT_ERROR; + + metrics->ascent = csi_number_get_value (&array->stack.objects[0]); + metrics->descent = csi_number_get_value (&array->stack.objects[1]); + metrics->height = csi_number_get_value (&array->stack.objects[2]); + metrics->max_x_advance = csi_number_get_value (&array->stack.objects[3]); + metrics->max_y_advance = csi_number_get_value (&array->stack.objects[4]); + + return CAIRO_STATUS_SUCCESS; +} + +static cairo_status_t +_type3_lookup (cairo_scaled_font_t *scaled_font, + unsigned long unicode, + unsigned long *glyph) +{ + cairo_font_face_t *face; + csi_proxy_t *proxy; + csi_t *ctx; + csi_dictionary_t *font; + csi_object_t obj, key; + csi_array_t *array; + char buf[12]; + csi_integer_t i; + cairo_status_t status; + + face = cairo_scaled_font_get_font_face (scaled_font); + proxy = cairo_font_face_get_user_data (face, &_csi_proxy_key); + if (_csi_unlikely (proxy == NULL)) + return CAIRO_STATUS_USER_FONT_ERROR; + + ctx = proxy->ctx; + font = proxy->dictionary; + + status = csi_name_new_static (ctx, &key, "encoding"); + if (_csi_unlikely (status)) + return CAIRO_STATUS_USER_FONT_ERROR; + + if (! csi_dictionary_has (font, key.datum.name)) { + *glyph = unicode; + return CAIRO_STATUS_SUCCESS; + } + + status = csi_dictionary_get (ctx, font, key.datum.name, &obj); + if (_csi_unlikely (status)) + return CAIRO_STATUS_USER_FONT_ERROR; + + if (_csi_unlikely (csi_object_get_type (&obj) != CSI_OBJECT_TYPE_ARRAY)) + return CAIRO_STATUS_USER_FONT_ERROR; + + snprintf (buf, sizeof (buf), "uni%04lu", unicode); + array = obj.datum.array; + for (i = 0; i < array->stack.len; i++) { + csi_object_t *name; + + name = &array->stack.objects[i]; + if (csi_object_get_type (name) != CSI_OBJECT_TYPE_NAME) + continue; + + if (strcmp ((char *) name->datum.name, buf) == 0) { + *glyph = i; + return CAIRO_STATUS_SUCCESS; + } + } + + return CAIRO_STATUS_USER_FONT_ERROR; +} + +static cairo_status_t +_type3_render (cairo_scaled_font_t *scaled_font, + unsigned long glyph_index, + cairo_t *cr, + cairo_text_extents_t *metrics) +{ + cairo_font_face_t *face; + csi_proxy_t *proxy; + csi_t *ctx; + csi_dictionary_t *font; + csi_array_t *glyphs; + csi_object_t *glyph; + csi_object_t key; + csi_object_t obj; + csi_object_t render; + csi_status_t status; + + face = cairo_scaled_font_get_font_face (scaled_font); + proxy = cairo_font_face_get_user_data (face, &_csi_proxy_key); + if (_csi_unlikely (proxy == NULL)) + return CAIRO_STATUS_USER_FONT_ERROR; + + ctx = proxy->ctx; + font = proxy->dictionary; + + status = csi_name_new_static (ctx, &key, "glyphs"); + if (_csi_unlikely (status)) + return CAIRO_STATUS_USER_FONT_ERROR; + + status = csi_dictionary_get (ctx, font, key.datum.name, &obj); + if (_csi_unlikely (status)) + return CAIRO_STATUS_USER_FONT_ERROR; + + if (_csi_unlikely (csi_object_get_type (&obj) != CSI_OBJECT_TYPE_ARRAY)) + return CAIRO_STATUS_USER_FONT_ERROR; + + glyphs = obj.datum.array; + glyph = &glyphs->stack.objects[glyph_index]; + if (csi_object_get_type (glyph) == CSI_OBJECT_TYPE_NULL) + return CAIRO_STATUS_SUCCESS; /* .notdef */ + + if (_csi_unlikely (csi_object_get_type (glyph) != CSI_OBJECT_TYPE_DICTIONARY)) + return CAIRO_STATUS_USER_FONT_ERROR; + + status = csi_name_new_static (ctx, &key, "metrics"); + if (_csi_unlikely (status)) + return CAIRO_STATUS_USER_FONT_ERROR; + + font = glyph->datum.dictionary; + if (csi_dictionary_has (font, key.datum.name)) { + csi_array_t *array; + + status = csi_dictionary_get (ctx, font, key.datum.name, &obj); + if (_csi_unlikely (status)) + return CAIRO_STATUS_USER_FONT_ERROR; + + if (_csi_unlikely (csi_object_get_type (&obj) != + CSI_OBJECT_TYPE_ARRAY)) + return CAIRO_STATUS_USER_FONT_ERROR; + + array = obj.datum.array; + if (_csi_unlikely (array->stack.len != 6)) + return CAIRO_STATUS_USER_FONT_ERROR; + + metrics->x_bearing = csi_number_get_value (&array->stack.objects[0]); + metrics->y_bearing = csi_number_get_value (&array->stack.objects[1]); + metrics->width = csi_number_get_value (&array->stack.objects[2]); + metrics->height = csi_number_get_value (&array->stack.objects[3]); + metrics->x_advance = csi_number_get_value (&array->stack.objects[4]); + metrics->y_advance = csi_number_get_value (&array->stack.objects[5]); + } + + status = csi_name_new_static (ctx, &key, "render"); + if (_csi_unlikely (status)) + return CAIRO_STATUS_USER_FONT_ERROR; + + status = csi_dictionary_get (ctx, font, key.datum.name, &render); + if (_csi_unlikely (status)) + return CAIRO_STATUS_USER_FONT_ERROR; + + if (_csi_unlikely (! csi_object_is_procedure (&render))) + return CAIRO_STATUS_USER_FONT_ERROR; + + obj.type = CSI_OBJECT_TYPE_CONTEXT; + obj.datum.cr = cairo_reference (cr); + status = push (&obj); + if (_csi_unlikely (status)) { + cairo_destroy (cr); + return CAIRO_STATUS_USER_FONT_ERROR; + } + + status = csi_object_execute (ctx, &render); + pop (1); + return status ? CAIRO_STATUS_USER_FONT_ERROR : CAIRO_STATUS_SUCCESS; +} + +static csi_status_t +_font_type3 (csi_t *ctx, + csi_dictionary_t *font, + cairo_font_face_t **font_face_out) +{ + cairo_font_face_t *font_face; + + font_face = cairo_user_font_face_create (); + cairo_user_font_face_set_init_func (font_face, _type3_init); + cairo_user_font_face_set_unicode_to_glyph_func (font_face, _type3_lookup); + cairo_user_font_face_set_render_glyph_func (font_face, _type3_render); + + *font_face_out = font_face; + return CSI_STATUS_SUCCESS; +} + +#if CAIRO_HAS_FT_FONT +#include <cairo-ft.h> +#include <ft2build.h> +#include FT_FREETYPE_H + +static FT_Library _ft_lib; + +struct _ft_face_data { + csi_t *ctx; + csi_blob_t blob; + FT_Face face; + csi_string_t *source; + void *bytes; + cairo_font_face_t *font_face; +}; + +static void +_ft_done_face (void *closure) +{ + struct _ft_face_data *data = closure; + csi_t *ctx; + + ctx = data->ctx; + + if (data->face != NULL) + FT_Done_Face (data->face); + + ctx->_faces = _csi_list_unlink (ctx->_faces, &data->blob.list); + + if (data->source != NULL) { + if (--data->source->base.ref == 0) + csi_string_free (ctx, data->source); + } else { +#ifdef HAVE_MMAP + munmap (data->blob.bytes, data->blob.len); +#endif + } + + if (data->bytes != NULL) + _csi_free (ctx, data->bytes); + + _csi_slab_free (ctx, data, sizeof (*data)); + + cairo_script_interpreter_destroy (ctx); +} + +struct mmap_vec { + const uint8_t *bytes; + size_t num_bytes; +}; + +#ifdef HAVE_MMAP +/* manual form of swapping for swapless systems like tiny */ +static void * +_mmap_bytes (const struct mmap_vec *vec, int count) +{ + char template[] = "/tmp/csi-font.XXXXXX"; + void *ptr; + int fd; + int num_bytes; + + fd = mkstemp (template); + if (fd == -1) + return MAP_FAILED; + + unlink (template); + num_bytes = 0; + while (count--) { + const uint8_t *bytes = vec->bytes; + size_t len = vec->num_bytes; + while (len) { + int ret = write (fd, bytes, len); + if (ret < 0) { + close (fd); + return MAP_FAILED; + } + len -= ret; + bytes += ret; + } + + num_bytes += vec->num_bytes; + vec++; + } + + ptr = mmap (NULL, num_bytes, PROT_READ, MAP_SHARED, fd, 0); + close (fd); + + return ptr; +} +#endif + +static void * +inflate_string (csi_t *ctx, csi_string_t *src) +{ + uLongf len; + uint8_t *bytes; + + len = src->deflate; + bytes = _csi_alloc (ctx, len + 1); + if (bytes == NULL) + return NULL; + + switch (src->method) { + default: + case NONE: + free (bytes); + return NULL; + + case ZLIB: +#if HAVE_ZLIB + if (uncompress ((Bytef *) bytes, &len, + (Bytef *) src->string, src->len) != Z_OK) +#endif + { + _csi_free (ctx, bytes); + return NULL; + } + break; + + case LZO: +#if HAVE_LZO + if (lzo2a_decompress ((Bytef *) src->string, src->len, + (Bytef *) bytes, &len, + NULL)) +#endif + { + _csi_free (ctx, bytes); + return NULL; + } + break; + } + + bytes[len] = '\0'; + return bytes; +} + +static csi_status_t +_ft_create_for_source (csi_t *ctx, + csi_string_t *source, + int index, int load_flags, + cairo_font_face_t **font_face_out) +{ + csi_blob_t tmpl; + struct _ft_face_data *data; + csi_list_t *link; + FT_Error err; + cairo_font_face_t *font_face; + csi_status_t status; + struct mmap_vec vec[2]; + int vec_count; + void *bytes; + int len; + + /* check for an existing FT_Face (kept alive by the font cache) */ + /* XXX index/flags */ + _csi_blob_init (&tmpl, (uint8_t *) source->string, source->len); + _csi_blob_hash (&tmpl, (uint32_t *) source->string, source->len / sizeof (uint32_t)); + link = _csi_list_find (ctx->_faces, _csi_blob_equal, &tmpl); + if (link) { + if (--source->base.ref == 0) + csi_string_free (ctx, source); + data = csi_container_of (link, struct _ft_face_data, blob.list); + *font_face_out = cairo_font_face_reference (data->font_face); + return CSI_STATUS_SUCCESS; + } + + /* no existing font_face, create new FT_Face */ + if (_ft_lib == NULL) { + err = FT_Init_FreeType (&_ft_lib); + if (_csi_unlikely (err != FT_Err_Ok)) + return _csi_error (CSI_STATUS_NO_MEMORY); + } + + data = _csi_slab_alloc (ctx, sizeof (*data)); + data->bytes = NULL; + data->source = source; + + vec[0].bytes = tmpl.bytes; + vec[0].num_bytes = tmpl.len; + + if (source->deflate) { + len = source->deflate; + bytes = inflate_string (ctx, source); + if (_csi_unlikely (bytes == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + vec[1].bytes = bytes; + vec[1].num_bytes = len; + data->bytes = bytes; + vec_count = 2; + } else { + bytes = tmpl.bytes; + len = tmpl.len; + vec_count = 1; + } + + data->face = NULL; + ctx->_faces = _csi_list_prepend (ctx->_faces, &data->blob.list); + data->ctx = cairo_script_interpreter_reference (ctx); + data->blob.hash = tmpl.hash; + data->blob.len = tmpl.len; +#ifdef HAVE_MMAP + data->blob.bytes = _mmap_bytes (vec, vec_count); + if (data->blob.bytes != MAP_FAILED) { + if (--source->base.ref == 0) + csi_string_free (ctx, source); + + if (source->deflate) { + _csi_free (ctx, bytes); + bytes = data->blob.bytes + vec[0].num_bytes; + } else + bytes = data->blob.bytes; + + data->source = NULL; + data->bytes = NULL; + } else { + data->blob.bytes = tmpl.bytes; + } +#else + data->blob.bytes = tmpl.bytes; +#endif + + err = FT_New_Memory_Face (_ft_lib, + bytes, len, + index, + &data->face); + if (_csi_unlikely (err != FT_Err_Ok)) { + _ft_done_face (data); + + if (err == FT_Err_Out_Of_Memory) + return _csi_error (CSI_STATUS_NO_MEMORY); + + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + font_face = cairo_ft_font_face_create_for_ft_face (data->face, load_flags); + status = cairo_font_face_set_user_data (font_face, + &_csi_blob_key, + data, _ft_done_face); + if (_csi_unlikely (status)) { + _ft_done_face (data); + cairo_font_face_destroy (font_face); + return status; + } + + data->font_face = font_face; + *font_face_out = font_face; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_ft_create_for_pattern (csi_t *ctx, + csi_string_t *string, + cairo_font_face_t **font_face_out) +{ +#if CAIRO_HAS_FC_FONT + csi_blob_t tmpl; + struct _ft_face_data *data; + csi_list_t *link; + cairo_font_face_t *font_face; + FcPattern *pattern, *resolved; + csi_status_t status; + struct mmap_vec vec; + void *bytes; + + _csi_blob_init (&tmpl, (uint8_t *) string->string, string->len); + _csi_blob_hash (&tmpl, (uint32_t *) string->string, string->len / sizeof (uint32_t)); + link = _csi_list_find (ctx->_faces, _csi_blob_equal, &tmpl); + if (link) { + if (--string->base.ref == 0) + csi_string_free (ctx, string); + data = csi_container_of (link, struct _ft_face_data, blob.list); + *font_face_out = cairo_font_face_reference (data->font_face); + return CSI_STATUS_SUCCESS; + } + + if (string->deflate) { + bytes = inflate_string (ctx, string); + if (_csi_unlikely (bytes == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + } else { + bytes = tmpl.bytes; + } + + pattern = FcNameParse (bytes); + if (!pattern) + { + /* Fontconfig's representation of charset changed mid 2014; + * We used to record charset before that. Remove everything + * after charset if that's present, and try again. */ + char *s = strstr ((char *) bytes, ":charset="); + if (s) + { + *s = '\0'; + pattern = FcNameParse (bytes); + } + } + if (bytes != tmpl.bytes) + _csi_free (ctx, bytes); + +retry: + resolved = pattern; + if (cairo_version () < CAIRO_VERSION_ENCODE (1, 9, 0)) { + /* prior to 1.9, you needed to pass a resolved pattern */ + resolved = FcFontMatch (NULL, pattern, NULL); + if (_csi_unlikely (resolved == NULL)) { + FcPatternDestroy (pattern); + return _csi_error (CSI_STATUS_NO_MEMORY); + } + } + + font_face = cairo_ft_font_face_create_for_pattern (resolved); + if (resolved != pattern) + FcPatternDestroy (resolved); + + if (cairo_font_face_status (font_face)) { + char *filename = NULL; + + /* Try a manual fallback process by eliminating specific requests */ + + if (FcPatternGetString (pattern, + FC_FILE, 0, + (FcChar8 **) &filename) == FcResultMatch) { + FcPatternDel (pattern, FC_FILE); + goto retry; + } + } + + FcPatternDestroy (pattern); + + data = _csi_slab_alloc (ctx, sizeof (*data)); + ctx->_faces = _csi_list_prepend (ctx->_faces, &data->blob.list); + data->ctx = cairo_script_interpreter_reference (ctx); + data->blob.hash = tmpl.hash; + data->blob.len = tmpl.len; + data->bytes = NULL; + data->face = NULL; +#ifdef HAVE_MMAP + vec.bytes = tmpl.bytes; + vec.num_bytes = tmpl.len; + data->blob.bytes = _mmap_bytes (&vec, 1); + if (data->blob.bytes != MAP_FAILED) { + data->source = NULL; + if (--string->base.ref == 0) + csi_string_free (ctx, string); + } else { + data->blob.bytes = tmpl.bytes; + data->source = string; + } +#else + data->blob.bytes = tmpl.bytes; + data->source = string; +#endif + + status = cairo_font_face_set_user_data (font_face, + &_csi_blob_key, + data, _ft_done_face); + if (_csi_unlikely (status)) { + _ft_done_face (data); + cairo_font_face_destroy (font_face); + return status; + } + + data->font_face = font_face; + *font_face_out = font_face; + return CSI_STATUS_SUCCESS; +#else + if (--string->base.ref == 0) + csi_string_free (ctx, string); + return CSI_INT_STATUS_UNSUPPORTED; +#endif +} + +static csi_status_t +_ft_type42_create (csi_t *ctx, + csi_dictionary_t *font, + cairo_font_face_t **font_face_out) +{ + csi_object_t key; + csi_status_t status; + + /* two basic sub-types, either an FcPattern or embedded font */ + status = csi_name_new_static (ctx, &key, "pattern"); + if (_csi_unlikely (status)) + return status; + + if (csi_dictionary_has (font, key.datum.name)) { + csi_object_t obj; + int type; + + status = csi_dictionary_get (ctx, font, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + + type = csi_object_get_type (&obj); + switch (type) { + case CSI_OBJECT_TYPE_FILE: + status = _csi_file_as_string (ctx, obj.datum.file, &obj); + if (_csi_unlikely (status)) + return status; + break; + case CSI_OBJECT_TYPE_STRING: + obj.datum.object->ref++; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + return _ft_create_for_pattern (ctx, + obj.datum.string, + font_face_out); + } + + status = csi_name_new_static (ctx, &key, "source"); + if (_csi_unlikely (status)) + return status; + + if (csi_dictionary_has (font, key.datum.name)) { + csi_object_t obj; + long index, flags; + int type; + + index = 0; + status = _csi_dictionary_get_integer (ctx, font, "index", TRUE, &index); + if (_csi_unlikely (status)) + return status; + + flags = 0; + status = _csi_dictionary_get_integer (ctx, font, "flags", TRUE, &flags); + if (_csi_unlikely (status)) + return status; + + status = csi_name_new_static (ctx, &key, "source"); + if (_csi_unlikely (status)) + return status; + status = csi_dictionary_get (ctx, font, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + type = csi_object_get_type (&obj); + switch (type) { + case CSI_OBJECT_TYPE_FILE: + status = _csi_file_as_string (ctx, obj.datum.file, &obj); + if (_csi_unlikely (status)) + return status; + break; + case CSI_OBJECT_TYPE_STRING: + obj.datum.object->ref++; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + return _ft_create_for_source (ctx, obj.datum.string, + index, flags, + font_face_out); + } + + return _csi_error (CSI_STATUS_INVALID_SCRIPT); +} +#else +#define _ft_type42_create(ctx, font, face_out) CSI_INT_STATUS_UNSUPPORTED +#endif + +static char * +_fc_strcpy (csi_t *ctx, const char *str) +{ + char *ret; + int len; + + ret = strchr (str, ':'); + if (ret != NULL) + len = ret - str; + else + len = strlen (str); + + ret = _csi_alloc (ctx, len+1); + if (_csi_unlikely (ret == NULL)) + return NULL; + + memcpy (ret, str, len); + ret[len] = '\0'; + + return ret; +} + +static cairo_font_face_t * +_select_font (const char *name) +{ + cairo_surface_t *surface; + cairo_font_face_t *face; + cairo_t *cr; + + /* create a dummy context to choose a font */ + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 0, 0); + cr = cairo_create (surface); + cairo_surface_destroy (surface); + + cairo_select_font_face (cr, name, + CAIRO_FONT_SLANT_NORMAL, + CAIRO_FONT_WEIGHT_NORMAL); + face = cairo_font_face_reference (cairo_get_font_face (cr)); + cairo_destroy (cr); + + return face; +} + +static csi_status_t +_ft_fallback_create_for_pattern (csi_t *ctx, + csi_string_t *string, + cairo_font_face_t **font_face_out) +{ + char *str, *name; + + str = string->string; +#if 0 + name = strstr (str, "fullname="); + if (name != NULL) + str = name + 9; +#endif + + name = _fc_strcpy (ctx, str); + if (_csi_unlikely (name == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + *font_face_out = _select_font (name); + _csi_free (ctx, name); + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_ft_type42_fallback_create (csi_t *ctx, + csi_dictionary_t *font, + cairo_font_face_t **font_face_out) +{ + csi_object_t key; + csi_status_t status; + + /* attempt to select a similar font */ + + /* two basic sub-types, either an FcPattern or embedded font */ + status = csi_name_new_static (ctx, &key, "pattern"); + if (_csi_unlikely (status)) + return status; + + if (csi_dictionary_has (font, key.datum.name)) { + csi_object_t obj; + int type; + + status = csi_dictionary_get (ctx, font, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + + type = csi_object_get_type (&obj); + switch (type) { + case CSI_OBJECT_TYPE_FILE: + status = _csi_file_as_string (ctx, obj.datum.file, &obj); + if (_csi_unlikely (status)) + return status; + break; + case CSI_OBJECT_TYPE_STRING: + obj.datum.object->ref++; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + return _ft_fallback_create_for_pattern (ctx, + obj.datum.string, + font_face_out); + } + + /* XXX: enable the trace to run */ + *font_face_out = _select_font ("Sans"); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_font_type42 (csi_t *ctx, csi_dictionary_t *font, cairo_font_face_t **font_face) +{ + csi_status_t status; + + status = _ft_type42_create (ctx, font, font_face); + if (_csi_likely (status != CSI_INT_STATUS_UNSUPPORTED)) + return status; + + return _ft_type42_fallback_create (ctx, font, font_face); +} + +static csi_status_t +_font (csi_t *ctx) +{ + csi_dictionary_t *font; + csi_status_t status; + cairo_font_face_t *font_face = NULL; /* silence the compiler */ + csi_proxy_t *proxy; + csi_object_t obj; + long type; + + check (1); + + status = _csi_ostack_get_dictionary (ctx, 0, &font); + if (_csi_unlikely (status)) + return status; + + status = _csi_dictionary_get_integer (ctx, font, "type", FALSE, &type); + if (_csi_unlikely (status)) + return status; + + switch (type) { + case 3: + status = _font_type3 (ctx, font, &font_face); + break; + case 42: + status = _font_type42 (ctx, font, &font_face); + break; + default: + status = _csi_error (CSI_STATUS_INVALID_SCRIPT); + break; + } + + if (_csi_unlikely (status)) + return status; + + /* transfer ownership of dictionary to cairo_font_face_t */ + proxy = _csi_proxy_create (ctx, font_face, font, NULL, NULL); + if (_csi_unlikely (proxy == NULL)) { + cairo_font_face_destroy (font_face); + return _csi_error (CSI_STATUS_NO_MEMORY); + } + + status = cairo_font_face_set_user_data (font_face, + &_csi_proxy_key, + proxy, _csi_proxy_destroy); + if (_csi_unlikely (status)) { + _csi_proxy_destroy (proxy); + cairo_font_face_destroy (font_face); + return status; + } + + obj.type = CSI_OBJECT_TYPE_FONT; + obj.datum.font_face = font_face; + + pop (1); + status = push (&obj); + if (_csi_unlikely (status)) { + cairo_font_face_destroy (font_face); + return status; + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_for (csi_t *ctx) +{ + csi_array_t *proc; + csi_status_t status; + long i, inc, limit; + + check (4); + + status = _csi_ostack_get_procedure (ctx, 0, &proc); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 1, &limit); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 2, &inc); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 3, &i); + if (_csi_unlikely (status)) + return status; + + proc->base.ref++; + pop (4); + + for (; i <= limit; i += inc) { + status = _csi_push_ostack_integer (ctx, i); + if (_csi_unlikely (status)) + break; + + status = _csi_array_execute (ctx, proc); + if (_csi_unlikely (status)) + break; + } + + if (--proc->base.ref == 0) + csi_array_free (ctx, proc); + return status; +} + +static csi_status_t +_ge (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *a, *b; + int cmp; + + check (2); + + b = _csi_peek_ostack (ctx, 0); + a = _csi_peek_ostack (ctx, 1); + + status = csi_object_compare (a, b, &cmp); + if (_csi_unlikely (status)) + return status; + + pop (2); + return _csi_push_ostack_boolean (ctx, cmp >= 0); +} + +static csi_status_t +_proxy_get (csi_proxy_t *proxy, + csi_name_t key) +{ + csi_object_t obj; + csi_status_t status; + + if (_csi_unlikely (proxy == NULL || proxy->dictionary == NULL)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + status = csi_dictionary_get (proxy->ctx, proxy->dictionary, key, &obj); + if (_csi_unlikely (status)) + return status; + + return _csi_push_ostack_copy (proxy->ctx, &obj); +} + +static csi_status_t +_context_get (csi_t *ctx, + cairo_t *cr, + csi_name_t key) +{ + csi_status_t status; + csi_object_t obj; + + if (strcmp ((char *) key, "current-point") == 0) { + double x, y; + + cairo_get_current_point (cr, &x, &y); + + status = _csi_push_ostack_real (ctx, x); + if (_csi_unlikely (status)) + return status; + status = _csi_push_ostack_real (ctx, y); + if (_csi_unlikely (status)) + return status; + + return CSI_STATUS_SUCCESS; + } else if (strcmp ((char *) key, "source") == 0) { + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pattern_reference (cairo_get_source (cr)); + } else if (strcmp ((char *) key, "target") == 0) { + obj.type = CSI_OBJECT_TYPE_SURFACE; + obj.datum.surface = cairo_surface_reference (cairo_get_target (cr)); + } else if (strcmp ((char *) key, "group-target") == 0) { + obj.type = CSI_OBJECT_TYPE_SURFACE; + obj.datum.surface = cairo_surface_reference (cairo_get_group_target (cr)); + } else if (strcmp ((char *) key, "scaled-font") == 0) { + obj.type = CSI_OBJECT_TYPE_SCALED_FONT; + obj.datum.scaled_font = cairo_scaled_font_reference (cairo_get_scaled_font (cr)); + } else if (strcmp ((char *) key, "font-face") == 0) { + obj.type = CSI_OBJECT_TYPE_FONT; + obj.datum.font_face = cairo_font_face_reference (cairo_get_font_face (cr)); + } else + return _proxy_get (cairo_get_user_data (cr, &_csi_proxy_key), key); + + return push (&obj); +} + +static csi_status_t +_font_get (csi_t *ctx, + cairo_font_face_t *font_face, + csi_name_t key) +{ + return _proxy_get (cairo_font_face_get_user_data (font_face, + &_csi_proxy_key), + key); +} + +static csi_status_t +_pattern_get (csi_t *ctx, + cairo_pattern_t *pattern, + csi_name_t key) +{ + csi_status_t status; + + if (strcmp ((char *) key, "type") == 0) + return _csi_push_ostack_integer (ctx, cairo_pattern_get_type (pattern)); + + if (strcmp ((char *) key, "filter") == 0) + return _csi_push_ostack_integer (ctx, cairo_pattern_get_filter (pattern)); + + if (strcmp ((char *) key, "extend") == 0) + return _csi_push_ostack_integer (ctx, cairo_pattern_get_extend (pattern)); + + if (strcmp ((char *) key, "matrix") == 0) { + csi_object_t obj; + cairo_matrix_t m; + + cairo_pattern_get_matrix (pattern, &m); + status = csi_matrix_new_from_matrix (ctx, &obj, &m); + if (_csi_unlikely (status)) + return status; + + return push (&obj); + } + + return _proxy_get (cairo_pattern_get_user_data (pattern, &_csi_proxy_key), + key); +} + +static csi_status_t +_scaled_font_get (csi_t *ctx, + cairo_scaled_font_t *font, + csi_name_t key) +{ + return _proxy_get (cairo_scaled_font_get_user_data (font, &_csi_proxy_key), + key); +} + +static csi_status_t +_surface_get (csi_t *ctx, + cairo_surface_t *surface, + csi_name_t key) +{ + if (strcmp ((char *) key, "type") == 0) { + return _csi_push_ostack_integer (ctx, cairo_surface_get_type (surface)); + } + + if (strcmp ((char *) key, "content") == 0) { + return _csi_push_ostack_integer (ctx, + cairo_surface_get_content (surface)); + } + + return _proxy_get (cairo_surface_get_user_data (surface, &_csi_proxy_key), + key); +} + +static csi_status_t +_get (csi_t *ctx) +{ + csi_object_t *key, *src, obj; + csi_status_t status; + int type; + + check (2); + + key = _csi_peek_ostack (ctx, 0); + src = _csi_peek_ostack (ctx, 1); + pop (1); + type = csi_object_get_type (src); + switch (type) { + case CSI_OBJECT_TYPE_DICTIONARY: + if (_csi_unlikely (csi_object_get_type (key) != CSI_OBJECT_TYPE_NAME)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + status = csi_dictionary_get (ctx, + src->datum.dictionary, + key->datum.name, + &obj); + break; + case CSI_OBJECT_TYPE_ARRAY: + if (_csi_unlikely (csi_object_get_type (key) != CSI_OBJECT_TYPE_INTEGER)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + status = csi_array_get (ctx, + src->datum.array, + key->datum.integer, + &obj); + break; +#if 0 + case CSI_OBJECT_TYPE_STRING: + status = csi_string_get (src, key, &obj); + break; +#endif + + case CSI_OBJECT_TYPE_CONTEXT: + if (_csi_unlikely (csi_object_get_type (key) != CSI_OBJECT_TYPE_NAME)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + return _context_get (ctx, src->datum.cr, key->datum.name); + + case CSI_OBJECT_TYPE_FONT: + if (_csi_unlikely (csi_object_get_type (key) != CSI_OBJECT_TYPE_NAME)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + return _font_get (ctx, src->datum.font_face, key->datum.name); + + case CSI_OBJECT_TYPE_PATTERN: + if (_csi_unlikely (csi_object_get_type (key) != CSI_OBJECT_TYPE_NAME)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + return _pattern_get (ctx, src->datum.pattern, key->datum.name); + + case CSI_OBJECT_TYPE_SCALED_FONT: + if (_csi_unlikely (csi_object_get_type (key) != CSI_OBJECT_TYPE_NAME)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + return _scaled_font_get (ctx, src->datum.scaled_font, key->datum.name); + + case CSI_OBJECT_TYPE_SURFACE: + if (_csi_unlikely (csi_object_get_type (key) != CSI_OBJECT_TYPE_NAME)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + return _surface_get (ctx, src->datum.surface, key->datum.name); + + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + if (_csi_unlikely (status)) + return status; + + return _csi_push_ostack_copy (ctx, &obj); +} + +struct glyph_advance_cache { + csi_t *ctx; + double glyph_advance[256][2]; + unsigned long have_glyph_advance[256]; +}; + +static void +glyph_advance_cache_destroy (void *closure) +{ + struct glyph_advance_cache *cache = closure; + _csi_free (cache->ctx, cache); +} + +static int +_glyph_string (csi_t *ctx, + csi_array_t *array, + cairo_scaled_font_t *scaled_font, + cairo_glyph_t *glyphs) +{ + struct glyph_advance_cache uncached; + struct glyph_advance_cache *cache; + csi_integer_t nglyphs, i, j; + double x, y, dx; + cairo_status_t status; + + if (cairo_scaled_font_status (scaled_font)) + return 0; + + cache = cairo_scaled_font_get_user_data (scaled_font, + (cairo_user_data_key_t *) ctx); + if (cache == NULL) { + cache = _csi_alloc (ctx, sizeof (*cache)); + if (_csi_likely (cache != NULL)) { + cache->ctx = ctx; + memset (cache->have_glyph_advance, 0xff, + sizeof (cache->have_glyph_advance)); + + status = cairo_scaled_font_set_user_data (scaled_font, + (cairo_user_data_key_t *) ctx, + cache, + glyph_advance_cache_destroy); + if (_csi_unlikely (status)) { + _csi_free (ctx, cache); + cache = NULL; + } + } + } + + if (_csi_unlikely (cache == NULL)) { + cache = &uncached; + + cache->ctx = ctx; + memset (cache->have_glyph_advance, 0xff, + sizeof (cache->have_glyph_advance)); + } + + nglyphs = 0; + x = y = 0; + for (i = 0; i < array->stack.len; i++) { + const csi_object_t *obj = &array->stack.objects[i]; + int type = csi_object_get_type (obj); + + switch (type) { + case CSI_OBJECT_TYPE_ARRAY: { + const csi_array_t *glyph_array = obj->datum.array; + for (j = 0; j < glyph_array->stack.len; j++) { + unsigned long g; + int gi; + + obj = &glyph_array->stack.objects[j]; + if (csi_object_get_type (obj) != CSI_OBJECT_TYPE_INTEGER) + break; + g = obj->datum.integer; + + glyphs[nglyphs].index = g; + glyphs[nglyphs].x = x; + glyphs[nglyphs].y = y; + + gi = g % ARRAY_LENGTH (cache->have_glyph_advance); + if (cache->have_glyph_advance[gi] != g) { + cairo_text_extents_t extents; + + cairo_scaled_font_glyph_extents (scaled_font, + &glyphs[nglyphs], 1, + &extents); + + cache->glyph_advance[gi][0] = extents.x_advance; + cache->glyph_advance[gi][1] = extents.y_advance; + cache->have_glyph_advance[gi] = g; + } + + x += cache->glyph_advance[gi][0]; + y += cache->glyph_advance[gi][1]; + nglyphs++; + } + break; + } + + case CSI_OBJECT_TYPE_STRING: { + const csi_string_t *glyph_string = obj->datum.string; + for (j = 0; j < glyph_string->len; j++) { + uint8_t g; + + g = glyph_string->string[j]; + glyphs[nglyphs].index = g; + glyphs[nglyphs].x = x; + glyphs[nglyphs].y = y; + + if (cache->have_glyph_advance[g] != g) { + cairo_text_extents_t extents; + + cairo_scaled_font_glyph_extents (scaled_font, + &glyphs[nglyphs], 1, + &extents); + + cache->glyph_advance[g][0] = extents.x_advance; + cache->glyph_advance[g][1] = extents.y_advance; + cache->have_glyph_advance[g] = g; + } + + x += cache->glyph_advance[g][0]; + y += cache->glyph_advance[g][1]; + nglyphs++; + } + break; + } + + case CSI_OBJECT_TYPE_INTEGER: + case CSI_OBJECT_TYPE_REAL: /* dx or x*/ + dx = csi_number_get_value (obj); + if (i+1 == array->stack.len) + break; + + type = csi_object_get_type (&array->stack.objects[i+1]); + switch (type) { + case CSI_OBJECT_TYPE_INTEGER: + case CSI_OBJECT_TYPE_REAL: /* y */ + y = csi_number_get_value (&array->stack.objects[i+1]); + x = dx; + i++; + break; + + default: + x += dx; + } + } + } + + return nglyphs; +} + +static csi_status_t +_glyph_path (csi_t *ctx) +{ + csi_array_t *array; + csi_status_t status; + cairo_t *cr; + cairo_glyph_t stack_glyphs[256], *glyphs; + csi_integer_t nglyphs, i; + + check (2); + + status = _csi_ostack_get_array (ctx, 0, &array); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + /* count glyphs */ + nglyphs = 0; + for (i = 0; i < array->stack.len; i++) { + csi_object_t *obj = &array->stack.objects[i]; + int type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_ARRAY: + nglyphs += obj->datum.array->stack.len; + break; + case CSI_OBJECT_TYPE_STRING: + nglyphs += obj->datum.string->len; + break; + } + } + if (nglyphs == 0) { + pop (1); + return CSI_STATUS_SUCCESS; + } + + if (nglyphs > ARRAY_LENGTH (stack_glyphs)) { + if (_csi_unlikely ((unsigned) nglyphs >= INT_MAX / sizeof (cairo_glyph_t))) + return _csi_error (CSI_STATUS_NO_MEMORY); + + glyphs = _csi_alloc (ctx, sizeof (cairo_glyph_t) * nglyphs); + if (_csi_unlikely (glyphs == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + } else + glyphs = stack_glyphs; + + nglyphs = _glyph_string (ctx, array, cairo_get_scaled_font (cr), glyphs); + cairo_glyph_path (cr, glyphs, nglyphs); + + if (glyphs != stack_glyphs) + _csi_free (ctx, glyphs); + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_gray (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + double g; + + check (1); + + status = _csi_ostack_get_number (ctx, 0, &g); + if (_csi_unlikely (status)) + return status; + + pop (1); + + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pattern_create_rgba (g, g, g, 1); + return push (&obj); +} + +static csi_status_t +_gt (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *a, *b; + int cmp; + + check (2); + + b = _csi_peek_ostack (ctx, 0); + a = _csi_peek_ostack (ctx, 1); + + status = csi_object_compare (a, b, &cmp); + if (_csi_unlikely (status)) + return status; + + pop (2); + return _csi_push_ostack_boolean (ctx, cmp > 0); +} + +static csi_status_t +_identity (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + + status = csi_matrix_new (ctx, &obj); + if (_csi_unlikely (status)) + return status; + + return push (&obj); +} + +static csi_status_t +_if (csi_t *ctx) +{ + csi_array_t *proc; + csi_boolean_t predicate = FALSE; /* silence the compiler */ + csi_status_t status; + + check (2); + + status = _csi_ostack_get_procedure (ctx, 0, &proc); + if (_csi_unlikely (status)) + return status; + + status = _csi_ostack_get_boolean (ctx, 1, &predicate); + if (_csi_unlikely (status)) + return status; + + proc->base.ref++; + pop (2); + + if (predicate) + status = _csi_array_execute (ctx, proc); + + if (--proc->base.ref == 0) + csi_array_free (ctx, proc); + + return status; +} + +static csi_status_t +_ifelse (csi_t *ctx) +{ + csi_array_t *true_proc, *false_proc; + csi_boolean_t predicate = FALSE; /* silence the compiler */ + csi_status_t status; + + check (3); + + status = _csi_ostack_get_procedure (ctx, 0, &false_proc); + if (_csi_unlikely (status)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + status = _csi_ostack_get_procedure (ctx, 1, &true_proc); + if (_csi_unlikely (status)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + status = _csi_ostack_get_boolean (ctx, 2, &predicate); + if (_csi_unlikely (status)) + return status; + + true_proc->base.ref++; + false_proc->base.ref++; + pop (3); + + if (predicate) + status = _csi_array_execute (ctx, true_proc); + else + status = _csi_array_execute (ctx, false_proc); + + if (--true_proc->base.ref == 0) + csi_array_free (ctx, true_proc); + if (--false_proc->base.ref == 0) + csi_array_free (ctx, false_proc); + + return status; +} + +static csi_status_t +_image_read_raw (csi_t *ctx, + csi_object_t *src, + cairo_format_t format, + int width, int height, + cairo_surface_t **image_out) +{ + cairo_surface_t *image; + uint8_t *bp, *data; + int rem, len, ret, x, rowlen, instride, stride; + cairo_status_t status; + + if (width == 0 || height == 0) { + *image_out = cairo_image_surface_create (format, 0, 0); + return CSI_STATUS_SUCCESS; + } + + if (ctx->hooks.create_source_image != NULL) { + image = ctx->hooks.create_source_image (ctx->hooks.closure, + format, width, height, + 0); + + stride = cairo_image_surface_get_stride (image); + data = cairo_image_surface_get_data (image); + } else { + stride = cairo_format_stride_for_width (format, width); + data = malloc (stride * height); + if (data == NULL) + return CAIRO_STATUS_NO_MEMORY; + + image = cairo_image_surface_create_for_data (data, format, + width, height, stride); + status = cairo_surface_set_user_data (image, + (const cairo_user_data_key_t *) image, + data, free); + if (status) { + cairo_surface_destroy (image); + free (image); + return status; + } + } + + switch (format) { + case CAIRO_FORMAT_A1: + instride = rowlen = (width+7)/8; + break; + case CAIRO_FORMAT_A8: + instride = rowlen = width; + break; + case CAIRO_FORMAT_RGB16_565: + instride = rowlen = 2 * width; + break; + case CAIRO_FORMAT_RGB24: + rowlen = 3 * width; + instride = 4 *width; + break; + default: + case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_INVALID: + case CAIRO_FORMAT_ARGB32: + instride = rowlen = 4 * width; + break; + } + len = rowlen * height; + + if (rowlen == instride && + src->type == CSI_OBJECT_TYPE_STRING && + len == src->datum.string->deflate) + { + csi_string_t *s = src->datum.string; + unsigned long out = s->deflate; + + switch (s->method) { + default: + case NONE: +err_decompress: + cairo_surface_destroy (image); + return _csi_error (CSI_STATUS_READ_ERROR); + + case ZLIB: +#if HAVE_ZLIB + if (uncompress ((Bytef *) data, &out, + (Bytef *) s->string, s->len) != Z_OK) +#endif + goto err_decompress; + break; + + case LZO: +#if HAVE_LZO + if (lzo2a_decompress ((Bytef *) s->string, s->len, + (Bytef *) data, &out, + NULL)) +#endif + goto err_decompress; + break; + } + } + else + { + csi_object_t file; + + status = csi_object_as_file (ctx, src, &file); + if (_csi_unlikely (status)) { + cairo_surface_destroy (image); + return status; + } + + bp = data; + rem = len; + while (rem) { + ret = csi_file_read (file.datum.file, bp, rem); + if (_csi_unlikely (ret == 0)) { + cairo_surface_destroy (image); + return _csi_error (CSI_STATUS_READ_ERROR); + } + rem -= ret; + bp += ret; + } + + if (len != height * stride) { + while (--height) { + uint8_t *row = data + height * stride; + + /* XXX pixel conversion */ + switch (format) { + case CAIRO_FORMAT_A1: + for (x = rowlen; x--; ) { + uint8_t byte = *--bp; + row[x] = CSI_BITSWAP8_IF_LITTLE_ENDIAN (byte); + } + break; + case CAIRO_FORMAT_A8: + for (x = width; x--; ) + row[x] = *--bp; + break; + case CAIRO_FORMAT_RGB16_565: + for (x = width; x--; ) { +#ifdef WORDS_BIGENDIAN + row[2*x + 1] = *--bp; + row[2*x + 0] = *--bp; +#else + row[2*x + 0] = *--bp; + row[2*x + 1] = *--bp; +#endif + } + break; + case CAIRO_FORMAT_RGB24: + for (x = width; x--; ) { +#ifdef WORDS_BIGENDIAN + row[4*x + 3] = *--bp; + row[4*x + 2] = *--bp; + row[4*x + 1] = *--bp; + row[4*x + 0] = 0xff; +#else + row[4*x + 0] = *--bp; + row[4*x + 1] = *--bp; + row[4*x + 2] = *--bp; + row[4*x + 3] = 0xff; +#endif + } + break; + case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_INVALID: + case CAIRO_FORMAT_ARGB32: + /* stride == width */ + break; + } + + memset (row + instride, 0, stride - instride); + } + + /* need to treat last row carefully */ + switch (format) { + case CAIRO_FORMAT_A1: + for (x = rowlen; x--; ) { + uint8_t byte = *--bp; + data[x] = CSI_BITSWAP8_IF_LITTLE_ENDIAN (byte); + } + break; + case CAIRO_FORMAT_A8: + for (x = width; x--; ) + data[x] = *--bp; + break; + case CAIRO_FORMAT_RGB16_565: + for (x = width; x--; ) { +#ifdef WORDS_BIGENDIAN + data[2*x + 1] = *--bp; + data[2*x + 0] = *--bp; +#else + data[2*x + 0] = *--bp; + data[2*x + 1] = *--bp; +#endif + } + break; + case CAIRO_FORMAT_RGB24: + for (x = width; --x>1; ) { +#ifdef WORDS_BIGENDIAN + data[4*x + 3] = *--bp; + data[4*x + 2] = *--bp; + data[4*x + 1] = *--bp; + data[4*x + 0] = 0xff; +#else + data[4*x + 0] = *--bp; + data[4*x + 1] = *--bp; + data[4*x + 2] = *--bp; + data[4*x + 3] = 0xff; +#endif + } + if (width > 1) { + uint8_t rgb[2][3]; + /* shuffle the last couple of overlapping pixels */ + rgb[1][0] = data[5]; + rgb[1][1] = data[4]; + rgb[1][2] = data[3]; + rgb[0][0] = data[2]; + rgb[0][1] = data[1]; + rgb[0][2] = data[0]; +#ifdef WORDS_BIGENDIAN + data[4] = 0xff; + data[5] = rgb[1][2]; + data[6] = rgb[1][1]; + data[7] = rgb[1][0]; + data[0] = 0xff; + data[1] = rgb[0][2]; + data[2] = rgb[0][1]; + data[3] = rgb[0][0]; +#else + data[7] = 0xff; + data[6] = rgb[1][2]; + data[5] = rgb[1][1]; + data[4] = rgb[1][0]; + data[3] = 0xff; + data[2] = rgb[0][2]; + data[1] = rgb[0][1]; + data[0] = rgb[0][0]; +#endif + } else { +#ifdef WORDS_BIGENDIAN + data[0] = 0xff; + data[1] = data[0]; + data[2] = data[1]; + data[3] = data[2]; +#else + data[3] = data[0]; + data[0] = data[2]; + data[2] = data[3]; + data[3] = 0xff; +#endif + } + break; + case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_INVALID: + case CAIRO_FORMAT_ARGB32: + /* stride == width */ + break; + } + memset (data + instride, 0, stride - instride); + } else { +#ifndef WORDS_BIGENDIAN + switch (format) { + case CAIRO_FORMAT_A1: + for (x = 0; x < len; x++) { + uint8_t byte = data[x]; + data[x] = CSI_BITSWAP8_IF_LITTLE_ENDIAN (byte); + } + break; + case CAIRO_FORMAT_RGB16_565: + { + uint32_t *rgba = (uint32_t *) data; + for (x = len/2; x--; rgba++) { + *rgba = bswap_16 (*rgba); + } + } + break; + case CAIRO_FORMAT_ARGB32: + { + uint32_t *rgba = (uint32_t *) data; + for (x = len/4; x--; rgba++) { + *rgba = bswap_32 (*rgba); + } + } + break; + + case CAIRO_FORMAT_A8: + break; + + case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_RGB24: + case CAIRO_FORMAT_INVALID: + default: + break; + } +#endif + } + csi_object_free (ctx, &file); + } + + cairo_surface_mark_dirty (image); + *image_out = image; + return CSI_STATUS_SUCCESS; +} + +static cairo_status_t +png_read_func (void *closure, uint8_t *data, unsigned int len) +{ + int ret; + + ret = csi_file_read (closure, data, len); + if ((unsigned int) ret != len) + return CAIRO_STATUS_READ_ERROR; + + return CAIRO_STATUS_SUCCESS; +} + +static csi_status_t +_image_read_png (csi_file_t *src, cairo_surface_t **out) +{ +#if CAIRO_HAS_PNG_FUNCTIONS + *out = cairo_image_surface_create_from_png_stream (png_read_func, src); + return cairo_surface_status (*out); +#else + return CAIRO_STATUS_READ_ERROR; +#endif +} + +struct _image_tag { + csi_t *ctx; + csi_blob_t blob; + cairo_surface_t *surface; +}; + +static void +_image_tag_done (void *closure) +{ + struct _image_tag *tag = closure; + csi_t *ctx = tag->ctx; + + ctx->_images = _csi_list_unlink (ctx->_images, &tag->blob.list); + _csi_slab_free (ctx, tag, sizeof (*tag)); + cairo_script_interpreter_destroy (ctx); +} + +static void +_image_hash (csi_blob_t *blob, + cairo_surface_t *surface) +{ + uint32_t value; + + value = cairo_image_surface_get_width (surface); + _csi_blob_hash (blob, &value, 1); + + value = cairo_image_surface_get_height (surface); + _csi_blob_hash (blob, &value, 1); + + value = cairo_image_surface_get_format (surface); + _csi_blob_hash (blob, &value, 1); +} + +static cairo_surface_t * +_image_cached (csi_t *ctx, cairo_surface_t *surface) +{ + csi_blob_t tmpl; + csi_list_t *link; + uint8_t *data; + int stride, height; + struct _image_tag *tag; + + /* check for an existing image */ + + data = cairo_image_surface_get_data (surface); + stride = cairo_image_surface_get_stride (surface); + height = cairo_image_surface_get_height (surface); + _csi_blob_init (&tmpl, data, stride * height); + _image_hash (&tmpl, surface); + link = _csi_list_find (ctx->_images, _csi_blob_equal, &tmpl); + if (link) { + cairo_surface_destroy (surface); + tag = csi_container_of (link, struct _image_tag, blob.list); + return cairo_surface_reference (tag->surface); + } + + /* none found, insert a tag for this one */ + + tag = _csi_slab_alloc (ctx, sizeof (struct _image_tag)); + if (tag == NULL) + return surface; + + ctx->_images = _csi_list_prepend (ctx->_images, &tag->blob.list); + tag->ctx = cairo_script_interpreter_reference (ctx); + tag->blob.hash = tmpl.hash; + tag->blob.bytes = tmpl.bytes; + tag->blob.len = tmpl.len; + tag->surface = surface; + + if (cairo_surface_set_user_data (surface, &_csi_blob_key, + tag, _image_tag_done)) + { + _image_tag_done (tag); + } + + return surface; +} + +static csi_status_t +_image_load_from_dictionary (csi_t *ctx, + csi_dictionary_t *dict, + cairo_surface_t **image_out) +{ + csi_object_t obj, key; + long width; + long height; + long format; + cairo_surface_t *image = NULL; /* silence the compiler */ + csi_status_t status; + + /* check for "status? */ + + status = _csi_dictionary_get_integer (ctx, dict, "width", FALSE, &width); + if (_csi_unlikely (status)) + return status; + status = _csi_dictionary_get_integer (ctx, dict, "height", FALSE, &height); + if (_csi_unlikely (status)) + return status; + + format = CAIRO_FORMAT_ARGB32; + status = _csi_dictionary_get_integer (ctx, dict, "format", TRUE, &format); + if (_csi_unlikely (status)) + return status; + + status = csi_name_new_static (ctx, &key, "source"); + if (_csi_unlikely (status)) + return status; + + if (csi_dictionary_has (dict, key.datum.name)) { + enum mime_type mime_type; + csi_object_t file; + + status = csi_dictionary_get (ctx, dict, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + + status = csi_name_new_static (ctx, &key, "mime-type"); + if (_csi_unlikely (status)) + return status; + + mime_type = MIME_TYPE_NONE; + if (csi_dictionary_has (dict, key.datum.name)) { + csi_object_t type_obj; + const char *type_str; + int type; + + status = csi_dictionary_get (ctx, dict, key.datum.name, &type_obj); + if (_csi_unlikely (status)) + return status; + + type = csi_object_get_type (&type_obj); + switch (type) { + case CSI_OBJECT_TYPE_STRING: + type_str = type_obj.datum.string->string; + break; + case CSI_OBJECT_TYPE_NAME: + type_str = (char *) type_obj.datum.name; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + if (strcmp (type_str, CAIRO_MIME_TYPE_PNG) == 0) + mime_type = MIME_TYPE_PNG; + } + + + /* XXX hook for general mime-type decoder */ + + switch (mime_type) { + case MIME_TYPE_NONE: + status = _image_read_raw (ctx, &obj, format, width, height, &image); + break; + case MIME_TYPE_PNG: + status = csi_object_as_file (ctx, &obj, &file); + if (_csi_unlikely (status)) + return status; + + status = _image_read_png (file.datum.file, &image); + csi_object_free (ctx, &file); + break; + } + if (_csi_unlikely (status)) + return status; + + image = _image_cached (ctx, image); + } else + image = cairo_image_surface_create (format, width, height); + + *image_out = image; + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_image (csi_t *ctx) +{ + csi_dictionary_t *dict; + cairo_surface_t *image; + csi_status_t status; + csi_object_t obj; + + check (1); + + status = _csi_ostack_get_dictionary (ctx, 0, &dict); + if (_csi_unlikely (status)) + return status; + + status = _image_load_from_dictionary (ctx, dict, &image); + if (_csi_unlikely (status)) + return status; + + pop (1); + obj.type = CSI_OBJECT_TYPE_SURFACE; + obj.datum.surface = image; + return push (&obj); +} + +static csi_status_t +_index (csi_t *ctx) +{ + csi_status_t status; + long n; + + check (1); + + status = _csi_ostack_get_integer (ctx, 0, &n); + if (_csi_unlikely (status)) + return status; + + pop (1); + + check (n); + return _csi_push_ostack_copy (ctx, _csi_peek_ostack (ctx, n)); +} + +static csi_status_t +_integer (csi_t *ctx) +{ + csi_object_t *obj; + int type; + + check (1); + + obj = _csi_peek_ostack (ctx, 0); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_INTEGER: + break; + case CSI_OBJECT_TYPE_REAL: + obj->datum.integer = obj->datum.real; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + obj->type = CSI_OBJECT_TYPE_INTEGER; + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_invert (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + cairo_matrix_t m; + + check (1); + + status = _csi_ostack_get_matrix (ctx, 0, &m); + if (_csi_unlikely (status)) + return status; + + cairo_matrix_invert (&m); + + status = csi_matrix_new_from_matrix (ctx, &obj, &m); + if (_csi_unlikely (status)) + return status; + + pop (1); + + return push (&obj); +} + +static csi_status_t +_le (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *a, *b; + int cmp; + + check (2); + + b = _csi_peek_ostack (ctx, 0); + a = _csi_peek_ostack (ctx, 1); + + status = csi_object_compare (a, b, &cmp); + if (_csi_unlikely (status)) + return status; + + pop (2); + return _csi_push_ostack_boolean (ctx, cmp <= 0); +} + +static csi_status_t +_linear (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + double x1, y1, x2, y2; + + check (4); + + status = _csi_ostack_get_number (ctx, 0, &y2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &y1); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &x1); + if (_csi_unlikely (status)) + return status; + + pop (4); + + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pattern_create_linear (x1, y1, x2, y2); + return push (&obj); +} + +static csi_status_t +_line_to (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *obj; + int type; + double x, y; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + + /* XXX path object */ + + obj = _csi_peek_ostack (ctx, 2); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_line_to (obj->datum.cr, x, y); + break; + case CSI_OBJECT_TYPE_PATTERN: + cairo_mesh_pattern_line_to (obj->datum.pattern, x, y); + break; + } + + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_lt (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *a, *b; + int cmp; + + check (2); + + b = _csi_peek_ostack (ctx, 0); + a = _csi_peek_ostack (ctx, 1); + + status = csi_object_compare (a, b, &cmp); + if (_csi_unlikely (status)) + return status; + + pop (2); + return _csi_push_ostack_boolean (ctx, cmp < 0); +} + +static csi_status_t +_mark (csi_t *ctx) +{ + return _csi_push_ostack_mark (ctx); +} + +static csi_status_t +_ne (csi_t *ctx) +{ + csi_object_t *a, *b; + csi_boolean_t v; + + check (2); + + b = _csi_peek_ostack (ctx, 0); + a = _csi_peek_ostack (ctx, 1); + + v = ! csi_object_eq (a, b); + + pop (2); + return _csi_push_ostack_boolean (ctx, v); +} + +static csi_status_t +_neg (csi_t *ctx) +{ + csi_object_t *obj; + int type; + + check (1); + + obj = _csi_peek_ostack (ctx, 0); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_INTEGER: + obj->datum.integer = -obj->datum.integer; + break; + case CSI_OBJECT_TYPE_REAL: + obj->datum.real = -obj->datum.real; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_not (csi_t *ctx) +{ + csi_object_t *obj; + int type; + + check (1); + + obj = _csi_peek_ostack (ctx, 0); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_BOOLEAN: + obj->datum.boolean = ! obj->datum.boolean; + break; + case CSI_OBJECT_TYPE_INTEGER: + obj->type = CSI_OBJECT_TYPE_BOOLEAN; + obj->datum.boolean = ! obj->datum.integer; + break; + case CSI_OBJECT_TYPE_REAL: + obj->type = CSI_OBJECT_TYPE_BOOLEAN; + obj->datum.boolean = obj->datum.real == 0.0; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_new_path (csi_t *ctx) +{ + /* XXX handle path object */ + return _do_cairo_op (ctx, cairo_new_path); +} + +static csi_status_t +_new_sub_path (csi_t *ctx) +{ + /* XXX handle path object */ + return _do_cairo_op (ctx, cairo_new_sub_path); +} + +static csi_status_t +_null (csi_t *ctx) +{ + return _csi_push_ostack_null (ctx); +} + +static csi_status_t +_mask (csi_t *ctx) +{ + cairo_t *cr; + cairo_pattern_t *pattern = NULL; /* silence the compiler */ + csi_status_t status; + + check (2); + + status = _csi_ostack_get_pattern (ctx, 0, &pattern); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_mask (cr, pattern); + pop (1); + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_matrix (csi_t *ctx) +{ + csi_object_t *obj, matrix; + double v[6]; + csi_status_t status; + int n; + + check (1); + + obj = _csi_peek_ostack (ctx, 0); + if (csi_object_is_number (obj)) { + check (6); + + for (n = 6; n--; ) { + status = _csi_ostack_get_number (ctx, 5-n, &v[n]); + if (_csi_unlikely (status)) + return status; + } + status = csi_matrix_new_from_values (ctx, &matrix, v); + if (_csi_unlikely (status)) + return status; + + pop (6); + } else { + csi_array_t *array; + + status = _csi_ostack_get_array (ctx, 0, &array); + if (_csi_unlikely (status)) + return status; + + status = csi_matrix_new_from_array (ctx, &matrix, array); + if (_csi_unlikely (status)) + return status; + + pop (1); + } + + return push (&matrix); +} + +static csi_status_t +_map_to_image (csi_t *ctx) +{ + csi_object_t obj; + csi_array_t *array; + csi_status_t status; + cairo_rectangle_int_t extents, *r; + cairo_surface_t *surface; + + check (2); + + status = _csi_ostack_get_array (ctx, 0, &array); + if (_csi_unlikely (status)) + return status; + + status = _csi_ostack_get_surface (ctx, 1, &surface); + if (_csi_unlikely (status)) + return status; + + switch (array->stack.len) { + case 0: + r = NULL; + break; + case 4: + extents.x = floor (_csi_object_as_real (&array->stack.objects[0])); + extents.y = floor (_csi_object_as_real (&array->stack.objects[1])); + extents.width = ceil (_csi_object_as_real (&array->stack.objects[2])); + extents.height = ceil (_csi_object_as_real (&array->stack.objects[3])); + r = &extents; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + obj.type = CSI_OBJECT_TYPE_SURFACE; + obj.datum.surface = cairo_surface_reference (cairo_surface_map_to_image (surface, r)); + pop (1); + return push (&obj); +} + +static csi_status_t +_unmap_image (csi_t *ctx) +{ + cairo_surface_t *surface, *image; + csi_status_t status; + + check (2); + + status = _csi_ostack_get_surface (ctx, 0, &image); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 1, &surface); + if (_csi_unlikely (status)) + return status; + + cairo_surface_unmap_image (surface, image); + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_mesh (csi_t *ctx) +{ + csi_object_t obj; + + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pattern_create_mesh (); + return push (&obj); +} + +static csi_status_t +_mesh_begin_patch (csi_t *ctx) +{ + csi_status_t status; + cairo_pattern_t *pattern = NULL; /* silence the compiler */ + + check (1); + + status = _csi_ostack_get_pattern (ctx, 0, &pattern); + if (_csi_unlikely (status)) + return status; + + cairo_mesh_pattern_begin_patch (pattern); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_mesh_end_patch (csi_t *ctx) +{ + csi_status_t status; + cairo_pattern_t *pattern = NULL; /* silence the compiler */ + + check (1); + + status = _csi_ostack_get_pattern (ctx, 0, &pattern); + if (_csi_unlikely (status)) + return status; + + cairo_mesh_pattern_end_patch (pattern); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_mesh_set_control_point (csi_t *ctx) +{ + csi_status_t status; + double x, y; + csi_integer_t point; + cairo_pattern_t *pattern = NULL; /* silence the compiler */ + + check (4); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 2, &point); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_pattern (ctx, 3, &pattern); + if (_csi_unlikely (status)) + return status; + + cairo_mesh_pattern_set_control_point (pattern, point, x, y); + + pop (3); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_mesh_set_corner_color (csi_t *ctx) +{ + csi_status_t status; + double r, g, b, a; + csi_integer_t corner; + cairo_pattern_t *pattern = NULL; /* silence the compiler */ + + check (6); + + status = _csi_ostack_get_number (ctx, 0, &a); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &b); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &g); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &r); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 4, &corner); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_pattern (ctx, 5, &pattern); + if (_csi_unlikely (status)) + return status; + + cairo_mesh_pattern_set_corner_color_rgba (pattern, corner, r, g, b, a); + + pop (5); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_mod (csi_t *ctx) +{ + csi_integer_t x, y; + csi_status_t status; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + + pop (2); + return _csi_push_ostack_integer (ctx, x % y); +} + +static csi_status_t +_move_to (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *obj; + int type; + double x, y; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 2); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_move_to (obj->datum.cr, x, y); + break; + case CSI_OBJECT_TYPE_PATTERN: + cairo_mesh_pattern_move_to (obj->datum.pattern, x, y); + break; + + /* XXX path object */ + } + + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_mul (csi_t *ctx) +{ + csi_object_t *A; + csi_object_t *B; + csi_object_type_t type_a, type_b; + + check (2); + + B = _csi_peek_ostack (ctx, 0); + A = _csi_peek_ostack (ctx, 1); + + type_a = csi_object_get_type (A); + if (_csi_unlikely (! (type_a == CSI_OBJECT_TYPE_INTEGER || + type_a == CSI_OBJECT_TYPE_REAL))) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + type_b = csi_object_get_type (B); + if (_csi_unlikely (! (type_b == CSI_OBJECT_TYPE_INTEGER || + type_b == CSI_OBJECT_TYPE_REAL))) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (2); + + if (type_a == CSI_OBJECT_TYPE_REAL && + type_b == CSI_OBJECT_TYPE_REAL) + { + return _csi_push_ostack_real (ctx, A->datum.real * B->datum.real); + + } + else if (type_a == CSI_OBJECT_TYPE_INTEGER && + type_b == CSI_OBJECT_TYPE_INTEGER) + { + return _csi_push_ostack_integer (ctx, + A->datum.integer * B->datum.integer); + } + else + { + double v; + + if (type_a == CSI_OBJECT_TYPE_REAL) + v = A->datum.real; + else + v = A->datum.integer; + + if (type_b == CSI_OBJECT_TYPE_REAL) + v *= B->datum.real; + else + v *= B->datum.integer; + + return _csi_push_ostack_real (ctx, v); + } +} + +static csi_status_t +_or (csi_t *ctx) +{ + csi_object_t *a, *b; + int type; + + check (2); + + a = _csi_peek_ostack (ctx, 0); + b = _csi_peek_ostack (ctx, 1); + if (_csi_unlikely (csi_object_get_type (a) != csi_object_get_type (b))) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + pop (2); + type = csi_object_get_type (a); + switch (type) { + case CSI_OBJECT_TYPE_INTEGER: + return _csi_push_ostack_integer (ctx, + a->datum.integer | b->datum.integer); + case CSI_OBJECT_TYPE_BOOLEAN: + return _csi_push_ostack_boolean (ctx, + a->datum.boolean | b->datum.boolean); + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } +} + +static csi_status_t +_paint (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_paint); +} + +static csi_status_t +_paint_with_alpha (csi_t *ctx) +{ + cairo_t *cr; + csi_status_t status; + double alpha; + + check (2); + + status = _csi_ostack_get_number (ctx, 0, &alpha); + if (_csi_unlikely (status)) + return status; + + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_paint_with_alpha (cr, alpha); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_pattern (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + cairo_surface_t *surface; + + check (1); + + status = _csi_ostack_get_surface (ctx, 0, &surface); + if (_csi_unlikely (status)) + return status; + + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pattern_create_for_surface (surface); + + pop (1); + return push (&obj); +} + +static csi_status_t +_pop (csi_t *ctx) +{ + check (1); + pop (1); + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_pop_group (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + cairo_t *cr; + + check (1); + + status = _csi_ostack_get_context (ctx, 0, &cr); + if (_csi_unlikely (status)) + return status; + + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pop_group (cr); + + return push (&obj); +} + +static csi_status_t +_push_group (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + long content; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &content); + if (_csi_unlikely (status)) + return status; + + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_push_group_with_content (cr, content); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_radial (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + double x1, y1, r1, x2, y2, r2; + + check (6); + + status = _csi_ostack_get_number (ctx, 0, &r2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &y2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &x2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &r1); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 4, &y1); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 5, &x1); + if (_csi_unlikely (status)) + return status; + + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pattern_create_radial (x1, y1, r1, x2, y2, r2); + pop (6); + return push (&obj); +} + +static csi_status_t +_rectangle (csi_t *ctx) +{ + csi_status_t status; + double x, y; + double w, h; + cairo_t *cr; + + check (5); + + status = _csi_ostack_get_number (ctx, 0, &h); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &w); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 4, &cr); + if (_csi_unlikely (status)) + return status; + + /* XXX path object */ + + cairo_rectangle (cr, x, y, w, h); + pop(4); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_rel_curve_to (csi_t *ctx) +{ + csi_status_t status; + double x1, y1; + double x2, y2; + double x3, y3; + cairo_t *cr; + + check (7); + + status = _csi_ostack_get_number (ctx, 0, &y3); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x3); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &y2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &x2); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 4, &y1); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 5, &x1); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 6, &cr); + if (_csi_unlikely (status)) + return status; + + /* XXX path object */ + + cairo_rel_curve_to (cr, x1, y1, x2, y2, x3, y3); + pop (6); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_rel_line_to (csi_t *ctx) +{ + csi_status_t status; + double x, y; + cairo_t *cr; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 2, &cr); + if (_csi_unlikely (status)) + return status; + + /* XXX path object */ + + cairo_rel_line_to (cr, x, y); + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_rel_move_to (csi_t *ctx) +{ + csi_status_t status; + double x, y; + cairo_t *cr; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 2, &cr); + if (_csi_unlikely (status)) + return status; + + /* XXX path object */ + cairo_rel_move_to (cr, x, y); + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_repeat (csi_t *ctx) +{ + csi_array_t *proc; + csi_integer_t count; + csi_status_t status; + + check (2); + + status = _csi_ostack_get_procedure (ctx, 0, &proc); + if (_csi_unlikely (status)) + return status; + + status = _csi_ostack_get_integer (ctx, 1, &count); + if (_csi_unlikely (status)) + return status; + + if (_csi_unlikely (count < 0)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + proc->base.ref++; + pop (2); + + while (count--) { + status = _csi_array_execute (ctx, proc); + if (_csi_unlikely (status)) + break; + } + + if (--proc->base.ref == 0) + csi_array_free (ctx, proc); + + return status; +} + +static csi_status_t +_reset_clip (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_reset_clip); +} + +static csi_status_t +_restore (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_restore); +} + +static csi_status_t +_rgb (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + double r,g,b; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &b); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &g); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &r); + if (_csi_unlikely (status)) + return status; + + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pattern_create_rgb (r, g, b); + pop (3); + return push (&obj); +} + +static csi_status_t +_rgba (csi_t *ctx) +{ + csi_object_t obj; + csi_status_t status; + double r,g,b,a; + + check (4); + + status = _csi_ostack_get_number (ctx, 0, &a); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &b); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &g); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &r); + if (_csi_unlikely (status)) + return status; + + obj.type = CSI_OBJECT_TYPE_PATTERN; + obj.datum.pattern = cairo_pattern_create_rgba (r, g, b, a); + pop (4); + return push (&obj); +} + +static csi_status_t +_roll (csi_t *ctx) +{ + csi_status_t status; + long j, n; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &j); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 1, &n); + if (_csi_unlikely (status)) + return status; + + pop (2); + check (n); + return _csi_stack_roll (ctx, &ctx->ostack, j, n); +} + +static csi_status_t +_rotate (csi_t *ctx) +{ + csi_object_t *obj; + csi_status_t status; + double theta; + int type; + + check (2); + + status = _csi_ostack_get_number (ctx, 0, &theta); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 1); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_rotate (obj->datum.cr, theta); + break; + + case CSI_OBJECT_TYPE_PATTERN: + { + cairo_matrix_t ctm; + cairo_pattern_get_matrix (obj->datum.pattern, &ctm); + cairo_matrix_rotate (&ctm, theta); + cairo_pattern_set_matrix (obj->datum.pattern, &ctm); + } + break; + + + case CSI_OBJECT_TYPE_MATRIX: + cairo_matrix_rotate (&obj->datum.matrix->matrix, theta); + break; + + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_save (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_save); +} + +static csi_status_t +_scale (csi_t *ctx) +{ + csi_object_t *obj; + csi_status_t status; + double x, y; + int type; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 2); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_scale (obj->datum.cr, x, y); + break; + + case CSI_OBJECT_TYPE_PATTERN: + { + cairo_matrix_t ctm; + cairo_pattern_get_matrix (obj->datum.pattern, &ctm); + cairo_matrix_scale (&ctm, x, y); + cairo_pattern_set_matrix (obj->datum.pattern, &ctm); + } + break; + + + case CSI_OBJECT_TYPE_MATRIX: + cairo_matrix_scale (&obj->datum.matrix->matrix, x, y); + break; + + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_font_options_load_from_dictionary (csi_t *ctx, + csi_dictionary_t *dict, + cairo_font_options_t *options) +{ + const struct { + const char *key; + void (*setter) (cairo_font_options_t *, int val); + } properties[] = { + { "antialias", + (void (*)(cairo_font_options_t *, int val)) + cairo_font_options_set_antialias }, + { "subpixel-order", + (void (*)(cairo_font_options_t *, int val)) + cairo_font_options_set_subpixel_order }, + { "hint-style", + (void (*)(cairo_font_options_t *, int val)) + cairo_font_options_set_hint_style }, + { "hint-metrics", + (void (*)(cairo_font_options_t *, int val)) + cairo_font_options_set_hint_metrics }, + { NULL, NULL }, + }, *prop = properties; + + while (prop->key != NULL) { + csi_object_t key, value; + csi_status_t status; + + status = csi_name_new_static (ctx, &key, prop->key); + if (_csi_unlikely (status)) + return status; + + if (csi_dictionary_has (dict, key.datum.name)) { + status = csi_dictionary_get (ctx, dict, key.datum.name, &value); + if (_csi_unlikely (status)) + return status; + + if (_csi_unlikely (csi_object_get_type (&value) != + CSI_OBJECT_TYPE_INTEGER)) + { + csi_object_free (ctx, &value); + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + prop->setter (options, value.datum.integer); + } + + prop++; + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_scaled_font (csi_t *ctx) +{ + csi_object_t obj; + csi_dictionary_t *dict; + cairo_font_face_t *font_face = NULL; /* silence the compiler */ + cairo_matrix_t font_matrix, ctm; + cairo_font_options_t *options; + csi_status_t status; + + check (4); + + status = _csi_ostack_get_dictionary (ctx, 0, &dict); + if (_csi_unlikely (status)) + return status; + options = cairo_font_options_create (); + status = _font_options_load_from_dictionary (ctx, dict, options); + if (_csi_unlikely (status)) { + cairo_font_options_destroy (options); + return status; + } + + status = _csi_ostack_get_matrix (ctx, 1, &ctm); + if (_csi_unlikely (status)) { + cairo_font_options_destroy (options); + return status; + } + + status = _csi_ostack_get_matrix (ctx, 2, &font_matrix); + if (_csi_unlikely (status)) { + cairo_font_options_destroy (options); + return status; + } + + status = _csi_ostack_get_font_face (ctx, 3, &font_face); + if (_csi_unlikely (status)) { + cairo_font_options_destroy (options); + return status; + } + + obj.type = CSI_OBJECT_TYPE_SCALED_FONT; + obj.datum.scaled_font = cairo_scaled_font_create (font_face, + &font_matrix, + &ctm, + options); + cairo_font_options_destroy (options); + pop (4); + return push (&obj); +} + +static csi_status_t +_select_font_face (csi_t *ctx) +{ + cairo_t *cr; + long weight; + long slant; + csi_string_t *family; + csi_status_t status; + + check (4); + + status = _csi_ostack_get_integer (ctx, 0, &weight); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 1, &slant); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_string (ctx, 2, &family); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 3, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_select_font_face (cr, family->string, slant, weight); + pop (3); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_context_set (csi_t *ctx, + cairo_t *cr, + csi_name_t key, + csi_object_t *obj) +{ + if (strcmp ((char *) key, "source") == 0) { + if (_csi_unlikely (csi_object_get_type (obj) != + CSI_OBJECT_TYPE_PATTERN)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + cairo_set_source (cr, obj->datum.pattern); + return CSI_STATUS_SUCCESS; + } + + if (strcmp ((char *) key, "scaled-font") == 0) { + if (_csi_unlikely (csi_object_get_type (obj) != + CSI_OBJECT_TYPE_SCALED_FONT)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + cairo_set_scaled_font (cr, obj->datum.scaled_font); + return CSI_STATUS_SUCCESS; + } + + if (strcmp ((char *) key, "font-face") == 0) { + if (_csi_unlikely (csi_object_get_type (obj) != + CSI_OBJECT_TYPE_FONT)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + cairo_set_font_face (cr, obj->datum.font_face); + return CSI_STATUS_SUCCESS; + } + + /* return _proxy_set()? */ + return _csi_error (CSI_STATUS_INVALID_SCRIPT); +} + +static csi_status_t +_set (csi_t *ctx) +{ + csi_object_t *key, *value, *dst; + csi_status_t status; + int type; + + check (3); + + value = _csi_peek_ostack (ctx, 0); + key = _csi_peek_ostack (ctx, 1); + dst = _csi_peek_ostack (ctx, 2); + + type = csi_object_get_type (dst); + switch (type) { + case CSI_OBJECT_TYPE_DICTIONARY: + if (_csi_unlikely (csi_object_get_type (key) != + CSI_OBJECT_TYPE_NAME)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + status = csi_dictionary_put (ctx, + dst->datum.dictionary, + key->datum.name, + value); + break; + case CSI_OBJECT_TYPE_ARRAY: + if (_csi_unlikely (csi_object_get_type (key) != + CSI_OBJECT_TYPE_INTEGER)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + status = csi_array_put (ctx, + dst->datum.array, + key->datum.integer, + value); + break; + + case CSI_OBJECT_TYPE_CONTEXT: + if (_csi_unlikely (csi_object_get_type (key) != + CSI_OBJECT_TYPE_NAME)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + status = _context_set (ctx, + dst->datum.cr, + key->datum.name, + value); + break; + + case CSI_OBJECT_TYPE_STRING: +#if 0 + status = csi_string_put (dst, key, value); + break; +#endif + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (2); + return status; +} + +static csi_status_t +_set_antialias (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + long antialias; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &antialias); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_antialias (cr, antialias); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_dash (csi_t *ctx) +{ + csi_array_t *array; + csi_status_t status; + cairo_t *cr; + double offset; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &offset); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_array (ctx, 1, &array); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 2, &cr); + if (_csi_unlikely (status)) + return status; + + if (array->stack.len == 0) { + cairo_set_dash (cr, NULL, 0., 0.); + } else { + double stack_dashes[8]; + double *dashes; + csi_integer_t n; + + if (_csi_likely (array->stack.len < ARRAY_LENGTH (stack_dashes))) { + dashes = stack_dashes; + } else { + if (_csi_unlikely ((unsigned) array->stack.len >= INT_MAX / sizeof (double))) + return _csi_error (CSI_STATUS_NO_MEMORY); + dashes = _csi_alloc (ctx, sizeof (double) * array->stack.len); + if (_csi_unlikely (dashes == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + } + + for (n = 0; n < array->stack.len; n++) { + if (_csi_unlikely (! csi_object_is_number + (&array->stack.objects[n]))) + { + if (dashes != stack_dashes) + _csi_free (ctx, dashes); + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + dashes[n] = csi_number_get_value (&array->stack.objects[n]); + } + + cairo_set_dash (cr, dashes, n, offset); + + if (dashes != stack_dashes) + _csi_free (ctx, dashes); + } + + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_device_offset (csi_t *ctx) +{ + csi_status_t status; + cairo_surface_t *surface; + double x, y; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 2, &surface); + if (_csi_unlikely (status)) + return status; + + cairo_surface_set_device_offset (surface, x, y); + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_device_scale (csi_t *ctx) +{ + csi_status_t status; + cairo_surface_t *surface; + double x, y; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 2, &surface); + if (_csi_unlikely (status)) + return status; + + cairo_surface_set_device_scale (surface, x, y); + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_extend (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *obj; + long extend; + int type; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &extend); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 1); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_pattern_set_extend (cairo_get_source (obj->datum.cr), + extend); + break; + case CSI_OBJECT_TYPE_PATTERN: + cairo_pattern_set_extend (obj->datum.pattern, extend); + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_fallback_resolution (csi_t *ctx) +{ + csi_status_t status; + cairo_surface_t *surface; + double dpi_x, dpi_y; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &dpi_y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &dpi_x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 2, &surface); + if (_csi_unlikely (status)) + return status; + + cairo_surface_set_fallback_resolution (surface, dpi_x, dpi_y); + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_fill_rule (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + long fill_rule; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &fill_rule); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_fill_rule (cr, fill_rule); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_filter (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *obj; + long filter; + int type; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &filter); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 1); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_pattern_set_filter (cairo_get_source (obj->datum.cr), + filter); + break; + case CSI_OBJECT_TYPE_PATTERN: + cairo_pattern_set_filter (obj->datum.pattern, filter); + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_font_face (csi_t *ctx) +{ + cairo_t *cr; + cairo_font_face_t *font = NULL; /* silence the compiler */ + csi_status_t status; + + check (2); + + status = _csi_ostack_get_font_face (ctx, 0, &font); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_font_face (cr, font); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_font_options (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + csi_dictionary_t *dict; + cairo_font_options_t *options; + + check (2); + + status = _csi_ostack_get_dictionary (ctx, 0, &dict); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + options = cairo_font_options_create (); + status = _font_options_load_from_dictionary (ctx, dict, options); + if (_csi_unlikely (status)) + return status; + + cairo_set_font_options (cr, options); + cairo_font_options_destroy (options); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_font_matrix (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + cairo_matrix_t m; + + check (2); + + status = _csi_ostack_get_matrix (ctx, 0, &m); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_font_matrix (cr, &m); + pop(1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_font_size (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + double size; + + check (2); + + status = _csi_ostack_get_number (ctx, 0, &size); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_font_size (cr, size); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_line_cap (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + long line_cap; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &line_cap); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_line_cap (cr, line_cap); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_line_join (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + long line_join; + + status = _csi_ostack_get_integer (ctx, 0, &line_join); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_line_join (cr, line_join); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_line_width (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + double line_width; + + check (2); + + status = _csi_ostack_get_number (ctx, 0, &line_width); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_line_width (cr, line_width); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_matrix (csi_t *ctx) +{ + csi_object_t *obj; + csi_status_t status; + cairo_matrix_t m; + int type; + + check (2); + + status = _csi_ostack_get_matrix (ctx, 0, &m); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 1); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_set_matrix (obj->datum.cr, &m); + break; + case CSI_OBJECT_TYPE_PATTERN: + cairo_pattern_set_matrix (obj->datum.pattern, &m); + break; + case CSI_OBJECT_TYPE_MATRIX: + obj->datum.matrix->matrix = m; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (1); + return CSI_STATUS_SUCCESS; +} + +struct _mime_tag { + csi_t *ctx; + csi_string_t *source; +}; +static void +_mime_tag_destroy (void *closure) +{ + struct _mime_tag *tag = closure; + + if (--tag->source->base.ref) + csi_string_free (tag->ctx, tag->source); + + _csi_slab_free (tag->ctx, tag, sizeof (struct _mime_tag)); +} + +static csi_status_t +_set_mime_data (csi_t *ctx) +{ + csi_status_t status; + csi_object_t *obj; + const char *mime = NULL; /* silence the compiler */ + csi_object_t source; + cairo_surface_t *surface; + struct _mime_tag *tag; + int type; + + check (3); + + obj = _csi_peek_ostack (ctx, 0); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_FILE: + status = _csi_file_as_string (ctx, obj->datum.file, &source); + if (_csi_unlikely (status)) + return status; + + break; + + case CSI_OBJECT_TYPE_STRING: + source = *csi_object_reference (obj); + break; + + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + status = _csi_ostack_get_string_constant (ctx, 1, &mime); + if (_csi_unlikely (status)) + return status; + + status = _csi_ostack_get_surface (ctx, 2, &surface); + if (_csi_unlikely (status)) + return status; + + + /* XXX free source */ + tag = _csi_slab_alloc (ctx, sizeof (struct _mime_tag)); + if (_csi_unlikely (tag == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + tag->ctx = cairo_script_interpreter_reference (ctx); + tag->source = source.datum.string; + tag->source->base.ref++; + + status = cairo_surface_set_mime_data (surface, + mime, + (uint8_t *) + source.datum.string->string, + source.datum.string->len, + _mime_tag_destroy, tag); + if (_csi_unlikely (status)) { + _mime_tag_destroy (tag); + return status; + } + + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_miter_limit (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + double miter_limit; + + check (2); + + status = _csi_ostack_get_number (ctx, 0, &miter_limit); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_miter_limit (cr, miter_limit); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_operator (csi_t *ctx) +{ + cairo_t *cr; + long val; + csi_status_t status; + + check (2); + + status = _csi_ostack_get_integer (ctx, 0, &val); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_operator (cr, val); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_scaled_font (csi_t *ctx) +{ + cairo_t *cr; + cairo_scaled_font_t *font = NULL; /* silence the compiler */ + csi_status_t status; + + check (2); + + status = _csi_ostack_get_scaled_font (ctx, 0, &font); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_scaled_font (cr, font); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_source (csi_t *ctx) +{ + cairo_t *cr; + cairo_pattern_t *pattern = NULL; /* silence the compiler */ + csi_status_t status; + + check (2); + + status = _csi_ostack_get_pattern (ctx, 0, &pattern); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_source (cr, pattern); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_boolean_t +_matching_images (cairo_surface_t *a, cairo_surface_t *b) +{ + cairo_format_t format_a, format_b; + + if (cairo_surface_get_type (a) != CAIRO_SURFACE_TYPE_IMAGE) + return FALSE; + if (cairo_surface_get_type (b) != CAIRO_SURFACE_TYPE_IMAGE) + return FALSE; + + if (cairo_image_surface_get_height (a) != cairo_image_surface_get_height (b)) + return FALSE; + + if (cairo_image_surface_get_width (a) != cairo_image_surface_get_width (b)) + return FALSE; + + format_a = cairo_image_surface_get_format (a); + if (format_a == CAIRO_FORMAT_RGB24) + format_a = CAIRO_FORMAT_ARGB32; + + format_b = cairo_image_surface_get_format (b); + if (format_b == CAIRO_FORMAT_RGB24) + format_b = CAIRO_FORMAT_ARGB32; + + if (format_a != format_b) + return FALSE; + + return TRUE; +} + +static csi_status_t +_set_source_image (csi_t *ctx) +{ + csi_status_t status; + cairo_surface_t *surface; + cairo_surface_t *source; + + check (2); + + status = _csi_ostack_get_surface (ctx, 0, &source); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 1, &surface); + if (_csi_unlikely (status)) + return status; + + /* Catch the most frequent use of simply uploading pixel data, + * principally to remove the pixman ops from the profiles. + */ + if (_csi_likely (_matching_images (surface, source))) { + if (cairo_surface_get_reference_count (surface) == 1 && + cairo_surface_get_reference_count (source) == 1) + { + _csi_peek_ostack (ctx, 0)->datum.surface = surface; + _csi_peek_ostack (ctx, 1)->datum.surface = source; + } + else + { + cairo_surface_flush (surface); + memcpy (cairo_image_surface_get_data (surface), + cairo_image_surface_get_data (source), + cairo_image_surface_get_height (source) * cairo_image_surface_get_stride (source)); + cairo_surface_mark_dirty (surface); + } + } else { + cairo_t *cr; + + cr = cairo_create (surface); + cairo_set_source_surface (cr, source, 0, 0); + cairo_paint (cr); + cairo_destroy (cr); + } + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_source_rgb (csi_t *ctx) +{ + csi_status_t status; + double r,g,b; + cairo_t *cr; + + check (4); + + status = _csi_ostack_get_number (ctx, 0, &b); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &g); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &r); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 3, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_source_rgb (cr, r, g, b); + pop (3); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_source_rgba (csi_t *ctx) +{ + csi_status_t status; + double r,g,b,a; + cairo_t *cr; + + check (5); + + status = _csi_ostack_get_number (ctx, 0, &a); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &b); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &g); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &r); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 4, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_source_rgba (cr, r, g, b, a); + pop (4); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_set_tolerance (csi_t *ctx) +{ + csi_status_t status; + cairo_t *cr; + double tolerance; + + check (2); + + status = _csi_ostack_get_number (ctx, 0, &tolerance); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_set_tolerance (cr, tolerance); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_transform (csi_t *ctx) +{ + csi_object_t *obj; + csi_status_t status; + cairo_matrix_t m; + int type; + + check (2); + + status = _csi_ostack_get_matrix (ctx, 0, &m); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 1); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_transform (obj->datum.cr, &m); + break; + case CSI_OBJECT_TYPE_PATTERN: + { + cairo_matrix_t ctm; + cairo_pattern_get_matrix (obj->datum.pattern, &ctm); + cairo_matrix_multiply (&ctm, &m, &ctm); + cairo_pattern_set_matrix (obj->datum.pattern, &ctm); + } + break; + case CSI_OBJECT_TYPE_MATRIX: + cairo_matrix_multiply (&obj->datum.matrix->matrix, + &m, + &obj->datum.matrix->matrix); + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_translate (csi_t *ctx) +{ + csi_object_t *obj; + csi_status_t status; + double x, y; + int type; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 2); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_translate (obj->datum.cr, x, y); + break; + + case CSI_OBJECT_TYPE_PATTERN: + { + cairo_matrix_t ctm; + cairo_pattern_get_matrix (obj->datum.pattern, &ctm); + cairo_matrix_translate (&ctm, x, y); + cairo_pattern_set_matrix (obj->datum.pattern, &ctm); + } + break; + + + case CSI_OBJECT_TYPE_MATRIX: + cairo_matrix_translate (&obj->datum.matrix->matrix, x, y); + break; + + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_true (csi_t *ctx) +{ + return _csi_push_ostack_boolean (ctx, TRUE); +} + +static csi_status_t +_show_page (csi_t *ctx) +{ + csi_object_t *obj; + int type; + + check (1); + + obj = _csi_peek_ostack (ctx, 0); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_CONTEXT: + cairo_show_page (obj->datum.cr); + if (ctx->hooks.copy_page != NULL) + ctx->hooks.copy_page (ctx->hooks.closure, obj->datum.cr); + break; + case CSI_OBJECT_TYPE_SURFACE: + cairo_surface_show_page (obj->datum.surface); + /* XXX hook? */ + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_similar (csi_t *ctx) +{ + csi_object_t obj; + long content; + double width, height; + cairo_surface_t *other; + csi_status_t status; + + check (4); + + status = _csi_ostack_get_integer (ctx, 0, &content); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &height); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &width); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 3, &other); + if (_csi_unlikely (status)) + return status; + + /* silently fix-up a common bug when writing CS */ + if ((content & CAIRO_CONTENT_COLOR_ALPHA) == 0) { + if (_csi_unlikely (content & ~CAIRO_CONTENT_COLOR_ALPHA)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + switch ((int) content) { + default: + case CAIRO_FORMAT_ARGB32: + content = CAIRO_CONTENT_COLOR_ALPHA; + break; + case CAIRO_FORMAT_RGB16_565: + case CAIRO_FORMAT_RGB24: + content = CAIRO_CONTENT_COLOR; + break; + case CAIRO_FORMAT_A8: + case CAIRO_FORMAT_A1: + content = CAIRO_CONTENT_ALPHA; + break; + } + } + + obj.type = CSI_OBJECT_TYPE_SURFACE; + obj.datum.surface = cairo_surface_create_similar (other, + content, width, height); + pop (4); + return push (&obj); +} + +static csi_status_t +_similar_image (csi_t *ctx) +{ + csi_object_t obj; + long format; + double width, height; + cairo_surface_t *other; + csi_status_t status; + + check (4); + + status = _csi_ostack_get_number (ctx, 0, &height); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &width); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_integer (ctx, 2, &format); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 3, &other); + if (_csi_unlikely (status)) + return status; + + obj.type = CSI_OBJECT_TYPE_SURFACE; + obj.datum.surface = cairo_surface_create_similar_image (other, + format, + width, height); + pop (4); + return push (&obj); +} + +static csi_status_t +_subsurface (csi_t *ctx) +{ + csi_object_t obj; + double x, y, width, height; + cairo_surface_t *target; + csi_status_t status; + + check (5); + + status = _csi_ostack_get_number (ctx, 0, &height); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &width); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 2, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 3, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 4, &target); + if (_csi_unlikely (status)) + return status; + + obj.type = CSI_OBJECT_TYPE_SURFACE; + obj.datum.surface = cairo_surface_create_for_rectangle (target, x, y, width, height); + pop (5); + return push (&obj); +} + +static csi_status_t +_show_text (csi_t *ctx) +{ + csi_status_t status; + csi_string_t *text; + cairo_t *cr; + + check (2); + + status = _csi_ostack_get_string (ctx, 0, &text); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_show_text (cr, text->string); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_show_glyphs (csi_t *ctx) +{ + csi_array_t *array; + csi_status_t status; + cairo_t *cr; + cairo_glyph_t stack_glyphs[256], *glyphs; + csi_integer_t nglyphs, i; + + check (2); + + status = _csi_ostack_get_array (ctx, 0, &array); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + /* count glyphs */ + nglyphs = 0; + for (i = 0; i < array->stack.len; i++) { + csi_object_t *obj = &array->stack.objects[i]; + int type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_ARRAY: + nglyphs += obj->datum.array->stack.len; + break; + case CSI_OBJECT_TYPE_STRING: + nglyphs += obj->datum.string->len; + break; + } + } + if (nglyphs == 0) { + pop (1); + return CSI_STATUS_SUCCESS; + } + + if (nglyphs > ARRAY_LENGTH (stack_glyphs)) { + if (_csi_unlikely ((unsigned) nglyphs >= INT_MAX / sizeof (cairo_glyph_t))) + return _csi_error (CSI_STATUS_NO_MEMORY); + + glyphs = _csi_alloc (ctx, sizeof (cairo_glyph_t) * nglyphs); + if (_csi_unlikely (glyphs == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + } else + glyphs = stack_glyphs; + + nglyphs = _glyph_string (ctx, array, cairo_get_scaled_font (cr), glyphs); + cairo_show_glyphs (cr, glyphs, nglyphs); + + if (glyphs != stack_glyphs) + _csi_free (ctx, glyphs); + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_show_text_glyphs (csi_t *ctx) +{ + csi_object_t *obj; + csi_array_t *array; + csi_string_t *string; + csi_string_t *utf8_string; + csi_status_t status; + cairo_t *cr; + cairo_text_cluster_t stack_clusters[256], *clusters; + cairo_glyph_t stack_glyphs[256], *glyphs; + csi_integer_t nglyphs, nclusters, i; + long direction; + int type; + + check (5); + + status = _csi_ostack_get_integer (ctx, 0, &direction); + if (_csi_unlikely (status)) + return status; + + obj = _csi_peek_ostack (ctx, 1); + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_ARRAY: + array = obj->datum.array; + nclusters = array->stack.len / 2; + if (nclusters > ARRAY_LENGTH (stack_clusters)) { + if (_csi_unlikely ((unsigned) nclusters >= INT_MAX / sizeof (cairo_text_cluster_t))) + return _csi_error (CSI_STATUS_NO_MEMORY); + clusters = _csi_alloc (ctx, sizeof (cairo_text_cluster_t) * nclusters); + if (_csi_unlikely (clusters == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + } else + clusters = stack_clusters; + + for (i = 0; i < nclusters; i++) { + clusters[i].num_bytes = csi_number_get_value (&array->stack.objects[2*i+0]); + clusters[i].num_glyphs = csi_number_get_value (&array->stack.objects[2*i+1]); + } + break; + + case CSI_OBJECT_TYPE_STRING: + string = obj->datum.string; + nclusters = string->len / 2; + if (nclusters > ARRAY_LENGTH (stack_clusters)) { + if (_csi_unlikely ((unsigned) nclusters >= INT_MAX / sizeof (cairo_text_cluster_t))) + return _csi_error (CSI_STATUS_NO_MEMORY); + clusters = _csi_alloc (ctx, sizeof (cairo_text_cluster_t) * nclusters); + if (_csi_unlikely (clusters == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + } else + clusters = stack_clusters; + + for (i = 0; i < nclusters; i++) { + clusters[i].num_bytes = string->string[2*i+0]; + clusters[i].num_glyphs = string->string[2*i+1]; + } + break; + + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + status = _csi_ostack_get_array (ctx, 2, &array); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_string (ctx, 3, &utf8_string); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 4, &cr); + if (_csi_unlikely (status)) + return status; + + /* count glyphs */ + nglyphs = 0; + for (i = 0; i < array->stack.len; i++) { + obj = &array->stack.objects[i]; + type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_ARRAY: + nglyphs += obj->datum.array->stack.len; + break; + case CSI_OBJECT_TYPE_STRING: + nglyphs += obj->datum.string->len; + break; + } + } + if (nglyphs == 0) { + pop (4); + return CSI_STATUS_SUCCESS; + } + + if (nglyphs > ARRAY_LENGTH (stack_glyphs)) { + if (_csi_unlikely ((unsigned) nglyphs >= INT_MAX / sizeof (cairo_glyph_t))) + return _csi_error (CSI_STATUS_NO_MEMORY); + + glyphs = _csi_alloc (ctx, sizeof (cairo_glyph_t) * nglyphs); + if (_csi_unlikely (glyphs == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + } else + glyphs = stack_glyphs; + + nglyphs = _glyph_string (ctx, array, cairo_get_scaled_font (cr), glyphs); + cairo_show_text_glyphs (cr, + utf8_string->string, utf8_string->len, + glyphs, nglyphs, + clusters, nclusters, + direction); + + if (clusters != stack_clusters) + _csi_free (ctx, clusters); + if (glyphs != stack_glyphs) + _csi_free (ctx, glyphs); + + pop (4); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_stroke (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_stroke); +} + +static csi_status_t +_stroke_preserve (csi_t *ctx) +{ + return _do_cairo_op (ctx, cairo_stroke_preserve); +} + +static csi_status_t +_sub (csi_t *ctx) +{ + csi_object_t *A; + csi_object_t *B; + csi_object_type_t type_a, type_b; + + check (2); + + B = _csi_peek_ostack (ctx, 0); + A = _csi_peek_ostack (ctx, 1); + + type_a = csi_object_get_type (A); + if (_csi_unlikely (! (type_a == CSI_OBJECT_TYPE_INTEGER || + type_a == CSI_OBJECT_TYPE_REAL))) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + type_b = csi_object_get_type (B); + if (_csi_unlikely (! (type_b == CSI_OBJECT_TYPE_INTEGER || + type_b == CSI_OBJECT_TYPE_REAL))) + { + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (2); + + if (type_a == CSI_OBJECT_TYPE_REAL && + type_b == CSI_OBJECT_TYPE_REAL) + { + return _csi_push_ostack_real (ctx, A->datum.real - B->datum.real); + + } + else if (type_a == CSI_OBJECT_TYPE_INTEGER && + type_b == CSI_OBJECT_TYPE_INTEGER) + { + return _csi_push_ostack_integer (ctx, + A->datum.integer - B->datum.integer); + } + else + { + double v; + + if (type_a == CSI_OBJECT_TYPE_REAL) + v = A->datum.real; + else + v = A->datum.integer; + + if (type_b == CSI_OBJECT_TYPE_REAL) + v -= B->datum.real; + else + v -= B->datum.integer; + + return _csi_push_ostack_real (ctx, v); + } +} + +static csi_status_t +_surface (csi_t *ctx) +{ + csi_object_t obj; + csi_dictionary_t *dict; + csi_proxy_t *proxy; + csi_object_t key; + double width, height; + csi_surface_create_func_t hook; + long content; + cairo_surface_t *surface; + long uid; + csi_status_t status; + + check (1); + + status = _csi_ostack_get_dictionary (ctx, 0, &dict); + if (_csi_unlikely (status)) + return status; + + status = _csi_dictionary_get_number (ctx, dict, "width", FALSE, &width); + if (_csi_unlikely (status)) + return status; + status = _csi_dictionary_get_number (ctx, dict, "height", FALSE, &height); + if (_csi_unlikely (status)) + return status; + + content = CAIRO_CONTENT_COLOR_ALPHA; + status = _csi_dictionary_get_integer (ctx, dict, "content", TRUE, &content); + if (_csi_unlikely (status)) + return status; + + uid = 0; + status = _csi_dictionary_get_integer (ctx, dict, "uid", TRUE, &uid); + if (_csi_unlikely (status)) + return status; + if (uid == 0) { + status = _csi_dictionary_get_integer (ctx, dict, "drawable", TRUE, &uid); + if (_csi_unlikely (status)) + return status; + } + + hook = ctx->hooks.surface_create; + assert (hook != NULL); + + surface = hook (ctx->hooks.closure, content, width, height, uid); + if (_csi_unlikely (surface == NULL)) { + return _csi_error (CSI_STATUS_NULL_POINTER); + } + + proxy = _csi_proxy_create (ctx, surface, dict, + ctx->hooks.surface_destroy, + ctx->hooks.closure); + if (_csi_unlikely (proxy == NULL)) { + cairo_surface_destroy (surface); + return _csi_error (CSI_STATUS_NO_MEMORY); + } + + status = cairo_surface_set_user_data (surface, + &_csi_proxy_key, + proxy, _csi_proxy_destroy); + if (_csi_unlikely (status)) { + _csi_proxy_destroy (proxy); + cairo_surface_destroy (surface); + return status; + } + + status = csi_name_new_static (ctx, &key, "fallback-resolution"); + if (_csi_unlikely (status)) { + cairo_surface_destroy (surface); + return status; + } + if (csi_dictionary_has (dict, key.datum.name)) { + status = csi_dictionary_get (ctx, dict, key.datum.name, &obj); + if (_csi_unlikely (status)) { + cairo_surface_destroy (surface); + return status; + } + if (csi_object_get_type (&obj) == CSI_OBJECT_TYPE_ARRAY) { + csi_array_t *array = obj.datum.array; + if (array->stack.len == 2) { + cairo_surface_set_fallback_resolution (surface, + csi_number_get_value + (&array->stack.objects[0]), + csi_number_get_value + (&array->stack.objects[1])); + } + } + } + /* initialise surface to source */ + status = csi_name_new_static (ctx, &key, "source"); + if (_csi_unlikely (status)) { + cairo_surface_destroy (surface); + return status; + } + if (csi_dictionary_has (dict, key.datum.name)) { + cairo_surface_t *image; + cairo_t *cr; + + status = _image_load_from_dictionary (ctx, dict, &image); + if (_csi_unlikely (status)) { + cairo_surface_destroy (surface); + return status; + } + + cr = cairo_create (surface); + cairo_set_source_surface (cr, image, 0, 0); + cairo_surface_destroy (image); + cairo_paint (cr); + status = cairo_status (cr); + cairo_destroy (cr); + + if (_csi_unlikely (status)) + return status; + } + + status = csi_name_new_static (ctx, &key, "device-offset"); + if (_csi_unlikely (status)) { + cairo_surface_destroy (surface); + return status; + } + if (csi_dictionary_has (dict, key.datum.name)) { + status = csi_dictionary_get (ctx, dict, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + + if (csi_object_get_type (&obj) == CSI_OBJECT_TYPE_ARRAY) { + csi_array_t *array = obj.datum.array; + + if (array->stack.len == 2) { + cairo_surface_set_device_offset (surface, + csi_number_get_value + (&array->stack.objects[0]), + csi_number_get_value + (&array->stack.objects[1])); + } + } + } + + status = csi_name_new_static (ctx, &key, "device-scale"); + if (_csi_unlikely (status)) { + cairo_surface_destroy (surface); + return status; + } + if (csi_dictionary_has (dict, key.datum.name)) { + status = csi_dictionary_get (ctx, dict, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + + if (csi_object_get_type (&obj) == CSI_OBJECT_TYPE_ARRAY) { + csi_array_t *array = obj.datum.array; + + if (array->stack.len == 2) { + cairo_surface_set_device_scale (surface, + csi_number_get_value + (&array->stack.objects[0]), + csi_number_get_value + (&array->stack.objects[1])); + } + } + } + + obj.type = CSI_OBJECT_TYPE_SURFACE; + obj.datum.surface = surface; + pop (1); + return push (&obj); +} + +static csi_status_t +_record (csi_t *ctx) +{ + csi_object_t obj; + long content; + csi_array_t *array; + csi_status_t status; + cairo_rectangle_t extents; + cairo_rectangle_t *r; + + check (2); + + status = _csi_ostack_get_array (ctx, 0, &array); + if (_csi_unlikely (status)) + return status; + + status = _csi_ostack_get_integer (ctx, 1, &content); + if (_csi_unlikely (status)) + return status; + + switch (array->stack.len) { + case 0: + r = NULL; + break; + case 2: + extents.x = extents.y = 0; + extents.width = _csi_object_as_real (&array->stack.objects[0]); + extents.height = _csi_object_as_real (&array->stack.objects[1]); + r = &extents; + break; + case 4: + extents.x = _csi_object_as_real (&array->stack.objects[0]); + extents.y = _csi_object_as_real (&array->stack.objects[1]); + extents.width = _csi_object_as_real (&array->stack.objects[2]); + extents.height = _csi_object_as_real (&array->stack.objects[3]); + r = &extents; + break; + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + obj.type = CSI_OBJECT_TYPE_SURFACE; + obj.datum.surface = cairo_recording_surface_create (content, r); + pop (2); + return push (&obj); +} + +static csi_status_t +_text_path (csi_t *ctx) +{ + csi_status_t status; + csi_string_t *text; + cairo_t *cr; + + check (2); + + status = _csi_ostack_get_string (ctx, 0, &text); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_context (ctx, 1, &cr); + if (_csi_unlikely (status)) + return status; + + cairo_text_path (cr, text->string); + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_undef (csi_t *ctx) +{ + csi_name_t name = 0; /* silence the compiler */ + csi_status_t status; + + check (1); + + status = _csi_ostack_get_name (ctx, 0, &name); + if (_csi_unlikely (status)) + return status; + + status = _csi_name_undefine (ctx, name); + if (_csi_unlikely (status)) + return status; + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_unset (csi_t *ctx) +{ + csi_object_t *dst; + csi_name_t name = 0; /* silence the compiler */ + csi_status_t status; + int type; + + check (2); + + status = _csi_ostack_get_name (ctx, 0, &name); + if (_csi_unlikely (status)) + return status; + + dst = _csi_peek_ostack (ctx, 1); + type = csi_object_get_type (dst); + switch (type) { + case CSI_OBJECT_TYPE_DICTIONARY: + csi_dictionary_remove (ctx, dst->datum.dictionary, name); + break; + case CSI_OBJECT_TYPE_STRING: + case CSI_OBJECT_TYPE_ARRAY: + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_write_to_png (csi_t *ctx) +{ + csi_status_t status; + csi_string_t *filename; + cairo_surface_t *surface; + + check (2); + + status = _csi_ostack_get_string (ctx, 0, &filename); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 1, &surface); + if (_csi_unlikely (status)) + return status; + +#if CAIRO_HAS_PNG_FUNCTIONS + status = cairo_surface_write_to_png (surface, filename->string); + if (_csi_unlikely (status)) + return status; +#else + return CAIRO_STATUS_WRITE_ERROR; +#endif + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_write_to_script (csi_t *ctx) +{ + csi_status_t status; + csi_string_t *filename; + cairo_surface_t *record; + + check (2); + + status = _csi_ostack_get_string (ctx, 0, &filename); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 1, &record); + if (_csi_unlikely (status)) + return status; + + if (cairo_surface_get_type (record) != CAIRO_SURFACE_TYPE_RECORDING) + return CAIRO_STATUS_SURFACE_TYPE_MISMATCH; + +#if CAIRO_HAS_SCRIPT_SURFACE + { + cairo_device_t *script; + + script = cairo_script_create (filename->string); + status = cairo_script_from_recording_surface (script, record); + cairo_device_destroy (script); + if (_csi_unlikely (status)) + return status; + } +#else + return CAIRO_STATUS_WRITE_ERROR; +#endif + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_xor (csi_t *ctx) +{ + csi_object_t *a, *b; + int type; + + check (2); + + a = _csi_peek_ostack (ctx, 0); + b = _csi_peek_ostack (ctx, 1); + if (_csi_unlikely (csi_object_get_type (a) != csi_object_get_type (b))) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + pop (2); + type = csi_object_get_type (a); + switch (type) { + case CSI_OBJECT_TYPE_INTEGER: + return _csi_push_ostack_integer (ctx, + a->datum.integer ^ b->datum.integer); + case CSI_OBJECT_TYPE_BOOLEAN: + return _csi_push_ostack_boolean (ctx, + a->datum.boolean ^ b->datum.boolean); + default: + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + } +} + +static csi_status_t +_debug_print (csi_t *ctx) +{ + csi_object_t *obj; + + check (1); + obj = _csi_peek_ostack (ctx, 0); + switch (csi_object_get_type (obj)) { + case CSI_OBJECT_TYPE_NULL: + fprintf (stderr, "NULL\n"); + break; + + /* atomics */ + case CSI_OBJECT_TYPE_BOOLEAN: + fprintf (stderr, "boolean: %s\n", + obj->datum.boolean ? "true" : "false"); + break; + case CSI_OBJECT_TYPE_INTEGER: + fprintf (stderr, "integer: %ld\n", obj->datum.integer); + break; + case CSI_OBJECT_TYPE_MARK: + fprintf (stderr, "mark\n"); + break; + case CSI_OBJECT_TYPE_NAME: + fprintf (stderr, "name: %s\n", (char *) obj->datum.name); + break; + case CSI_OBJECT_TYPE_OPERATOR: + fprintf (stderr, "operator: %p\n", obj->datum.ptr); + break; + case CSI_OBJECT_TYPE_REAL: + fprintf (stderr, "real: %g\n", obj->datum.real); + break; + + /* compound */ + case CSI_OBJECT_TYPE_ARRAY: + fprintf (stderr, "array\n"); + break; + case CSI_OBJECT_TYPE_DICTIONARY: + fprintf (stderr, "dictionary\n"); + break; + case CSI_OBJECT_TYPE_FILE: + fprintf (stderr, "file\n"); + break; + case CSI_OBJECT_TYPE_MATRIX: + fprintf (stderr, "matrix: [%g %g %g %g %g %g]\n", + obj->datum.matrix->matrix.xx, + obj->datum.matrix->matrix.yx, + obj->datum.matrix->matrix.xy, + obj->datum.matrix->matrix.yy, + obj->datum.matrix->matrix.x0, + obj->datum.matrix->matrix.y0); + break; + case CSI_OBJECT_TYPE_STRING: + fprintf (stderr, "string: %s\n", obj->datum.string->string); + break; + + /* cairo */ + case CSI_OBJECT_TYPE_CONTEXT: + fprintf (stderr, "context\n"); + break; + case CSI_OBJECT_TYPE_FONT: + fprintf (stderr, "font\n"); + break; + case CSI_OBJECT_TYPE_PATTERN: + fprintf (stderr, "pattern\n"); + break; + case CSI_OBJECT_TYPE_SCALED_FONT: + fprintf (stderr, "scaled-font\n"); + break; + case CSI_OBJECT_TYPE_SURFACE: + fprintf (stderr, "surface\n"); + break; + } + pop (1); + return CSI_STATUS_SUCCESS; +} + +static const csi_operator_def_t +_defs[] = { + { "<<", _mark }, + { ">>", end_dict_construction }, + { "[", _mark }, + { "]", end_array_construction }, + { "a", _alpha }, + { "abs", NULL }, + { "add", _add }, + { "add-color-stop", _add_color_stop }, + { "and", _and }, + { "arc", _arc }, + { "arc-negative", _arc_negative }, + { "arc-", _arc_negative }, + { "arc-to", NULL }, + { "array", _array }, + { "astore", NULL }, + { "atan", NULL }, + { "bind", _bind }, + { "bitshift", _bitshift }, + { "c", _curve_to }, + { "C", _rel_curve_to }, + { "ceiling", NULL }, + { "clear", NULL }, + { "clear-to-mark", NULL }, + { "clip", _clip }, + { "clip-extents", NULL }, + { "clip-preserve", _clip_preserve }, + { "clip+", _clip_preserve }, + { "close-path", _close_path }, + { "context", _context }, + { "copy", _copy }, + { "copy-page", _copy_page }, + { "cos", NULL }, + { "count", NULL }, + { "count-to-mark", NULL }, + { "curve-to", _curve_to }, + { "cvi", _cvi }, + { "cvr", _cvr }, + { "def", _def }, + { "device-to-user", NULL }, + { "device-to-user-distance", NULL }, + { "dict", _dict }, + { "div", _div }, + { "dup", _duplicate }, + { "eq", _eq }, + { "exch", _exch }, + { "exec", NULL }, + { "exp", NULL }, + { "false", _false }, + { "fill", _fill }, + { "fill-extents", NULL }, + { "fill-preserve", _fill_preserve }, + { "fill+", _fill_preserve }, + { "filter", _filter }, + { "floor", NULL }, + { "font", _font }, + { "for", _for }, + { "forall", NULL }, + { "g", _gray }, + { "ge", _ge }, + { "get", _get }, + { "glyph-path", _glyph_path }, + { "gt", _gt }, + { "h", _close_path }, + { "identity", _identity }, + { "if", _if }, + { "ifelse", _ifelse }, + { "image", _image }, + { "index", _index }, + { "integer", _integer }, + { "invert", _invert }, + { "in-stroke", NULL }, + { "in-fill", NULL }, + { "known", NULL }, + { "l", _line_to }, + { "L", _rel_line_to }, + { "languagelevel", NULL }, + { "le", _le }, + { "length", NULL }, + { "linear", _linear }, + { "line-to", _line_to }, + { "ln", NULL }, + { "load", NULL }, + { "log", NULL }, + { "loop", NULL }, + { "lt", _lt }, + { "m", _move_to }, + { "M", _rel_move_to }, + { "map-to-image", _map_to_image }, + { "mark", _mark }, + { "mask", _mask }, + { "matrix", _matrix }, + + { "mesh", _mesh }, + { "begin-patch", _mesh_begin_patch }, + { "end-patch", _mesh_end_patch }, + { "set-control-point", _mesh_set_control_point }, + { "set-corner-color", _mesh_set_corner_color }, + + { "mod", _mod }, + { "move-to", _move_to }, + { "mul", _mul }, + { "multiply", NULL }, + { "n", _new_path }, + { "N", _new_sub_path }, + { "ne", _ne }, + { "neg", _neg }, + { "new-path", _new_path }, + { "new-sub-path", _new_sub_path }, + { "not", _not }, + { "null", _null }, + { "or", _or }, + { "paint", _paint }, + { "paint-with-alpha", _paint_with_alpha }, + { "pattern", _pattern }, + { "pop", _pop }, + { "pop-group", _pop_group }, + { "push-group", _push_group }, + { "radial", _radial }, + { "rand", NULL }, + { "record", _record }, + { "rectangle", _rectangle }, + { "repeat", _repeat }, + { "restore", _restore }, + { "rel-curve-to", _rel_curve_to }, + { "rel-line-to", _rel_line_to }, + { "rel-move-to", _rel_move_to }, + { "reset-clip", _reset_clip }, + { "rgb", _rgb }, + { "rgba", _rgba }, + { "roll", _roll }, + { "rotate", _rotate }, + { "round", NULL }, + { "run", NULL }, + { "save", _save }, + { "scale", _scale }, + { "scaled-font", _scaled_font }, + { "select-font-face", _select_font_face }, + { "set", _set }, + { "set-antialias", _set_antialias }, + { "set-dash", _set_dash }, + { "set-device-offset", _set_device_offset }, + { "set-device-scale", _set_device_scale }, + { "set-extend", _set_extend }, + { "set-fallback-resolution", _set_fallback_resolution }, + { "set-fill-rule", _set_fill_rule }, + { "set-filter", _set_filter }, + { "set-font-face", _set_font_face }, + { "set-font-options", _set_font_options }, + { "set-font-matrix", _set_font_matrix }, + { "set-font-size", _set_font_size }, + { "set-line-cap", _set_line_cap }, + { "set-line-join", _set_line_join }, + { "set-line-width", _set_line_width }, + { "set-matrix", _set_matrix }, + { "set-miter-limit", _set_miter_limit }, + { "set-mime-data", _set_mime_data }, + { "set-operator", _set_operator }, + { "set-scaled-font", _set_scaled_font }, + { "set-source", _set_source }, + { "set-source-image", _set_source_image }, + { "set-source-rgb", _set_source_rgb }, + { "set-source-rgba", _set_source_rgba }, + { "set-tolerance", _set_tolerance }, + { "show-glyphs", _show_glyphs }, + { "show-text", _show_text }, + { "show-text-glyphs", _show_text_glyphs }, + { "show-page", _show_page }, + { "similar", _similar }, + { "similar-image", _similar_image }, + { "sin", NULL }, + { "sqrt", NULL }, + { "sub", _sub }, + { "subsurface", _subsurface }, + { "surface", _surface }, + { "string", NULL }, + { "stroke", _stroke }, + { "stroke-extents", NULL }, + { "stroke-preserve", _stroke_preserve }, + { "stroke+", _stroke_preserve }, + { "text-path", _text_path }, + { "transform", _transform }, + { "transform-distance", NULL }, + { "transform-point", NULL }, + { "translate", _translate }, + { "true", _true }, + { "type", NULL }, + { "undef", _undef }, + { "unmap-image", _unmap_image }, + { "unset", _unset }, + { "user-to-device", NULL }, + { "user-to-device-distance", NULL }, + { "where", NULL }, + { "write-to-png", _write_to_png }, + { "write-to-script", _write_to_script }, + { "xor", _xor }, + + { "=", _debug_print }, + + { NULL, NULL }, +}; + +const csi_operator_def_t * +_csi_operators (void) +{ + return _defs; +} + +static const csi_integer_constant_def_t +_integer_constants[] = { + { "CLEAR", CAIRO_OPERATOR_CLEAR }, + { "SOURCE", CAIRO_OPERATOR_SOURCE }, + { "OVER", CAIRO_OPERATOR_OVER }, + { "IN", CAIRO_OPERATOR_IN }, + { "OUT", CAIRO_OPERATOR_OUT }, + { "ATOP", CAIRO_OPERATOR_ATOP }, + { "DEST", CAIRO_OPERATOR_DEST }, + { "DEST_OVER", CAIRO_OPERATOR_DEST_OVER }, + { "DEST_IN", CAIRO_OPERATOR_DEST_IN }, + { "DEST_OUT", CAIRO_OPERATOR_DEST_OUT }, + { "DEST_ATOP", CAIRO_OPERATOR_DEST_ATOP }, + { "XOR", CAIRO_OPERATOR_XOR }, + { "ADD", CAIRO_OPERATOR_ADD }, + { "SATURATE", CAIRO_OPERATOR_SATURATE }, + { "MULTIPLY", CAIRO_OPERATOR_MULTIPLY }, + { "SCREEN", CAIRO_OPERATOR_SCREEN }, + { "OVERLAY", CAIRO_OPERATOR_OVERLAY }, + { "DARKEN", CAIRO_OPERATOR_DARKEN }, + { "LIGHTEN", CAIRO_OPERATOR_LIGHTEN }, + { "DODGE", CAIRO_OPERATOR_COLOR_DODGE }, + { "BURN", CAIRO_OPERATOR_COLOR_BURN }, + { "HARD_LIGHT", CAIRO_OPERATOR_HARD_LIGHT }, + { "SOFT_LIGHT", CAIRO_OPERATOR_SOFT_LIGHT }, + { "DIFFERENCE", CAIRO_OPERATOR_DIFFERENCE }, + { "EXCLUSION", CAIRO_OPERATOR_EXCLUSION }, + { "HSL_HUE", CAIRO_OPERATOR_HSL_HUE }, + { "HSL_SATURATION", CAIRO_OPERATOR_HSL_SATURATION }, + { "HSL_COLOR", CAIRO_OPERATOR_HSL_COLOR }, + { "HSL_LUMINOSITY", CAIRO_OPERATOR_HSL_LUMINOSITY }, + + { "WINDING", CAIRO_FILL_RULE_WINDING }, + { "EVEN_ODD", CAIRO_FILL_RULE_EVEN_ODD }, + + { "ANTIALIAS_DEFAULT", CAIRO_ANTIALIAS_DEFAULT }, + { "ANTIALIAS_NONE", CAIRO_ANTIALIAS_NONE }, + { "ANTIALIAS_GRAY", CAIRO_ANTIALIAS_GRAY }, + { "ANTIALIAS_SUBPIXEL", CAIRO_ANTIALIAS_SUBPIXEL }, + { "ANTIALIAS_FAST", CAIRO_ANTIALIAS_FAST }, + { "ANTIALIAS_GOOD", CAIRO_ANTIALIAS_GOOD }, + { "ANTIALIAS_BEST", CAIRO_ANTIALIAS_BEST }, + + { "LINE_CAP_BUTT", CAIRO_LINE_CAP_BUTT }, + { "LINE_CAP_ROUND", CAIRO_LINE_CAP_ROUND }, + { "LINE_CAP_SQUARE", CAIRO_LINE_CAP_SQUARE }, + + { "LINE_JOIN_MITER", CAIRO_LINE_JOIN_MITER }, + { "LINE_JOIN_ROUND", CAIRO_LINE_JOIN_ROUND }, + { "LINE_JOIN_BEVEL", CAIRO_LINE_JOIN_BEVEL }, + + { "EXTEND_NONE", CAIRO_EXTEND_NONE }, + { "EXTEND_REPEAT", CAIRO_EXTEND_REPEAT }, + { "EXTEND_REFLECT", CAIRO_EXTEND_REFLECT }, + { "EXTEND_PAD", CAIRO_EXTEND_PAD }, + + { "FILTER_FAST", CAIRO_FILTER_FAST }, + { "FILTER_GOOD", CAIRO_FILTER_GOOD }, + { "FILTER_BEST", CAIRO_FILTER_BEST }, + { "FILTER_BILINEAR", CAIRO_FILTER_BILINEAR }, + { "FILTER_NEAREST", CAIRO_FILTER_NEAREST }, + { "FILTER_GAUSSIAN", CAIRO_FILTER_GAUSSIAN }, + + { "SLANT_NORMAL", CAIRO_FONT_SLANT_NORMAL }, + { "SLANT_ITALIC", CAIRO_FONT_SLANT_ITALIC }, + { "SLANT_OBLIQUE", CAIRO_FONT_SLANT_OBLIQUE }, + + { "WEIGHT_NORMAL", CAIRO_FONT_WEIGHT_NORMAL }, + { "WEIGHT_BOLD", CAIRO_FONT_WEIGHT_BOLD }, + + { "SUBPIXEL_ORDER_DEFAULT", CAIRO_SUBPIXEL_ORDER_DEFAULT }, + { "SUBPIXEL_ORDER_RGB", CAIRO_SUBPIXEL_ORDER_RGB }, + { "SUBPIXEL_ORDER_BGR", CAIRO_SUBPIXEL_ORDER_BGR }, + { "SUBPIXEL_ORDER_VRGB", CAIRO_SUBPIXEL_ORDER_VRGB }, + { "SUBPIXEL_ORDER_VBGR", CAIRO_SUBPIXEL_ORDER_VBGR }, + + { "HINT_STYLE_DEFAULT", CAIRO_HINT_STYLE_DEFAULT }, + { "HINT_STYLE_NONE", CAIRO_HINT_STYLE_NONE }, + { "HINT_STYLE_SLIGHT", CAIRO_HINT_STYLE_SLIGHT }, + { "HINT_STYLE_MEDIUM", CAIRO_HINT_STYLE_MEDIUM }, + { "HINT_STYLE_FULL", CAIRO_HINT_STYLE_FULL }, + + { "HINT_METRICS_DEFAULT", CAIRO_HINT_METRICS_DEFAULT }, + { "HINT_METRICS_OFF", CAIRO_HINT_METRICS_OFF }, + { "HINT_METRICS_ON", CAIRO_HINT_METRICS_ON }, + + { "FORWARD", 0 }, + { "BACKWARD", 1 }, + + { "COLOR", CAIRO_CONTENT_COLOR }, + { "ALPHA", CAIRO_CONTENT_ALPHA }, + { "COLOR_ALPHA", CAIRO_CONTENT_COLOR_ALPHA }, + + { "A1", CAIRO_FORMAT_A1 }, + { "A8", CAIRO_FORMAT_A8 }, + { "RGB16_565", CAIRO_FORMAT_RGB16_565 }, + { "RGB24", CAIRO_FORMAT_RGB24 }, + { "ARGB32", CAIRO_FORMAT_ARGB32 }, + { "INVALID", CAIRO_FORMAT_INVALID }, + + { NULL, 0 } +}; + + +const csi_integer_constant_def_t * +_csi_integer_constants (void) +{ + return _integer_constants; +} + +static const csi_real_constant_def_t +_real_constants[] = { + { "math.pi", M_PI }, + { "math.2pi", 2 * M_PI }, + { "math.sqrt2", M_SQRT2 }, + { "math.ln2", M_LN2 }, + + { NULL, 0 } +}; + +const csi_real_constant_def_t * +_csi_real_constants (void) +{ + return _real_constants; +} diff --git a/libs/cairo-1.16.0/util/cairo-script/cairo-script-private.h b/libs/cairo-1.16.0/util/cairo-script/cairo-script-private.h new file mode 100644 index 0000000..ac633c9 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/cairo-script-private.h @@ -0,0 +1,997 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#ifndef CAIRO_SCRIPT_PRIVATE_H +#define CAIRO_SCRIPT_PRIVATE_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "cairo-script-interpreter.h" + +#include <setjmp.h> + +#ifdef _MSC_VER +#undef inline +#define inline __inline +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE (!FALSE) +#endif + +#ifndef NULL +#define NULL (void *) 0 +#endif + +#if HAVE_STDINT_H +# include <stdint.h> +#elif HAVE_INTTYPES_H +# include <inttypes.h> +#elif HAVE_SYS_INT_TYPES_H +# include <sys/int_types.h> +#elif defined(_MSC_VER) + typedef __int8 int8_t; + typedef unsigned __int8 uint8_t; + typedef __int16 int16_t; + typedef unsigned __int16 uint16_t; + typedef __int32 int32_t; + typedef unsigned __int32 uint32_t; + typedef __int64 int64_t; + typedef unsigned __int64 uint64_t; +# ifndef HAVE_UINT64_T +# define HAVE_UINT64_T 1 +# endif +#else +#error Cannot find definitions for fixed-width integral types (uint8_t, uint32_t, etc.) +#endif + +#if HAVE_BYTESWAP_H +# include <byteswap.h> +#endif +#ifndef bswap_16 +# define bswap_16(p) \ + (((((uint16_t)(p)) & 0x00ff) << 8) | \ + (((uint16_t)(p)) >> 8)) +#endif +#ifndef bswap_32 +# define bswap_32(p) \ + (((((uint32_t)(p)) & 0x000000ff) << 24) | \ + ((((uint32_t)(p)) & 0x0000ff00) << 8) | \ + ((((uint32_t)(p)) & 0x00ff0000) >> 8) | \ + ((((uint32_t)(p))) >> 24)) +#endif + + +#if __GNUC__ >= 3 && defined(__ELF__) && !defined(__sun) +# define slim_hidden_proto(name) slim_hidden_proto1(name, slim_hidden_int_name(name)) csi_private +# define slim_hidden_proto_no_warn(name) slim_hidden_proto1(name, slim_hidden_int_name(name)) csi_private_no_warn +# define slim_hidden_def(name) slim_hidden_def1(name, slim_hidden_int_name(name)) +# define slim_hidden_int_name(name) INT_##name +# define slim_hidden_proto1(name, internal) \ + extern __typeof (name) name \ + __asm__ (slim_hidden_asmname (internal)) +# define slim_hidden_def1(name, internal) \ + extern __typeof (name) EXT_##name __asm__(slim_hidden_asmname(name)) \ + __attribute__((__alias__(slim_hidden_asmname(internal)))) +# define slim_hidden_ulp slim_hidden_ulp1(__USER_LABEL_PREFIX__) +# define slim_hidden_ulp1(x) slim_hidden_ulp2(x) +# define slim_hidden_ulp2(x) #x +# define slim_hidden_asmname(name) slim_hidden_asmname1(name) +# define slim_hidden_asmname1(name) slim_hidden_ulp #name +#else +# define slim_hidden_proto(name) int _csi_dummy_prototype(void) +# define slim_hidden_proto_no_warn(name) int _csi_dummy_prototype(void) +# define slim_hidden_def(name) int _csi_dummy_prototype(void) +#endif + +#if __GNUC__ >= 3 +#define csi_pure __attribute__((pure)) +#define csi_const __attribute__((const)) +#else +#define csi_pure +#define csi_const +#endif + +#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) +#define _CSI_BOOLEAN_EXPR(expr) \ + __extension__ ({ \ + int _csi_boolean_var_; \ + if (expr) \ + _csi_boolean_var_ = 1; \ + else \ + _csi_boolean_var_ = 0; \ + _csi_boolean_var_; \ +}) +#define _csi_likely(expr) (__builtin_expect (_CSI_BOOLEAN_EXPR(expr), 1)) +#define _csi_unlikely(expr) (__builtin_expect (_CSI_BOOLEAN_EXPR(expr), 0)) +#else +#define _csi_likely(expr) (expr) +#define _csi_unlikely(expr) (expr) +#endif + +#ifdef __GNUC__ +#ifndef offsetof +#define offsetof(type, member) \ + ((char *) &((type *) 0)->member - (char *) 0) +#endif +#define csi_container_of(ptr, type, member) ({ \ + const typeof(((type *) 0)->member) *mptr__ = (ptr); \ + (type *) ((char *) mptr__ - offsetof (type, member)); \ +}) +#else +#define csi_container_of(ptr, type, member) \ + (type *)((char *) (ptr) - (char *) &((type *)0)->member) +#endif + +/* slim_internal.h */ +#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) +#define csi_private_no_warn __attribute__((__visibility__("hidden"))) +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) +#define csi_private_no_warn __hidden +#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ +#define csi_private_no_warn +#endif + +#undef ARRAY_LENGTH +#define ARRAY_LENGTH(__array) ((int) (sizeof (__array) / sizeof (__array[0]))) + +#ifndef WARN_UNUSED_RESULT +#define WARN_UNUSED_RESULT +#endif +/* Add attribute(warn_unused_result) if supported */ +#define csi_warn WARN_UNUSED_RESULT +#define csi_private csi_private_no_warn csi_warn + +#define CSI_BITSWAP8(c) ((((c) * 0x0802LU & 0x22110LU) | ((c) * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16) +#ifdef WORDS_BIGENDIAN +#define CSI_BITSWAP8_IF_LITTLE_ENDIAN(c) (c) +#else +#define CSI_BITSWAP8_IF_LITTLE_ENDIAN(c) CSI_BITSWAP8(c) +#endif + +typedef enum _csi_status { + CSI_STATUS_SUCCESS = CAIRO_STATUS_SUCCESS, + CSI_STATUS_NO_MEMORY = CAIRO_STATUS_NO_MEMORY, + CSI_STATUS_INVALID_RESTORE = CAIRO_STATUS_INVALID_RESTORE, + CSI_STATUS_INVALID_POP_GROUP = CAIRO_STATUS_INVALID_POP_GROUP, + CSI_STATUS_NO_CURRENT_POINT = CAIRO_STATUS_NO_CURRENT_POINT, + CSI_STATUS_INVALID_MATRIX = CAIRO_STATUS_INVALID_MATRIX, + CSI_STATUS_INVALID_STATUS = CAIRO_STATUS_INVALID_STATUS, + CSI_STATUS_NULL_POINTER = CAIRO_STATUS_NULL_POINTER, + CSI_STATUS_INVALID_STRING = CAIRO_STATUS_INVALID_STRING, + CSI_STATUS_INVALID_PATH_DATA = CAIRO_STATUS_INVALID_PATH_DATA, + CSI_STATUS_READ_ERROR = CAIRO_STATUS_READ_ERROR, + CSI_STATUS_WRITE_ERROR = CAIRO_STATUS_WRITE_ERROR, + CSI_STATUS_SURFACE_FINISHED = CAIRO_STATUS_SURFACE_FINISHED, + CSI_STATUS_SURFACE_TYPE_MISMATCH = CAIRO_STATUS_SURFACE_TYPE_MISMATCH, + CSI_STATUS_PATTERN_TYPE_MISMATCH = CAIRO_STATUS_PATTERN_TYPE_MISMATCH, + CSI_STATUS_INVALID_CONTENT = CAIRO_STATUS_INVALID_CONTENT, + CSI_STATUS_INVALID_FORMAT = CAIRO_STATUS_INVALID_FORMAT, + CSI_STATUS_INVALID_VISUAL = CAIRO_STATUS_INVALID_VISUAL, + CSI_STATUS_FILE_NOT_FOUND = CAIRO_STATUS_FILE_NOT_FOUND, + CSI_STATUS_INVALID_DASH = CAIRO_STATUS_INVALID_DASH, + CSI_STATUS_INVALID_DSC_COMMENT = CAIRO_STATUS_INVALID_DSC_COMMENT, + CSI_STATUS_INVALID_INDEX = CAIRO_STATUS_INVALID_INDEX, + CSI_STATUS_CLIP_NOT_REPRESENTABLE = CAIRO_STATUS_CLIP_NOT_REPRESENTABLE, + CSI_STATUS_TEMP_FILE_ERROR = CAIRO_STATUS_TEMP_FILE_ERROR, + CSI_STATUS_INVALID_STRIDE = CAIRO_STATUS_INVALID_STRIDE, + CSI_STATUS_FONT_TYPE_MISMATCH = CAIRO_STATUS_FONT_TYPE_MISMATCH, + CSI_STATUS_USER_FONT_IMMUTABLE = CAIRO_STATUS_USER_FONT_IMMUTABLE, + CSI_STATUS_USER_FONT_ERROR = CAIRO_STATUS_USER_FONT_ERROR, + CSI_STATUS_NEGATIVE_COUNT = CAIRO_STATUS_NEGATIVE_COUNT, + CSI_STATUS_INVALID_CLUSTERS = CAIRO_STATUS_INVALID_CLUSTERS, + CSI_STATUS_INVALID_SLANT = CAIRO_STATUS_INVALID_SLANT, + CSI_STATUS_INVALID_WEIGHT = CAIRO_STATUS_INVALID_WEIGHT, + CSI_STATUS_INVALID_SIZE = CAIRO_STATUS_INVALID_SIZE, + CSI_STATUS_USER_FONT_NOT_IMPLEMENTED = CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED, + CSI_STATUS_DEVICE_TYPE_MISMATCH = CAIRO_STATUS_DEVICE_TYPE_MISMATCH, + CSI_STATUS_DEVICE_ERROR = CAIRO_STATUS_DEVICE_ERROR, + CSI_STATUS_INVALID_MESH_CONSTRUCTION = CAIRO_STATUS_INVALID_MESH_CONSTRUCTION, + CSI_STATUS_DEVICE_FINISHED = CAIRO_STATUS_DEVICE_FINISHED, + CSI_STATUS_JBIG2_GLOBAL_MISSING = CAIRO_STATUS_JBIG2_GLOBAL_MISSING, + CSI_STATUS_PNG_ERROR = CAIRO_STATUS_PNG_ERROR, + CSI_STATUS_FREETYPE_ERROR = CAIRO_STATUS_FREETYPE_ERROR, + CSI_STATUS_WIN32_GDI_ERROR = CAIRO_STATUS_WIN32_GDI_ERROR, + + /* cairo-script-interpreter specific errors */ + + CSI_STATUS_INVALID_SCRIPT, + CSI_STATUS_SCRIPT_INVALID_TYPE, + CSI_STATUS_SCRIPT_INVALID_INDEX, + CSI_STATUS_SCRIPT_UNDEFINED_NAME, + CSI_STATUS_INTERPRETER_FINISHED, + + _CSI_STATUS_SCRIPT_LAST_ERROR, + CSI_INT_STATUS_UNSUPPORTED +} csi_status_t; + +typedef enum { + CSI_OBJECT_TYPE_NULL = 0, + + /* atomics */ + CSI_OBJECT_TYPE_BOOLEAN, + CSI_OBJECT_TYPE_INTEGER, + CSI_OBJECT_TYPE_MARK, + CSI_OBJECT_TYPE_NAME, + CSI_OBJECT_TYPE_OPERATOR, + CSI_OBJECT_TYPE_REAL, + + /* compound */ + CSI_OBJECT_TYPE_ARRAY = 0x8, + CSI_OBJECT_TYPE_DICTIONARY, + CSI_OBJECT_TYPE_FILE, + CSI_OBJECT_TYPE_MATRIX, + CSI_OBJECT_TYPE_STRING, + + /* cairo */ + CSI_OBJECT_TYPE_CONTEXT = 0x10, + CSI_OBJECT_TYPE_FONT, + CSI_OBJECT_TYPE_PATTERN, + CSI_OBJECT_TYPE_SCALED_FONT, + CSI_OBJECT_TYPE_SURFACE +} csi_object_type_t; + +#define CSI_OBJECT_IS_ATOM(OBJ) (((OBJ)->type & CSI_OBJECT_TYPE_MASK) < 0x08) +#define CSI_OBJECT_IS_COMPOUND(OBJ) ((OBJ)->type & 0x08) +#define CSI_OBJECT_IS_CAIRO(OBJ) ((OBJ)->type & 0x10) + +enum { /* attributes */ + CSI_OBJECT_ATTR_EXECUTABLE = 1 << 6, + CSI_OBJECT_ATTR_WRITABLE = 1 << 7 +}; +#define CSI_OBJECT_ATTR_MASK (CSI_OBJECT_ATTR_EXECUTABLE | \ + CSI_OBJECT_ATTR_WRITABLE) +#define CSI_OBJECT_TYPE_MASK (~CSI_OBJECT_ATTR_MASK) + +typedef struct _cairo_script_interpreter csi_t; + +typedef cairo_bool_t csi_boolean_t; +typedef csi_status_t (*csi_operator_t) (csi_t *); +typedef float csi_real_t; +typedef long csi_integer_t; +typedef long csi_name_t; +typedef struct _csi_array csi_array_t; +typedef struct _csi_buffer csi_buffer_t; +typedef struct _csi_compound_object csi_compound_object_t; +typedef struct _csi_dictionary csi_dictionary_t; +typedef struct _csi_file csi_file_t; +typedef struct _csi_hash_entry csi_hash_entry_t; +typedef struct _csi_hash_table csi_hash_table_t; +typedef struct _csi_hash_table_arrangement csi_hash_table_arrangement_t; +typedef struct _csi_list csi_list_t; +typedef struct _csi_matrix csi_matrix_t; +typedef struct _csi_object csi_object_t; +typedef struct _csi_scanner csi_scanner_t; +typedef struct _csi_stack csi_stack_t; +typedef struct _csi_string csi_string_t; + +typedef cairo_bool_t +(*csi_hash_predicate_func_t) (void *entry); + +typedef void +(*csi_hash_callback_func_t) (void *entry, + void *closure); + +typedef cairo_bool_t +(*csi_hash_keys_equal_func_t) (const void *key_a, const void *key_b); + +struct _csi_object { + csi_object_type_t type; + union { + cairo_t *cr; + cairo_font_face_t *font_face; + cairo_pattern_t *pattern; + cairo_scaled_font_t *scaled_font; + cairo_surface_t *surface; + csi_array_t *array; + csi_boolean_t boolean; + csi_compound_object_t *object; + csi_dictionary_t *dictionary; + csi_file_t *file; + csi_integer_t integer; + csi_matrix_t *matrix; + csi_operator_t op; + csi_name_t name; + csi_real_t real; + csi_string_t *string; + void *ptr; + } datum; +}; + +struct _csi_compound_object { + csi_object_type_t type; + unsigned int ref; +}; + +struct _csi_hash_entry { + unsigned long hash; +}; + +struct _csi_hash_table_arrangement { + unsigned long high_water_mark; + unsigned long size; + unsigned long rehash; +}; + +struct _csi_hash_table { + csi_hash_keys_equal_func_t keys_equal; + + const csi_hash_table_arrangement_t *arrangement; + csi_hash_entry_t **entries; + + unsigned long live_entries; + unsigned long used_entries; + unsigned long iterating; /* Iterating, no insert, no resize */ +}; + + +/* simple, embedded doubly-linked links */ +struct _csi_list { + struct _csi_list *next, *prev; +}; + +struct _csi_buffer { + char *base, *ptr, *end; + unsigned int size; +}; + +struct _csi_stack { + csi_object_t *objects; + csi_integer_t len; + csi_integer_t size; +}; + +struct _csi_array { + csi_compound_object_t base; + csi_stack_t stack; +}; + +typedef struct _csi_dictionary_entry { + csi_hash_entry_t hash_entry; + csi_object_t value; +} csi_dictionary_entry_t; + +struct _csi_dictionary { + csi_compound_object_t base; + csi_hash_table_t hash_table; +}; + +struct _csi_matrix { + csi_compound_object_t base; + cairo_matrix_t matrix; +}; + +struct _csi_string { + csi_compound_object_t base; + csi_integer_t len; + csi_integer_t deflate; + enum { + NONE, + ZLIB, + LZO, + } method; + char *string; +}; + +typedef struct _csi_filter_funcs { + int (*filter_getc) (csi_file_t *); + void (*filter_putc) (csi_file_t *, int); + int (*filter_read) (csi_file_t *, uint8_t *, int); + void (*filter_destroy) (csi_t *, void *); +} csi_filter_funcs_t; + +struct _csi_file { + csi_compound_object_t base; + enum { + STDIO, + BYTES, + PROCEDURE, + FILTER + } type; + unsigned int flags; + void *src; + void *data; + uint8_t *bp; + int rem; + const csi_filter_funcs_t *filter; +}; + +union _csi_union_object { + void *ptr[2]; + csi_stack_t stack; + csi_array_t arry; + csi_dictionary_t dictionary; + csi_matrix_t matrix; + csi_string_t string; + csi_file_t file; + csi_object_t object; +}; + +struct _csi_scanner { + jmp_buf jump_buffer; + int depth; + + int bind; + csi_status_t (*push) (csi_t *ctx, csi_object_t *obj); + csi_status_t (*execute) (csi_t *ctx, csi_object_t *obj); + void *closure; + + csi_buffer_t buffer; + csi_stack_t procedure_stack; + csi_object_t build_procedure; + + unsigned int accumulator; + unsigned int accumulator_count; + + unsigned int line_number; +}; + +typedef cairo_script_interpreter_hooks_t csi_hooks_t; + +typedef struct _csi_chunk { + struct _csi_chunk *next; + int rem; + char *ptr; +} csi_chunk_t; + +struct _cairo_script_interpreter { + int ref_count; + csi_status_t status; + + unsigned int finished : 1; + + csi_hooks_t hooks; + + csi_hash_table_t strings; + + csi_stack_t ostack; + csi_stack_t dstack; + + csi_scanner_t scanner; + + csi_chunk_t *perm_chunk; + struct { + csi_chunk_t *chunk; + void *free_list; + } slabs[16]; + csi_array_t *free_array; + csi_dictionary_t *free_dictionary; + csi_string_t *free_string; + + csi_operator_t opcode[256]; + + /* caches of live data */ + csi_list_t *_images; + csi_list_t *_faces; +}; + +typedef struct _csi_operator_def { + const char *name; + csi_operator_t op; +} csi_operator_def_t; + +typedef struct _csi_integer_constant_def { + const char *name; + csi_integer_t value; +} csi_integer_constant_def_t; + +typedef struct _csi_real_constant_def { + const char *name; + csi_real_t value; +} csi_real_constant_def_t; + +/* cairo-script-file.c */ + +csi_private csi_status_t +csi_file_new (csi_t *ctx, + csi_object_t *obj, + const char *path, const char *mode); + +csi_private csi_status_t +csi_file_new_for_stream (csi_t *ctx, + csi_object_t *obj, + FILE *stream); + +csi_private csi_status_t +csi_file_new_for_bytes (csi_t *ctx, + csi_object_t *obj, + const char *bytes, + unsigned int length); + +csi_private csi_status_t +csi_file_new_from_string (csi_t *ctx, + csi_object_t *obj, + csi_string_t *src); + +csi_private csi_status_t +csi_file_new_ascii85_decode (csi_t *ctx, + csi_object_t *obj, + csi_dictionary_t *dict, + csi_object_t *src); + +csi_private csi_status_t +csi_file_new_deflate_decode (csi_t *ctx, + csi_object_t *obj, + csi_dictionary_t *dict, + csi_object_t *src); + +csi_private csi_status_t +_csi_file_execute (csi_t *ctx, csi_file_t *obj); + +csi_private int +csi_file_getc (csi_file_t *obj); + +csi_private int +csi_file_read (csi_file_t *obj, void *buf, int len); + +csi_private void +csi_file_putc (csi_file_t *obj, int c); + +csi_private void +csi_file_flush (csi_file_t *obj); + +csi_private void +csi_file_close (csi_t *ctx, csi_file_t *obj); + +csi_private void +_csi_file_free (csi_t *ctx, csi_file_t *obj); + +csi_private csi_status_t +_csi_file_as_string (csi_t *ctx, + csi_file_t *file, + csi_object_t *obj); + +/* cairo-script-hash.c */ + +csi_private csi_status_t +_csi_hash_table_init (csi_hash_table_t *hash_table, + csi_hash_keys_equal_func_t keys_equal); + +csi_private void +_csi_hash_table_fini (csi_hash_table_t *hash_table); + +csi_private void * +_csi_hash_table_lookup (csi_hash_table_t *hash_table, + csi_hash_entry_t *key); + +csi_private csi_status_t +_csi_hash_table_insert (csi_hash_table_t *hash_table, + csi_hash_entry_t *entry); + +csi_private void +_csi_hash_table_remove (csi_hash_table_t *hash_table, + csi_hash_entry_t *key); + +csi_private void +_csi_hash_table_foreach (csi_hash_table_t *hash_table, + csi_hash_callback_func_t hash_callback, + void *closure); + +/* cairo-script-interpreter.c */ + +csi_private void * +_csi_alloc (csi_t *ctx, int size); + +csi_private void * +_csi_alloc0 (csi_t *ctx, int size); + +csi_private void * +_csi_realloc (csi_t *ctx, void *ptr, int size); + +csi_private void +_csi_free (csi_t *ctx, void *ptr); + +csi_private void * +_csi_slab_alloc (csi_t *ctx, int size); + +csi_private void * +_csi_perm_alloc (csi_t *ctx, int size); + +csi_private void +_csi_slab_free (csi_t *ctx, void *ptr, int size); + +csi_private csi_status_t +csi_push_ostack (csi_t *ctx, csi_object_t *obj); + +csi_private csi_status_t +_csi_name_define (csi_t *ctx, csi_name_t name, csi_object_t *obj); + +csi_private csi_status_t +_csi_name_lookup (csi_t *ctx, csi_name_t name, csi_object_t *obj); + +csi_private csi_status_t +_csi_name_undefine (csi_t *ctx, csi_name_t name); + +csi_private csi_status_t +_csi_intern_string (csi_t *ctx, const char **str_inout, int len); + +csi_private csi_status_t +_csi_error (csi_status_t status); + +/* cairo-script-objects.c */ + +csi_private csi_status_t +csi_array_new (csi_t *ctx, + csi_integer_t initial_size, + csi_object_t *obj); + +csi_private csi_status_t +_csi_array_execute (csi_t *ctx, csi_array_t *array); + +csi_private csi_status_t +csi_array_get (csi_t *ctx, + csi_array_t *array, + long elem, + csi_object_t *value); + +csi_private csi_status_t +csi_array_put (csi_t *ctx, + csi_array_t *array, + csi_integer_t elem, + csi_object_t *value); + +csi_private csi_status_t +csi_array_append (csi_t *ctx, + csi_array_t *array, + csi_object_t *obj); + +csi_private void +csi_array_free (csi_t *ctx, csi_array_t *array); + +static inline void +csi_boolean_new (csi_object_t *obj, + csi_boolean_t v) +{ + obj->type = CSI_OBJECT_TYPE_BOOLEAN; + obj->datum.boolean = v; +} + +csi_private csi_status_t +csi_dictionary_new (csi_t *ctx, + csi_object_t *obj); + +csi_private csi_status_t +csi_dictionary_put (csi_t *ctx, + csi_dictionary_t *dict, + csi_name_t name, + csi_object_t *value); + +csi_private csi_status_t +csi_dictionary_get (csi_t *ctx, + csi_dictionary_t *dict, + csi_name_t name, + csi_object_t *value); + +csi_private csi_boolean_t +csi_dictionary_has (csi_dictionary_t *dict, + csi_name_t name); + +csi_private void +csi_dictionary_remove (csi_t *ctx, + csi_dictionary_t *dict, + csi_name_t name); + +csi_private void +csi_dictionary_free (csi_t *ctx, + csi_dictionary_t *dict); + +static inline void +csi_integer_new (csi_object_t *obj, + csi_integer_t v) +{ + obj->type = CSI_OBJECT_TYPE_INTEGER; + obj->datum.integer = v; +} + + +csi_private csi_status_t +csi_matrix_new (csi_t *ctx, + csi_object_t *obj); + +csi_private csi_status_t +csi_matrix_new_from_array (csi_t *ctx, + csi_object_t *obj, + csi_array_t *array); + +csi_private csi_status_t +csi_matrix_new_from_matrix (csi_t *ctx, + csi_object_t *obj, + const cairo_matrix_t *m); + +csi_private csi_status_t +csi_matrix_new_from_values (csi_t *ctx, + csi_object_t *obj, + double v[6]); + +csi_private void +csi_matrix_free (csi_t *ctx, + csi_matrix_t *obj); + +csi_private csi_status_t +csi_name_new (csi_t *ctx, + csi_object_t *obj, + const char *str, + int len); + +csi_private csi_status_t +csi_name_new_static (csi_t *ctx, + csi_object_t *obj, + const char *str); + +static inline void +csi_operator_new (csi_object_t *obj, + csi_operator_t op) +{ + obj->type = CSI_OBJECT_TYPE_OPERATOR | CSI_OBJECT_ATTR_EXECUTABLE; + obj->datum.op = op; +} + +static inline void +csi_real_new (csi_object_t *obj, + csi_real_t v) +{ + obj->type = CSI_OBJECT_TYPE_REAL; + obj->datum.real = v; +} + +csi_private csi_status_t +csi_string_new (csi_t *ctx, + csi_object_t *obj, + const char *str, + int len); + +csi_private csi_status_t +csi_string_deflate_new (csi_t *ctx, + csi_object_t *obj, + void *bytes, + int in_len, + int out_len); + +csi_private csi_status_t +csi_string_new_from_bytes (csi_t *ctx, + csi_object_t *obj, + char *bytes, + unsigned int len); + +csi_private void +csi_string_free (csi_t *ctx, csi_string_t *string); + +csi_private csi_status_t +csi_object_execute (csi_t *ctx, csi_object_t *obj); + +csi_private csi_object_t * +csi_object_reference (csi_object_t *obj); + +csi_private void +csi_object_free (csi_t *ctx, + csi_object_t *obj); + +csi_private csi_status_t +csi_object_as_file (csi_t *ctx, + csi_object_t *src, + csi_object_t *file); + +csi_private csi_boolean_t +csi_object_eq (csi_object_t *a, + csi_object_t *b); + +csi_private csi_status_t +csi_object_compare (csi_object_t *a, + csi_object_t *b, + int *out_cmp); + +/* cairo-script-operators.c */ + +csi_private const csi_operator_def_t * +_csi_operators (void); + +csi_private const csi_integer_constant_def_t * +_csi_integer_constants (void); + +csi_private const csi_real_constant_def_t * +_csi_real_constants (void); + +/* cairo-script-scanner.c */ + +csi_private csi_status_t +_csi_scanner_init (csi_t *ctx, csi_scanner_t *scanner); + +csi_private csi_status_t +_csi_scan_file (csi_t *ctx, csi_file_t *src); + +csi_private csi_status_t +_csi_translate_file (csi_t *ctx, + csi_file_t *file, + cairo_write_func_t write_func, + void *closure); + +csi_private void +_csi_scanner_fini (csi_t *ctx, csi_scanner_t *scanner); + +csi_private csi_boolean_t +_csi_parse_number (csi_object_t *obj, const char *s, int len); + +/* cairo-script-stack.c */ + +csi_private csi_status_t +_csi_stack_init (csi_t *ctx, csi_stack_t *stack, csi_integer_t size); + +csi_private void +_csi_stack_fini (csi_t *ctx, csi_stack_t *stack); + +csi_private csi_status_t +_csi_stack_roll (csi_t *ctx, + csi_stack_t *stack, + csi_integer_t mod, + csi_integer_t n); + +csi_private csi_status_t +_csi_stack_grow (csi_t *ctx, csi_stack_t *stack, csi_integer_t cnt); + +csi_private csi_status_t +_csi_stack_push_internal (csi_t *ctx, csi_stack_t *stack, + const csi_object_t *obj); + +csi_private csi_object_t * +_csi_stack_peek (csi_stack_t *stack, csi_integer_t i); + +csi_private void +_csi_stack_pop (csi_t *ctx, csi_stack_t *stack, csi_integer_t count); + +csi_private csi_status_t +_csi_stack_exch (csi_stack_t *stack); + +static inline csi_object_type_t +csi_object_get_type (const csi_object_t *obj) +{ + return obj->type & CSI_OBJECT_TYPE_MASK; +} + +static inline csi_boolean_t +csi_object_is_procedure (const csi_object_t *obj) +{ + return obj->type == (CSI_OBJECT_TYPE_ARRAY | CSI_OBJECT_ATTR_EXECUTABLE); +} + +static inline csi_boolean_t +csi_object_is_number (const csi_object_t *obj) +{ + int type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_BOOLEAN: + case CSI_OBJECT_TYPE_INTEGER: + case CSI_OBJECT_TYPE_REAL: + return 1; + default: + return 0; + } +} + +static inline double +csi_number_get_value (const csi_object_t *obj) +{ + int type = csi_object_get_type (obj); + switch (type) { + case CSI_OBJECT_TYPE_BOOLEAN: return obj->datum.boolean; + case CSI_OBJECT_TYPE_INTEGER: return obj->datum.integer; + case CSI_OBJECT_TYPE_REAL: return obj->datum.real; + default: return 0.; + } +} + +csi_status_t +_csi_stack_push (csi_t *ctx, csi_stack_t *stack, + const csi_object_t *obj); + +static inline csi_boolean_t +_csi_check_ostack (csi_t *ctx, csi_integer_t count) +{ + return ctx->ostack.len >= count; +} + +static inline csi_object_t * +_csi_peek_ostack (csi_t *ctx, csi_integer_t i) +{ + return &ctx->ostack.objects[ctx->ostack.len - i -1]; +} + +static inline void +_csi_pop_ostack (csi_t *ctx, csi_integer_t count) +{ + do + csi_object_free (ctx, &ctx->ostack.objects[--ctx->ostack.len]); + while (--count); +} + +static inline csi_status_t +_csi_push_ostack_copy (csi_t *ctx, csi_object_t *obj) +{ + return _csi_stack_push (ctx, &ctx->ostack, csi_object_reference (obj)); +} + +static inline csi_status_t +_csi_push_ostack (csi_t *ctx, csi_object_t *obj) +{ + return _csi_stack_push (ctx, &ctx->ostack, obj); +} + +static inline csi_status_t +_csi_push_ostack_boolean (csi_t *ctx, csi_boolean_t v) +{ + csi_object_t obj; + obj.type = CSI_OBJECT_TYPE_BOOLEAN; + obj.datum.boolean = v; + return _csi_stack_push (ctx, &ctx->ostack, &obj); +} +static inline csi_status_t +_csi_push_ostack_integer (csi_t *ctx, csi_integer_t v) +{ + csi_object_t obj; + obj.type = CSI_OBJECT_TYPE_INTEGER; + obj.datum.integer = v; + return _csi_stack_push (ctx, &ctx->ostack, &obj); +} +static inline csi_status_t +_csi_push_ostack_mark (csi_t *ctx) +{ + csi_object_t obj; + obj.type = CSI_OBJECT_TYPE_MARK; + return _csi_stack_push (ctx, &ctx->ostack, &obj); +} +static inline csi_status_t +_csi_push_ostack_null (csi_t *ctx) +{ + csi_object_t obj; + obj.type = CSI_OBJECT_TYPE_NULL; + return _csi_stack_push (ctx, &ctx->ostack, &obj); +} +static inline csi_status_t +_csi_push_ostack_real (csi_t *ctx, csi_real_t v) +{ + csi_object_t obj; + obj.type = CSI_OBJECT_TYPE_REAL; + obj.datum.real = v; + return _csi_stack_push (ctx, &ctx->ostack, &obj); +} + +slim_hidden_proto_no_warn (cairo_script_interpreter_destroy); +slim_hidden_proto_no_warn (cairo_script_interpreter_reference); + +#endif /* CAIRO_SCRIPT_PRIVATE_H */ diff --git a/libs/cairo-1.16.0/util/cairo-script/cairo-script-scanner.c b/libs/cairo-1.16.0/util/cairo-script/cairo-script-scanner.c new file mode 100644 index 0000000..3dfb3a9 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/cairo-script-scanner.c @@ -0,0 +1,1904 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +#include "cairo-script-private.h" + +#include <limits.h> /* INT_MAX */ +#include <math.h> /* pow */ +#include <stdio.h> /* EOF */ +#include <stdint.h> /* for {INT,UINT}*_{MIN,MAX} */ +#include <stdlib.h> /* malloc/free */ +#include <string.h> /* memset */ +#include <assert.h> +#include <zlib.h> + +#if HAVE_LZO +#include <lzo/lzo2a.h> +#endif + +#define DEBUG_SCAN 0 + +#if WORDS_BIGENDIAN +#define le16(x) bswap_16 (x) +#define le32(x) bswap_32 (x) +#define be16(x) x +#define be32(x) x +#define to_be32(x) x +#else +#define le16(x) x +#define le32(x) x +#define be16(x) bswap_16 (x) +#define be32(x) bswap_32 (x) +#define to_be32(x) bswap_32 (x) +#endif + +/* + * whitespace: + * 0 - nul + * 9 - tab + * A - LF + * C - FF + * D - CR + * + * syntax delimiters + * ( = 28, ) = 29 - literal strings + * < = 3C, > = 3E - hex/base85 strings, dictionary name + * [ = 5B, ] = 5D - array + * { = 7B, } = 7C - procedure + * / = 5C - literal marker + * % = 25 - comment + */ + +static void +fprintf_obj (FILE *stream, csi_t *ctx, const csi_object_t *obj) +{ + switch (csi_object_get_type (obj)) { + case CSI_OBJECT_TYPE_NULL: + fprintf (stream, "NULL\n"); + break; + + /* atomics */ + case CSI_OBJECT_TYPE_BOOLEAN: + fprintf (stream, "boolean: %s\n", + obj->datum.boolean ? "true" : "false"); + break; + case CSI_OBJECT_TYPE_INTEGER: + fprintf (stream, "integer: %ld\n", obj->datum.integer); + break; + case CSI_OBJECT_TYPE_MARK: + fprintf (stream, "mark\n"); + break; + case CSI_OBJECT_TYPE_NAME: + fprintf (stream, "name: %s\n", (char *) obj->datum.name); + break; + case CSI_OBJECT_TYPE_OPERATOR: + fprintf (stream, "operator: %p\n", obj->datum.ptr); + break; + case CSI_OBJECT_TYPE_REAL: + fprintf (stream, "real: %g\n", obj->datum.real); + break; + + /* compound */ + case CSI_OBJECT_TYPE_ARRAY: + fprintf (stream, "array\n"); + break; + case CSI_OBJECT_TYPE_DICTIONARY: + fprintf (stream, "dictionary\n"); + break; + case CSI_OBJECT_TYPE_FILE: + fprintf (stream, "file\n"); + break; + case CSI_OBJECT_TYPE_MATRIX: + fprintf (stream, "matrix: [%g %g %g %g %g %g]\n", + obj->datum.matrix->matrix.xx, + obj->datum.matrix->matrix.yx, + obj->datum.matrix->matrix.xy, + obj->datum.matrix->matrix.yy, + obj->datum.matrix->matrix.x0, + obj->datum.matrix->matrix.y0); + break; + case CSI_OBJECT_TYPE_STRING: + fprintf (stream, "string: len=%ld, defate=%ld, method=%d\n", + obj->datum.string->len, obj->datum.string->deflate, obj->datum.string->method); + break; + + /* cairo */ + case CSI_OBJECT_TYPE_CONTEXT: + fprintf (stream, "context\n"); + break; + case CSI_OBJECT_TYPE_FONT: + fprintf (stream, "font\n"); + break; + case CSI_OBJECT_TYPE_PATTERN: + fprintf (stream, "pattern\n"); + break; + case CSI_OBJECT_TYPE_SCALED_FONT: + fprintf (stream, "scaled-font\n"); + break; + case CSI_OBJECT_TYPE_SURFACE: + fprintf (stream, "surface\n"); + break; + } +} + +/* takes ownership of obj */ +static inline csi_status_t +scan_push (csi_t *ctx, csi_object_t *obj) +{ + return ctx->scanner.push (ctx, obj); +} + +static inline csi_status_t +scan_execute (csi_t *ctx, csi_object_t *obj) +{ + return ctx->scanner.execute (ctx, obj); +} + +static cairo_status_t +buffer_init (csi_t *ctx, csi_buffer_t *buffer) +{ + cairo_status_t status = CSI_STATUS_SUCCESS; + + buffer->size = 16384; + buffer->base = _csi_alloc (ctx, buffer->size); + if (_csi_unlikely (buffer->base == NULL)) { + status = _csi_error (CSI_STATUS_NO_MEMORY); + buffer->size = 0; + } + + buffer->ptr = buffer->base; + buffer->end = buffer->base + buffer->size; + + return status; +} + +static void +buffer_fini (csi_t *ctx, csi_buffer_t *buffer) +{ + _csi_free (ctx, buffer->base); +} + +static void +_buffer_grow (csi_t *ctx, csi_scanner_t *scan) +{ + int newsize; + int offset; + char *base; + + if (_csi_unlikely (scan->buffer.size > INT_MAX / 2)) + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_NO_MEMORY)); + + offset = scan->buffer.ptr - scan->buffer.base; + newsize = scan->buffer.size * 2; + base = _csi_realloc (ctx, scan->buffer.base, newsize); + if (_csi_unlikely (base == NULL)) + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_NO_MEMORY)); + + scan->buffer.base = base; + scan->buffer.ptr = base + offset; + scan->buffer.end = base + newsize; + scan->buffer.size = newsize; +} + +static inline void +buffer_check (csi_t *ctx, csi_scanner_t *scan, int count) +{ + if (_csi_unlikely (scan->buffer.ptr + count > scan->buffer.end)) + _buffer_grow (ctx, scan); +} + +static inline void +buffer_add (csi_buffer_t *buffer, int c) +{ + *buffer->ptr++ = c; +} + +static inline void +buffer_reset (csi_buffer_t *buffer) +{ + buffer->ptr = buffer->base; +} + +static void +token_start (csi_scanner_t *scan) +{ + buffer_reset (&scan->buffer); +} + +static void +token_add (csi_t *ctx, csi_scanner_t *scan, int c) +{ + buffer_check (ctx, scan, 1); + buffer_add (&scan->buffer, c); +} + +static void +token_add_unchecked (csi_scanner_t *scan, int c) +{ + buffer_add (&scan->buffer, c); +} + +csi_boolean_t +_csi_parse_number (csi_object_t *obj, const char *s, int len) +{ + int radix = 0; + long long mantissa = 0; + int exponent = 0; + int sign = 1; + int decimal = -1; + int exponent_sign = 0; + const char * const end = s + len; + + switch (*s) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + mantissa = *s - '0'; + case '+': + break; + case '-': + sign = -1; + break; + case '.': + decimal = 0; + break; + default: + return FALSE; + } + + while (++s < end) { + if (*s < '0') { + if (*s == '.') { + if (_csi_unlikely (radix)) + return FALSE; + if (_csi_unlikely (decimal != -1)) + return FALSE; + if (_csi_unlikely (exponent_sign)) + return FALSE; + + decimal = 0; + } else if (*s == '!') { + if (_csi_unlikely (radix)) + return FALSE; + if (_csi_unlikely (decimal != -1)) + return FALSE; + if (_csi_unlikely (exponent_sign)) + return FALSE; + + radix = mantissa; + mantissa = 0; + + if (_csi_unlikely (radix < 2 || radix > 36)) + return FALSE; + } else + return FALSE; + } else if (*s <= '9') { + int v = *s - '0'; + if (_csi_unlikely (radix && v >= radix)) + return FALSE; + + if (exponent_sign) { + exponent = 10 * exponent + v; + } else { + if (radix) + mantissa = radix * mantissa + v; + else + mantissa = 10 * mantissa + v; + if (decimal != -1) + decimal++; + } + } else if (*s == 'E' || * s== 'e') { + if (radix == 0) { + if (_csi_unlikely (s + 1 == end)) + return FALSE; + + exponent_sign = 1; + if (s[1] == '-') { + exponent_sign = -1; + s++; + } else if (s[1] == '+') + s++; + } else { + int v = 0xe; + + if (_csi_unlikely (v >= radix)) + return FALSE; + + mantissa = radix * mantissa + v; + } + } else if (*s < 'A') { + return FALSE; + } else if (*s <= 'Z') { + int v = *s - 'A' + 0xA; + + if (_csi_unlikely (v >= radix)) + return FALSE; + + mantissa = radix * mantissa + v; + } else if (*s < 'a') { + return FALSE; + } else if (*s <= 'z') { + int v = *s - 'a' + 0xa; + + if (_csi_unlikely (v >= radix)) + return FALSE; + + mantissa = radix * mantissa + v; + } else + return FALSE; + } + + if (exponent_sign || decimal != -1) { + if (mantissa == 0) { + obj->type = CSI_OBJECT_TYPE_REAL; + obj->datum.real = 0.; + return TRUE; + } else { + int e; + double v; + + v = mantissa; + e = exponent * exponent_sign; + if (decimal != -1) + e -= decimal; + switch (e) { + case -7: v *= 0.0000001; break; + case -6: v *= 0.000001; break; + case -5: v *= 0.00001; break; + case -4: v *= 0.0001; break; + case -3: v *= 0.001; break; + case -2: v *= 0.01; break; + case -1: v *= 0.1; break; + case 0: break; + case 1: v *= 10; break; + case 2: v *= 100; break; + case 3: v *= 1000; break; + case 4: v *= 10000; break; + case 5: v *= 100000; break; + case 6: v *= 1000000; break; + default: + v *= pow (10, e); /* XXX */ + break; + } + + obj->type = CSI_OBJECT_TYPE_REAL; + obj->datum.real = sign * v; + return TRUE; + } + } else { + obj->type = CSI_OBJECT_TYPE_INTEGER; + obj->datum.integer = sign * mantissa; + return TRUE; + } +} + +static void +token_end (csi_t *ctx, csi_scanner_t *scan, csi_file_t *src) +{ + cairo_status_t status; + char *s; + csi_object_t obj; + int len; + + /* + * Any token that consists entirely of regular characters and + * cannot be interpreted as a number is treated as a name object + * (more precisely, an executable name). All characters except + * delimiters and white-space characters can appear in names, + * including characters ordinarily considered to be punctuation. + */ + + if (_csi_unlikely (scan->buffer.ptr == scan->buffer.base)) + return; + + s = scan->buffer.base; + len = scan->buffer.ptr - scan->buffer.base; + + if (_csi_likely (! scan->bind)) { + if (s[0] == '{') { /* special case procedures */ + if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL) { + status = _csi_stack_push (ctx, + &scan->procedure_stack, + &scan->build_procedure); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + } + + status = csi_array_new (ctx, 0, &scan->build_procedure); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + + scan->build_procedure.type |= CSI_OBJECT_ATTR_EXECUTABLE; + return; + } else if (s[0] == '}') { + if (_csi_unlikely + (scan->build_procedure.type == CSI_OBJECT_TYPE_NULL)) + { + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + } + + if (scan->procedure_stack.len) { + csi_object_t *next; + + next = _csi_stack_peek (&scan->procedure_stack, 0); + status = csi_array_append (ctx, next->datum.array, + &scan->build_procedure); + scan->build_procedure = *next; + scan->procedure_stack.len--; + } else { + status = scan_push (ctx, &scan->build_procedure); + scan->build_procedure.type = CSI_OBJECT_TYPE_NULL; + } + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + + return; + } + } + + if (s[0] == '/') { + if (len >= 2 && s[1] == '/') { /* substituted name */ + status = csi_name_new (ctx, &obj, s + 2, len - 2); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + + status = _csi_name_lookup (ctx, obj.datum.name, &obj); + } else { /* literal name */ + status = csi_name_new (ctx, &obj, s + 1, len - 1); + } + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + } else { + if (! _csi_parse_number (&obj, s, len)) { + status = csi_name_new (ctx, &obj, s, len); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + + obj.type |= CSI_OBJECT_ATTR_EXECUTABLE; + } + } + + /* consume whitespace after token, before calling the interpreter */ + if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL) { + status = csi_array_append (ctx, + scan->build_procedure.datum.array, + &obj); + } else if (obj.type & CSI_OBJECT_ATTR_EXECUTABLE) { + status = scan_execute (ctx, &obj); + csi_object_free (ctx, &obj); + } else { + status = scan_push (ctx, &obj); + } + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); +} + +static void +string_add (csi_t *ctx, csi_scanner_t *scan, int c) +{ + buffer_check (ctx, scan, 1); + buffer_add (&scan->buffer, c); +} + +static void +string_end (csi_t *ctx, csi_scanner_t *scan) +{ + csi_object_t obj; + cairo_status_t status; + + status = csi_string_new (ctx, + &obj, + scan->buffer.base, + scan->buffer.ptr - scan->buffer.base); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + + if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL) + status = csi_array_append (ctx, + scan->build_procedure.datum.array, + &obj); + else + status = scan_push (ctx, &obj); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); +} + +static int +hex_value (int c) +{ + if (c < '0') + return EOF; + if (c <= '9') + return c - '0'; + c |= 32; + if (c < 'a') + return EOF; + if (c <= 'f') + return c - 'a' + 0xa; + return EOF; +} + +static void +hex_add (csi_t *ctx, csi_scanner_t *scan, int c) +{ + if (scan->accumulator_count == 0) { + scan->accumulator |= hex_value (c) << 4; + scan->accumulator_count = 1; + } else { + scan->accumulator |= hex_value (c) << 0; + buffer_check (ctx, scan, 1); + buffer_add (&scan->buffer, scan->accumulator); + + scan->accumulator = 0; + scan->accumulator_count = 0; + } +} + +static void +hex_end (csi_t *ctx, csi_scanner_t *scan) +{ + csi_object_t obj; + cairo_status_t status; + + if (scan->accumulator_count) + hex_add (ctx, scan, '0'); + + status = csi_string_new (ctx, + &obj, + scan->buffer.base, + scan->buffer.ptr - scan->buffer.base); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + + if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL) + status = csi_array_append (ctx, + scan->build_procedure.datum.array, + &obj); + else + status = scan_push (ctx, &obj); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); +} + +static void +base85_add (csi_t *ctx, csi_scanner_t *scan, int c) +{ + if (c == 'z') { + if (_csi_unlikely (scan->accumulator_count != 0)) + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + + buffer_check (ctx, scan, 4); + buffer_add (&scan->buffer, 0); + buffer_add (&scan->buffer, 0); + buffer_add (&scan->buffer, 0); + buffer_add (&scan->buffer, 0); + } else if (_csi_unlikely (c < '!' || c > 'u')) { + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + } else { + scan->accumulator = scan->accumulator*85 + c - '!'; + if (++scan->accumulator_count == 5) { + buffer_check (ctx, scan, 4); + buffer_add (&scan->buffer, (scan->accumulator >> 24) & 0xff); + buffer_add (&scan->buffer, (scan->accumulator >> 16) & 0xff); + buffer_add (&scan->buffer, (scan->accumulator >> 8) & 0xff); + buffer_add (&scan->buffer, (scan->accumulator >> 0) & 0xff); + + scan->accumulator = 0; + scan->accumulator_count = 0; + } + } +} + +static void +base85_end (csi_t *ctx, csi_scanner_t *scan, cairo_bool_t deflate) +{ + csi_object_t obj; + cairo_status_t status; + + buffer_check (ctx, scan, 4); + + switch (scan->accumulator_count) { + case 0: + break; + case 1: + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + break; + + case 2: + scan->accumulator = scan->accumulator * (85*85*85) + 85*85*85 -1; + buffer_add (&scan->buffer, (scan->accumulator >> 24) & 0xff); + break; + case 3: + scan->accumulator = scan->accumulator * (85*85) + 85*85 -1; + buffer_add (&scan->buffer, (scan->accumulator >> 24) & 0xff); + buffer_add (&scan->buffer, (scan->accumulator >> 16) & 0xff); + break; + case 4: + scan->accumulator = scan->accumulator * 85 + 84; + buffer_add (&scan->buffer, (scan->accumulator >> 24) & 0xff); + buffer_add (&scan->buffer, (scan->accumulator >> 16) & 0xff); + buffer_add (&scan->buffer, (scan->accumulator >> 8) & 0xff); + break; + } + + if (deflate) { + uLongf len = be32 (*(uint32_t *) scan->buffer.base); + Bytef *source = (Bytef *) (scan->buffer.base + sizeof (uint32_t)); + + status = csi_string_deflate_new (ctx, &obj, + source, + (Bytef *) scan->buffer.ptr - source, + len); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + } else { + status = csi_string_new (ctx, + &obj, + scan->buffer.base, + scan->buffer.ptr - scan->buffer.base); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + } + + if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL) + status = csi_array_append (ctx, + scan->build_procedure.datum.array, + &obj); + else + status = scan_push (ctx, &obj); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); +} + +static void +base64_add (csi_t *ctx, csi_scanner_t *scan, int c) +{ + int val; + + /* Convert Base64 character to its 6 bit nibble */ + val = scan->accumulator; + if (c =='/') { + val = (val << 6) | 63; + } else if (c =='+') { + val = (val << 6) | 62; + } else if (c >='A' && c <='Z') { + val = (val << 6) | (c -'A'); + } else if (c >='a' && c <='z') { + val = (val << 6) | (c -'a' + 26); + } else if (c >='0' && c <='9') { + val = (val << 6) | (c -'0' + 52); + } + + buffer_check (ctx, scan, 1); + switch (scan->accumulator_count++) { + case 0: + break; + + case 1: + buffer_add (&scan->buffer, (val >> 4) & 0xFF); + val &= 0xF; + break; + + case 2: + buffer_add (&scan->buffer, (val >> 2) & 0xFF); + val &= 0x3; + break; + + case 3: + buffer_add (&scan->buffer, (val >> 0) & 0xFF); + scan->accumulator_count = 0; + val = 0; + break; + } + + if (c == '=') { + scan->accumulator_count = 0; + scan->accumulator = 0; + } else { + scan->accumulator = val; + } +} + +static void +base64_end (csi_t *ctx, csi_scanner_t *scan) +{ + csi_object_t obj; + cairo_status_t status; + + switch (scan->accumulator_count) { + case 0: + break; + case 2: + base64_add (ctx, scan, (scan->accumulator << 2) & 0x3f); + base64_add (ctx, scan, '='); + break; + case 1: + base64_add (ctx, scan, (scan->accumulator << 4) & 0x3f); + base64_add (ctx, scan, '='); + base64_add (ctx, scan, '='); + break; + } + + status = csi_string_new (ctx, + &obj, + scan->buffer.base, + scan->buffer.ptr - scan->buffer.base); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + + if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL) + status = csi_array_append (ctx, + scan->build_procedure.datum.array, + &obj); + else + status = scan_push (ctx, &obj); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); +} + +static void +scan_read (csi_scanner_t *scan, csi_file_t *src, void *ptr, int len) +{ + uint8_t *data = ptr; + do { + int ret = csi_file_read (src, data, len); + if (_csi_unlikely (ret == 0)) + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_READ_ERROR)); + data += ret; + len -= ret; + } while (_csi_unlikely (len)); +} + +static void +string_read (csi_t *ctx, + csi_scanner_t *scan, + csi_file_t *src, + int len, + int compressed, + csi_object_t *obj) +{ + csi_status_t status; + + status = csi_string_new (ctx, obj, NULL, len); + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + + if (compressed) { + uint32_t u32; + scan_read (scan, src, &u32, 4); + obj->datum.string->deflate = be32 (u32); + obj->datum.string->method = compressed; + } + + if (_csi_likely (len)) + scan_read (scan, src, obj->datum.string->string, len); + obj->datum.string->string[len] = '\0'; +} + +static void +_scan_file (csi_t *ctx, csi_file_t *src) +{ + csi_scanner_t *scan = &ctx->scanner; + int c, next; + union { + int8_t i8; + uint8_t u8; + int16_t i16; + uint16_t u16; + int32_t i32; + uint32_t u32; + float f; + } u; + int deflate = 0; + int string_p; + +scan_none: + while ((c = csi_file_getc (src)) != EOF) { + csi_object_t obj = { CSI_OBJECT_TYPE_NULL }; + + switch (c) { + case 0xa: + scan->line_number++; + case 0x0: + case 0x9: + case 0xc: + case 0xd: + case 0x20: /* ignore whitespace */ + break; + + case '%': + goto scan_comment; + + case '(': + goto scan_string; + + case '[': /* needs special case */ + case ']': + case '{': + case '}': + token_start (scan); + token_add_unchecked (scan, c); + token_end (ctx, scan, src); + goto scan_none; + + case '<': + next = csi_file_getc (src); + switch (next) { + case EOF: + csi_file_putc (src, '<'); + return; + case '<': + /* dictionary name */ + token_start (scan); + token_add_unchecked (scan, '<'); + token_add_unchecked (scan, '<'); + token_end (ctx, scan, src); + goto scan_none; + case '|': + deflate = 1; + case '~': + goto scan_base85; + case '{': + goto scan_base64; + default: + csi_file_putc (src, next); + goto scan_hex; + } + break; + + /* binary token */ +#define MSB_INT8 128 +#define MSB_UINT8 129 +#define MSB_INT16 130 +#define MSB_UINT16 131 +#define MSB_INT32 132 +#define LSB_INT8 MSB_INT8 +#define LSB_UINT8 MSB_UINT8 +#define LSB_INT16 133 +#define LSB_UINT16 134 +#define LSB_INT32 135 +#define MSB_FLOAT32 140 +#define LSB_FLOAT32 141 + case MSB_INT8: + scan_read (scan, src, &u.i8, 1); + csi_integer_new (&obj, u.i8); + break; + case MSB_UINT8: + scan_read (scan, src, &u.u8, 1); + csi_integer_new (&obj, u.u8); + break; + case MSB_INT16: + scan_read (scan, src, &u.i16, 2); + csi_integer_new (&obj, be16 (u.i16)); + break; + case LSB_INT16: + scan_read (scan, src, &u.i16, 2); + csi_integer_new (&obj, le16 (u.i16)); + break; + case MSB_UINT16: + scan_read (scan, src, &u.u16, 2); + csi_integer_new (&obj, be16 (u.u16)); + break; + case LSB_UINT16: + scan_read (scan, src, &u.u16, 2); + csi_integer_new (&obj, le16 (u.u16)); + break; + case MSB_INT32: + scan_read (scan, src, &u.i32, 4); + csi_integer_new (&obj, be32 (u.i32)); + break; + case LSB_INT32: + scan_read (scan, src, &u.i32, 4); + csi_integer_new (&obj, le32 (u.i32)); + break; + + case 136: /* 16.16 msb */ + scan_read (scan, src, &u.i32, 4); + csi_real_new (&obj, be32 (u.i32) / 65536.); + break; + case 137: /* 16.16 lsb */ + scan_read (scan, src, &u.i32, 4); + csi_real_new (&obj, le32 (u.i32) / 65536.); + break; + case 138: /* 24.8 msb */ + scan_read (scan, src, &u.i32, 4); + csi_real_new (&obj, be32 (u.i32) / 256.); + break; + case 139: /* 24.8 lsb */ + scan_read (scan, src, &u.i32, 4); + csi_real_new (&obj, le32 (u.i32) / 256.); + break; + case MSB_FLOAT32: + scan_read (scan, src, &u.i32, 4); + u.i32 = be32 (u.i32); + csi_real_new (&obj, u.f); + break; + case LSB_FLOAT32: + scan_read (scan, src, &u.i32, 4); + u.i32 = le32 (u.i32); + csi_real_new (&obj, u.f); + break; + +#define STRING_1 142 +#define STRING_2_MSB 144 +#define STRING_2_LSB 146 +#define STRING_4_MSB 148 +#define STRING_4_LSB 150 +#define STRING_DEFLATE 1 + case STRING_1: + case STRING_1 | STRING_DEFLATE: + scan_read (scan, src, &u.u8, 1); + string_read (ctx, scan, src, u.u8, c & STRING_DEFLATE, &obj); + break; + case STRING_2_MSB: + case STRING_2_MSB | STRING_DEFLATE: + scan_read (scan, src, &u.u16, 2); + string_read (ctx, scan, src, be16 (u.u16), c & STRING_DEFLATE, &obj); + break; + case STRING_2_LSB: + case STRING_2_LSB | STRING_DEFLATE: + scan_read (scan, src, &u.u16, 2); + string_read (ctx, scan, src, le16 (u.u16), c & STRING_DEFLATE, &obj); + break; + case STRING_4_MSB: + case STRING_4_MSB | STRING_DEFLATE: + scan_read (scan, src, &u.u32, 4); + string_read (ctx, scan, src, be32 (u.u32), c & STRING_DEFLATE, &obj); + break; + case STRING_4_LSB: + case STRING_4_LSB | STRING_DEFLATE: + scan_read (scan, src, &u.u32, 4); + string_read (ctx, scan, src, le32 (u.u32), c & STRING_DEFLATE, &obj); + break; + +#define OPCODE 152 + case OPCODE: + scan_read (scan, src, &u.u8, 1); + csi_operator_new (&obj, ctx->opcode[u.u8]); + break; + + case OPCODE | 1: + scan_read (scan, src, &u.u8, 1); + csi_operator_new (&obj, ctx->opcode[u.u8]); + obj.type &= ~CSI_OBJECT_ATTR_EXECUTABLE; + break; + +#define STRING_LZO 154 + case STRING_LZO: + scan_read (scan, src, &u.u32, 4); + string_read (ctx, scan, src, be32 (u.u32), LZO, &obj); + break; + + /* unassigned */ + case 155: + case 156: + case 157: + case 158: + case 159: + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + + case '#': /* PDF 1.2 escape code */ + { + int c_hi = csi_file_getc (src); + int c_lo = csi_file_getc (src); + c = (hex_value (c_hi) << 4) | hex_value (c_lo); + } + /* fall-through */ + default: + token_start (scan); + token_add_unchecked (scan, c); + goto scan_token; + } + + if (obj.type != CSI_OBJECT_TYPE_NULL) { + cairo_status_t status; + + if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL) { + status = csi_array_append (ctx, + scan->build_procedure.datum.array, + &obj); + } else if (obj.type & CSI_OBJECT_ATTR_EXECUTABLE) { + status = scan_execute (ctx, &obj); + csi_object_free (ctx, &obj); + } else { + status = scan_push (ctx, &obj); + } + if (_csi_unlikely (status)) + longjmp (scan->jump_buffer, status); + } + } + return; + +scan_token: + while ((c = csi_file_getc (src)) != EOF) { + switch (c) { + case 0xa: + scan->line_number++; + case 0x0: + case 0x9: + case 0xc: + case 0xd: + case 0x20: + token_end (ctx, scan, src); + goto scan_none; + + /* syntax delimiters */ + case '%': + token_end (ctx, scan, src); + goto scan_comment; + /* syntax error? */ + case '(': + token_end (ctx, scan, src); + goto scan_string; + /* XXX syntax error? */ + case ')': + token_end (ctx, scan, src); + goto scan_none; + case '/': + /* need to special case '^//?' */ + if (scan->buffer.ptr > scan->buffer.base+1 || + scan->buffer.base[0] != '/') + { + token_end (ctx, scan, src); + token_start (scan); + } + token_add_unchecked (scan, '/'); + goto scan_token; + + case '{': + case '}': + case ']': + token_end (ctx, scan, src); + token_start (scan); + token_add_unchecked (scan, c); + token_end (ctx, scan, src); + goto scan_none; + + case '<': + csi_file_putc (src, '<'); + token_end (ctx, scan, src); + goto scan_none; + + case '#': /* PDF 1.2 escape code */ + { + int c_hi = csi_file_getc (src); + int c_lo = csi_file_getc (src); + c = (hex_value (c_hi) << 4) | hex_value (c_lo); + } + /* fall-through */ + default: + token_add (ctx, scan, c); + break; + } + } + token_end (ctx, scan, src); + return; + +scan_comment: + /* discard until newline */ + while ((c = csi_file_getc (src)) != EOF) { + switch (c) { + case 0xa: + scan->line_number++; + case 0xc: + goto scan_none; + } + } + return; + +scan_string: + buffer_reset (&scan->buffer); + string_p = 1; + while ((c = csi_file_getc (src)) != EOF) { + switch (c) { + case '\\': /* escape */ + next = csi_file_getc (src); + switch (next) { + case EOF: + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + + case 'n': + string_add (ctx, scan, '\n'); + break; + case 'r': + string_add (ctx, scan, '\r'); + break; + case 't': + string_add (ctx, scan, '\t'); + break; + case 'b': + string_add (ctx, scan, '\b'); + break; + case 'f': + string_add (ctx, scan, '\f'); + break; + case '\\': + string_add (ctx, scan, '\\'); + break; + case '(': + string_add (ctx, scan, '('); + break; + case ')': + string_add (ctx, scan, ')'); + break; + + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + { /* octal code: \d{1,3} */ + int i; + + c = next - '0'; + + for (i = 0; i < 2; i++) { + next = csi_file_getc (src); + switch (next) { + case EOF: + return; + + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + c = 8*c + next-'0'; + break; + + default: + csi_file_putc (src, next); + goto octal_code_done; + } + } + octal_code_done: + string_add (ctx, scan, c); + } + break; + + case 0xa: + /* skip the newline */ + next = csi_file_getc (src); /* might be compound LFCR */ + switch (next) { + case EOF: + return; + case 0xc: + break; + default: + csi_file_putc (src, next); + break; + } + scan->line_number++; + break; + case 0xc: + break; + + default: + /* ignore the '\' */ + break; + } + break; + + case '(': + string_p++; + string_add (ctx, scan, c); + break; + + case ')': + if (--string_p == 0) { + string_end (ctx, scan); + goto scan_none; + } + /* fall through */ + default: + string_add (ctx, scan, c); + break; + } + } + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + +scan_hex: + buffer_reset (&scan->buffer); + scan->accumulator_count = 0; + scan->accumulator = 0; + while ((c = csi_file_getc (src)) != EOF) { + switch (c) { + case 0xa: + scan->line_number++; + case 0x0: + case 0x9: + case 0xc: + case 0xd: + case 0x20: /* ignore whitespace */ + break; + + case '>': + hex_end (ctx, scan); /* fixup odd digit with '0' */ + goto scan_none; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + hex_add (ctx, scan, c); + break; + + default: + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + } + } + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + +scan_base85: + buffer_reset (&scan->buffer); + scan->accumulator = 0; + scan->accumulator_count = 0; + while ((c = csi_file_getc (src)) != EOF) { + switch (c) { + case '~': + next = csi_file_getc (src); + switch (next) { + case EOF: + return; + + case '>': + base85_end (ctx, scan, deflate); + deflate = 0; + goto scan_none; + } + csi_file_putc (src, next); + + /* fall-through */ + default: + base85_add (ctx, scan, c); + break; + } + } + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + +scan_base64: + buffer_reset (&scan->buffer); + scan->accumulator = 0; + scan->accumulator_count = 0; + while ((c = csi_file_getc (src)) != EOF) { + switch (c) { + case '}': + next = csi_file_getc (src); + switch (next) { + case EOF: + return; + + case '>': + base64_end (ctx, scan); + goto scan_none; + } + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + + default: + base64_add (ctx, scan, c); + break; + } + } + longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); +} + +static csi_status_t +_scan_push (csi_t *ctx, csi_object_t *obj) +{ + if (DEBUG_SCAN) { + fprintf (stderr, "push "); + fprintf_obj (stderr, ctx, obj); + } + return _csi_push_ostack (ctx, obj); +} + +static csi_status_t +_scan_execute (csi_t *ctx, csi_object_t *obj) +{ + if (DEBUG_SCAN) { + fprintf (stderr, "exec "); + fprintf_obj (stderr, ctx, obj); + } + return csi_object_execute (ctx, obj); +} + +csi_status_t +_csi_scanner_init (csi_t *ctx, csi_scanner_t *scanner) +{ + csi_status_t status; + + memset (scanner, 0, sizeof (csi_scanner_t)); + + status = buffer_init (ctx, &scanner->buffer); + if (status) + return status; + + status = _csi_stack_init (ctx, &scanner->procedure_stack, 4); + if (status) + return status; + + scanner->bind = 0; + scanner->push = _scan_push; + scanner->execute = _scan_execute; + + return CSI_STATUS_SUCCESS; +} + +void +_csi_scanner_fini (csi_t *ctx, csi_scanner_t *scanner) +{ + buffer_fini (ctx, &scanner->buffer); + _csi_stack_fini (ctx, &scanner->procedure_stack); + if (scanner->build_procedure.type != CSI_OBJECT_TYPE_NULL) + csi_object_free (ctx, &scanner->build_procedure); +} + +csi_status_t +_csi_scan_file (csi_t *ctx, csi_file_t *src) +{ + csi_status_t status; + int old_line_number; + + /* This function needs to be reentrant to handle recursive scanners. + * i.e. one script executes a second. + */ + + if (ctx->scanner.depth++ == 0) { + if ((status = setjmp (ctx->scanner.jump_buffer))) { + ctx->scanner.depth = 0; + return status; + } + } + + old_line_number = ctx->scanner.line_number; + ctx->scanner.line_number = 0; + + _scan_file (ctx, src); + + ctx->scanner.line_number = old_line_number; + + --ctx->scanner.depth; + return CSI_STATUS_SUCCESS; +} + +struct _translate_closure { + csi_dictionary_t *opcodes; + cairo_write_func_t write_func; + void *closure; +}; + +static csi_status_t +_translate_name (csi_t *ctx, + csi_name_t name, + csi_boolean_t executable, + struct _translate_closure *closure) +{ + if (executable) { + csi_dictionary_entry_t *entry; + uint16_t u16; + + /* Bind executable names. + * XXX This may break some scripts that overload system operators. + */ + entry = _csi_hash_table_lookup (&closure->opcodes->hash_table, + (csi_hash_entry_t *) &name); + if (entry == NULL) + goto STRING; + + u16 = entry->value.datum.integer; + u16 = be16 (u16); + closure->write_func (closure->closure, (unsigned char *) &u16, 2); + } else { + closure->write_func (closure->closure, (unsigned char *) "/", 1); +STRING: + closure->write_func (closure->closure, + (unsigned char *) name, + strlen ((char *) name)); + closure->write_func (closure->closure, (unsigned char *) "\n", 1); + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_translate_operator (csi_t *ctx, + csi_operator_t op, + csi_boolean_t executable, + struct _translate_closure *closure) +{ + csi_dictionary_entry_t *entry; + uint16_t u16; + + entry = _csi_hash_table_lookup (&closure->opcodes->hash_table, + (csi_hash_entry_t *) &op); + if (entry == NULL) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + u16 = entry->value.datum.integer; + if (! executable) + u16 += 1 << 8; + u16 = be16 (u16); + closure->write_func (closure->closure, (unsigned char *) &u16, 2); + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_translate_integer (csi_t *ctx, + csi_integer_t i, + struct _translate_closure *closure) +{ + uint8_t hdr; + union { + int8_t i8; + uint8_t u8; + int16_t i16; + uint16_t u16; + int32_t i32; + uint32_t u32; + } u; + int len; + +#if WORDS_BIGENDIAN + if (i < INT16_MIN) { + hdr = MSB_INT32; + len = 4; + u.i32 = i; + } else if (i < INT8_MIN) { + hdr = MSB_INT16; + len = 2; + u.i16 = i; + } else if (i < 0) { + hdr = MSB_INT8; + len = 1; + u.i8 = i; + } else if (i <= UINT8_MAX) { + hdr = MSB_UINT8; + len = 1; + u.u8 = i; + } else if (i <= UINT16_MAX) { + hdr = MSB_UINT16; + len = 2; + u.u16 = i; + } else { + hdr = MSB_INT32; + len = 4; + u.u32 = i; + } +#else + if (i < INT16_MIN) { + hdr = LSB_INT32; + len = 4; + u.i32 = i; + } else if (i < INT8_MIN) { + hdr = LSB_INT16; + len = 2; + u.i16 = i; + } else if (i < 0) { + hdr = LSB_INT8; + len = 1; + u.i8 = i; + } else if (i <= UINT8_MAX) { + hdr = LSB_UINT8; + len = 1; + u.u8 = i; + } else if (i <= UINT16_MAX) { + hdr = LSB_UINT16; + len = 2; + u.u16 = i; + } else { + hdr = LSB_INT32; + len = 4; + u.u32 = i; + } +#endif + + closure->write_func (closure->closure, (unsigned char *) &hdr, 1); + closure->write_func (closure->closure, (unsigned char *) &u, len); + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_translate_real (csi_t *ctx, + csi_real_t real, + struct _translate_closure *closure) +{ + uint8_t hdr; + + if (real >= INT32_MIN && real <= INT32_MAX && (int) real == real) + return _translate_integer (ctx, real, closure); + +#if WORDS_BIGENDIAN + hdr = MSB_FLOAT32; +#else + hdr = LSB_FLOAT32; +#endif + closure->write_func (closure->closure, (unsigned char *) &hdr, 1); + closure->write_func (closure->closure, (unsigned char *) &real, 4); + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_translate_string (csi_t *ctx, + csi_string_t *string, + struct _translate_closure *closure) +{ + uint8_t hdr; + union { + uint8_t u8; + uint16_t u16; + uint32_t u32; + } u; + void *buf; + unsigned long hdr_len, buf_len, deflate; + int method; + + buf = string->string; + buf_len = string->len; + deflate = string->deflate; + method = string->method; + +#if HAVE_LZO + if (method == NONE && buf_len > 16) { + unsigned long mem_len = 2*string->len > LZO2A_999_MEM_COMPRESS ? 2*string->len : LZO2A_999_MEM_COMPRESS; + void *mem = malloc (mem_len); + void *work = malloc(LZO2A_999_MEM_COMPRESS); + + if (lzo2a_999_compress ((lzo_bytep) buf, buf_len, + (lzo_bytep) mem, &mem_len, + work) == 0 && + 8+2*mem_len < buf_len) + { + method = LZO; + deflate = buf_len; + buf_len = mem_len; + buf = mem; + } + else + { + free (mem); + } + + free (work); + } +#if HAVE_ZLIB + if (method == ZLIB) { + buf_len = string->deflate; + buf = malloc (string->deflate); + if (uncompress ((Bytef *) buf, &buf_len, + (Bytef *) string->string, string->len) == Z_OK) + { + assert(string->len > 0); + if (buf_len <= 8 + 2*((unsigned long)string->len)) { + method = NONE; + deflate = 0; + } else { + unsigned long mem_len = 2*string->deflate; + void *mem = malloc (mem_len); + void *work = malloc(LZO2A_999_MEM_COMPRESS); + + if (lzo2a_999_compress ((lzo_bytep) buf, buf_len, + (lzo_bytep) mem, &mem_len, + work) == 0) + { + if (8 + mem_len > buf_len) { + method = NONE; + deflate = 0; + } else { + free (buf); + method = LZO; + deflate = buf_len; + buf_len = mem_len; + buf = mem; + assert(deflate); + } + } + else + { + free (buf); + buf = string->string; + buf_len = string->len; + } + + free (work); + } + } + else + { + free (buf); + buf = string->string; + buf_len = string->len; + } + } +#endif +#endif + + if (method == LZO) { + hdr = STRING_LZO; + u.u32 = to_be32 (buf_len); + hdr_len = 4; + } else { +#if WORDS_BIGENDIAN + if (buf_len <= UINT8_MAX) { + hdr = STRING_1; + u.u8 = buf_len; + hdr_len = 1; + } else if (buf_len <= UINT16_MAX) { + hdr = STRING_2_MSB; + u.u16 = buf_len; + hdr_len = 2; + } else { + hdr = STRING_4_MSB; + u.u32 = buf_len; + hdr_len = 4; + } +#else + if (buf_len <= UINT8_MAX) { + hdr = STRING_1; + u.u8 = buf_len; + hdr_len = 1; + } else if (buf_len <= UINT16_MAX) { + hdr = STRING_2_LSB; + u.u16 = buf_len; + hdr_len = 2; + } else { + hdr = STRING_4_LSB; + u.u32 = buf_len; + hdr_len = 4; + } +#endif + if (deflate) { + assert (method == ZLIB); + hdr |= STRING_DEFLATE; + } + } + + closure->write_func (closure->closure, (unsigned char *) &hdr, 1); + closure->write_func (closure->closure, (unsigned char *) &u, hdr_len); + if (deflate) { + uint32_t u32 = to_be32 (deflate); + closure->write_func (closure->closure, (unsigned char *) &u32, 4); + } + closure->write_func (closure->closure, (unsigned char *) buf, buf_len); + + if (buf != string->string) + free (buf); + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_translate_push (csi_t *ctx, csi_object_t *obj) +{ + struct _translate_closure *closure = ctx->scanner.closure; + + if (0) { + fprintf (stderr, "push "); + fprintf_obj (stderr, ctx, obj); + } + + switch (csi_object_get_type (obj)) { + case CSI_OBJECT_TYPE_NAME: + return _translate_name (ctx, obj->datum.name, FALSE, closure); + + case CSI_OBJECT_TYPE_OPERATOR: + return _translate_operator (ctx, obj->datum.op, FALSE, closure); + + case CSI_OBJECT_TYPE_INTEGER: + return _translate_integer (ctx, obj->datum.integer, closure); + + case CSI_OBJECT_TYPE_REAL: + return _translate_real (ctx, obj->datum.real, closure); + + case CSI_OBJECT_TYPE_STRING: + return _translate_string (ctx, obj->datum.string, closure); + + case CSI_OBJECT_TYPE_NULL: + case CSI_OBJECT_TYPE_BOOLEAN: + case CSI_OBJECT_TYPE_MARK: + case CSI_OBJECT_TYPE_ARRAY: + case CSI_OBJECT_TYPE_DICTIONARY: + case CSI_OBJECT_TYPE_FILE: + case CSI_OBJECT_TYPE_MATRIX: + case CSI_OBJECT_TYPE_CONTEXT: + case CSI_OBJECT_TYPE_FONT: + case CSI_OBJECT_TYPE_PATTERN: + case CSI_OBJECT_TYPE_SCALED_FONT: + case CSI_OBJECT_TYPE_SURFACE: + longjmp (ctx->scanner.jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + break; + } + + csi_object_free (ctx, obj); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +_translate_execute (csi_t *ctx, csi_object_t *obj) +{ + struct _translate_closure *closure = ctx->scanner.closure; + + if (0) { + fprintf (stderr, "exec "); + fprintf_obj (stderr, ctx, obj); + } + + switch (csi_object_get_type (obj)) { + case CSI_OBJECT_TYPE_NAME: + return _translate_name (ctx, obj->datum.name, TRUE, closure); + + case CSI_OBJECT_TYPE_OPERATOR: + return _translate_operator (ctx, obj->datum.op, TRUE, closure); + + case CSI_OBJECT_TYPE_INTEGER: + return _translate_integer (ctx, obj->datum.integer, closure); + + case CSI_OBJECT_TYPE_REAL: + return _translate_real (ctx, obj->datum.real, closure); + + case CSI_OBJECT_TYPE_STRING: + return _translate_string (ctx, obj->datum.string, closure); + + case CSI_OBJECT_TYPE_NULL: + case CSI_OBJECT_TYPE_BOOLEAN: + case CSI_OBJECT_TYPE_MARK: + case CSI_OBJECT_TYPE_ARRAY: + case CSI_OBJECT_TYPE_DICTIONARY: + case CSI_OBJECT_TYPE_FILE: + case CSI_OBJECT_TYPE_MATRIX: + case CSI_OBJECT_TYPE_CONTEXT: + case CSI_OBJECT_TYPE_FONT: + case CSI_OBJECT_TYPE_PATTERN: + case CSI_OBJECT_TYPE_SCALED_FONT: + case CSI_OBJECT_TYPE_SURFACE: + longjmp (ctx->scanner.jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT)); + break; + } + + return CSI_STATUS_SUCCESS; +} + +static csi_status_t +build_opcodes (csi_t *ctx, csi_dictionary_t **out) +{ + csi_object_t obj; + csi_dictionary_t *dict; + const csi_operator_def_t *def; + csi_status_t status; + int opcode = OPCODE << 8; + + status = csi_dictionary_new (ctx, &obj); + if (_csi_unlikely (status)) + return status; + + dict = obj.datum.dictionary; + + csi_integer_new (&obj, opcode++); + status = csi_dictionary_put (ctx, dict, 0, &obj); + if (_csi_unlikely (status)) + goto FAIL; + + for (def = _csi_operators (); def->name != NULL; def++) { + csi_object_t name; + csi_dictionary_entry_t *entry; + int code; + + entry = _csi_hash_table_lookup (&dict->hash_table, + (csi_hash_entry_t *) &def->op); + if (entry == NULL) { + code = opcode++; + csi_integer_new (&obj, code); + status = csi_dictionary_put (ctx, dict, (csi_name_t) def->op, &obj); + if (_csi_unlikely (status)) + goto FAIL; + } else { + code = entry->value.datum.integer; + csi_integer_new (&obj, code); + } + assert (ctx->opcode[code & 0xff] == def->op); + + status = csi_name_new_static (ctx, &name, def->name); + if (_csi_unlikely (status)) + goto FAIL; + + status = csi_dictionary_put (ctx, dict, name.datum.name, &obj); + if (_csi_unlikely (status)) + goto FAIL; + } + + *out = dict; + return CSI_STATUS_SUCCESS; + +FAIL: + csi_dictionary_free (ctx, dict); + return status; +} + +csi_status_t +_csi_translate_file (csi_t *ctx, + csi_file_t *file, + cairo_write_func_t write_func, + void *closure) +{ + csi_status_t status; + struct _translate_closure translator; + + if ((status = setjmp (ctx->scanner.jump_buffer))) + return status; + + status = build_opcodes (ctx, &translator.opcodes); + if (_csi_unlikely (status)) + return status; + + translator.write_func = write_func; + translator.closure = closure; + ctx->scanner.closure = &translator; + + ctx->scanner.bind = 1; + ctx->scanner.push = _translate_push; + ctx->scanner.execute = _translate_execute; + + _scan_file (ctx, file); + + ctx->scanner.bind = 0; + ctx->scanner.push = _scan_push; + ctx->scanner.execute = _scan_execute; + + csi_dictionary_free (ctx, translator.opcodes); + + return CSI_STATUS_SUCCESS; +} diff --git a/libs/cairo-1.16.0/util/cairo-script/cairo-script-stack.c b/libs/cairo-1.16.0/util/cairo-script/cairo-script-stack.c new file mode 100644 index 0000000..ff1e91a --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/cairo-script-stack.c @@ -0,0 +1,198 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +#include "cairo-script-private.h" + +#include <limits.h> /* INT_MAX */ +#include <string.h> + +csi_status_t +_csi_stack_init (csi_t *ctx, csi_stack_t *stack, csi_integer_t size) +{ + csi_status_t status = CSI_STATUS_SUCCESS; + + stack->len = 0; + stack->size = size; + /* assert ((unsigned) size < INT_MAX / sizeof (csi_object_t)); */ + stack->objects = _csi_alloc (ctx, size * sizeof (csi_object_t)); + if (_csi_unlikely (stack->objects == NULL)) + status = _csi_error (CSI_STATUS_NO_MEMORY); + + return status; +} + +void +_csi_stack_fini (csi_t *ctx, csi_stack_t *stack) +{ + csi_integer_t n; + + for (n = 0; n < stack->len; n++) + csi_object_free (ctx, &stack->objects[n]); + + _csi_free (ctx, stack->objects); +} + +csi_status_t +_csi_stack_roll (csi_t *ctx, + csi_stack_t *stack, + csi_integer_t mod, csi_integer_t n) +{ + csi_object_t stack_copy[128]; + csi_object_t *copy; + csi_integer_t last, i, len; + + switch (mod) { /* special cases */ + case 1: + last = stack->len - 1; + stack_copy[0] = stack->objects[last]; + for (i = last; --n; i--) + stack->objects[i] = stack->objects[i-1]; + stack->objects[i] = stack_copy[0]; + return CSI_STATUS_SUCCESS; + case -1: + last = stack->len - 1; + stack_copy[0] = stack->objects[i = last - n + 1]; + for (; --n; i++) + stack->objects[i] = stack->objects[i+1]; + stack->objects[i] = stack_copy[0]; + return CSI_STATUS_SUCCESS; + } + + /* fall back to a copy */ + if (n > ARRAY_LENGTH (stack_copy)) { + if (_csi_unlikely ((unsigned) n > INT_MAX / sizeof (csi_object_t))) + return _csi_error (CSI_STATUS_NO_MEMORY); + copy = _csi_alloc (ctx, n * sizeof (csi_object_t)); + if (copy == NULL) + return _csi_error (CSI_STATUS_NO_MEMORY); + } else + copy = stack_copy; + + i = stack->len - n; + memcpy (copy, stack->objects + i, n * sizeof (csi_object_t)); + mod = -mod; + if (mod < 0) + mod += n; + last = mod; + for (len = n; n--; i++) { + stack->objects[i] = copy[last]; + if (++last == len) + last = 0; + } + + if (copy != stack_copy) + _csi_free (ctx, copy); + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +_csi_stack_grow (csi_t *ctx, csi_stack_t *stack, csi_integer_t cnt) +{ + csi_integer_t newsize; + csi_object_t *newstack; + + if (_csi_likely (cnt <= stack->size)) + return CSI_STATUS_SUCCESS; + if (_csi_unlikely ((unsigned) cnt >= INT_MAX / sizeof (csi_object_t))) + return _csi_error (CSI_STATUS_NO_MEMORY); + + newsize = stack->size; + do { + newsize *= 2; + } while (newsize <= cnt); + + newstack = _csi_realloc (ctx, + stack->objects, + newsize * sizeof (csi_object_t)); + if (_csi_unlikely (newstack == NULL)) + return _csi_error (CSI_STATUS_NO_MEMORY); + + stack->objects = newstack; + stack->size = newsize; + + return CSI_STATUS_SUCCESS; +} + +csi_status_t +_csi_stack_push_internal (csi_t *ctx, csi_stack_t *stack, + const csi_object_t *obj) +{ + csi_status_t status; + + status = _csi_stack_grow (ctx, stack, stack->size + 1); + if (_csi_unlikely (status)) + return status; + + stack->objects[stack->len++] = *obj; + return CSI_STATUS_SUCCESS; +} + +csi_object_t * +_csi_stack_peek (csi_stack_t *stack, csi_integer_t i) +{ + if (_csi_unlikely (stack->len < i)) + return NULL; + + return &stack->objects[stack->len - i -1]; +} + +void +_csi_stack_pop (csi_t *ctx, csi_stack_t *stack, csi_integer_t count) +{ + if (_csi_unlikely (stack->len < count)) + count = stack->len; + + while (count--) + csi_object_free (ctx, &stack->objects[--stack->len]); +} + +csi_status_t +_csi_stack_exch (csi_stack_t *stack) +{ + csi_object_t tmp; + csi_integer_t n; + + if (_csi_unlikely (stack->len < 2)) + return _csi_error (CSI_STATUS_INVALID_SCRIPT); + + n = stack->len - 1; + tmp = stack->objects[n]; + stack->objects[n] = stack->objects[n - 1]; + stack->objects[n - 1] = tmp; + + return CSI_STATUS_SUCCESS; +} diff --git a/libs/cairo-1.16.0/util/cairo-script/csi-bind.c b/libs/cairo-1.16.0/util/cairo-script/csi-bind.c new file mode 100644 index 0000000..b2a6d69 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/csi-bind.c @@ -0,0 +1,112 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +#include "cairo.h" +#include "cairo-script-interpreter.h" + +#include <stdio.h> +#include <stdlib.h> + +static cairo_status_t +write_func (void *closure, + const unsigned char *data, + unsigned int length) +{ + if (fwrite (data, length, 1, closure) != 1) + return CAIRO_STATUS_WRITE_ERROR; + + return CAIRO_STATUS_SUCCESS; +} + +int +main (int argc, char **argv) +{ + FILE *in = stdin, *out = stdout; + cairo_status_t status; + int i; + + if (argc >= 3) { + if (strcmp (argv[argc-1], "-")) { + out = fopen (argv[argc-1], "w"); + if (out == NULL) { + fprintf (stderr, "Failed to open output '%s'\n", argv[argc-1]); + return 1; + } + } + } + + if (argc > 2) { + for (i = 1; i < argc - 1; i++) { + in = fopen (argv[i], "r"); + if (in == NULL) { + fprintf (stderr, "Failed to open input '%s'\n", argv[i]); + return 1; + } + + status = cairo_script_interpreter_translate_stream (in, write_func, out); + fclose (in); + + if (status) + break; + } + } else { + if (argc > 1) { + if (strcmp (argv[1], "-")) { + in = fopen (argv[1], "r"); + if (in == NULL) { + fprintf (stderr, "Failed to open input '%s'\n", argv[1]); + return 1; + } + } + } + + status = cairo_script_interpreter_translate_stream (in, write_func, out); + + if (in != stdin) + fclose (in); + } + + if (out != stdout) + fclose (out); + + if (status) { + fprintf (stderr, "Translation failed: %s\n", + cairo_status_to_string (status)); + return status; + } + + return status; +} diff --git a/libs/cairo-1.16.0/util/cairo-script/csi-exec.c b/libs/cairo-1.16.0/util/cairo-script/csi-exec.c new file mode 100644 index 0000000..175328c --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/csi-exec.c @@ -0,0 +1,77 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +#include "cairo.h" +#include "cairo-script-interpreter.h" + +#include <stdio.h> +#include <stdlib.h> + +static cairo_surface_t * +_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + return cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); +} + +int +main (int argc, char **argv) +{ + const cairo_script_interpreter_hooks_t hooks = { + .surface_create = _surface_create + }; + cairo_script_interpreter_t *csi; + int i; + + for (i = 1; i < argc; i++) { + int status, line; + + csi = cairo_script_interpreter_create (); + cairo_script_interpreter_install_hooks (csi, &hooks); + cairo_script_interpreter_run (csi, argv[i]); + line = cairo_script_interpreter_get_line_number (csi); + status = cairo_script_interpreter_destroy (csi); + if (status) { + fprintf (stderr, "Error during replay of '%s', line %d: %d\n", + argv[i], line, status); + return 1; + } + } + + return 0; +} diff --git a/libs/cairo-1.16.0/util/cairo-script/csi-replay.c b/libs/cairo-1.16.0/util/cairo-script/csi-replay.c new file mode 100644 index 0000000..4c66b77 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/csi-replay.c @@ -0,0 +1,396 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +#include "cairo.h" +#include "cairo-script-interpreter.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +static const cairo_user_data_key_t _key; + +#define SINGLE_SURFACE 1 + +#if SINGLE_SURFACE +static cairo_surface_t * +_similar_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + return cairo_surface_create_similar (closure, content, width, height); +} + +static struct list { + struct list *next; + cairo_t *context; + cairo_surface_t *surface; +} *list; + +static cairo_t * +_context_create (void *closure, cairo_surface_t *surface) +{ + cairo_t *cr = cairo_create (surface); + struct list *l = malloc (sizeof (*l)); + l->next = list; + l->context = cr; + l->surface = cairo_surface_reference (surface); + list = l; + return cr; +} + +static void +_context_destroy (void *closure, void *ptr) +{ + struct list *l, **prev = &list; + while ((l = *prev) != NULL) { + if (l->context == ptr) { + if (cairo_surface_status (l->surface) == CAIRO_STATUS_SUCCESS) { + cairo_t *cr = cairo_create (closure); + cairo_set_source_surface (cr, l->surface, 0, 0); + cairo_paint (cr); + cairo_destroy (cr); + } + + cairo_surface_destroy (l->surface); + *prev = l->next; + free (l); + return; + } + prev = &l->next; + } +} +#endif + +#if CAIRO_HAS_XLIB_SURFACE +#include <cairo-xlib.h> +static Display * +_get_display (void) +{ + static Display *dpy; + + if (dpy != NULL) + return dpy; + + dpy = XOpenDisplay (NULL); + if (dpy == NULL) { + fprintf (stderr, "Failed to open display.\n"); + exit (1); + } + + return dpy; +} + +static void +_destroy_window (void *closure) +{ + XFlush (_get_display ()); + XDestroyWindow (_get_display(), (Window) closure); +} + +static cairo_surface_t * +_xlib_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + Display *dpy; + XSetWindowAttributes attr; + Visual *visual; + int depth; + Window w; + cairo_surface_t *surface; + + dpy = _get_display (); + + visual = DefaultVisual (dpy, DefaultScreen (dpy)); + depth = DefaultDepth (dpy, DefaultScreen (dpy)); + attr.override_redirect = True; + w = XCreateWindow (dpy, DefaultRootWindow (dpy), 0, 0, + width <= 0 ? 1 : width, + height <= 0 ? 1 : height, + 0, depth, + InputOutput, visual, CWOverrideRedirect, &attr); + XMapWindow (dpy, w); + + surface = cairo_xlib_surface_create (dpy, w, visual, width, height); + cairo_surface_set_user_data (surface, &_key, (void *) w, _destroy_window); + + return surface; +} + +#if CAIRO_HAS_XLIB_XRENDER_SURFACE +#include <cairo-xlib-xrender.h> + +static void +_destroy_pixmap (void *closure) +{ + XFreePixmap (_get_display(), (Pixmap) closure); +} + +static cairo_surface_t * +_xrender_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + Display *dpy; + Pixmap pixmap; + XRenderPictFormat *xrender_format; + cairo_surface_t *surface; + + dpy = _get_display (); + + content = CAIRO_CONTENT_COLOR_ALPHA; + + switch (content) { + case CAIRO_CONTENT_COLOR_ALPHA: + xrender_format = XRenderFindStandardFormat (dpy, PictStandardARGB32); + break; + case CAIRO_CONTENT_COLOR: + xrender_format = XRenderFindStandardFormat (dpy, PictStandardRGB24); + break; + case CAIRO_CONTENT_ALPHA: + default: + xrender_format = XRenderFindStandardFormat (dpy, PictStandardA8); + } + + pixmap = XCreatePixmap (dpy, DefaultRootWindow (dpy), + width, height, xrender_format->depth); + + surface = cairo_xlib_surface_create_with_xrender_format (dpy, pixmap, + DefaultScreenOfDisplay (dpy), + xrender_format, + width, height); + cairo_surface_set_user_data (surface, &_key, + (void *) pixmap, _destroy_pixmap); + + return surface; +} +#endif +#endif + +#if CAIRO_HAS_GL_GLX_SURFACE +#include <cairo-gl.h> +static cairo_gl_context_t * +_glx_get_context (cairo_content_t content) +{ + static cairo_gl_context_t *context; + + if (context == NULL) { + int rgba_attribs[] = { + GLX_RGBA, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_ALPHA_SIZE, 1, + GLX_DOUBLEBUFFER, + None + }; + XVisualInfo *visinfo; + GLXContext gl_ctx; + Display *dpy; + + dpy = XOpenDisplay (NULL); + if (dpy == NULL) { + fprintf (stderr, "Failed to open display.\n"); + exit (1); + } + + visinfo = glXChooseVisual (dpy, DefaultScreen (dpy), rgba_attribs); + if (visinfo == NULL) { + fprintf (stderr, "Failed to create RGBA, double-buffered visual\n"); + exit (1); + } + + gl_ctx = glXCreateContext (dpy, visinfo, NULL, True); + XFree (visinfo); + + context = cairo_glx_context_create (dpy, gl_ctx); + } + + return context; +} + +static cairo_surface_t * +_glx_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + if (width == 0) + width = 1; + if (height == 0) + height = 1; + + return cairo_gl_surface_create (_glx_get_context (content), + content, width, height); +} +#endif + +#if CAIRO_HAS_PDF_SURFACE +#include <cairo-pdf.h> +static cairo_surface_t * +_pdf_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + return cairo_pdf_surface_create_for_stream (NULL, NULL, width, height); +} +#endif + +#if CAIRO_HAS_PS_SURFACE +#include <cairo-ps.h> +static cairo_surface_t * +_ps_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + return cairo_ps_surface_create_for_stream (NULL, NULL, width, height); +} +#endif + +#if CAIRO_HAS_SVG_SURFACE +#include <cairo-svg.h> +static cairo_surface_t * +_svg_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + return cairo_svg_surface_create_for_stream (NULL, NULL, width, height); +} +#endif + +static cairo_surface_t * +_image_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + return cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); +} + +int +main (int argc, char **argv) +{ + cairo_script_interpreter_t *csi; + cairo_script_interpreter_hooks_t hooks = { +#if SINGLE_SURFACE + .surface_create = _similar_surface_create, + .context_create = _context_create, + .context_destroy = _context_destroy +#elif CAIRO_HAS_XLIB_XRENDER_SURFACE + .surface_create = _xrender_surface_create +#elif CAIRO_HAS_XLIB_SURFACE + .surface_create = _xlib_surface_create +#elif CAIRO_PDF_SURFACE + .surface_create = _pdf_surface_create +#elif CAIRO_PS_SURFACE + .surface_create = _ps_surface_create +#elif CAIRO_SVG_SURFACE + .surface_create = _svg_surface_create +#else + .surface_create = _image_surface_create +#endif + }; + int i; + const struct backends { + const char *name; + csi_surface_create_func_t create; + } backends[] = { + { "--image", _image_surface_create }, +#if CAIRO_HAS_XLIB_XRENDER_SURFACE + { "--xrender", _xrender_surface_create }, +#endif +#if CAIRO_HAS_GL_GLX_SURFACE + { "--glx", _glx_surface_create }, +#endif +#if CAIRO_HAS_XLIB_SURFACE + { "--xlib", _xlib_surface_create }, +#endif +#if CAIRO_HAS_PDF_SURFACE + { "--pdf", _pdf_surface_create }, +#endif +#if CAIRO_HAS_PS_SURFACE + { "--ps", _ps_surface_create }, +#endif +#if CAIRO_HAS_SVG_SURFACE + { "--svg", _svg_surface_create }, +#endif + { NULL, NULL } + }; + +#if SINGLE_SURFACE + hooks.closure = backends[0].create (NULL, + CAIRO_CONTENT_COLOR_ALPHA, + 512, 512, + 0); +#endif + + + csi = cairo_script_interpreter_create (); + cairo_script_interpreter_install_hooks (csi, &hooks); + + for (i = 1; i < argc; i++) { + const struct backends *b; + + for (b = backends; b->name != NULL; b++) { + if (strcmp (b->name, argv[i]) == 0) { +#if SINGLE_SURFACE + cairo_surface_destroy (hooks.closure); + hooks.closure = b->create (NULL, + CAIRO_CONTENT_COLOR_ALPHA, + 512, 512, + 0); +#else + hooks.surface_create = b->create; +#endif + cairo_script_interpreter_install_hooks (csi, &hooks); + break; + } + } + + if (b->name == NULL) + cairo_script_interpreter_run (csi, argv[i]); + } + cairo_surface_destroy (hooks.closure); + + return cairo_script_interpreter_destroy (csi); +} diff --git a/libs/cairo-1.16.0/util/cairo-script/csi-trace.c b/libs/cairo-1.16.0/util/cairo-script/csi-trace.c new file mode 100644 index 0000000..e93b28c --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/csi-trace.c @@ -0,0 +1,84 @@ +/* + * Copyright © 2008 Chris Wilson <chris@chris-wilson.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is Chris Wilson. + * + * Contributor(s): + * Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include "config.h" + +#include "cairo-script.h" +#include "cairo-script-interpreter.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <libgen.h> + +static cairo_surface_t * +_script_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + return cairo_script_surface_create (closure, content, width, height); +} + +int +main (int argc, char **argv) +{ + cairo_script_interpreter_t *csi; + cairo_script_interpreter_hooks_t hooks = { + .surface_create = _script_surface_create, + }; + int i; + char buf[4096]; + + csi = cairo_script_interpreter_create (); + + for (i = 1; i < argc; i++) { + if (strcmp (argv[i], "--version") == 0) { + printf ("%s: version %s\n", argv[0], __DATE__); + exit (0); + } else if (strcmp (argv[i], "--help") == 0) { + printf ("usage: %s < in > out\n", argv[0]); + exit (0); + } + + snprintf (buf, sizeof (buf), "%s.trace", basename (argv[i])); + cairo_device_destroy (hooks.closure); + hooks.closure = cairo_script_create (buf); + cairo_script_interpreter_install_hooks (csi, &hooks); + cairo_script_interpreter_run (csi, argv[i]); + } + cairo_device_destroy (hooks.closure); + + return cairo_script_interpreter_destroy (csi); +} diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/Makefile.am b/libs/cairo-1.16.0/util/cairo-script/examples/Makefile.am new file mode 100644 index 0000000..a87f02d --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/Makefile.am @@ -0,0 +1,10 @@ +EXTRA_DIST = \ + dragon.cs \ + hilbert.cs \ + infinichess.cs \ + interference.cs \ + pythagoras-tree.cs \ + sierpinski.cs \ + wedgeAnnulus_crop_ybRings.cs \ + world-map.cs \ + zrusin.cs diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/Makefile.in b/libs/cairo-1.16.0/util/cairo-script/examples/Makefile.in new file mode 100644 index 0000000..969076d --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/Makefile.in @@ -0,0 +1,566 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = util/cairo-script/examples +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \ + $(top_srcdir)/build/aclocal.compare.m4 \ + $(top_srcdir)/build/aclocal.enable.m4 \ + $(top_srcdir)/build/aclocal.float.m4 \ + $(top_srcdir)/build/aclocal.makefile.m4 \ + $(top_srcdir)/build/aclocal.pkg.m4 \ + $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \ + $(top_srcdir)/build/ltoptions.m4 \ + $(top_srcdir)/build/ltsugar.m4 \ + $(top_srcdir)/build/ltversion.m4 \ + $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/cairo-version.h \ + $(top_srcdir)/build/configure.ac.version \ + $(top_srcdir)/build/configure.ac.tools \ + $(top_srcdir)/build/configure.ac.features \ + $(top_srcdir)/build/configure.ac.warnings \ + $(top_srcdir)/build/configure.ac.system \ + $(top_srcdir)/build/configure.ac.analysis \ + $(top_srcdir)/build/configure.ac.noversion \ + $(top_srcdir)/build/configure.ac.pthread \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BFD_LIBS = @BFD_LIBS@ +CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_LDFLAGS = @CAIRO_LDFLAGS@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@ +CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@ +CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@ +CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@ +CAIRO_REQUIRES = @CAIRO_REQUIRES@ +CAIRO_TEST_MODE = @CAIRO_TEST_MODE@ +CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@ +CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@ +CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@ +CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@ +CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIND = @FIND@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ +GOBJECT_LIBS = @GOBJECT_LIBS@ +GREP = @GREP@ +GS = @GS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +LIBRSVG_LIBS = @LIBRSVG_LIBS@ +LIBS = @LIBS@ +LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@ +LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LTP = @LTP@ +LTP_GENHTML = @LTP_GENHTML@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@ +PKG_CONFIG = @PKG_CONFIG@ +POPPLER_CFLAGS = @POPPLER_CFLAGS@ +POPPLER_LIBS = @POPPLER_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHLIB_EXT = @SHLIB_EXT@ +SHM_LIBS = @SHM_LIBS@ +SHTOOL = @SHTOOL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +XARGS = @XARGS@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cogl_CFLAGS = @cogl_CFLAGS@ +cogl_LIBS = @cogl_LIBS@ +datadir = @datadir@ +datarootdir = @datarootdir@ +directfb_CFLAGS = @directfb_CFLAGS@ +directfb_LIBS = @directfb_LIBS@ +docdir = @docdir@ +drm_CFLAGS = @drm_CFLAGS@ +drm_LIBS = @drm_LIBS@ +dvidir = @dvidir@ +egl_CFLAGS = @egl_CFLAGS@ +egl_LIBS = @egl_LIBS@ +exec_prefix = @exec_prefix@ +gallium_DIR = @gallium_DIR@ +gl_CFLAGS = @gl_CFLAGS@ +gl_LIBS = @gl_LIBS@ +glesv2_CFLAGS = @glesv2_CFLAGS@ +glesv2_LIBS = @glesv2_LIBS@ +glesv3_CFLAGS = @glesv3_CFLAGS@ +glesv3_LIBS = @glesv3_LIBS@ +glib_CFLAGS = @glib_CFLAGS@ +glib_LIBS = @glib_LIBS@ +gtk_CFLAGS = @gtk_CFLAGS@ +gtk_LIBS = @gtk_LIBS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lzo_LIBS = @lzo_LIBS@ +mandir = @mandir@ +mesa_DIR = @mesa_DIR@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pixman_CFLAGS = @pixman_CFLAGS@ +pixman_LIBS = @pixman_LIBS@ +png_CFLAGS = @png_CFLAGS@ +png_LIBS = @png_LIBS@ +png_REQUIRES = @png_REQUIRES@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pthread_CFLAGS = @pthread_CFLAGS@ +pthread_LIBS = @pthread_LIBS@ +qt_CFLAGS = @qt_CFLAGS@ +qt_LIBS = @qt_LIBS@ +real_pthread_CFLAGS = @real_pthread_CFLAGS@ +real_pthread_LIBS = @real_pthread_LIBS@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +shm_LIBS = @shm_LIBS@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xcb_CFLAGS = @xcb_CFLAGS@ +xcb_LIBS = @xcb_LIBS@ +xcb_shm_CFLAGS = @xcb_shm_CFLAGS@ +xcb_shm_LIBS = @xcb_shm_LIBS@ +xlib_CFLAGS = @xlib_CFLAGS@ +xlib_LIBS = @xlib_LIBS@ +xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@ +xlib_xcb_LIBS = @xlib_xcb_LIBS@ +xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@ +xlib_xrender_LIBS = @xlib_xrender_LIBS@ +EXTRA_DIST = \ + dragon.cs \ + hilbert.cs \ + infinichess.cs \ + interference.cs \ + pythagoras-tree.cs \ + sierpinski.cs \ + wedgeAnnulus_crop_ybRings.cs \ + world-map.cs \ + zrusin.cs + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/cairo-script/examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign util/cairo-script/examples/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/dragon.cs b/libs/cairo-1.16.0/util/cairo-script/examples/dragon.cs new file mode 100644 index 0000000..1060ca6 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/dragon.cs @@ -0,0 +1,48 @@ +%!CairoScript +/pot { % n -- n + 1 sub + dup -1 bitshift or + dup -2 bitshift or + dup -4 bitshift or + dup -8 bitshift or + dup -16 bitshift or + 1 add +} bind def + +/direction { % i -- bool + dup 2 lt { pop true } { + dup 1 add dup pot dup 3 -1 roll eq { pop pop true } { + 2 div 1 sub 2 mul exch sub direction not + } ifelse + } ifelse +} bind def + +/path { % cr dx dy -- cr + 0 1 2048 { + 4 1 roll 3 copy L pop 4 -1 roll direction { + exch neg + } { + neg exch + } ifelse + } for + pop pop +} bind def + +dict + /width 512 set + /height 512 set + surface context + +1 g set-source paint + +//LINE_CAP_ROUND set-line-cap +//LINE_JOIN_ROUND set-line-join +4 set-line-width + +256 256 m 12 0 path 0 0 0 rgb set-source stroke +256 256 m -12 0 path 1 0 0 rgb set-source stroke +256 256 m 0 12 path 0 1 0 rgb set-source stroke +256 256 m 0 -12 path 0 0 1 rgb set-source stroke + +/target get (out.png) write-to-png pop +pop diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/hilbert.cs b/libs/cairo-1.16.0/util/cairo-script/examples/hilbert.cs new file mode 100644 index 0000000..4278bf7 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/hilbert.cs @@ -0,0 +1,51 @@ +%!CairoScript + +/hA { % cr dist lvl *hA* cr dist + dup not { pop } { + 1 sub + 3 copy hB 0 exch L pop + 3 copy hA 0 L pop + 3 copy hA neg 0 exch L pop + hC + } ifelse +} bind def + +/hB { % cr dist lvl *hB* cr dist + dup not { pop } { + 1 sub + 3 copy hA 0 L pop + 3 copy hB 0 exch L pop + 3 copy hB neg 0 L pop + hD + } ifelse +} bind def + +/hC { % cr dist lvl *hC* cr dist + dup not { pop } { + 1 sub + 3 copy hD neg 0 L pop + 3 copy hC neg 0 exch L pop + 3 copy hC 0 L pop + hA + } ifelse +} bind def + +/hD { % cr dist lvl *hD* cr dist + dup not { pop } { + 1 sub + 3 copy hC neg 0 exch L pop + 3 copy hD neg 0 L pop + 3 copy hD 0 exch L pop + hB + } ifelse +} bind def + +dict + /width 1024 set + /height 1024 set + surface context + +2 2 m 4 10 hA pop 1 g set-source stroke + +/target get (out.png) write-to-png pop +pop diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/infinichess.cs b/libs/cairo-1.16.0/util/cairo-script/examples/infinichess.cs new file mode 100644 index 0000000..f82b102 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/infinichess.cs @@ -0,0 +1,29 @@ +/xdef { exch def } def +/-rot { 3 1 roll } def +/rot { 3 -1 roll } def +/2dup { 2 copy } def + +/SIZE 600. def +<< /width SIZE /height SIZE >> surface context +1 1 1 set-source-rgb paint +0 0 0 set-source-rgb +EVEN_ODD set-fill-rule +SIZE SIZE scale + +0.5 0 translate + +save +1 1 scale +/n 90 def +n neg 1 n { + /x xdef + 0 0 m + x 1 l + x 0.5 add 1 l + 0 0 l +} for +restore +fill + +/target get (out.png) write-to-png pop +pop diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/interference.cs b/libs/cairo-1.16.0/util/cairo-script/examples/interference.cs new file mode 100644 index 0000000..6d2ee22 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/interference.cs @@ -0,0 +1,46 @@ +/rot { 3 -1 roll } def +/2dup { 2 copy } def + +/circle { % context radius -- context + 2dup 0 m pop + 0 0 rot 0 math.2pi arc h +} def + +/circles { % context #circles -- context + 1 1 rot { circle } for +} def + +/SIDE 600. def +/SIZE 600. def +<< /width SIZE /height SIZE >> surface context +1 1 1 set-source-rgb paint +0 0 0 set-source-rgb +//EVEN_ODD set-fill-rule + +/r 4 def +/n SIDE 1.5 mul r div integer def + +SIZE SIDE div dup scale + +save + 302 200 translate + r dup scale + n circles +restore + +save + 100 300 translate + r dup scale + n circles +restore + +save + 500 400 translate + r dup scale + n circles +restore + +fill + +/target get (out.png) write-to-png pop +pop diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/pythagoras-tree.cs b/libs/cairo-1.16.0/util/cairo-script/examples/pythagoras-tree.cs new file mode 100644 index 0000000..96b4b39 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/pythagoras-tree.cs @@ -0,0 +1,53 @@ +%!CairoScript + +/pi4 0.785398163 def +/sqrt2 1.414213562 def + +/R { % cr size *R* cr + dup 1 lt { pop } { + exch /current-point get % size cr x y + 4 2 roll % x y size cr + + % draw a rectangle in relative co-ordinates + 1 index 2 div neg dup exch M + 1 index 0 L + 0 2 index L + 1 index neg 0 L + h + + save + 1 index dup 2 div neg exch translate + 4 2 roll 3 copy % size cr x y cr x y + m + //pi4 rotate + pop 4 2 roll % x y size cr + 1 index //sqrt2 div + R + restore + + save + 1 index dup 2 div exch translate + 4 2 roll 3 copy % size cr x y cr x y + m + //pi4 neg rotate + pop 4 2 roll % x y size cr + 1 index //sqrt2 div + R + restore + + 4 1 roll pop pop pop + } ifelse +} bind def + +dict + /width 1024 set + /height 512 set + surface context + +1 1 1 set-source-rgb paint + +0 512 translate 1 -1 scale +512 64 m 128. R 0 0 0 set-source-rgb fill + +/target get (out.png) write-to-png pop +pop diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/sierpinski.cs b/libs/cairo-1.16.0/util/cairo-script/examples/sierpinski.cs new file mode 100644 index 0000000..6f95908 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/sierpinski.cs @@ -0,0 +1,37 @@ +%!CairoScript + +/1sqrt3 0.577359269 def + +/T { % cr size -- cr + exch % size cr + 0 0 m 1 index 0 l 1 index dup 2 div exch //1sqrt3 mul l h + + exch 2 div + dup 4 ge { + exch % size/2 cr + + 1 index T + save 1 index 0 translate 1 index T restore + save 1 index dup 2 div exch //1sqrt3 mul translate 1 index T restore + + exch + } if + pop +} bind def + +dict + /width 512 set + /height 300 set + surface context + +1 1 1 set-source-rgb paint + +.5 set-line-width + +0 300 translate +1 -1 scale + +512 T 0 0 0 set-source-rgb stroke + +/target get (out.png) write-to-png pop +pop diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/wedgeAnnulus_crop_ybRings.cs b/libs/cairo-1.16.0/util/cairo-script/examples/wedgeAnnulus_crop_ybRings.cs new file mode 100644 index 0000000..5aeb97f --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/wedgeAnnulus_crop_ybRings.cs @@ -0,0 +1,30 @@ +/SIDE 600 def + +<< /width SIDE /height SIDE >> surface context + +1 1 1 rgb set-source +paint + +SIDE dup scale +0.5 0.5 translate +0.5 -0.5 scale + +/theta math.pi 10 div def + +10 { + N + 0 0 1.0 0 //theta arc + 0 0 0.2 //theta 0 arc- + h + //theta rotate + //theta rotate +} repeat + +0 0 0.2 0 0 1 radial + 0.0 1 1 0 1 add-color-stop + 1.0 0 0 1 1 add-color-stop +set-source +fill + +/target get (out.png) write-to-png pop +pop diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/world-map.cs b/libs/cairo-1.16.0/util/cairo-script/examples/world-map.cs new file mode 100644 index 0000000..54d9a8f --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/world-map.cs @@ -0,0 +1,209 @@ +%!CairoScript +% The data for this test case was provided by Gary Nicholson +% <gary@imapping.co.nz> who originally created an interactive SVG map +% of the world as can be seen here: +% +% http://www.wherearewe.co.nz/svg.html +% +% The data is used here by permission from Gary given on 2006-11-08: +% +% Thanks for asking, I don't need any attribution if you are +% only using the vectors and not the entire map with +% interactivity etc. So feel free to do what you wish with +% the data. + +/N { + 2 index + .75 .75 .75 set-source-rgb fill+ + .5 .5 .5 set-source-rgb stroke + pop + m +} bind def + +% simpler if these had been expressed in relative coords... +/H { + exch /current-point get exch pop % x cr y + 3 -1 roll exch l +} bind def + +/V { + exch /current-point get pop % y cr x + 3 -1 roll l +} bind def + +dict + /width 800 set + /height 400 set + surface context + +.68 .85 .90 set-source-rgb paint +.2 set-line-width + +413.519 90.071 N .136 -.348 L -.31 -.204 L -.017 -.327 L .213 -.322 L .245 -.147 L .142 -.08 L .225 .072 L .062 .301 L .41 .312 L .466 .096 L -.044 .288 L -.248 .144 L .074 .353 L -.145 -.063 L -.568 -.011 L -.642 -.063 L +421.683 94.397 N .193 .336 L -.266 .274 L .214 .288 L -.09 .192 L .622 .062 L .008 .144 L .55 .242 L .579 -.332 L .215 .117 L -.029 .171 L -.126 .309 L .112 .212 L -.038 .192 L -.315 -.051 L -.176 -.162 L -.283 .091 L -.081 .273 L .244 .131 L -.228 .415 L -.244 -.333 L -.469 .05 L -.071 .122 L -.216 .03 L -.23 -.142 L -.143 -.354 L -.371 .081 L .019 .333 L -.425 .384 L -.018 .535 L -.285 .151 L -.385 -.312 L .098 -.182 L -.311 -.071 L -.534 -.363 L -.016 -.415 L -.777 .404 L .103 .212 L -.349 .432 L -.275 .16 L -.629 -.168 L -.627 .204 L -.599 -.062 L -.102 -.424 L -.312 -.806 L -.616 .147 L -.854 .668 L -.369 -.111 L .238 -.226 L .013 -.322 L -.08 -.137 L .089 -.294 L .718 -.418 L -.038 -.315 L .575 -.24 L .012 -.076 L .528 -.494 L .173 -.035 L -.116 -.089 L -.153 -.028 L .221 -.302 L .446 .007 L -.005 .096 L .473 .007 L .385 -.309 L .271 .089 L .272 -.117 L .271 .096 L .567 -.158 L .278 .11 L .354 -.021 L -.179 -.199 L .709 -.199 L .017 .151 L .199 -.014 L .149 .089 L .852 .007 L .664 .261 L +421.394 104.558 N .104 .175 L .04 .256 L -.06 .475 L .118 .054 L .062 .333 L -.076 .795 L -.211 .327 L -.118 .724 L -.292 .501 L -.298 -.043 L -.057 -.196 L -.41 -.076 L -.227 -.152 L .284 -.207 L -.07 -.076 L -.437 -.098 L .257 -.332 L -.11 -.071 L -.291 .071 L -.053 -.147 L .115 -.022 L .175 -.158 L -.094 -.153 L -.257 -.082 L .015 -.164 L .247 -.12 L -.284 -.218 L .241 -.284 L .6 -.305 L .27 -.022 L .04 -.125 L .292 -.043 L .195 .104 L .096 -.142 L -.022 -.344 L .072 -.224 L .143 -.011 L h 396.323 103.853 m .375 -.122 L .411 -.365 L .549 -2.299 L .397 -.091 L -.21 -.29 L -.226 .259 L .125 -1.144 L .223 -.826 L .115 .153 L .496 .306 L .191 .382 L .191 .229 L -.281 -.673 L -.63 -.582 L -.242 -.233 L .024 -.249 L .359 -.477 L -.202 -.375 L -.2 -.274 L -.326 -.216 L -.685 -.1 L -.515 -.571 L -.416 -.323 L .278 -.426 L -.233 -.181 L -.343 -.131 L -.511 -.142 L -.184 -.173 L .247 -.376 L -.329 -.173 L -.509 .179 L -.489 -.249 L -.824 -.251 L -.619 -.181 L -.325 .014 L -.215 -.25 L -.91 .167 L -.059 -.25 L -.265 -.125 L -.367 -.042 L -.056 -.104 L .861 -.083 L -.085 -.229 L -.526 -.104 L .442 -.104 L .086 -.205 L -.275 .017 L -.263 -.021 L -.417 .083 L .04 -.438 L .303 .012 L .305 -.146 L .526 -.088 L .562 -.174 L .215 .188 L .18 -.167 L .474 .063 L .112 -.26 L .272 -.059 L .764 -.078 L .393 .366 L .275 .26 L .342 .083 L .652 -.271 L .317 .167 L .276 -.127 L .457 -.124 L .029 .23 L .591 -.065 L .3 -.103 L -.265 -.188 L -.028 -.251 L .056 -.345 L -.037 -.428 L -.131 .021 L -.562 -.682 L -.11 -.407 L .927 .126 L .607 -.105 L -.084 .397 L .248 .419 L .342 -.146 L 1.241 .104 L .501 .146 L .079 -.014 L .525 -.093 L .662 -.27 L -.534 -.124 L .055 -.204 L .166 -.175 L .753 -.322 L .756 -.181 L .902 -.215 L .314 -.235 L .302 -.264 L -.053 -.775 L .135 -.542 L .521 -.25 L .46 -.16 L .916 -.092 L .177 -.096 L .208 .447 L .311 .335 L .266 .127 L .141 -.071 L .41 -.208 L .153 .17 L .202 .458 L .194 .133 L .518 -.012 L .159 .301 L .259 -.012 L .576 .048 L .375 .168 L -.159 .241 L .091 .175 L -.072 .198 L .285 .122 L .406 -.075 L .446 -.035 L .193 -.313 L .245 -.072 L -.119 .373 L .146 .18 L -.039 .228 L .529 .048 L .341 .192 L .371 .204 L .127 .228 L .694 -.174 L .079 .114 L .642 .063 L .568 .011 L .145 .063 L .428 .319 L .337 .277 L .395 -.055 L .045 .145 L .689 -.062 L .072 -.048 L .233 .007 L .095 .186 L .456 .09 L .479 -.014 L .605 .193 L -.954 .806 L -.054 .213 L -.054 .358 L -.321 .372 L -.075 .295 L .091 .076 L -.216 .701 L .135 .233 L -.385 .309 L -.473 -.007 L .005 -.096 L 415.96 94.5 l -.221 .302 L .153 .028 L .116 .089 L -.173 .035 L -.528 .494 L -.012 .076 L -.575 .24 L .038 .315 L -.718 .418 L -.089 .294 L .08 .137 L -.013 .322 L -.238 .226 L .369 .111 L .854 -.668 L .616 -.147 L .312 .806 L .102 .424 L -.624 .301 L .532 .344 L .025 .292 L .43 .192 L -.199 .272 L -.541 .353 L -.183 -.111 L -.437 .186 L .352 .358 L .616 .191 L .135 .331 L -.175 .01 L -.315 .371 L .193 .442 L .754 .391 L .849 -.07 L .062 .281 L -.146 .469 L -.346 .23 L -.221 .215 L -.833 .488 L -.889 .659 L -.427 .087 L -.318 .043 L -.798 .159 L -.405 -.028 L -.471 -.156 L -.851 -.499 L -.315 -.085 L -.354 .029 L -.231 .072 L -.511 -.056 L -.752 -.313 L -.602 .044 L -.731 .345 L -.357 .258 L -.555 .559 L -.147 .386 L .099 .514 L .091 .379 L -.334 -.091 L -.75 .137 L -.039 .136 L -.485 -.015 L -.427 -.197 L -.395 .167 L -.261 -.015 L -.036 -.152 L -.335 -.091 L -.206 .03 L -.374 .076 L -.187 -.076 L -.035 -.289 L -.091 -.213 L -1.252 -.304 L -.355 0 L .017 .319 L -.542 -.015 L -.337 .061 L -.037 -.122 L -.767 .03 L -.084 -.114 L -.028 -.038 L -.431 -.152 L -.131 .076 L -.262 -.03 L -.056 .076 L -.507 -.395 L -.15 .061 L -1.088 -.334 L -.112 .106 L -.15 -.03 L -.094 -.106 L .205 -.243 L -.058 -.122 L -.469 .03 L -.472 -.243 L +681.312 116.395 N .235 -.171 L .283 -.256 L .633 -.738 L .315 -.157 L .595 .011 L .579 .068 L .511 .096 L .309 -.115 L .571 -.678 L .682 .621 L 1.178 1.611 L .329 .495 L .269 .664 L .002 .75 L -.034 .947 L -.129 .637 L .143 .113 L .5 -.043 L -.121 .41 L -.282 .523 L -.5 .75 L -.316 .312 L -.243 .043 L -.567 -.211 L -.256 .1 L -.607 .58 L -.431 -.083 L -.289 -.225 L -.544 .1 L -.526 .199 L -1.188 .835 L -.462 .043 L -.46 .312 L -.055 -.564 L -.056 -.324 L -.163 -.705 L -.137 -.395 L .167 -.453 L .499 -.468 L 0 -.353 L .226 -.425 L -.044 -.141 L -.378 -.311 L -.095 -.296 L .015 -.467 L -.087 -.339 L -.289 -.126 L -.603 -.084 L .654 -.411 L .303 -.114 L .654 .268 L .254 -.241 L -.029 -.283 L -.764 -.89 L -.113 -.311 L -.137 -.105 L +475.646 121.847 N -.018 .175 L .338 .391 L -.295 -.009 L -.132 .108 L -.104 -.059 L -.327 -.021 L -.121 .33 L -.783 .257 L -.384 .046 L -.099 .053 L 0 .21 L -.217 .006 L -.072 -.192 L -.402 .023 L -.547 -.146 L -.191 -.087 L 0 -.21 L -.161 -.105 L -.122 -.403 L .082 -.035 L .12 .1 L .147 -.006 L .405 -.304 L .253 -.006 L .328 .092 L .077 -.086 L .088 -.286 L -.053 -.175 L .627 .093 L .658 .027 L .367 -.056 L .818 -.233 L .689 -.304 L .535 -.158 L -.475 .295 L -.436 .231 L -.596 .444 L +704.404 117.274 N .197 -.099 L 1.108 -.271 L .057 .354 L -.481 .284 L -.232 .241 L -.068 .453 L .139 .367 L .291 .056 L .221 -.114 L .418 -.354 L .24 -.085 L 1.656 -.697 L .389 -.213 L .46 -.326 L .349 -.638 L .76 -.412 L .347 -.327 L .191 -.269 L .142 -.51 L .538 -.582 L -.01 -.142 L .344 -.567 L .159 -.468 L .139 -.609 L -.043 -.467 L -.33 -.198 L -.128 -.24 L .234 -.213 L .166 -.284 L -.155 -1.023 L .544 -.343 L .176 -.242 L .327 -.328 L .192 0 L .21 .355 L .199 .227 L .303 -.058 L .799 -.257 L -.169 -.526 L -.311 -.028 L -.36 -.312 L .694 -.415 L .441 .156 L .336 .227 L .025 .199 L -.016 .868 L .058 .611 L .22 .127 L .243 .312 L .717 1.432 L .001 .496 L -.246 .709 L -.709 .766 L -.226 .439 L .064 .368 L -.15 .071 L -.737 .285 L -.161 .113 L -.164 .199 L -.174 .453 L .02 .396 L .094 .254 L .131 .792 L -.04 .693 L -.686 .751 L -.242 .736 L .02 .707 L .198 .296 L .422 .353 L -.617 .298 L -.193 .127 L -.166 .17 L -.174 .834 L -1.081 .439 L -.094 -.282 L .294 -.665 L .184 -.523 L -.198 -.126 L -.514 .241 L -.578 .623 L -.476 .001 L -.346 .312 L -.066 .748 L -.354 .269 L -.188 -.028 L -.066 -.155 L .003 -.606 L -.149 -.155 L -.211 .042 L -.309 .156 L -.344 .311 L -.325 .523 L -.866 -.055 L -.505 .057 L -.631 .1 L -.458 -.549 L -.685 -.323 L -.26 .254 L -.067 .184 L -.177 .353 L .037 .056 L .417 .197 L .416 .323 L -.293 .198 L -.829 .129 L -.433 .241 L -.463 .622 L -.522 .847 L -.688 -.365 L -.565 -.21 L -.285 -.197 L -.014 -.169 L -.194 -.818 L .099 -.155 L .495 -.325 L .179 -.269 L -.067 -.282 L -.18 -.042 L -.601 .17 L -.341 -.028 L -.789 -.167 L -.475 .128 L -.427 .227 L -.437 .184 L -.269 -.098 L -.256 -.027 L -1.647 .398 L -.814 .298 L -.21 -.31 L -.452 -.042 L -.413 .438 L -.006 .635 L -.756 -.238 L -.579 -.055 L -1.1 .073 L -.267 -.14 L .072 -.339 L .179 -.283 L .483 .013 L .499 -.114 L .751 -.467 L 2.201 -1.953 L .28 -.015 L .427 -.128 L .056 .424 L .495 -.128 L 1.278 -.257 L .933 -.058 L 1.183 -.172 L .892 -.256 L .068 .452 L .377 .268 L .167 -.085 L .654 -.199 L .446 -.34 L -.003 -.353 L .114 -.467 L .465 -.51 L .698 -.581 L .371 -.453 L -.062 -1.117 L .182 -.213 L h 695.464 127.756 m -.292 -.197 L -.223 -.268 L -.101 -.381 L -.177 -.395 L -.492 -.535 L .731 -.382 L .287 -.269 L .456 -.593 L .409 .253 L .615 -.015 L .483 -.185 L .311 -.339 L .451 -.311 L .454 -.029 L .316 .169 L .862 .224 L .153 .254 L -.1 .127 L -.102 .423 L -.292 .24 L -.864 .876 L -.181 -.211 L -.424 -.295 L -.467 -.042 L -.612 .213 L -.193 .184 L -.245 .495 L -.165 .508 L -.153 .212 L -.448 .269 L h 691.12 131.448 m -.366 -.042 L -.056 -.141 L .268 -.537 L .128 -.593 L -.334 -.112 L -.239 .198 L -.155 .466 L -.381 .452 L -.326 -.211 L -.059 -.211 L .322 -.466 L .032 -.296 L -.356 -.917 L .169 -.113 L .687 -.58 L .083 -.141 L .034 -.466 L -.532 -.789 L -.333 -.042 L -.162 .269 L -.419 .495 L -.249 -.112 L -.23 -.508 L -.376 -.267 L -.261 -.366 L .41 -.325 L .733 .083 L .706 -.171 L .315 -.466 L .241 -.283 L .484 -.058 L .478 .056 L .249 .38 L .27 .168 L .43 .084 L .628 -.213 L .225 .395 L -.569 .438 L .405 .239 L .443 .437 L .079 .254 L -.596 .58 L -.242 .41 L -.104 .367 L -.085 .621 L -.109 .649 L -.242 .353 L -.194 .099 L -.165 .071 L -.197 .184 L -.479 .678 L h 711.938 108.369 m -.222 -.241 L -.077 -.271 L .325 -.642 L -.055 -.342 L -.549 -.198 L -.168 -.171 L -.146 -.812 L .583 -.386 L .522 -.172 L .646 -.373 L .037 -.356 L -.318 -.285 L .277 -.3 L .224 -.015 L .661 .427 L .373 .085 L .532 -.201 L -.004 -1.186 L .455 -.187 L .45 -.244 L .074 -.743 L .007 -.844 L -.398 -.758 L -.098 -.473 L .166 -.216 L .618 -.346 L .063 .072 L .507 .43 L .904 .816 L 1.07 .842 L 1.083 .684 L .627 .285 L .528 .17 L 1.02 .198 L .282 .042 L .304 -.086 L .866 -.66 L .461 -.144 L .002 .1 L -.308 .358 L -.335 .558 L .198 .414 L .469 .599 L .197 .356 L -.561 .272 L -.447 .244 L -.534 .158 L -.365 .015 L -.488 -.199 L -.453 .015 L -.363 .144 L -.345 .229 L -.754 .786 L -.396 .5 L -.26 .599 L -.4 -.07 L -.425 -.241 L -2.031 -.965 L -.461 -.085 L -.72 .044 L -1.038 .587 L -.153 -.299 L -.372 -.356 L -.339 .029 L -.266 .115 L -.439 .272 L .049 .299 L 1.16 .497 L .56 .298 L .302 .27 L -.391 .214 L -.303 .029 L -.305 -.128 L -.261 .043 L -.324 .314 L -.388 .471 L -.347 .114 L +597.917 139.685 N 1.251 -1.545 L .609 -.539 L .348 -.239 L .149 -.103 L .417 -.016 L .309 .294 L .479 .208 L 1.659 .047 L .371 .041 L .312 .209 L .329 .619 L -.07 .156 L .042 .24 L .326 .294 L .313 .069 L .258 .238 L .017 .282 L -.217 .58 L -.624 .06 L -1.036 .062 L -1.238 -.063 L -.335 -.125 L -.301 -.055 L -.531 .313 L -.544 .074 L -.085 -.021 L -.869 -.214 L -.559 -.081 L -.637 -.18 L -.235 -.493 L .092 -.113 L +362.764 152.723 N .072 -.625 L .395 -.876 L .52 -.552 L .488 -.566 L .244 -.509 L 1.175 -2.559 L .238 -.241 L 1.404 -1.175 L .345 -.495 L .051 -.918 L .305 -1.088 L .651 -1.075 L .399 -.34 L .404 -.198 L .838 -.51 L .361 -.495 L .334 -.777 L .428 -.851 L 1.635 -.04 L 2.511 0 L 2.677 -.001 L 1.718 .004 L 1.42 -.008 L .027 .876 L -.03 1.752 L .002 .65 L -.104 .396 L -.56 -.011 L -6.005 -.022 L -.557 .074 L -.047 .509 L -.07 2.261 L -.099 2.6 L -.144 .128 L -.809 .287 L -.726 .315 L -.575 .427 L -.249 .383 L -.01 .707 L .164 1.539 L .051 1.102 L -.212 -.027 L -.732 .033 L -2.396 -.014 L -5.055 -.056 L -.474 -.013 L +514.551 145.841 N -.374 .027 L -.336 -.083 L -.008 -.615 L -.153 -.437 L -.108 -.791 L .187 -.607 L .188 -.11 L -.059 -.187 L .177 -.607 L .33 -.269 L .312 .083 L .069 .315 L .26 .093 L .063 .199 L .116 .326 L -.106 .42 L .031 .708 L .118 .254 L -.104 .381 L -.327 .467 L -.275 .433 L +514.177 145.868 N .374 -.027 L .008 .288 L .361 .14 L .153 .128 L .186 -.093 L -.046 .443 L .397 .001 L .402 .127 L .687 -.093 L .103 -.21 L .183 -.058 L .218 .117 L .424 -.042 L .595 .112 L .224 -.035 L .079 -.105 L 1.358 .222 L .732 -.14 L -.022 -.292 L .225 .175 L .375 -.016 L .157 -.099 L .312 -.422 L .232 -.073 L .267 -.495 L .131 -.297 L .711 -.637 L .813 -.889 L .163 .105 L .229 -.178 L .85 -.708 L .313 -.433 L .15 .161 L -.248 .42 L -.107 .299 L -.004 .176 L .099 .064 L .121 -.024 L .454 .042 L .09 .324 L .001 .508 L -.003 .358 L -.49 .034 L -.401 -.083 L -.107 .396 L .073 1.326 L -.199 .34 L -.536 .596 L .003 .946 L .024 2.075 L .063 .183 L -.152 .057 L -.584 .469 L -.839 -.108 L -3.387 -.446 L -3.362 -.375 L -.261 -.902 L -.548 -1.154 L -1.043 -2.198 L +668.627 151.365 N -.102 -.056 L -.107 -.325 L -.922 -1.212 L -.332 -.987 L -.03 -.438 L .156 -.749 L .546 -.792 L 1.312 -1.852 L .259 -.184 L .425 -.128 L .229 -.184 L .358 -.227 L .228 .127 L .554 .394 L -.334 .424 L -.084 .142 L .023 .31 L -.067 .622 L -.203 .296 L -.182 .354 L -.065 .692 L -.1 .494 L -.317 .805 L -.473 .707 L -.417 .833 L -.014 .353 L -.114 .438 L -.228 .142 L +389.765 144.543 N .1 .084 L .895 .531 L 2.054 1.344 L .811 .575 L 3.283 2.241 L 1.924 1.26 L 1.292 .824 L .397 .253 L 2.472 1.469 L .181 .253 L -.096 .396 L .082 .183 L .393 .28 L 1.111 1.039 L .229 .027 L .47 -.314 L .588 .562 L .375 .167 L .748 .024 L .309 .111 L .277 .352 L .099 .522 L -.161 .679 L .146 .564 L 2.176 -.408 L .064 1.017 L .034 2.203 L .001 .96 L -.08 .89 L -.145 .919 L -.434 1.246 L -.596 .794 L -.339 .271 L -.29 .129 L -2.533 .085 L -1.808 .124 L -.209 .072 L -.562 .427 L -.579 .272 L -.678 -.053 L -.581 -.081 L -1.062 -.173 L -.36 -.059 L -.356 -.125 L -.37 .073 L -1.22 .713 L -.947 .458 L -.304 .228 L -.314 .793 L -.274 -.027 L -.324 -.182 L -.518 -.209 L -.272 .101 L -.638 .625 L -.492 .667 L -.393 .822 L -.174 .227 L -.45 .102 L -.551 -.364 L -.293 -.281 L -.273 .058 L -.397 .384 L -.355 1.217 L -.292 1.047 L -.317 .369 L -.543 .271 L -.448 .158 L -.257 .016 L -.141 .255 L .058 .749 L -.133 .876 L -.261 .92 L -.172 .326 L -.046 .156 L -.08 .043 L -.159 .1 L -.604 .399 L -.352 .059 L -.148 -.239 L -.117 -.381 L -.004 -.297 L -.147 -.211 L -.257 -.041 L -.239 .114 L -.571 .483 L -.362 .469 L -.35 .228 L -.455 -.436 L -.566 -.321 L -.352 .059 L -.522 .54 L -.559 -.901 L -.194 -1.143 L -.349 -.718 L -.474 -.478 L -.265 -.451 L -.271 -.832 L -.022 -.339 L -.246 -.281 L -.323 -.055 L -.684 .428 L -.3 .327 L -.43 .243 L -.565 -.152 L -.356 -.153 L -.338 -.026 L -.475 .413 L -.252 .256 L -.536 -.265 L -.882 -.715 L -.18 -.183 L -.113 -.028 L .062 -.142 L .004 -.565 L -.082 -.833 L -.265 -.337 L -.554 -.322 L -.181 -.197 L -.22 -.479 L -.144 -.663 L -.251 -1.1 L .057 -.339 L .506 -.399 L .332 -.284 L .018 -.607 L .181 -.552 L .252 -.256 L .402 -.073 L .261 .111 L .568 .83 L .214 .168 L .454 .082 L .107 -.269 L -.055 -.296 L .06 -.212 L .535 .124 L .713 .137 L .485 .054 L .387 -.031 L .945 -.344 L 1.953 -.026 L 6.457 -.01 L .379 -1.613 L -.724 -.787 L -.186 -1.468 L -.202 -2.386 L -.325 -2.753 L -.178 -1.736 L -.19 -1.468 L -.908 -7.962 L -.049 -.776 L 3.231 -.089 L .523 -.13 L +525.37 142.384 N .312 -.429 L .155 -.17 L .084 .833 L -.423 .707 L -.118 .156 L -.121 .024 L -.099 -.064 L .004 -.176 L .107 -.299 L .248 -.42 L -.15 -.161 L h 525.923 144.712 m 0 .22 L .456 .762 L .408 .465 L .782 .634 L .677 .394 L 1.008 .52 L .392 .154 L .277 .014 L .576 -.029 L .364 .112 L .873 .973 L .518 .648 L .46 .422 L .81 .365 L .025 .212 L -.67 1.06 L -.615 .721 L -.883 .807 L -.776 1.541 L -.242 .142 L -.562 -.083 L -.235 -.084 L -.252 .071 L -.278 .509 L -.062 1.115 L .001 .791 L .134 .621 L -.403 .142 L -1.046 .073 L -.627 .27 L -.367 .283 L -.29 .495 L -.131 .551 L -.204 .283 L -.444 .255 L -.544 .1 L -.292 0 L -.386 -.042 L -.326 .029 L -.382 .283 L -.22 .297 L -.125 .508 L .003 .353 L -.091 .311 L -.631 .396 L -.344 .043 L -.776 -.21 L -.717 .058 L -.896 .27 L -.768 .298 L -.283 .099 L -.416 .145 L -.241 -.306 L -.483 -.689 L .006 -.296 L -.127 -.253 L -.933 -1.364 L -.604 -.971 L -.226 -.634 L -.092 -.663 L 1.691 -.815 L 2.35 -1.213 L 5.346 -2.982 L -.155 -1.453 L -.581 -.914 L -.063 -.183 L -.024 -2.075 L -.003 -.946 L .536 -.596 L .199 -.34 L -.073 -1.326 L .107 -.396 L .401 .083 L .49 -.034 L +405.733 173.04 N -.568 -.971 L -.562 -.025 L -.37 .044 L -.516 -.181 L -.97 -.757 L -.114 -.226 L .335 -.439 L -.018 -.212 L -.179 -.268 L -.502 -.42 L -.389 -.266 L -.422 -.492 L -.426 -.93 L -.019 -.396 L .173 -.665 L .581 .081 L .678 .053 L .579 -.272 L .562 -.427 L .209 -.072 L 1.808 -.124 L 2.533 -.085 L .29 -.129 L .339 -.271 L .596 -.794 L .434 -1.246 L .145 -.919 L .08 -.89 L -.001 -.96 L -.034 -2.203 L -.064 -1.017 L 1.672 -.321 L 1.82 -.364 L 3.084 -2.617 L .834 -.655 L 2.308 -1.454 L 1.607 -.956 L 4.012 -2.241 L 1.632 -.843 L .265 -.186 L .832 .137 L 1.646 .442 L 1.008 .333 L .258 .182 L 1.192 .911 L .231 -.157 L 1.519 -.729 L .364 2.145 L .169 1.298 L .42 1.028 L .554 .802 L .703 .604 L -.388 .722 L -.265 .99 L -.168 1.088 L -.084 .989 L .022 .537 L -.062 .707 L -.019 1.045 L -.034 1.088 L -.056 .466 L -2.43 2.613 L -.591 .78 L -.87 1.333 L -.572 .794 L -.007 .678 L .123 .719 L .014 .269 L -.951 .034 L -.437 .2 L -.453 .299 L -.761 .697 L -.259 .058 L -.609 -.208 L -.724 -.193 L -.884 -.221 L -.531 -.04 L -.709 .047 L -.628 .103 L -.774 .287 L -.403 .327 L -.629 .399 L -.273 .059 L -.934 .005 L -.965 -.277 L -1.173 -.742 L -.354 -.083 L -.467 .116 L -1.337 .544 L -.37 .002 L -.209 -.098 L -1.095 -1.223 L -.821 -.277 L -1.111 -.121 L -1.174 .108 L -1.064 .188 L -.676 .4 L -.687 1.614 L -.353 .482 L -.158 .849 L -.092 .961 L -.902 -.503 L -.727 -.589 L -.339 -.28 L -.321 .073 L -.577 .3 L +431.763 171.063 N -.351 -.407 L -.575 -.52 L -.173 -.394 L -.014 -.269 L -.123 -.719 L .007 -.678 L .572 -.794 L .87 -1.333 L .591 -.78 L 2.43 -2.613 L .056 -.466 L .034 -1.088 L .019 -1.045 L .062 -.707 L -.022 -.537 L .084 -.989 L .168 -1.088 L .265 -.99 L .388 -.722 L -.703 -.604 L -.554 -.802 L -.42 -1.028 L -.169 -1.298 L -.364 -2.145 L 1.818 -.858 L .41 -.059 L 5.231 2.554 L 4.941 2.372 L 5.577 2.792 L 1.981 .963 L -.02 1.045 L -.016 .946 L -.036 .636 L .085 2.5 L -.038 .749 L .036 1.002 L .031 1.229 L -.04 .283 L -.839 -.009 L -1.245 .05 L -.229 .143 L -.417 1.245 L -.583 .809 L -.122 .438 L .131 .677 L -.149 .212 L -.718 .428 L -.053 .24 L .342 .662 L -.087 .34 L -.542 .596 L -.316 .609 L .219 .352 L .517 -.088 L .338 .012 L .141 .225 L .221 1.228 L .137 .522 L .155 .295 L .444 .407 L .266 .465 L .026 .367 L -.15 .425 L -.559 -.208 L -.321 -.012 L -.322 .086 L -.939 .613 L -.372 .228 L -.165 .382 L -.005 .41 L -.196 .284 L -2.649 2.275 L -.386 .087 L -2.181 .055 L -.434 .059 L -.209 .199 L -.117 .806 L -.646 1.176 L -.258 .143 L -.368 .031 L -.881 -.009 L -.818 .273 L -.754 .386 L -.466 .271 L -.224 .03 L -.225 -.069 L -.494 -.661 L -1.363 .686 L -.449 .158 L -.24 -.027 L -.096 -.084 L -.208 -.183 L -.382 -1.057 L -.638 -1.07 L -1.343 -1.179 L -1.088 -1.067 L .323 -.539 L .29 -.312 L .24 -.1 L .481 .082 L 1.187 .191 L .674 -.032 L .225 -.143 L -.047 -.127 L -.208 -.21 L -.381 -.633 L -.205 -.578 L -.169 -1.228 L .134 -.651 L -.119 -1.2 L -.395 -.887 L -.923 -1.238 L -.208 -.083 L -.627 -.109 L +627.173 150.012 N .483 -.229 L .515 -.13 L .341 .012 L .597 .392 L .325 .097 L .584 -.413 L .332 -.115 L 1.595 -.052 L .807 -.117 L .341 -.157 L .696 -.554 L .521 -.328 L .298 -.101 L .623 .575 L .771 .235 L .66 .053 L .777 -.047 L .237 .21 L .056 .38 L -.472 .75 L .096 .521 L .273 .365 L .943 .615 L .621 .166 L .909 .107 L .197 .143 L -.19 .132 L -.826 .482 L .106 .465 L -.203 .212 L -1.261 -.054 L -.136 .198 L .057 .395 L -.283 .382 L -.585 .792 L -.221 .142 L -.533 .241 L -.171 .127 L -.27 .396 L -.303 .932 L -.388 .975 L .268 .225 L .469 .563 L 1.112 1.071 L .023 .24 L .042 .522 L .087 .254 L .42 .493 L 1.096 .83 L 1.282 1.296 L .26 .197 L .636 .069 L .313 .38 L .282 1.016 L .302 .578 L .638 .605 L .293 .663 L .341 1.382 L .524 2.809 L -.295 .438 L -.235 .495 L .05 .819 L -.095 .41 L .056 .664 L -.027 .099 L -.364 .551 L -.447 .439 L -.254 .127 L -.509 .1 L -.419 .17 L -.501 .354 L -.591 .622 L -.579 .354 L -.325 .043 L -.512 -.197 L -.404 -.31 L -.179 -.141 L -.153 .424 L .051 .494 L .048 .353 L -.205 .721 L -.388 .424 L -.326 .071 L -.235 -.07 L -.246 .481 L -.427 .326 L -.523 .142 L -.417 .213 L -.459 .565 L -.196 .269 L -.406 .297 L -.264 .099 L -.365 -.042 L .078 -.861 L .1 -1.313 L .151 -.494 L .215 -.283 L -.02 -.353 L -.475 -.437 L -.749 -.238 L -.091 -.066 L .3 -.289 L .646 -.229 L .915 -.528 L .599 -.229 L .497 .011 L .688 .194 L .17 -.27 L -.03 -.197 L -.568 -.435 L -.216 -.422 L .234 -.425 L .99 -.571 L .521 -.229 L .932 -.443 L .599 -.187 L .385 -.285 L .217 -.509 L -.054 -1.073 L .05 -.424 L .076 -.367 L -.455 -1.014 L -.029 -.663 L .215 -.905 L .155 -.918 L -.064 -.578 L -.214 -.437 L -.529 -.477 L -.072 -.282 L .226 -.439 L -.136 -.395 L -.358 -.308 L -.685 -.391 L -.471 -.52 L -.57 -.914 L -1.683 -2.121 L -.698 -.772 L -.637 -.646 L -.632 -.476 L -1.234 -.741 L -.162 -.098 L -.043 -.494 L .277 -.369 L .311 -.101 L .476 .068 L .287 -.058 L .261 -.185 L .255 -.326 L -.009 -.508 L -.87 -.968 L -.434 -.675 L -.262 -.083 L -.39 .171 L -.509 .483 L -.287 .058 L -.47 -.195 L -.607 -.434 L -.334 -.689 L -.338 -.929 L -.543 -.604 L -.613 -.575 L -.45 -.745 L +217.961 150.385 N .304 -.043 L .84 -.27 L -.17 -.254 L -.312 -.112 L -.369 -.056 L -.651 .016 L -.497 -.042 L -.645 .157 L -1.193 .92 L -.371 .029 L -.653 .001 L -.211 .113 L -.189 .452 L -.396 .284 L -.32 .043 L -.786 .086 L .259 -.325 L .473 -.312 L -.128 -.593 L .282 -.382 L .114 -.099 L 1.258 -.61 L 1.625 -.47 L 1.164 -.087 L .842 -.157 L .825 .041 L .566 -.044 L .73 .168 L .848 .083 L .603 .197 L .557 .112 L .477 .013 L .499 .268 L .573 .536 L .382 .253 L .581 .168 L .768 .111 L 1.229 .351 L 1.02 .492 L .453 .31 L .374 .55 L .33 .141 L .479 .041 L 1.704 .519 L 1.018 .167 L .327 .239 L -.344 .58 L .233 .155 L .559 .042 L .756 -.072 L .495 .168 L .507 .38 L .591 .281 L .381 .296 L -.233 .085 L -.981 .087 L -1.15 .398 L -.626 .058 L -1.054 -.209 L -.9 -.041 L -.934 .186 L -.943 .115 L -.484 .029 L -.449 -.07 L .353 -.382 L .728 -.623 L .173 -.396 L 229 154.204 l -.181 -.127 L -.622 -.14 L -.7 .001 L -.603 -.112 L -.651 -.338 L -.141 -.748 L -.258 -.536 L -.218 -.155 L -.396 -.027 L -1.005 .044 L -.836 -.139 L -.621 -.225 L -.956 -.493 L -.739 -.238 L -.615 -.069 L -1.154 -.068 L -.489 -.098 L -.855 -.352 L +634.036 168.444 N .808 -.64 L .121 -.438 L -.002 -.945 L -.157 -.507 L -.419 -.703 L -.979 -1.279 L -.255 -.464 L -.107 -.366 L -.058 -1.524 L -.435 -.632 L -.688 -.659 L -.285 -.535 L -.052 -.282 L -.266 -.153 L -.893 -.192 L -.403 -.012 L -.286 .453 L -.2 .538 L -.543 .257 L -.223 .072 L -.59 -.265 L -.835 -.348 L -.346 .03 L -1.173 1.178 L -.37 .411 L -.481 -.138 L -.145 -.324 L .027 -.494 L .117 -.438 L .528 -1.569 L .085 -.41 L -.249 -1.311 L -.045 -.113 L -.414 .045 L -.489 .2 L -.423 .003 L -.186 -.154 L -.066 -.367 L .106 -.805 L -.01 -.423 L -.118 -.168 L -.295 -.182 L -.541 -.166 L .193 -.185 L .582 -.455 L .442 -.581 L .53 -.61 L .502 -.355 L .178 .196 L .321 .21 L .769 .08 L .266 -.213 L .109 -.339 L -.119 -.521 L -.228 -.366 L -.138 -.592 L .043 -.325 L .24 -.241 L .679 -.314 L .45 .745 L .613 .575 L .543 .604 L .338 .929 L .334 .689 L .607 .434 L .47 .195 L .287 -.058 L .509 -.483 L .39 -.171 L .262 .083 L .434 .675 L .87 .968 L .009 .508 L -.255 .326 L -.261 .185 L -.287 .058 L -.476 -.068 L -.311 .101 L -.277 .369 L .043 .494 L .162 .098 L 1.234 .741 L .632 .476 L .637 .646 L .698 .772 L 1.683 2.121 L .57 .914 L .471 .52 L .685 .391 L .358 .308 L .136 .395 L -.226 .439 L .072 .282 L .529 .477 L .214 .437 L .064 .578 L -.155 .918 L -.209 .114 L -.975 .429 L -.3 .072 L -.373 -.351 L -.444 -.181 L -.476 .186 L -.392 .285 L .107 .296 L .187 .182 L .103 .211 L -.095 .24 L -.248 .058 L -.469 -.251 L -.341 -.111 L -.736 -.165 L -.533 -.251 L +60.074 72.607 N -.099 .228 L -.491 .472 L -.395 .183 L -.462 .062 L 58 73.461 l -.961 -.362 L -.153 -.197 L .169 -.289 L .54 -.274 L .341 -.32 L .716 .364 L .3 .091 L .465 -.26 L .215 -.213 L .064 -.366 L .485 -.047 L 1.107 .135 L .536 .334 L .133 .213 L -.756 .062 L -.429 0 L -.59 .184 L -.11 .092 L h 40.092 77.571 m -.729 -.029 L -.097 -.24 L .011 -.3 L .802 -.243 L .326 -.211 L .593 -.423 L .448 -.137 L .646 -.077 L 1.427 .253 L .711 .24 L -.079 .211 L -.303 .046 L -.754 -.074 L -.496 .031 L -1.077 .183 L -.269 .226 L -1.161 .543 L h 38.426 77.979 m -.515 -.209 L -.139 -.285 L .381 -.227 L .674 .27 L .093 .195 L -.122 .15 L -.372 .105 L h 37.896 78.449 m -.256 .084 L -.558 .151 L -1.109 -.058 L -.387 .135 L -.398 .434 L -.31 .15 L -.854 -.207 L -.135 -.224 L .497 -.359 L .5 -.315 L .955 -.166 L .863 -.346 L .39 .089 L .461 .224 L .341 .409 L h 29.628 81.29 m -.168 -.594 L -.324 -.476 L .839 -.136 L .424 .088 L .436 .238 L -.244 .268 L -.26 .06 L -.073 .297 L -.22 .09 L -.412 .164 L h 27.543 81.591 m -.39 .031 L -.741 .165 L -.311 -.133 L -.088 -.178 L .104 -.119 L .336 -.268 L .294 -.09 L .584 .222 L .212 .371 L h 54.394 157.986 m -.559 -.356 L -.044 -.884 L -.243 -.677 L .482 -.402 L -.035 -.2 L -.156 -.26 L .052 -.149 L .173 -.046 L .354 .158 L .652 .279 L .593 .425 L -.015 .275 L .238 .046 L .12 .287 L .306 .149 L -.062 .161 L 56 156.933 l -.172 .204 L -.766 .195 L -.374 .23 L -.295 .425 L h 23.015 59.92 m -1.613 -.646 L -.75 -.205 L -.792 -.062 L -.9 .065 L -.291 -.095 L -.431 -.222 L .179 -.287 L .516 -.049 L 1.135 .221 L .579 -.001 L .543 -.081 L .538 -.001 L .828 .285 L 1.725 .362 L .429 .237 L .046 .111 L -.569 -.03 L -.646 .033 L -.527 .365 L h 99.855 70.993 m .467 .929 L -.071 .167 L -.879 -.272 L -.621 -.075 L .067 .441 L -.056 .228 L -.935 -.607 L 97.03 71.41 l .396 -.458 L .263 -.153 L .612 -.078 L .784 .38 L .771 -.108 L h 100.975 73.606 m .128 .272 L -.086 .273 L -.318 .483 L -.559 -.815 L -.597 -.909 L -.04 -.228 L .095 -.213 L .407 .029 L .568 .197 L .402 .91 L h 106.858 78.207 m -1.872 -1.166 L -.566 -.555 L .01 -.467 L -.559 -.843 L .071 -.106 L .456 .06 L .274 .256 L 1.165 .48 L .086 .196 L -.059 .136 L -.149 .226 L .296 .436 L .839 .374 L .007 .974 L h 140.191 127.819 m -.043 -.094 L -.198 -.36 L -.049 -.067 L -.032 .042 L -.028 .05 L -.04 -.092 L .002 -.664 L -.331 -.604 L -.472 -.451 L -.661 -.451 L -.512 -.197 L -.114 -.052 L -.145 .034 L .002 .092 L -.088 .025 L -.1 -.042 L -.146 -.143 L .076 -.076 L -.073 -.202 L -.228 -.252 L -.283 -.025 L -.312 .084 L -.932 -.336 L -.286 -.328 L -.428 -.244 L -.383 .042 L -.932 -.16 L -.721 .051 L -.12 -.185 L -.234 -.067 L -.046 -.177 L .094 -.117 L -.157 -.504 L .133 -.464 L -.227 -.096 L -.127 .008 L -.249 -.134 L 0 -.101 L .075 -.093 L -.029 -.219 L -.347 -.185 L -.254 -.286 L -.415 -.219 L -.391 -.623 L -.202 -.076 L -.203 -.311 L -.409 -.219 L -.156 -.529 L -.002 -.227 L .178 .007 L .147 -.164 L .029 -.326 L -.208 -.251 L -.192 -.045 L -.22 .037 L -.303 -.126 L -.535 -.514 L .078 -.21 L -.091 -.312 L -.129 -.067 L -.044 -.463 L .058 -.152 L .119 -.025 L .099 .067 L .073 .076 L -.086 .101 L .153 .202 L .285 .126 L .116 .118 L .203 .017 L -.385 -.564 L -.183 -.144 L -.021 -.236 L -.184 -.109 L -.051 -.344 L -.13 .006 L -.011 .144 L .048 .446 L -.093 .017 L -.293 -.194 L -.119 .042 L -.516 -.404 L -.136 -.363 L -.377 -.514 L -.531 -.379 L -.624 -.583 L -.123 -.142 L .114 -.101 L -.327 -.751 L .161 -.43 L -.254 -.479 L -.22 -.355 L -.738 -.782 L -.104 -.299 L .099 -.627 L .252 -.628 L .166 -.357 L .059 -.856 L -.215 -.785 L -.692 -1.486 L -.153 -.916 L .096 -.287 L .231 -.244 L .402 -.201 L .365 -.717 L -.365 -.573 L -.066 -.33 L .424 -1.593 L .153 -.575 L .061 -.634 L .091 -.778 L .019 -.179 L -.153 -.16 L .08 -.231 L -.103 -.167 L .157 -.077 L -.03 -.186 L -.046 -.186 L -.031 -.103 L -.004 -.058 L .322 .096 L .209 -.019 L .062 -.097 L -.211 .006 L -.614 -.122 L .062 -.707 L -.103 -.328 L .017 -.277 L .587 -.225 L -.345 -.019 L -.16 -.142 L -.129 0 L -.053 .045 L .042 .116 L -.12 .052 L -.133 -.979 L -.927 -1.463 L -.017 -.465 L .129 -.131 L .544 .086 L .632 .217 L .785 .114 L .641 .028 L .546 -.044 L .415 .086 L .547 .318 L .039 .435 L -.42 .407 L -.413 .347 L .532 .146 L .184 .188 L .251 .169 L .029 -.228 L .161 -.232 L .393 -.305 L .21 -.581 L .102 -.465 L -.064 -.421 L -.356 -.958 L -.158 -.305 L -.655 -.516 L .194 .013 L 2.579 .001 L 1.335 .022 L 4.588 -.025 L 3.938 .008 L 2.87 -.001 L 1.687 .006 L 5.117 -.028 L .74 .011 L 4.13 .021 L 1.089 -.035 L 3.821 .023 L .875 -.005 L 3.617 -.004 L 4.84 .018 L .601 -.003 L 2.935 .014 L 2.131 -.012 L 2.781 .029 L 2.915 -.016 L 2.105 .003 L 1.348 -.007 L 2.798 .029 L 2.687 -.029 L .68 .003 L -.387 -.588 L -.131 -.347 L .501 -.036 L .896 .748 L .279 .371 L .468 .46 L .833 .451 L .518 -.076 L 1.425 .208 L .02 .185 L .271 -.012 L .338 .48 L .16 -.247 L .502 .013 L .241 .271 L .469 .086 L .064 .185 L .506 .098 L .573 -.141 L .219 -.06 L .412 -.191 L .373 -.075 L .028 .282 L .197 .116 L .855 -.083 L .474 .041 L .156 .115 L .196 .144 L .542 -.049 L .707 .074 L 1.469 -.592 L .805 -.189 L .797 .227 L .977 .386 L 3.975 1.576 L 2.15 1.061 L .101 .429 L .46 .465 L .628 -.024 L .178 .135 L .184 .294 L .916 .181 L .307 .235 L -.11 .318 L .26 .33 L 2.529 1.05 L .876 3.16 L .054 .545 L -.028 .746 L -.377 .576 L -.294 .544 L -.264 .433 L -.414 .294 L -.707 .525 L -.044 .218 L .012 .33 L .371 .427 L .497 .169 L .573 .068 L .524 -.117 L .925 -.506 L .939 -.478 L .88 -.262 L .919 -.062 L .944 -.163 L 1.464 -.452 L .875 -.427 L -.047 -.362 L -.16 -.471 L -.018 -.319 L .162 -.375 L .47 -.203 L .93 -.091 L 1.123 .01 L 1.305 .138 L 1.156 -.197 L .44 -.275 L .163 -.512 L .146 -.434 L .545 -.164 L 1.754 -.814 L .534 -.305 L .968 -.523 L 1.76 -.009 L 2.508 .029 L 1.855 .004 L 1.093 .095 L .174 -.375 L .363 -.435 L .402 -.06 L 1.161 .124 L 1.139 -1.45 L 1.139 -2.22 L .514 -.626 L .632 -.526 L .273 .085 L .505 .36 L .381 .085 L .41 -.176 L .771 .025 L .488 .288 L .174 .274 L .31 2.819 L -.077 .229 L .606 .231 L .224 0 L .042 .154 L -.143 .069 L .02 .256 L -.192 .077 L .16 .291 L .188 -.153 L .349 .495 L -.268 .281 L .299 -.04 L .171 .093 L -.511 .374 L -.509 .093 L -.297 -.12 L -.013 .253 L -.138 .067 L -.077 -.107 L -.231 -.08 L -.277 .133 L -.101 .28 L -.171 -.013 L -.15 .16 L -.175 -.347 L -.746 .28 L -.204 -.093 L .12 .413 L -.666 -.213 L .199 -.48 L -.149 -.04 L -.364 .52 L -.332 .56 L -.342 .333 L -.324 -.227 L -.249 .439 L -.346 -.08 L .122 -.307 L -.325 .253 L .165 .16 L -.326 .293 L -.318 -.133 L .105 -.226 L -.654 .253 L .065 .359 L -.264 .04 L -.161 .373 L -.352 .106 L -.333 .679 L -.404 .505 L .173 .146 L .068 .212 L .168 .053 L .083 -.08 L .169 .013 L -.122 .146 L -.547 .106 L .053 .093 L -.392 .292 L -.068 .159 L .337 .027 L .282 .093 L .599 .704 L .055 .398 L .399 .106 L .691 -.239 L -.022 -.186 L -.14 -.027 L -.254 -.279 L -.097 -.04 L -.009 -.066 L .196 0 L .23 .133 L .218 .358 L .031 .425 L -1.599 .292 L -.032 -.385 L -.124 -.066 L -.109 .226 L -.164 .04 L -.03 .093 L -.105 -.106 L -.159 .266 L -.164 .04 L -.294 .04 L -.045 -.332 L .198 -.332 L -.443 .119 L -.154 -.146 L -.082 .252 L -.087 .664 L -1.429 .132 L -1.694 .159 L -1.182 .345 L -.787 .358 L -.097 .212 L -.32 .053 L -.144 .172 L -.032 -.04 L .308 -.756 L .024 -.106 L -.071 .027 L -.41 .994 L -.079 -.08 L -.406 .292 L .218 .318 L .553 .093 L -.46 1.515 L -.302 .429 L -.259 -.092 L .043 .251 L -.062 .185 L -.237 .145 L -.462 .501 L -.292 .304 L -.167 .026 L -.075 -.119 L .177 -.31 L -.113 -.178 L -.43 .013 L -.447 -.343 L -.148 -.053 L -.329 -.541 L .315 -.257 L .151 -.245 L -.271 .119 L -.362 .37 L .489 .845 L .033 .356 L .387 .581 L .28 .066 L .104 .765 L -.101 .238 L -.151 .23 L -.125 -.013 L -.487 .666 L -.396 .798 L .034 .053 L -.13 .132 L -.107 -.125 L -.374 .725 L .026 .125 L -.226 .04 L -.137 -.263 L .342 -.864 L .195 -.29 L .247 -.119 L .061 -.237 L -.093 -.059 L -.374 .119 L .226 -.383 L -.218 .04 L -.176 -.093 L .012 -.191 L .242 -.04 L -.077 -.33 L -.439 .296 L -.241 -.204 L -.157 .053 L -.23 -.396 L .355 -.171 L .357 -.053 L -.005 -.06 L -.604 -.316 L -.092 .165 L -.072 0 L .107 -.323 L .089 -.02 L .21 .159 L .131 -.06 L -.098 -.224 L -.353 -.066 L -.065 -.112 L .096 -.112 L .336 .02 L .193 -.284 L -.281 .046 L -.158 -.059 L .241 -.37 L .652 -.152 L -.328 -.06 L .146 -.409 L -.28 .093 L -.096 .132 L .11 .079 L -.315 .191 L -.035 -.224 L -.093 .053 L .051 .224 L -.081 .086 L -.051 -.158 L -.097 -.066 L -.103 .416 L -.447 -.079 L .402 .501 L -.294 .666 L .07 .237 L .272 .488 L -.055 .139 L -.466 -.317 L -.1 -.211 L .026 .205 L .174 .218 L .421 .237 L .132 .508 L -.631 -.402 L -.354 -.007 L -.118 -.283 L -.155 -.053 L .066 .25 L -.541 -.323 L -.33 .04 L .015 -.29 L .427 -.323 L -.428 .079 L -.19 .468 L .204 .231 L .457 .046 L .202 .25 L .954 .297 L -.047 .092 L .554 .165 L .158 .132 L -.22 .468 L -.227 .06 L -1.042 -.804 L .708 .811 L .626 .171 L -.248 .092 L .323 .079 L -.045 .079 L .061 .06 L -.034 .25 L -.312 -.191 L -.071 .073 L .104 .211 L -.216 .02 L -.656 -.56 L -.023 .026 L .419 .475 L .309 .158 L .182 -.026 L .191 .21 L .018 .31 L -.298 .059 L -.492 -.534 L -.474 -.198 L -.199 .16 L .046 .044 L .44 .145 L .488 .382 L -.047 .237 L .442 -.033 L .031 -.119 L .748 .119 L .151 .382 L .406 1.212 L .448 .803 L -.14 -.092 L -.262 -.349 L -.059 -.132 L -.359 -1.172 L -.147 -.277 L -.056 .31 L .135 0 L .034 .198 L -.292 -.066 L .173 .283 L .144 .099 L .228 .58 L -.144 -.053 L -.211 -.382 L .002 .224 L -.52 -.303 L -.06 .059 L .266 .303 L -.247 .119 L -.526 -.204 L .225 .204 L -.375 .211 L -.173 -.02 L -.251 -.21 L -.024 -.217 L .083 -.158 L -.081 -.053 L -.091 .204 L .044 .23 L .116 .211 L -.107 .158 L .894 .02 L .571 -.145 L .125 .165 L -.113 .191 L -.072 .369 L .14 .066 L .092 -.257 L .135 -.369 L .18 -.105 L .266 .31 L .047 .296 L -.166 .25 L -.163 -.013 L -.063 -.099 L -.316 .474 L -.254 .197 L -.483 -.053 L -.203 -.065 L -.147 -.066 L -.136 -.245 L -.151 .014 L .141 .244 L -.075 .013 L -.538 -.125 L -.436 -.151 L .162 .185 L .269 .026 L .833 .335 L -.034 .119 L -.396 .145 L .247 .007 L -.19 .25 L -.281 .138 L -.149 0 L -.481 -.375 L .242 .395 L .43 .164 L .302 -.171 L .292 .026 L .11 -.204 L .04 .178 L .217 .04 L .048 .079 L -.428 .322 L -.013 .085 L -.261 .072 L -1.498 .214 L -.865 .895 L -.487 .609 L -.13 .127 L -.935 .143 L -.528 .128 L -.617 .241 L -.678 .539 L -.225 .424 L -.096 .354 L -.819 .694 L -.693 .383 L -.429 .199 L -.797 .086 L -.35 .58 L -.177 .198 L -.809 1.125 L -.273 .781 L -.459 1.249 L .236 1.455 L .387 .925 L .456 .873 L .934 1.562 L .352 1.746 L .486 1.194 L -.075 .092 L .287 .276 L .123 .333 L .062 .827 L -.301 1.536 L -.064 .278 L -.31 .415 L .108 .424 L -.02 .252 L -.393 .551 L -.017 -.092 L .129 -.241 L -.025 -.138 L -.256 .035 L -.38 .137 L -.291 -.126 L -.509 .138 L -.12 -.329 L .014 -.233 L -.567 -1.068 L -.764 -.138 L -.204 -.352 L -.113 -.819 L -.423 -.229 L -.144 -.702 L -.373 .093 L -.608 -1.08 L -.375 -.482 L .296 0 L .375 -.438 L .048 -.226 L -.167 -.226 L -.471 .407 L -.277 -.208 L .126 -.573 L .147 -.758 L .158 -1.043 L -.293 -.452 L -.258 -.169 L -.496 -.126 L -.832 -.987 L -.875 -.804 L -.528 -.168 L -.43 .072 L -.536 .298 L -.456 .354 L -1.202 .299 L -.273 -.213 L -.131 -.62 L -.253 -.254 L -.264 -.113 L -.752 -.069 L -.516 -.296 L -.22 -.233 L -.504 .138 L -1.052 .115 L -.653 -.184 L -.047 .298 L -.64 .099 L -.183 0 L -.578 -.926 L -.238 .781 L -.447 -.135 L -.65 .001 L -1.328 -.04 L -.672 .439 L -.39 .055 L -1 -.459 L -.096 .009 L -.142 .014 L -.362 .528 L .201 .229 L .303 0 L .211 0 L .537 -.207 L .406 .092 L .676 .482 L -.68 .373 L .02 .254 L .263 .353 L .593 .146 L .229 .217 L .35 .334 L -.533 .136 L -.503 -.084 L -.276 -.419 L -.79 -.271 L -.224 -.211 L -.265 -.056 L -.013 .02 L -.209 .32 L .209 .154 L .248 .183 L -.248 .179 L -.069 .05 L -.447 -.459 L -.476 .192 L -.287 .291 L -1.025 -.472 L -.419 -.494 L -1.16 -.642 L -.615 .066 L .554 .393 L -.307 .187 L -1.17 -.083 L -.886 -.252 L -.896 -.168 L -1.547 .173 L -.632 .328 L -.392 -.015 L -.433 -.031 L -.135 -.49 L -.333 .057 L -.112 .184 L .474 .731 L -.877 .64 L -.808 .577 L -.915 .317 L -.419 .043 L -.414 -.056 L -.728 -.111 L -.126 .198 L .437 .437 L -.239 .396 L -.327 .199 L -.631 .114 L -.737 .27 L -.268 .17 L .558 .352 L .111 .169 L -.659 .694 L -.154 .297 L -.012 .848 L .144 .636 L .271 .762 L .425 .903 L -.347 -.119 L -.816 -.377 L -.296 .001 L -.416 .116 L -.264 -.069 L -1.029 -.56 L -.921 -.32 L -.375 -.365 L -.336 -.592 L -.332 -.932 L -.078 -.467 L -.268 -.253 L -.657 -.576 L -.845 -1.042 L -.744 -1.227 L -.663 -1.029 L -.363 -.366 L -.412 -.252 L -.783 -.321 L -.475 -.082 L -.643 .018 L -.468 .201 L -.576 .541 L -.418 .413 L -.283 .37 L -.416 .158 L -.501 -.011 L -.337 -.069 L -1.104 -.503 L -1.092 -.659 L -.445 -.549 L -.318 -.847 L -.284 -.678 L -.179 -.226 L -.708 -.491 L -.837 -.519 L -.766 -.632 L -.631 -.662 L -.209 -.112 L -1.892 -.046 L -1.858 -.003 L -.096 .892 L -.213 .101 L -1.867 .011 L -.966 -.037 L -1.544 -.02 L -1.662 -.019 L -.338 -.055 L -3.516 -1.112 L -2.811 -.933 L -1.186 -.39 L -.267 -.154 L -.316 -.31 L -2.381 .084 L -2.367 .155 L -.34 .017 L h 49.818 152.776 m -.122 .086 L -.279 .03 L -.111 -.131 L -.177 -.005 L -.324 .051 L -.304 -.39 L -.071 -.263 L .339 -.01 L .299 -.253 L .188 .218 L .106 .294 L .223 .096 L .233 .279 L h 52.785 154.312 m -.155 -.081 L -.085 -.356 L -.461 -.321 L .095 -.229 L .143 -.058 L .366 .209 L .344 .055 L .616 .356 L -.005 .172 L -.294 .184 L -.563 .069 L h 111.683 77.224 m -.138 .415 L -.45 .067 L -.324 .113 L -.295 .247 L -.321 -.137 L -.185 -.21 L .087 -.443 L .086 -.443 L -.438 -.675 L -.463 -.319 L -.199 -.271 L -1.281 .055 L -.437 .098 L -.153 .161 L -.496 .097 L -.019 -.193 L -.034 -.432 L .212 -.272 L .184 -.212 L -.378 -.347 L -.641 -.438 L -.693 -.696 L -.723 -.317 L -.453 -.136 L .132 -.35 L -.569 -.592 L -.099 -.213 L .371 -.229 L -.068 -.122 L -.301 -.152 L -.445 -.076 L -.392 -.274 L -.237 -.259 L -.57 -.305 L -1 -.411 L -.479 -.765 L -.217 -.583 L -.367 -.399 L -.357 .016 L -.101 .814 L .42 .873 L .104 .306 L -.047 .153 L -.701 -.136 L -.272 -.076 L -.511 -.504 L -.4 -.459 L -.537 .139 L -1.219 -.228 L 1.263 .718 L .032 .214 L -1.62 .171 L -1.093 -.35 L -1.388 -.948 L -.543 -.292 L -.664 -.043 L -.079 0 L -.933 -.213 L -1.3 -.536 L .928 -.248 L .135 -.169 L 90.8 67.129 l -.384 -.153 L -.792 .156 L -.454 .14 L -.656 .017 L -1.058 -.06 L -1.068 -.245 L .027 -.247 L -.148 -.186 L -.325 -.108 L -.359 .016 L -.47 .202 L -1.036 .049 L -1.465 -.122 L 80.46 66.64 l -.786 -.091 L -.248 -.108 L -.651 -.387 L -.427 -.527 L -.301 .218 L -.788 .157 L -.89 -.293 L -.234 -.326 L -.417 -.139 L -.872 -.248 L -1.538 -.23 L -.817 -.248 L -.671 -.342 L -.553 .235 L -.675 .079 L .06 .437 L -.193 .062 L -.389 .25 L -.249 .405 L 1.119 .293 L .174 .294 L -.096 .388 L -.428 .449 L -.458 .001 L -.804 -.214 L -.586 -.061 L -.568 .094 L -.978 .603 L -1.066 .217 L -.936 .448 L -1.035 .448 L -1.095 .109 L .178 -.308 L .063 -.123 L .72 -.401 L -.093 -.385 L -.655 -.523 L .004 -.108 L 64.1 66.19 l .411 -.482 L .157 -.42 L .736 -.312 L .87 -.235 L 1.165 -.018 L 1.085 .123 L .239 -.156 L -1.239 -.466 L -.971 -.389 L -1.043 .049 L -.226 .219 L -.449 .095 L -.573 .438 L -.865 .375 L -1.019 .282 L 61.553 65.9 l -.406 .094 L -.298 .14 L .131 .325 L -.177 .526 L -.563 .34 L -.564 .078 L 59 67.544 l -.592 .278 L -.681 .601 L -.035 .292 L .38 .168 L .36 .03 L .667 .106 L .465 .229 L -.075 .184 L -.43 .338 L -.625 .2 L -.557 .277 L -.423 .398 L -.544 .383 L -.675 .093 L -1.434 .308 L -.678 .397 L -1.036 .337 L -.7 .367 L .52 .5 L -.1 .167 L -1.106 .412 L -.897 .153 L -.778 .168 L 49.51 74.19 l -1.214 .456 L 48.1 74.828 l -.274 .394 L -.753 .439 L -1.193 .229 L -1.234 .184 L -.973 -.345 L .001 -.181 L .332 -.348 L .763 -.273 L .306 -.212 L .445 -.364 L 1.171 -.441 L 1.403 .073 L -.12 -.212 L .02 -.516 L .47 -.304 L .725 -.291 L .754 -.366 L .266 -.214 L .002 -.731 L .246 -.749 L .693 -.49 L .194 -.398 L .034 -.412 L -.633 .122 L -1.251 .186 L -.676 -.029 L -.5 -.597 L -.266 .062 L -.613 .216 L -.136 .23 L .239 .352 L .021 .352 L -.169 .046 L 47 70.115 l -.567 -.32 L -.487 -.397 L -.509 -.291 L -.56 -.03 L -.812 -.106 L -.91 .094 L .028 .138 L -.644 .338 L -1.175 .14 L -.649 -.09 L -.064 -.123 L -.082 -.107 L -.125 -1.028 L .3 -.508 L -.142 -.431 L -.864 -1.002 L -1.43 .437 L -.738 .078 L -.406 .202 L -1.091 .094 L -.4 -.23 L -.394 -.355 L -.466 -.325 L -1.007 -.463 L -.179 -.28 L .292 -.171 L .337 -.437 L .704 .139 L 1.312 .309 L .69 .03 L .238 -.234 L -.375 -.482 L -.458 -.264 L -.363 0 L -.541 .22 L -.528 -.015 L -1.342 -.513 L -.623 -.186 L -.197 .016 L -.858 -.029 L -.024 -.078 L -.623 -.985 L .79 -.19 L .071 -.456 L .495 -.221 L .102 -.299 L .227 -.347 L .893 -.491 L .337 -.38 L .386 -.301 L .527 -.476 L .39 -.175 L .719 .109 L .98 .268 L .485 .094 L .752 -.144 L .427 -.254 L .675 -.429 L 1.252 -.257 L .774 -.033 L .955 -.049 L .354 -.175 L .187 -.478 L -.259 -.669 L -.814 -.686 L .026 -.096 L .927 -.034 L .343 -.256 L -.25 -.384 L -.497 -.256 L -.367 -.08 L -1.88 .389 L 39.33 56.53 l -.534 .289 L -.496 .065 L -1.907 -.333 L -.848 -.031 L 34.8 56.49 l -1.27 .162 L -1.265 -.029 L -1.349 -.174 L -.53 -.207 L -.183 -.788 L .144 -.146 L .636 -.033 L 1.008 -.002 L .446 -.179 L -1.057 -.241 L -1.912 -.304 L 28.13 54.31 l -1.285 -.208 L .219 -.114 L .781 -.262 L 1.568 -.214 L 1.325 -.328 L .958 -.214 L 1.058 -.361 L .953 -.23 L 1.399 -.281 L 1.513 .128 L -.158 .523 L .023 .277 L 1.051 .161 L 1.359 .095 L 1.074 -.019 L .657 -.099 L .784 -.246 L .55 -.295 L .262 -.083 L .752 .064 L .751 .113 L 1.021 -.051 L .2 -.327 L .007 -.18 L -.689 -.064 L -1.946 -.292 L -1.283 -.047 L -.312 -.755 L -1.473 -.162 L -.96 -.031 L -1.573 -.096 L -.194 -.511 L -.484 -.312 L -1.042 -.461 L -.512 -.148 L -2.66 -.659 L -2.008 -.545 L .317 -.167 L .812 -.402 L .086 -.485 L 2.136 -.054 L .99 -.069 L 1.829 -.288 L .784 -.354 L .452 -.623 L .788 -.575 L .616 -.525 L .818 -.41 L .742 -.224 L 1.066 -.104 L 1.133 -.241 L 1.047 -.036 L 1.804 .065 L .146 -.188 L -.156 -.205 L 44.47 42.83 l .018 -.206 L 1.936 -.089 L 1.143 .032 L .974 -.054 L 1.344 -.14 L 1.098 -.416 L .918 -.417 L .957 -.019 L .282 .051 L .675 .241 L .156 .172 L -.383 .139 L .017 .344 L 1.049 .136 L .424 .034 L .536 -.293 L .297 -.208 L 1.419 .187 L 1.534 .049 L 1.062 .049 L .715 .033 L .711 .257 L .359 .274 L .783 .358 L .494 .085 L .421 -.086 L 1.292 .117 L 1.124 .015 L 1.556 -.054 L 1.449 -.088 L 1.213 .1 L 1.377 .254 L .883 .118 L 3.424 .13 L 1.279 .168 L .743 .169 L 2.027 -.038 L 2.339 -.141 L 1.123 .236 L 2.441 .791 L 1.206 .301 L .227 .008 L .102 .483 L -.003 2.855 L .039 2.259 L .052 2.335 L .129 2.796 L -.026 2.183 L -.043 4.334 L .026 2.167 L .089 1.046 L .196 .279 L .84 .074 L 2.424 -.122 L .739 .059 L .332 .388 L .173 .387 L .348 .292 L 2.162 1.318 L .945 .673 L .238 -.325 L .848 -.205 L 1.225 -.67 L .731 -.498 L .495 -.126 L .832 .073 L .316 .199 L .371 .492 L .35 .322 L 2.048 1.175 L .814 .58 L 1.769 1.768 L 1.67 1.882 L .512 .393 L .189 .029 L .98 .314 L 2.025 .763 L .402 .255 L -.163 .788 L .393 .777 L +643.755 159.873 N -1.092 -.52 L -.637 -.337 L -.203 -1.284 L .036 -.282 L .24 -.241 L .42 -.241 L .721 -.623 L .493 .056 L .049 -.17 L .24 -.396 L .239 .028 L .573 .225 L .321 -.312 L .439 -.001 L .798 -.171 L .596 .69 L -.163 .17 L -.443 .354 L -.412 .538 L -.285 .734 L .14 .296 L -.22 .311 L -.292 .085 L -1.026 .383 L -.532 .707 L h 627.173 150.012 m -.679 .314 L -.24 .241 L -.043 .325 L .138 .592 L .228 .366 L .119 .521 L -.109 .339 L -.266 .213 L -.769 -.08 L -.321 -.21 L -.178 -.196 L -.153 -.239 L -.111 -.38 L -.628 .413 L -.647 .159 L -.246 -.083 L -.378 -.266 L -.341 -.746 L -.291 -.379 L -.481 .045 L -.507 .003 L -.228 -.098 L -.117 -.352 L .729 -1.584 L -.033 -.268 L -.521 -.096 L -.554 .074 L -.202 -.324 L -.277 -1.762 L -.156 -.126 L -.479 .017 L -.771 .089 L -.819 .442 L -.312 .086 L -.216 -.069 L 0 -.268 L .224 -.58 L -.163 -.705 L -.075 -.465 L .617 -.85 L .191 -.198 L .487 -.271 L .611 -.525 L .429 -.722 L .353 -.862 L -.02 -.875 L -.195 -1.649 L -.146 -.14 L -.504 .031 L -.287 -.041 L -.217 -.309 L -.243 -.901 L -.397 -.435 L -.504 -.279 L -.277 .044 L -.306 .34 L -.001 .127 L -.624 -.081 L -.73 -.179 L -.657 -.081 L -.3 -.055 L -.102 -.056 L .138 -.269 L .354 -.454 L -.046 -.38 L -.716 -.715 L -.455 -.392 L -1.377 .84 L -.377 .044 L -.975 -.319 L -.286 -.167 L -.355 .087 L -.546 .299 L -1.105 .726 L -.829 .258 L -.543 .37 L -1.123 1.107 L -.397 .27 L -.714 .216 L -.784 .033 L -.189 .1 L -.329 -.619 L -.312 -.209 L -.371 -.041 L -1.659 -.047 L 601 137.538 l -.309 -.294 L -.417 .016 L -.149 .103 L -.348 .239 L -.609 .539 L -1.251 1.545 L -.212 -.662 L .052 -.861 L -.139 -.183 L -.231 -.069 L -.471 .102 L -.345 .129 L -.655 -.159 L -.339 .281 L -.341 -.116 L -.849 .066 L -.319 -.364 L -.63 -.281 L -.407 0 L -.08 .331 L -.271 .083 L -.685 -.38 L .01 .364 L -.237 .099 L -.141 -.463 L -.54 -.496 L -.365 .066 L -.935 -.066 L -.014 -.265 L .175 -.396 L -.326 -.017 L -.333 .248 L -1.451 -.893 L .069 -.281 L -.178 -.38 L -.289 -.166 L -.71 .116 L -.158 .166 L -.657 -.794 L -.454 -.281 L -.15 .132 L -.472 -.215 L -.726 -.595 L -.867 -.264 L -.132 -.612 L -1.079 -.199 L -.186 .182 L -.275 -.066 L -.134 .513 L -.276 .314 L -.299 -.05 L -.24 -.43 L -.859 -.596 L -.154 .066 L -.756 -.248 L .116 -.364 L -1.078 -.579 L -.363 .116 L -.772 -.843 L -.383 -.248 L -.477 .314 L -.198 -.066 L -.099 -.43 L .215 -.215 L -.272 -.364 L .104 -.446 L -.579 -.595 L -.157 -.694 L .785 -.198 L .033 .364 L .337 .264 L .368 -.049 L .376 -.281 L .578 -.364 L -.367 -.694 L .104 -.414 L -.68 -.099 L -.044 -.182 L -.092 -.078 L -.718 -.096 L -.294 -.221 L -.037 -.552 L -.073 -.589 L .184 -.184 L .331 -.221 L -.221 -.258 L -.441 -.405 L -.81 -.11 L -.221 -.515 L -.441 -1.03 L 0 -.515 L -.502 .152 L -.147 -.126 L -.305 -.111 L -1.337 -.104 L -.565 -.436 L -.178 -.09 L -.104 -.199 L -.239 0 L -.52 .196 L -.252 -.281 L -.198 -.218 L -.301 -.07 L .312 -.516 L -.007 -.501 L -.213 -.247 L -.373 -.323 L -.625 .009 L -.282 .128 L -.004 -.456 L -.554 -.117 L -.296 -.047 L -.281 .21 L -.105 -.112 L -.313 -.14 L -.048 -.088 L -.236 -.012 L -.01 -.269 L .574 .059 L .192 -.145 L .354 -.136 L .08 -.249 L .181 -.185 L -.2 -.163 L .152 -.36 L -.245 -.237 L .126 -.428 L -.049 -.123 L -.152 -.012 L -.028 -.246 L .009 -.284 L -.295 -.494 L -.273 -.154 L -.692 -.039 L -.22 -.06 L -.229 .162 L -.463 .045 L -.325 -.394 L -.077 -.305 L .207 -.223 L -.023 -1.031 L .011 -.069 L .139 -.739 L .129 -.213 L .274 -.186 L 1.422 -.704 L 1.737 -.734 L .359 -.03 L .06 .071 L .183 .567 L .344 .055 L .507 -.145 L .885 -.132 L .268 -.243 L .463 -.784 L .467 -.472 L .238 -.03 L 1.248 .235 L .459 -.017 L .478 -.102 L .646 -.345 L .638 -.701 L .405 -.301 L .445 -.145 L 1.338 -.349 L .97 -.219 L .325 -.187 L .051 -.157 L -.031 -.194 L -.139 -.86 L .02 -.399 L .32 -.401 L .705 -.546 L .222 -.33 L -.119 -.47 L -.29 -.441 L -.345 -.627 L -.03 -1.357 L -.483 -.141 L -.366 .06 L -.232 -.185 L .068 -.215 L .215 -.302 L .393 -.188 L 1.799 -.254 L 1.082 -.207 L .35 -.06 L .5 .184 L 1.133 .238 L .394 -.074 L .231 -.145 L .156 -.245 L -.126 -.286 L -.622 -.514 L .137 -.418 L .286 -.605 L .438 -.794 L .516 -1.141 L .427 -.507 L 1.096 .254 L .721 .141 L .594 .141 L 1.402 .079 L .718 -.062 L .417 -.103 L .444 -.392 L .157 -.39 L -.213 -.707 L -.097 -.75 L .34 -.581 L .428 -.277 L 1.199 -.093 L .289 -.06 L .306 -.219 L .035 -.478 L .011 -.275 L .279 -.262 L .542 -.148 L .551 -.034 L .228 -.014 L .569 -.003 L .244 -.074 L .062 .145 L .131 .405 L .24 .563 L .371 .433 L 1.301 .745 L .834 .415 L .614 .069 L .731 .167 L .633 .144 L .354 .143 L .568 .618 L 1.07 1.451 L .401 .66 L -.215 .447 L -.237 .75 L -.214 .389 L -.369 .347 L -.035 .129 L .105 .43 L .233 .229 L .724 .312 L 1.062 .181 L 1.505 .021 L .995 .038 L .668 .083 L .998 .224 L .632 .268 L 1.645 .806 L .839 .31 L .744 .096 L .105 .542 L 1.571 2.161 L .467 .439 L .444 .254 L 1.979 .018 L 1.241 .207 L .802 .109 L 1.165 .022 L 2.861 -.059 L .937 .023 L 1.164 .022 L 1.69 .119 L .521 .168 L .815 .551 L 1.006 .365 L 1.599 .433 L .929 .123 L .663 -.061 L .61 .067 L .253 .297 L .433 .197 L .481 -.017 L .686 -.289 L 1.44 -.534 L .303 -.101 L .736 -.274 L .816 -.289 L 1.204 -.349 L 1.339 -.007 L 1.514 -.065 L .987 .08 L .651 -.061 L 1.941 -.737 L .265 -.172 L 1.111 -1.046 L .67 -.389 L 1.265 -.292 L .326 -.259 L .123 -.271 L -.188 -.228 L -.599 -.411 L -.389 -.569 L -.003 -.343 L .214 -.401 L .539 -.589 L .457 -.231 L .316 -.073 L .718 .154 L .668 .382 L .592 .125 L .982 -.005 L .744 -.047 L .742 -.433 L 1.192 -.91 L .224 .013 L .438 .012 L .624 .054 L .896 -.134 L .638 -.248 L .347 -.188 L .241 -.216 L .312 -.82 L .363 -.333 L .47 -.204 L .464 -.045 L .483 .127 L .353 -.189 L .831 -.278 L .539 -.146 L .937 -.221 L .854 -.033 L .432 .099 L 1.074 .008 L .464 .127 L .414 -.218 L .107 -.217 L -.048 -.273 L -.599 -.501 L -.879 -.99 L -.797 -.5 L -.538 -.199 L -.928 -.212 L -.438 .002 L -1.191 .786 L -.292 -.07 L -.431 -.416 L -.317 -.085 L -.576 .018 L -.754 .062 L -.929 .395 L -.342 .045 L -.051 -.029 L -.269 -.836 L .381 -.58 L 1.224 -1.959 L .687 -1.207 L .295 -.31 L .046 .018 L .452 .172 L 1.126 .574 L .343 -.016 L .438 -.089 L 2.44 -.752 L .779 -.339 L .123 -.233 L -.056 -.306 L -.35 -.348 L -.062 -.146 L .103 -.249 L .422 -.426 L .416 -.543 L .667 -.779 L .599 -.545 L 1.371 -.608 L .167 -.794 L -.107 -.249 L -.465 -.306 L -.558 -.026 L -.822 .078 L .119 -.25 L .375 -.282 L 1.193 -.787 L .478 -.165 L .602 -.136 L 1.854 -.143 L .836 -.123 L 1.203 -.109 L .917 -.049 L 1.148 .215 L 1.037 .481 L .683 .188 L 1.386 -.125 L .539 .026 L .763 .467 L .742 .952 L 1.087 2.384 L .94 1.588 L .927 1.903 L .436 .389 L .507 .2 L 1.247 .341 L 1.523 .253 L 2.659 .839 L .205 .144 L .297 .866 L .44 1.283 L .261 .446 L .68 -.033 L .649 -.018 L 1.657 -.052 L .604 -.22 L .953 -.308 L 1.357 -.31 L 1.181 -.208 L .902 -.034 L .246 .114 L .064 .259 L .116 .389 L .017 .504 L -.566 .407 L -.66 .393 L -.291 .707 L -.278 .893 L -.538 1.066 L -.627 1.08 L -.329 .432 L -.551 .69 L -.47 .347 L -.547 -.098 L -.679 -.225 L -.685 -.24 L -.396 -.041 L -1.664 .982 L -.048 .557 L .332 .897 L .062 .656 L -.006 .613 L -.025 .385 L -.097 .128 L .112 .299 L -.156 .329 L -.511 .43 L -1.252 .462 L -.111 .058 L -.579 -.68 L -.247 .001 L -.253 .129 L -.383 .358 L -.23 .713 L -.955 .532 L -.62 .259 L -.538 .017 L -.452 -.054 L -.333 -.126 L -.392 .059 L -.273 .243 L -.025 .342 L .508 .765 L .046 .113 L -.527 .159 L -.975 .048 L -.508 -.153 L -.493 -.253 L -.273 -.396 L -.448 .017 L -.386 .13 L -.686 1.027 L -.636 .543 L -1.032 .545 L -1.533 .604 L -.52 .329 L -.415 .442 L -.379 .528 L -.066 -.092 L -.417 .171 L -1.222 .13 L -.728 .171 L -2.248 .925 L -.632 .37 L -.566 .469 L -.604 .271 L -.336 .015 L .13 -.255 L .862 -.682 L .33 -.354 L -.47 -.113 L -.37 .072 L -.153 -.297 L .058 -.156 L .953 -.781 L .269 -.384 L .55 -.413 L .159 -.2 L -.057 -.298 L -.73 -.553 L -.727 -.283 L -.131 -.014 L -.628 .03 L -.166 .015 L -.494 .371 L -1.146 1.183 L -.355 .157 L -.643 .086 L -.613 .243 L -.36 .199 L 665.49 112 l -.136 .411 L -.131 .255 L -.251 .255 L -.437 .128 L -.493 -.013 L -.326 .27 L -.307 .114 L -.455 -.565 L -.355 -.014 L -.349 .128 L -.396 .638 L -.301 .694 L .088 .34 L .245 .368 L .558 .268 L .8 .268 L 1.21 -.045 L .29 .254 L -.019 .538 L -.123 .581 L .057 .538 L .261 .283 L .733 .069 L .698 -.157 L .76 -.525 L .509 -.497 L .552 -.228 L .534 -.128 L .287 .07 L .895 .621 L .543 .197 L 1.023 -.087 L .361 .027 L .471 .141 L .274 0 L -.248 .708 L -.057 .552 L -.612 -.197 L -.297 -.084 L -.525 .058 L -1.677 .555 L -.707 .44 L -.072 .735 L -.522 .157 L -.146 -.113 L -.017 -.269 L -.127 -.084 L -.501 .114 L .138 .466 L -.152 .368 L -.485 .496 L -1.397 1.119 L -.126 .226 L .039 .55 L .62 .225 L .712 .492 L .785 .521 L .391 .535 L .424 1.241 L .668 .647 L .175 .437 L -.13 .677 L .172 .183 L .694 .295 L .399 .592 L .562 .253 L .272 .268 L .087 .31 L -.049 .155 L -.789 .369 L .088 .07 L .425 .31 L .314 .79 L -.019 .296 L -.141 .184 L -.534 .043 L -.651 .213 L -.948 .552 L -.849 .213 L -.629 .297 L .72 .21 L .378 .056 L .944 -.425 L .488 -.058 L .162 .056 L .524 .592 L .387 .168 L .456 .027 L .009 .155 L -.231 .311 L -.382 .227 L -.304 .241 L .11 .155 L .326 -.029 L .202 .084 L -.184 .325 L -.298 .749 L -.192 .649 L .028 .353 L -.22 .452 L -.209 .127 L -.35 -.338 L -.146 .142 L -.569 .763 L -.401 .622 L -.215 .622 L -.127 .296 L -.595 .425 L -.251 .438 L -.254 .184 L -.569 .029 L -.382 .227 L .279 .719 L -.264 .508 L .076 .593 L -.093 .269 L -.207 .269 L -.532 .199 L -.161 .282 L -.174 .396 L -.294 .636 L -.626 .354 L -.412 .495 L -.492 -.14 L -.443 -.069 L -.142 .113 L -.145 .198 L .118 .833 L -.213 .142 L -.772 .651 L -.356 .127 L -.628 .171 L -.563 .467 L -.571 .213 L -.107 .113 L -.008 .48 L -.133 .156 L -.568 .058 L -.5 .114 L -.341 .438 L -.364 -.126 L -.52 -.168 L -.274 .057 L -.315 .326 L -.435 .198 L -.643 .1 L -.047 -.465 L -.52 .057 L -.699 .213 L -.32 .198 L -.285 -.042 L -.401 -.493 L -.163 -.155 L -.191 .283 L .095 .169 L -.045 .212 L -.047 .691 L -.209 .297 L -.416 .114 L -.501 -.182 L -.123 .282 L -.001 .24 L -.146 .155 L -.615 .058 L -.366 .114 L -.596 .043 L -.463 -.211 L -.217 .1 L -.439 .48 L -.227 .071 L -.774 -.041 L -.747 .227 L -.406 .326 L -.451 -.027 L -.277 -.084 L -.011 .057 L -.069 .353 L -.29 .396 L .011 .113 L .48 .634 L .269 .126 L .043 .198 L -.36 .269 L -.763 .157 L -.481 -.719 L -.241 -.691 L .012 -.395 L .396 -.777 L -.015 -.169 L -.587 -.253 L -.226 .071 L -.206 .297 L -.454 .072 L -.676 -.21 L -.574 -.733 L -.196 .085 L -.017 .169 L -.159 .396 L -.27 .128 L -.332 -.056 L -.481 .043 L -.055 .038 L -.197 -.143 L -.909 -.107 L -.621 -.166 L -.943 -.615 L -.273 -.365 L -.096 -.521 L .472 -.75 L -.056 -.38 L -.237 -.21 L -.777 .047 L -.66 -.053 L -.771 -.235 L -.623 -.575 L -.298 .101 L -.521 .328 L -.696 .554 L -.341 .157 L -.807 .117 L -1.595 .052 L -.332 .115 L -.584 .413 L -.325 -.097 L -.597 -.392 L -.341 -.012 L -.515 .13 L -.483 .229 L +241.073 156.152 N .017 .52 L .098 1.215 L .012 .212 L -.379 .455 L -.011 .17 L .485 1.358 L -.669 -.577 L -.445 -.056 L -.761 .143 L -.877 -.012 L -.666 -.14 L -.574 -.056 L -.474 .1 L -.378 .354 L -.135 -.042 L -.993 -.549 L -.171 -.325 L .04 -.198 L .269 -.184 L 1.051 .097 L .631 .111 L 1.125 .167 L .654 .041 L .61 -.185 L .386 -.156 L -.198 -.155 L -.692 -.464 L -.136 -.296 L .184 -.707 L -.202 -.296 L -.394 -.154 L -.913 -.14 L -.305 -.211 L .04 -.184 L .119 -.085 L .344 -.1 L .724 -.058 L .781 .125 L 1.081 .294 L .576 .056 L .147 -.089 L +241.295 160.082 N -.485 -1.358 L .011 -.17 L .379 -.455 L -.012 -.212 L -.098 -1.215 L -.017 -.52 L .503 -.279 L .393 .14 L .342 0 L .384 -.17 L .369 -.043 L .14 .198 L .177 .112 L 1 .309 L .657 -.072 L .213 .395 L .335 .338 L .528 .324 L .335 .084 L .643 .21 L .916 .45 L .399 .352 L .231 .311 L -.191 .17 L -.144 .297 L -.314 .368 L -.238 -.098 L -.476 -.592 L -.378 -.042 L -.788 .058 L -.288 -.098 L -.373 0 L -.329 .1 L -.763 .539 L -.396 -.056 L -.319 -.494 L -.166 -.028 L -.155 .057 L -.658 .326 L -.344 .778 L -.41 .65 L -.289 -.112 L -.325 -.551 L +668.053 167.796 N -.131 -.099 L -.74 -.732 L -.444 -1.255 L .037 -.424 L .054 -.706 L -.292 -.465 L .18 -.382 L .978 .704 L .202 -.424 L .023 -.41 L -.101 -.438 L -.026 -.579 L .145 -.438 L .025 -.664 L .082 -.861 L .074 -.636 L .38 -.862 L .188 -.127 L .337 -.142 L .523 .055 L 1.21 .52 L .576 .042 L .188 -.212 L .277 -.17 L .199 .141 L .018 .396 L -.266 .438 L -.045 .48 L .14 .79 L .541 .394 L .182 .325 L -.427 1.271 L -.31 .467 L -.834 .608 L -.555 .312 L -.082 .099 L .003 .268 L -.078 .565 L -.28 .424 L .127 .211 L .35 .733 L .345 1.101 L .26 .62 L .093 .028 L .451 .324 L .296 .07 L .161 -.325 L .485 -.537 L .197 -.029 L .418 .112 L .226 .211 L .179 .635 L .286 .353 L .326 .084 L .505 -.58 L .621 .267 L .141 .028 L .078 .127 L -.168 .156 L -.378 .156 L -.208 .212 L .936 1.226 L -.315 .184 L -.568 -.196 L -.404 -.098 L -.094 -.48 L -.229 -.31 L -.599 -.535 L -.753 -.577 L -.258 0 L -.099 .226 L .371 .776 L -.218 .283 L -.727 -.775 L -.982 -.548 L -.309 .015 L -.344 .142 L -.182 .255 L -.14 .071 L -.395 .057 L -.322 -.225 L -.591 -.366 L -.195 -.423 L .64 -.608 L .323 .211 L .358 .084 L .4 -.199 L -.151 -.169 L -.713 -.295 L -.422 -.395 L -.522 -.168 L -.239 .607 L h 669.676 172.974 m -.452 -.366 L -.349 -.408 L -.051 -.226 L -.364 -1.114 L -.459 -.521 L .685 -.058 L .868 .012 L .314 .169 L .274 .451 L .028 .861 L -.097 .48 L -.214 .283 L -.185 .438 L h 679.073 175.368 m -.562 -.267 L -.178 -.254 L -.237 -.169 L -.064 -.127 L .139 -.339 L -.091 -.423 L -.55 -.352 L -.662 -.479 L -.147 -.466 L .513 -.1 L 1.017 -.143 L .371 .112 L .283 .409 L .069 .818 L .123 .805 L .257 .79 L -.112 .127 L -.167 .057 L h 671.406 176.824 m .022 -.353 L .186 -1.342 L .061 -1.172 L .482 .395 L .576 .281 L .366 .028 L .634 -.185 L .027 .438 L -.079 .396 L -.24 .269 L -.184 .198 L -.908 .651 L -.943 .397 L h 664.721 177.812 m -.366 -.027 L .127 -.297 L .202 -.099 L .314 -.396 L .265 -.523 L .082 -.607 L .138 -.509 L .326 -.184 L .14 .183 L -.16 .283 L .276 .55 L .212 .564 L -.108 .113 L -.664 .354 L -.406 .368 L -.377 .227 L h 673.781 179.981 m -.385 -.366 L -.828 -.591 L -.206 -.38 L .099 -.368 L .565 -.213 L .22 -.269 L .487 -1.822 L .438 -.185 L .271 .028 L .113 .126 L .049 .282 L -.373 .905 L -.089 .226 L -.315 1.413 L .165 .296 L .214 .465 L -.213 .41 L -.212 .043 L h 661.179 181.308 m -.317 -.042 L .215 -.48 L .343 -.467 L .35 -.34 L .592 -.354 L .636 -.496 L .933 -1.089 L .11 .55 L -.118 .424 L -.267 .297 L -.24 .184 L -.516 .213 L -.172 .127 L -.244 .622 L -.327 .269 L -.591 .171 L -.386 .41 L h 680.678 185.402 m -.201 -.098 L -.098 -.438 L -.361 -.748 L -.297 -.112 L -.381 .608 L -.361 .82 L .246 .38 L .166 .395 L .148 .677 L -.158 .495 L -.383 .509 L -.305 -.253 L -.176 -.268 L .201 -.41 L -.076 -.325 L -.363 -.07 L -.361 .665 L -.173 -.056 L -1.114 -.619 L -.557 -.549 L -.206 -.508 L -.037 -.635 L .466 -.905 L -.108 -.479 L -.466 -.409 L -.778 -.295 L -.292 .043 L -.062 .17 L -.129 .226 L -.5 .255 L -.661 .058 L -.027 -.494 L -.174 -.24 L -.399 .199 L -.504 .961 L -.525 .863 L -.219 -.084 L -.119 -.127 L -.034 -.197 L .054 -.311 L .359 -.749 L .185 -.537 L .263 -.283 L .383 -.184 L .564 -.044 L .219 -.127 L .134 -.466 L .205 -.156 L .549 -.241 L .777 -.101 L .292 .353 L .102 .72 L .317 -.156 L .485 -.058 L .207 -.184 L .207 -.565 L .358 -.255 L .479 .21 L .186 .084 L .158 -1.087 L .29 -.015 L .264 .465 L .315 -.481 L .205 -.142 L .392 .098 L .133 -.227 L -.048 -.706 L -.172 -.564 L .146 -.353 L .413 .549 L .711 .803 L .229 .48 L .083 .324 L -.336 .735 L .237 .226 L .537 -.1 L .076 .423 L -.114 .424 L .056 .692 L .207 .437 L -.002 .438 L -.111 .424 L -.283 .579 L -.332 .622 L +251.898 160.229 N -.547 -.112 L -.073 -.212 L .051 -.551 L -.109 -.24 L .11 -.17 L .235 -.071 L .543 .069 L .404 -.015 L 1.505 .11 L .393 .168 L .113 .141 L -.188 .354 L -.07 .099 L -.283 .227 L -.335 .043 L -.739 -.083 L -.657 .072 L -.354 .17 L +228.82 160.519 N -.299 -.056 L -.693 -.224 L -.229 -.268 L -.47 -.366 L -.465 -.084 L -.142 -.211 L .53 -.284 L .704 -.072 L 1.364 .251 L .97 .351 L .651 .267 L .279 .282 L -.04 .198 L -.332 .071 L -.751 -.295 L -.543 .058 L -.227 .255 L -.308 .128 L +400.72 175.499 N -.595 -.119 L -.161 -.032 L -.976 .458 L -1.429 -.006 L -.867 -.037 L -2.119 .041 L -.271 .157 L -.125 .34 L .261 1.934 L .02 .41 L -.191 .17 L -.63 -.434 L -.644 -.166 L -.769 .075 L -.608 .159 L -.446 .257 L -.368 .115 L -.354 -.083 L -.452 -.223 L -.52 -.562 L -.15 -.465 L -.308 -.252 L -.545 .003 L -.259 -.168 L .08 -.043 L .046 -.156 L .172 -.326 L .261 -.92 L .133 -.876 L -.058 -.749 L .141 -.255 L .257 -.016 L .448 -.158 L .543 -.271 L .317 -.369 L .292 -1.047 L .355 -1.217 L .397 -.384 L .273 -.058 L .293 .281 L .551 .364 L .45 -.102 L .174 -.227 L .393 -.822 L .492 -.667 L .638 -.625 L .272 -.101 L .518 .209 L .324 .182 L .274 .027 L .314 -.793 L .304 -.228 L .947 -.458 L 1.22 -.713 L .37 -.073 L .356 .125 L .36 .059 L 1.062 .173 L -.173 .665 L .019 .396 L .426 .93 L .422 .492 L .389 .266 L .502 .42 L .179 .268 L .018 .212 L -.335 .439 L .114 .226 L .97 .757 L .516 .181 L .37 -.044 L .562 .025 L .568 .971 L .131 .367 L -.237 .764 L -.415 .468 L -.337 .158 L -.739 -.095 L -.418 .045 L -.415 .271 L -.366 .553 L -.24 .157 L -.062 .142 L -.29 -.041 L -.611 -.166 L -1.013 -.163 L +209.823 175.47 N -.388 -.645 L -.932 -.888 L -1.003 -1.085 L -.837 -.817 L -.723 -.464 L -.196 -.183 L -.023 -.226 L .625 -.03 L 1.001 -.125 L .29 -.143 L .293 -.412 L .005 -.961 L .882 -.034 L .513 -.583 L .725 .42 L 1.207 -.997 L .503 -.794 L .294 -.242 L .259 .013 L .328 .182 L .463 .097 L .248 -.086 L .424 -.229 L 1.425 -.486 L .23 .519 L .038 .339 L -.057 .509 L -.214 .707 L -.543 .806 L -.1 .749 L .042 .904 L -.245 1.13 L -.188 .735 L -.101 1.385 L .031 .55 L .184 .466 L .188 .363 L -.281 .274 L -.767 -.149 L -.241 -.46 L -.285 .077 L -.394 -.107 L -.603 .25 L -1.651 -.599 L -.43 .271 L +634.036 168.444 N .533 .251 L .736 .165 L .341 .111 L .469 .251 L .248 -.058 L .095 -.24 L -.103 -.211 L -.187 -.182 L -.107 -.296 L .392 -.285 L .476 -.186 L .444 .181 L .373 .351 L .3 -.072 L .975 -.429 L .209 -.114 L -.215 .905 L .029 .663 L .455 1.014 L -.076 .367 L -.05 .424 L .054 1.073 L -.217 .509 L -.385 .285 L -.599 .187 L -.932 .443 L -.521 .229 L -.99 .571 L -.234 .425 L .216 .422 L .568 .435 L .03 .197 L -.17 .27 L -.688 -.194 L -.497 -.011 L -.599 .229 L -.915 .528 L -.646 .229 L -.3 .289 L -.256 -.188 L -.248 -.268 L -.35 -.042 L -.382 .142 L -.205 -.042 L -.293 .043 L -.183 -.113 L .142 -.311 L .182 -.226 L -.04 -.254 L -.283 -.395 L -.277 .043 L -.462 .298 L -.339 .015 L -.171 -1.044 L -.649 -1.488 L .146 -.176 L -.16 -.479 L -.487 -.717 L -.219 -.648 L -.026 -.635 L .076 -.382 L .146 -.297 L .92 -1.233 L .521 -.441 L .383 -.101 L 1.172 -.091 L .798 .066 L .558 -.074 L .575 .039 L .599 .109 L .301 .167 L +214.474 175.913 N .821 .884 L .385 .623 L .314 .322 L .225 .046 L .465 .645 L .441 .352 L -.014 .006 L -.074 .123 L -.478 -.184 L -.219 .205 L -.014 .321 L 0 .58 L .507 .307 L -.396 .368 L .125 .532 L -.374 .369 L .243 .184 L -.204 .609 L .003 -.466 L -.296 -.307 L .01 -.568 L -.377 -.148 L -.238 -.102 L -.111 .082 L .325 .41 L .084 .225 L -.113 .062 L -.726 -.299 L -.13 -.282 L .251 -.339 L .04 -.382 L -.182 -.338 L -.486 -.324 L -.695 -.287 L -.079 -.144 L -.689 -.103 L -.316 -.327 L .007 -.421 L -.146 -.255 L -.249 -.098 L -.576 -.353 L -.416 -.266 L .225 .512 L .086 .222 L .422 .044 L .181 .266 L -.544 .573 L -.144 -.262 L -.356 -.282 L -.561 -.211 L -.323 -.239 L -.147 -.24 L -.104 -.494 L .128 -.421 L .332 -.225 L -.008 -.389 L -.554 -.225 L .363 -.123 L -.057 -.227 L -.238 .017 L .43 -.271 L 1.651 .599 L .603 -.25 L .394 .107 L .285 -.077 L .241 .46 L .767 .149 L .281 -.274 L +436.304 195.359 N -.209 -.451 L -.194 -.804 L -.498 -.802 L -1.217 -1.236 L -.112 -.324 L -.064 -.791 L -.432 -.605 L -.4 -.661 L -.207 -.592 L -.273 -1.185 L -.112 -.776 L .064 -.424 L .144 -.198 L .528 -.399 L .4 -.511 L .866 -1.743 L .354 -.327 L .208 -.114 L .096 .084 L .24 .027 L .449 -.158 L 1.363 -.686 L .494 .661 L .225 .069 L .224 -.03 L .466 -.271 L .754 -.386 L .818 -.273 L .881 .009 L .368 -.031 L .258 -.143 L .646 -1.176 L .117 -.806 L .209 -.199 L .434 -.059 L 2.181 -.055 L .386 -.087 L 2.649 -2.275 L .196 -.284 L .005 -.41 L .165 -.382 L .372 -.228 L .939 -.613 L .322 -.086 L .321 .012 L .559 .208 L 1.342 1.673 L .347 .549 L .122 .536 L -.416 1.472 L .01 .664 L .158 .211 L .802 -.019 L .272 -.001 L .207 .126 L .252 .493 L .223 .225 L .797 .447 L .799 .235 L .351 .196 L .223 .267 L -.148 .481 L .173 .395 L .445 .351 L .558 .378 L .717 .434 L .207 .168 L .206 .366 L .059 .72 L .285 .436 L .367 .224 L .814 .165 L .558 .477 L .157 .352 L -.083 .679 L .031 .07 L -.496 .145 L -.962 .344 L -.319 -.026 L -.287 -.167 L -.687 -.264 L -1.15 -.361 L -.4 .13 L -.082 .551 L -.13 .241 L -.256 .058 L -.399 -.026 L -.862 -.207 L -.593 .102 L -.93 .373 L -.93 .486 L -.271 .016 L -.559 -.35 L -.383 -.153 L -.353 .186 L -.677 1.36 L -.176 .157 L -.591 -.067 L -1.934 -.511 L -1.422 -.189 L -.512 -.322 L -.159 -.239 L -.334 -.394 L -.75 -.518 L -.432 -.167 L -.479 .06 L -.529 .3 L -.353 .341 L -.785 .979 L -.097 .297 L .096 .452 L -.017 .353 L -.063 .594 L -.16 .058 L -.751 .287 L -.895 -.093 L -.624 -.138 L -.367 -.054 L -.975 .175 L -.479 .102 L -.255 .228 L -.222 1.287 L -.158 .523 L -.365 .497 L -.303 .312 L +371.324 180.419 N 1.088 -1.235 L .643 -.866 L .238 -.157 L .594 .039 L 1.137 -.148 L .466 .04 L .42 .224 L .456 .421 L .475 .619 L .252 .761 L .165 1.369 L .26 .656 L -.259 .502 L -1.184 1.151 L -.63 .724 L -.285 .256 L -.061 .103 L -.631 -.523 L -.661 -.408 L -.483 -.196 L -.033 -.141 L .061 -.297 L -.05 -.184 L -.531 -.21 L -.792 -.549 L -.389 -.366 L -.375 -.465 L .494 -.241 L .174 -.227 L -.034 -.155 L -.484 -.211 L -.065 -.113 L .022 -.173 L +579.606 186.906 N -.493 -.083 L -.265 -.197 L -.21 -.353 L -.246 -.621 L -.361 -1.256 L -.034 -.649 L .005 -.763 L -.02 -.904 L -.24 -.696 L .188 -.513 L -.298 -.35 L .068 -.28 L .423 .023 L .349 -.43 L .053 -.367 L .226 -.369 L -.152 -.537 L .529 .48 L .699 .38 L .234 .395 L .549 .776 L .175 .324 L -.099 .339 L .024 .141 L .592 .338 L .266 .733 L .798 1.368 L .136 .508 L -.193 .735 L -.397 .679 L -.369 .396 L -.514 .425 L -.78 .284 L -.642 .043 L +217.111 178.792 N .52 .307 L .195 .512 L .02 .374 L .363 .155 L .628 .024 L .244 -.205 L .398 .43 L .726 .082 L .458 -.083 L 1.348 -.751 L .514 -.046 L 1.387 -.921 L .373 .144 L .742 .069 L .071 .156 L .789 -.017 L .767 .21 L .666 .38 L .644 .563 L .406 .666 L .084 .327 L .228 .149 L .509 1.038 L -.322 .062 L -.094 .43 L -.584 .409 L -.085 -.307 L -.19 -.082 L .045 .45 L -.228 .082 L -.256 .753 L -.378 -.825 L -.441 -.762 L -.137 -.452 L .179 -.24 L .22 -.085 L .786 .125 L -.336 -.193 L -.125 -.164 L -.096 -.471 L -.309 .307 L -.439 .041 L -.244 -.378 L -.031 -.269 L -.193 -.282 L -.132 .151 L -.226 -.287 L -.11 .102 L -.132 -.266 L -.456 -.192 L -.562 -.013 L -.499 .241 L -.382 .108 L -.07 .359 L .081 .234 L -.529 .318 L -.374 .184 L -.335 .029 L -.345 .41 L .049 .296 L .316 .297 L .464 .43 L .178 .386 L -.011 .146 L -.281 .081 L -.243 -.042 L -.431 .391 L -.568 .105 L -.339 -.042 L -.189 -.146 L .108 -.164 L -.349 -.833 L -.244 -.353 L -.177 .674 L -.812 -.409 L -.227 -.757 L -.207 .041 L -.96 -.123 L -.434 -.266 L -.599 0 L -.314 .113 L -.361 .495 L .204 -.609 L -.243 -.184 L .374 -.369 L -.125 -.532 L .396 -.368 L -.507 -.307 L 0 -.58 L .014 -.321 L .219 -.205 L .478 .184 L .074 -.123 L +266.015 188.956 N -.503 -.647 L -.732 -.745 L -.324 -.521 L .071 -.212 L .395 -.539 L -.008 -.58 L .061 -.452 L 1.032 -.19 L .41 -.144 L .308 -.299 L -.141 -.282 L -.62 -.604 L -.074 -.212 L .101 -.255 L 1.655 -1.239 L .061 -.41 L -.095 -.296 L .072 .049 L .496 .338 L .856 .521 L .695 .521 L .587 .663 L .128 .409 L -.036 .734 L .148 .945 L .298 -.593 L .22 -.099 L .6 .182 L .101 .127 L .507 .295 L .708 .549 L .401 .493 L .374 .649 L -.015 .339 L -.142 .496 L -.082 .862 L -.183 .27 L -1.131 .091 L -.169 .17 L .078 .777 L -.095 .467 L -.328 .694 L .571 .831 L .532 .675 L .561 .067 L .185 .295 L .246 .832 L .49 1.127 L .332 .563 L -.06 .212 L -.943 -.022 L -.934 .429 L -1 .331 L -.505 .314 L -.694 .513 L -.686 .075 L -.613 -.392 L -1.103 -.897 L -.15 -.296 L -.008 -.396 L .072 -.354 L -.167 -.31 L -.281 -.394 L -.156 -.465 L .213 -.962 L .547 -1.416 L .179 -.368 L -.435 -.958 L -.533 -.138 L -.304 .001 L .452 -1.09 L -.04 -.212 L -.26 -.111 L -.516 -.124 L -.302 .058 L -.375 .257 L +377.518 182.142 N .193 -.376 L .252 -.242 L .367 -.143 L .528 -.046 L .338 .097 L .165 .366 L .22 .846 L .009 .65 L -.044 .283 L .277 .323 L .404 .322 L .321 .026 L .756 -.922 L .143 -.086 L .337 .097 L .339 .224 L -.062 .17 L .119 .55 L -.059 .438 L -.501 .865 L .05 .183 L .194 .183 L .369 .097 L .592 -.032 L 1.264 1.334 L .131 .282 L -.059 .452 L -.247 .849 L -.105 .565 L -.041 .919 L -1.513 -.643 L -1.221 -.619 L -1.012 -.562 L -.403 -.423 L -1.129 -1.113 L -1.111 -.76 L -.723 -.337 L -.901 -.535 L -.66 -.548 L .061 -.103 L .285 -.256 L .63 -.724 L 1.184 -1.151 L .259 -.502 L +429.505 210.684 N .484 .336 L .177 .013 L .443 -.271 L .327 -.581 L 1.495 -.532 L .054 .424 L .042 .664 L .147 .211 L .57 -.328 L .554 -.399 L .931 -.811 L .364 -.229 L 1.025 -.938 L .086 -.706 L -.122 -.72 L .074 -.396 L .193 -1.159 L .343 -.751 L .47 -.836 L .41 -.454 L .809 -.599 L .525 -.229 L .459 -.427 L .139 -.523 L .169 -.708 L .115 -.61 L .254 -1.342 L .196 -2.021 L .156 -.764 L .094 -.551 L .349 -.821 L .558 -.837 L .398 -1.203 L .031 -.156 L -.128 -.197 L .16 -.058 L .063 -.594 L .017 -.353 L -.096 -.452 L .097 -.297 L .785 -.979 L .353 -.341 L .529 -.3 L .479 -.06 L .432 .167 L .75 .518 L .334 .394 L .159 .239 L .512 .322 L 1.422 .189 L 1.934 .511 L .591 .067 L .176 -.157 L .677 -1.36 L .353 -.186 L .383 .153 L .559 .35 L .271 -.016 L .93 -.486 L .93 -.373 L .593 -.102 L .862 .207 L .399 .026 L .256 -.058 L .13 -.241 L .082 -.551 L .4 -.13 L 1.15 .361 L .687 .264 L .287 .167 L .319 .026 L .962 -.344 L .496 -.145 L .143 .239 L .795 .772 L .348 .493 L .525 .477 L .366 .195 L .352 -.016 L .258 -.242 L .529 -.37 L .384 .012 L .684 .631 L .16 -.1 L .436 -.582 L .258 -.157 L .207 .083 L 1.032 .926 L 1.288 1.32 L .063 .028 L .159 .183 L -.018 .424 L -.26 1.88 L .128 .253 L .191 .027 L .479 .04 L .271 .182 L .111 .31 L -.191 .453 L -1.195 1.066 L -1.241 .996 L -.255 .284 L -.395 .681 L -.217 1.02 L -.107 .507 L .021 .593 L -.025 .734 L .057 .748 L -.076 .27 L -.188 .298 L -.426 .412 L -.301 .171 L -.269 .256 L -.122 .425 L -.49 1.358 L .197 .338 L .689 .999 L .087 .381 L -.04 .438 L .014 .636 L .237 .634 L .017 1.329 L -.064 .762 L .425 1.439 L -.102 .848 L .122 .693 L .486 .631 L .936 .898 L .428 .78 L .689 1.804 L -.563 .068 L -3.015 .499 L -.347 .214 L -.154 .198 L -.797 1.276 L -.029 .622 L .372 2.088 L -.377 1.175 L -.3 1.02 L .043 .296 L .456 .605 L .837 .843 L .445 .279 L .515 .012 L .448 -.455 L .362 -.186 L .136 .183 L .032 .791 L .028 1.427 L -.041 .551 L -.371 -.012 L -1.355 -.091 L -.348 -.21 L -.381 -.647 L -.561 -.731 L -.416 -.351 L -.477 -.252 L -.895 -.263 L -.38 -.28 L -.728 -1.423 L -.212 .354 L -.522 .682 L -.366 .087 L -.325 -.111 L -.922 -.164 L -.925 -.249 L -.489 -.194 L -.58 -1.014 L -.175 .071 L -1.146 .289 L -.195 -.056 L -.172 -.352 L -.365 -.379 L -.678 -.096 L -1.24 -.147 L -.991 .146 L -.859 .26 L -.61 .004 L -.199 -.197 L -.007 -.254 L .198 -.905 L .003 -.466 L -.306 -.62 L -.844 -.998 L -.117 -.211 L -.021 -.212 L .296 -1.033 L .07 -1.06 L -.109 -.607 L -.303 -.605 L .057 -.354 L .177 -.693 L -.052 -.183 L -.322 -.098 L -1.231 .093 L -.88 .019 L -.212 -.168 L .055 -.48 L -.181 -.225 L -2.016 .082 L -.112 .001 L -.089 .354 L .027 .593 L -.286 .892 L -.184 .411 L -.993 .006 L -.899 -.122 L -1.021 .246 L -.88 .034 L -.292 -.168 L -.64 -.787 L -.597 -1.07 L -.537 -1.409 L -.059 -.579 L -.121 -.521 L -.082 -.127 L -.321 -.111 L -.385 -.012 L -1.104 -.008 L -.88 .034 L -.624 .003 L -1.312 -.048 L -.945 -.052 L -.783 .02 L -.432 .03 L -.318 .101 L -.896 .062 L -.699 .314 L -.56 .06 L -.112 -.013 L -.322 -.922 L .012 -.053 L .74 -.3 L -.017 -.085 L .1 -.89 L .094 -.143 L .317 -.199 L .583 -.568 L +468.568 202.653 N 1.277 -.05 L 4.659 0 L 1.448 -.033 L 4.663 2.568 L 3.553 1.984 L .137 .381 L -.116 .552 L .07 .239 L 2.427 1.752 L 1.067 .807 L -.237 .427 L -.419 1.329 L -.137 1.017 L .109 .551 L .665 .987 L .768 .577 L -.024 .282 L -.263 .354 L -.371 1.046 L .037 .17 L .306 .041 L .118 .226 L -.172 .692 L -.019 .946 L .411 1.793 L .18 .564 L .401 .465 L .823 .55 L .396 .268 L .177 .228 L -1.157 .836 L -.515 .342 L -1.218 .402 L -1.243 .559 L -.448 .031 L -.646 -.42 L -.276 -.083 L -.21 .326 L -.543 .766 L -.396 .144 L -.42 -.054 L -.964 .006 L -.963 .02 L -.512 -.294 L -.323 -.394 L -.229 -.083 L -.123 .128 L -.643 .356 L -.526 .088 L -1.019 -.149 L -.898 -.018 L -.196 -.559 L -.135 -.766 L -.053 -.584 L -.135 -.946 L -.448 -.841 L -.663 -.538 L -1.014 -.107 L -.223 .016 L -.385 -.407 L -.732 -.349 L -1.574 -.57 L -1.269 -.6 L -.729 -.265 L -.263 -.21 L -.703 -.641 L -.689 -1.804 L -.428 -.78 L -.936 -.898 L -.486 -.631 L -.122 -.693 L .102 -.848 L -.425 -1.439 L .064 -.762 L 1.252 -.348 L .388 -.539 L .645 -1.204 L .687 -.853 L .346 -.271 L .044 -.212 L -.148 -.239 L -.273 -.125 L -.401 -.068 L -.211 -.211 L .158 -.976 L .304 -.016 L .396 -.158 L .142 -.17 L .104 -.481 L -.167 -.493 L -.364 -.888 L -.121 -.748 L +464.786 206.235 N -.197 -.338 L .49 -1.358 L .122 -.425 L .269 -.256 L .301 -.171 L .426 -.412 L .064 .042 L .546 .223 L .431 -.045 L .458 -.427 L .554 -.398 L .319 -.017 L .121 .748 L .364 .888 L .167 .493 L -.104 .481 L -.142 .17 L -.396 .158 L -.304 .016 L -.559 .031 L -.508 .159 L -.391 .567 L -.158 .085 L -.396 .13 L -.789 -.32 L -.688 -.024 L +465.79 210.652 N -.017 -1.329 L -.237 -.634 L -.014 -.636 L .04 -.438 L -.087 -.381 L -.689 -.999 L .688 .024 L .789 .32 L .396 -.13 L .158 -.085 L .391 -.567 L .508 -.159 L .559 -.031 L -.158 .976 L .211 .211 L .401 .068 L .273 .125 L .148 .239 L -.044 .212 L -.346 .271 L -.687 .853 L -.645 1.204 L -.388 .539 L -1.252 .348 L +427.243 211.207 N .536 -.414 L .68 -.513 L .351 -.13 L .695 .533 L -.583 .568 L -.317 .199 L -.094 .143 L -.1 .89 L .017 .085 L -.74 .3 L .143 -.625 L -.082 -.24 L -.505 -.796 L h 427.998 213.843 m .112 .013 L .56 -.06 L .699 -.314 L .896 -.062 L .318 -.101 L .432 -.03 L .783 -.02 L .945 .052 L 1.312 .048 L .624 -.003 L .88 -.034 L 1.104 .008 L .385 .012 L .321 .111 L .082 .127 L .121 .521 L .059 .579 L .537 1.409 L .597 1.07 L .64 .787 L .292 .168 L .88 -.034 L 1.021 -.246 L .899 .122 L .993 -.006 L .184 -.411 L .286 -.892 L -.027 -.593 L .089 -.354 L .112 -.001 L 2.016 -.082 L .181 .225 L -.055 .48 L .212 .168 L .88 -.019 L 1.231 -.093 L .322 .098 L .052 .183 L -.177 .693 L -.057 .354 L .303 .605 L .109 .607 L -.07 1.06 L -.296 1.033 L .021 .212 L .117 .211 L .844 .998 L .306 .62 L -.003 .466 L -.198 .905 L .007 .254 L .199 .197 L .61 -.004 L .859 -.26 L .991 -.146 L 1.24 .147 L -.214 1.344 L .195 1.059 L .269 .323 L .089 .254 L -.132 .368 L -.436 .44 L -.124 .594 L -.125 .086 L -.517 -.04 L -3.408 .091 L -.051 .877 L .015 1.342 L -.024 3.249 L .017 .848 L .023 .594 L .099 .438 L .308 .394 L .471 .436 L 1.354 1.391 L .611 .632 L -.93 .218 L -1.96 .379 L -1.044 .203 L -.717 -.08 L -1.164 .063 L -.408 -.083 L -.349 -.21 L -2.024 .026 L -.697 -.024 L -.622 -.151 L -.401 -.322 L -.305 -.366 L -.408 -.096 L -.989 -.023 L -2.59 .016 L -1.636 -.019 L -.631 -.011 L -1.296 -.006 L -2.201 .013 L -.636 -.151 L -.463 -.309 L -.45 -.478 L -.294 -.083 L -.499 .088 L -.591 .286 L -.778 .513 L -.758 -.462 L -.352 .144 L -.248 .197 L .048 -1.809 L -.017 -.805 L -.029 -.649 L .397 -.34 L .221 -.269 L .26 -.707 L .163 -.734 L .184 -1.398 L .239 -.976 L .321 -.918 L .584 -.665 L .183 -.565 L .268 -.354 L .64 -.228 L .268 -.325 L .423 -.679 L .364 -1.201 L .053 -.664 L -.046 -.848 L -.191 -.959 L -.201 -.536 L -.492 -.705 L -.476 -.776 L -.268 -.775 L .139 -.495 L .476 -.382 L .158 -.156 L .107 -.424 L -.006 -.479 L -.199 -.579 L -.489 -.69 L -.441 -.733 L -.203 -1.031 L -.181 -.423 L -.276 -.366 L -.666 -.974 L -.072 -.15 L +452.198 239.34 N -.611 -.632 L -1.354 -1.391 L -.471 -.436 L -.308 -.394 L -.099 -.438 L -.023 -.594 L -.017 -.848 L .024 -3.249 L -.015 -1.342 L .051 -.877 L 3.408 -.091 L .517 .04 L .125 -.086 L .124 -.594 L .436 -.44 L .132 -.368 L -.089 -.254 L -.269 -.323 L -.195 -1.059 L .214 -1.344 L .678 .096 L .365 .379 L .172 .352 L .195 .056 L 1.146 -.289 L .175 -.071 L .58 1.014 L .489 .194 L .925 .249 L .922 .164 L .325 .111 L .366 -.087 L .522 -.682 L .212 -.354 L .728 1.423 L .38 .28 L .895 .263 L .477 .252 L .416 .351 L .561 .731 L .381 .647 L .348 .21 L 1.355 .091 L .371 .012 L .041 -.551 L -.028 -1.427 L -.032 -.791 L -.136 -.183 L -.362 .186 L -.448 .455 L -.515 -.012 L -.445 -.279 L -.837 -.843 L -.456 -.605 L -.043 -.296 L .3 -1.02 L .377 -1.175 L -.372 -2.088 L .029 -.622 L .797 -1.276 L .154 -.198 L .347 -.214 L 3.015 -.499 L .563 -.068 L .703 .641 L .263 .21 L .729 .265 L 1.269 .6 L 1.574 .57 L .732 .349 L .385 .407 L .559 .887 L .434 .859 L .013 .324 L -.183 .27 L -.709 .344 L -.011 .127 L .04 .594 L -.091 1.682 L .08 .353 L .216 .168 L .511 .266 L .072 .197 L -.197 .241 L -.472 .258 L -.792 .259 L -.146 .34 L -.094 .764 L -.3 .807 L .2 .479 L .261 .408 L .394 .125 L -1.264 .53 L -1.696 .575 L -.932 .4 L -2.165 .578 L -.187 .128 L -.009 .495 L .152 .465 L .087 .438 L -.505 -.096 L -.999 .049 L -.794 .259 L -.636 .54 L -.312 .539 L -.019 .579 L -.168 .199 L -.285 .114 L -.999 .062 L -.621 .202 L -.306 .341 L -.777 .937 L -.562 .738 L -.825 .951 L -.354 .045 L -.803 -.165 L -.421 -.309 L -.334 .129 L -.521 .286 L -.404 .017 L -.594 -.209 L -.264 -.097 L -.154 -.169 L -.163 -.027 L -.187 -.154 L -.456 -.393 L -.294 -.055 L -1.089 -.093 L -.086 -.099 L -.165 -.056 L -1.845 .364 L +477.231 225.874 N -.224 1.184 L -.107 .48 L .252 .917 L .177 1.017 L .149 .408 L .238 .268 L .803 .588 L 1.189 1.166 L .454 .661 L .14 .48 L -.155 2.346 L -.04 .41 L -.214 .213 L -.432 .073 L -.322 .017 L -.229 .213 L -.076 .622 L .08 .509 L .029 .479 L -.096 .283 L -.185 -.111 L -.562 -.463 L -.763 -1.112 L -.484 -.548 L -.234 -.423 L .036 -.212 L .499 -.61 L .116 -.227 L .025 -.693 L -.1 -.96 L -.22 -.479 L -.261 -.056 L -.674 .061 L -.702 .132 L -.27 -.211 L -.343 -.407 L -.382 -.549 L -.195 -.041 L -.394 -.125 L -.261 -.408 L -.2 -.479 L .3 -.807 L .094 -.764 L .146 -.34 L .792 -.259 L .472 -.258 L .197 -.241 L -.072 -.197 L -.511 -.266 L -.216 -.168 L -.08 -.353 L .091 -1.682 L -.04 -.594 L .011 -.127 L .709 -.344 L .183 -.27 L -.013 -.324 L -.434 -.859 L -.559 -.887 L .223 -.016 L 1.014 .107 L .663 .538 L .448 .841 L .135 .946 L .053 .584 L .135 .766 L .196 .559 L +245.934 224.314 N .939 .136 L 1.122 .304 L .355 -.03 L .946 -.824 L .336 .026 L .48 .025 L .415 -.243 L 1.471 -1.109 L .874 -.485 L .36 -.158 L .934 -.076 L 1.283 .021 L .045 .748 L -.079 .621 L -.064 .622 L .036 .818 L .141 .635 L .335 .591 L .813 .928 L 1.1 .939 L .316 .097 L .787 .023 L .355 -.03 L .676 .25 L .688 .307 L .75 .603 L .3 .098 L .882 .037 L .096 .014 L .385 .774 L .398 .308 L .22 .084 L 1.148 -.077 L .636 .123 L .537 .166 L .403 .237 L .085 .169 L -.038 .565 L .203 1.029 L .03 .706 L .138 2.032 L .249 .944 L .153 .112 L .967 .036 L .5 .012 L 1.615 .019 L .693 .024 L .042 .296 L -.261 .835 L .067 .563 L .436 .407 L .73 .362 L .316 .479 L .307 .774 L .022 .494 L -.185 1.173 L -.238 .834 L -.38 .765 L -.421 .666 L -.089 -.084 L -1.952 -.991 L -.352 -.054 L -.928 .02 L -.843 -.01 L -.126 .128 L -1.076 .204 L -1.104 .162 L -.784 .202 L -.33 .044 L -.332 .383 L -.698 1.105 L -.278 .341 L -.133 .509 L .016 .635 L -.385 1.188 L -.395 1.104 L -.149 .325 L -.592 -.109 L -1.33 -.077 L -.686 .004 L -1.034 1.784 L -.416 -1.084 L -.341 -.309 L -.37 -.195 L -.531 -.067 L -.527 .045 L -.901 .034 L -.615 -.194 L -.193 -.169 L -.322 -.181 L -.292 .27 L -2.026 2.087 L -1.047 .006 L -.272 -.182 L -.397 -2.144 L -.278 -.973 L -.212 -.563 L -.769 -1.11 L -.249 -.676 L .04 -.354 L .437 -1.555 L -.017 -.282 L -.761 -.744 L -.25 -.521 L -.193 -1.213 L -.304 -.647 L -.555 -.745 L -.152 -.253 L -.018 -.142 L -.132 -.295 L -.049 -.48 L .12 -.227 L .723 -.61 L .285 -.439 L -.015 -.522 L -.604 -1.168 L -.022 -.48 L .159 -.34 L .21 -.368 L -.347 -.845 L .102 -.452 L .532 -.582 L .221 -.34 L .156 -.34 L -.236 -.902 L -.057 -.522 L .143 -.848 L .15 -.523 L .437 -.736 L -.08 -.24 L -.922 -1.646 L -1.109 -1.843 L +473.575 260.04 N -1.331 .011 L -.192 .058 L -.068 -.382 L -.261 -.889 L .071 -.495 L -.075 -.296 L -.095 -.324 L .03 -.806 L .057 -1.301 L -.072 -.763 L -.147 -.678 L -.33 -.944 L -.441 -.689 L -.181 -.946 L -.295 -1.199 L -.159 -.183 L .448 -.384 L .396 -.412 L 1.68 -1.706 L .114 -.227 L -.09 -.367 L .075 -.834 L .229 -.481 L .736 -.683 L .205 -.341 L .168 -.41 L -.594 -.845 L -.118 -.805 L -.113 -.494 L .128 -.283 L .448 -.596 L .201 -.411 L -.132 -.805 L -.086 -1.144 L -.031 -.791 L -.178 -.818 L -.441 -.379 L -.515 -.224 L -1.167 -.347 L -1.042 -.445 L -.658 -.223 L -1.438 -.006 L -.137 -.14 L -.025 -.495 L -.011 -.212 L -.087 -.438 L -.152 -.465 L .009 -.495 L .187 -.128 L 2.165 -.578 L .932 -.4 L 1.696 -.575 L 1.264 -.53 L .195 .041 L .382 .549 L .343 .407 L .27 .211 L .702 -.132 L .674 -.061 L .261 .056 L .22 .479 L .1 .96 L -.025 .693 L -.116 .227 L -.499 .61 L -.036 .212 L .234 .423 L .484 .548 L .763 1.112 L .562 .463 L .185 .111 L .096 -.283 L -.029 -.479 L -.08 -.509 L .076 -.622 L .229 -.213 L .322 -.017 L .432 -.073 L .214 -.213 L .04 -.41 L .155 -2.346 L -.14 -.48 L -.454 -.661 L -1.189 -1.166 L -.803 -.588 L -.238 -.268 L -.149 -.408 L -.177 -1.017 L -.252 -.917 L .107 -.48 L .224 -1.184 L .898 .018 L 1.019 .149 L .526 -.088 L .643 -.356 L .123 -.128 L .229 .083 L .323 .394 L .512 .294 L .963 -.02 L .964 -.006 L .42 .054 L .396 -.144 L .543 -.766 L .21 -.326 L .276 .083 L .646 .42 L .448 -.031 L 1.243 -.559 L 1.218 -.402 L .515 -.342 L 1.157 -.836 L .128 .167 L .212 .479 L -.185 .579 L -.302 .453 L -.198 .255 L .181 .451 L .129 .72 L -.012 .466 L .182 1.115 L -.101 .58 L -.258 .325 L .374 .705 L .154 .494 L -.006 1.115 L -.004 .819 L .043 .184 L .185 .127 L .327 .084 L .015 .269 L -.165 .494 L -.563 .58 L .184 .381 L -.08 .283 L -.418 .565 L -.802 .906 L -.512 .622 L -.72 .651 L -1.36 .751 L -1.48 .653 L -.73 .228 L -1.308 .582 L -.852 .637 L -1.286 1.443 L -.886 .85 L -1.193 .878 L -1.181 .836 L -.268 .128 L -.035 .96 L -.083 .495 L .058 .127 L .719 .535 L .188 .381 L -.166 .452 L -.085 .184 L .461 1.511 L .071 .564 L .06 .155 L .246 .014 L .171 -.128 L .141 -.085 L .043 .607 L -.234 2.218 L -.284 .82 L .325 .196 L .152 .057 L -.025 .325 L -.157 .311 L -.516 .566 L -.699 .538 L -.664 .34 L -1.266 .412 L -.796 .312 L -.688 .228 L -.895 .524 L -.652 .665 L -.337 .51 L .292 .338 L .589 .338 L .045 .325 L -.149 1.022 L +499.85 236.166 N .544 -.071 L .622 -.369 L .18 .028 L .346 .098 L .269 -.085 L .396 -.368 L .911 -.143 L .311 .281 L .305 -.028 L .101 -.185 L -.171 -.366 L .771 -.539 L .423 -.198 L .322 .226 L .389 -.213 L -.308 -.494 L .207 -.282 L .505 -.425 L .229 .296 L .229 .056 L .558 -.594 L -.158 -.197 L -.253 -.409 L .094 -.297 L .243 .014 L .27 -.071 L .172 -.34 L -.297 -.875 L .06 -.339 L .255 -.043 L .117 .07 L .253 .438 L .28 .099 L .2 -.41 L .692 -.524 L .235 -.367 L .134 -.452 L .168 -.692 L -.133 -.354 L .003 -.226 L .537 -.468 L .356 .324 L .455 .648 L .612 .281 L .141 .198 L .213 .847 L .294 1.821 L .093 .663 L .231 .791 L .391 .733 L .163 .466 L -.038 .367 L -.069 .155 L -.058 .099 L -.537 .807 L -.22 -.127 L -.189 -.366 L -.555 -.748 L -.297 .143 L -.05 .424 L .193 .875 L .396 .521 L .079 .396 L -.307 .636 L -.746 1.005 L -.045 .452 L .041 .89 L -.18 .946 L -.709 2.12 L -.825 2.572 L -1.254 3.788 L -1.324 4.48 L -.518 1.568 L -.188 .255 L -.508 .637 L -.2 .113 L -1.369 .102 L -.999 .327 L -.474 .468 L -.813 .086 L -.363 -.465 L -.196 -.142 L -.546 -.182 L -.37 .071 L -.269 -.057 L -.863 -.718 L -.104 -.24 L -.02 -.565 L -.104 -.239 L -.46 -.366 L -.124 -.282 L .001 -.721 L .345 -1.088 L -.094 -.325 L -.287 -.479 L -.62 -.931 L -.189 -.494 L .075 -.664 L .391 -1.37 L .228 -.213 L .474 -.185 L .768 -1.371 L .686 -1.174 L .104 -.325 L .151 -1.103 L -.11 -.353 L -.278 -.226 L -.354 -.366 L .066 -.184 L .252 -.509 L -.521 -.861 L -.117 -.677 L -.069 -.494 L -.231 -.721 L .024 -.112 L .517 -.693 L .362 -.594 L .163 -.438 L .007 -1.073 L .484 -.016 L +468.138 234.908 N .011 .212 L .025 .495 L .137 .14 L 1.438 .006 L .658 .223 L 1.042 .445 L 1.167 .347 L .515 .224 L .441 .379 L .178 .818 L .031 .791 L .086 1.144 L .132 .805 L -.201 .411 L -.448 .596 L -.128 .283 L .113 .494 L .118 .805 L .594 .845 L -.168 .41 L -.205 .341 L -.736 .683 L -.229 .481 L -.075 .834 L .09 .367 L -.114 .227 L -1.68 1.706 L -.396 .412 L -.448 .384 L -.342 -.225 L -.547 -.124 L -.442 -.025 L -.529 .145 L -.31 .016 L -.99 -.403 L -.597 -.139 L -.72 -.023 L -.067 -.042 L -.186 -.098 L -.306 -.451 L -.479 -.35 L -.549 -.167 L -.938 -.136 L -.352 -.153 L -.524 -.873 L -.163 -.564 L .032 -.565 L -.127 -.239 L -.78 .019 L -.201 -.098 L -.109 -.211 L .051 -.537 L -.106 -.169 L -.552 -.266 L -.533 -.223 L -.57 -.321 L -.563 -.491 L -.377 -.662 L -.246 -.96 L -.469 -.604 L -.43 -.478 L -.267 -.451 L .103 -.227 L .594 .209 L .404 -.017 L .521 -.286 L .334 -.129 L .421 .309 L .803 .165 L .354 -.045 L .825 -.951 L .562 -.738 L .777 -.937 L .306 -.341 L .621 -.202 L .999 -.062 L .285 -.114 L .168 -.199 L .019 -.579 L .312 -.539 L .636 -.54 L .794 -.259 L .999 -.049 L .505 .096 L +444.673 255.519 N -.006 3.434 L .031 1.894 L .025 2.246 L -.057 .205 L -.454 .318 L -.545 .302 L -.581 .498 L -.427 .034 L -.581 -.166 L -.745 -.042 L -.892 .048 L -.517 -.039 L -.296 -.212 L -.055 -.528 L -.042 -.345 L -.193 -.222 L -.637 -.348 L -.329 -.127 L -.335 .116 L -.109 .217 L -.317 .416 L -.584 .27 L -.152 .068 L -.458 -.491 L -1.041 -1.001 L -.458 -.606 L -.359 -1.03 L -.345 -.72 L -.136 -.493 L .12 -.269 L .053 -.34 L -.458 -.719 L -.231 -.861 L .148 -.861 L -.002 -.48 L -.537 -1.326 L -.496 -2.244 L .772 -.02 L .04 -.678 L -.077 -.749 L -.456 -.006 L .016 -.06 L -.099 -.522 L -.26 -.508 L -1.018 -1.283 L -.343 -.55 L -1.102 -2.158 L -.841 -1.623 L -.9 -1.509 L -.988 -1.269 L -.511 -1.044 L -.122 -.396 L -.045 -.551 L .015 -.578 L .248 -.197 L .352 -.144 L .758 .462 L .778 -.513 L .591 -.286 L .499 -.088 L .294 .083 L .45 .478 L .463 .309 L .636 .151 L 2.201 -.013 L 1.296 .006 L .631 .011 L 1.636 .019 L 2.59 -.016 L .989 .023 L .408 .096 L .305 .366 L .401 .322 L .622 .151 L .697 .024 L 2.024 -.026 L .349 .21 L .408 .083 L 1.164 -.063 L .717 .08 L 1.044 -.203 L 1.96 -.379 L .93 -.218 L 1.845 -.364 L .165 .056 L .086 .099 L 1.089 .093 L .294 .055 L .456 .393 L -.811 .315 L -.891 .02 L -.284 .143 L -.993 .938 L -.209 .029 L -.62 -.773 L -1.048 .134 L -2.962 .47 L -1.183 .021 L .005 1.215 L -.007 1.286 L -.025 .876 L -.043 1.201 L .002 3.561 L -.586 .046 L -1.564 .052 L -.146 .028 L -.106 2.657 L -.009 1.201 L .013 1.624 L .007 .806 L +248.453 316.576 N -.306 .101 L -.892 -.087 L -.538 -.293 L -.236 -.015 L -.311 .163 L -.418 .398 L -.498 .192 L -1.156 .091 L -.349 .09 L -.358 .207 L -.267 .621 L -.114 .341 L .06 .532 L -.163 .622 L -.104 .148 L -.453 .031 L -.534 .104 L -.956 -.413 L .667 -.639 L .326 -.444 L .582 -.4 L .025 -.147 L -.372 -.177 L -.273 -.117 L -1.353 .534 L -1.01 -.013 L -.545 .163 L -.202 -.339 L .128 -.192 L .959 -.268 L .266 .028 L .792 -.208 L .441 -.118 L -.605 -.162 L -.582 .002 L -.77 .001 L -.014 -.413 L .265 -.31 L -.007 -.191 L -.446 -.073 L -.356 -.44 L -.66 .384 L -.669 -.175 L .292 -.53 L .041 -.177 L -.378 .045 L -.361 .147 L -.416 -.396 L -.215 -.117 L .413 -.279 L .114 -.177 L -.091 -.278 L -.053 -.073 L -.351 .03 L -.773 -.424 L -.135 -.059 L .844 -.192 L .253 -.161 L .1 -.294 L .396 -.366 L .049 -.234 L -.641 .06 L -.257 .104 L -.312 -.073 L -.256 -.672 L .573 -.395 L -.565 -.378 L -.12 -.421 L .757 -.452 L -.14 -.421 L -.686 .422 L -.091 -1.523 L .399 -.596 L -.185 -.825 L .013 -.218 L .593 .014 L .41 .245 L .711 .071 L .171 -.246 L .002 -.159 L -.896 -.447 L -.867 .146 L -.317 -.173 L -.536 .059 L -.017 -.231 L .339 -.333 L .025 -.246 L -.067 -.087 L .186 -.202 L .536 .014 L .229 -.377 L .01 -.216 L -.722 -.389 L -.354 -.129 L -.886 .045 L -.332 -.101 L -.024 -.49 L -.939 .16 L -.115 -.101 L .122 -.145 L 1.032 -.521 L .251 -.116 L .4 -.404 L .266 -.389 L .833 -.06 L .268 .201 L .059 .346 L -.648 .202 L -.323 .274 L .11 .505 L .117 .058 L .191 -.102 L .268 -.39 L .183 -.087 L .242 .101 L -.037 .317 L .057 .504 L .886 -.996 L .161 -.678 L .056 -.647 L .237 -.375 L .079 -.058 L .631 -.217 L -.201 -.071 L -.438 -.143 L -.056 -.158 L .101 -.273 L .246 -.072 L .571 -.245 L .599 -.431 L .271 -.459 L -.061 -.229 L -.394 -.157 L -.662 -.399 L -.053 -.372 L .139 -.243 L .105 -.458 L -.06 -.828 L .366 -.33 L .676 -.272 L -.431 -.585 L -.053 -.784 L .133 -.158 L .554 -.157 L .054 -.314 L -.116 -.285 L -.317 -.085 L -.272 -.198 L .233 -.329 L .087 -.313 L -.401 -.185 L -.274 -.014 L -.161 .101 L -.476 .414 L -.548 .058 L -.087 .001 L -.289 -.199 L -.16 -.484 L -.399 -.726 L -.133 -.697 L .188 -.911 L .137 -.413 L .722 -.739 L .535 -.767 L -.006 -.326 L -.544 -1.757 L .001 -.608 L .088 -.567 L -.076 -.438 L -.528 -.891 L -.04 -.298 L .236 -.198 L .499 .098 L .182 -.085 L .2 -.142 L .097 -.143 L .41 -1.288 L .252 -.481 L .304 -.935 L .18 -.65 L .664 -.808 L .363 -.722 L .201 -.636 L .252 -.946 L .311 -.691 L .187 -.128 L .273 -.382 L .013 -.296 L -.312 -.847 L .082 -.184 L .455 -.452 L .206 -.339 L .028 -.24 L -.093 -.226 L -.166 -.805 L -.292 -2.088 L -.098 -.86 L .031 -.565 L .412 -.565 L .37 -.537 L .207 -.564 L .007 -.734 L -.339 -.521 L -.098 -.409 L .295 -.96 L .218 -.941 L .127 -.556 L .461 -.594 L .171 -.918 L .243 -.975 L .126 -.805 L .082 -.565 L -.063 -1.087 L .422 -.664 L .211 -.494 L -.221 -.932 L -.048 -.833 L .148 -.24 L -.022 -.917 L .229 -.607 L -.124 -.297 L -.365 -.084 L .06 -.324 L -.046 -.396 L .223 -.198 L .402 -.198 L .137 -.424 L -.008 -.819 L .093 -.593 L .182 -.918 L -.004 -2.344 L -.172 -2.074 L -.042 -1.539 L -.194 -.974 L -.15 -.387 L .852 -.275 L .259 -.298 L .228 -.933 L .15 -.199 L .586 -.187 L .152 .253 L .555 .745 L .304 .647 L .193 1.213 L .25 .521 L .761 .744 L .017 .282 L -.437 1.555 L -.04 .354 L .249 .676 L .769 1.11 L .212 .563 L .278 .973 L .397 2.144 L .272 .182 L 1.047 -.006 L .107 .056 L .212 .14 L .161 .154 L -.093 .636 L -.541 1.457 L -.36 .256 L -1.346 .53 L -.819 .372 L -.204 .312 L .25 .817 L -.421 .722 L -.007 .579 L .113 .437 L .34 .449 L .03 .226 L -.273 .369 L -.161 .382 L .114 .507 L .53 .477 L .011 .227 L -.152 .311 L -.333 .017 L -.791 .089 L -.329 .835 L -.464 .835 L -.608 .694 L -.282 .439 L -.823 1.839 L .167 1.466 L .054 .762 L -.124 .185 L -.492 .271 L -.292 .34 L -.388 1.201 L -.156 .961 L .285 .633 L .408 1.154 L .784 2.816 L .055 .69 L -.075 .41 L -1.083 1.854 L -.319 .595 L .088 .409 L .189 1.06 L -.078 .325 L -1.334 1.11 L -.231 .312 L -.142 1.075 L .014 1.16 L .249 1.103 L .437 .932 L -.202 .143 L -.951 .529 L -.126 .17 L -.053 .312 L -.511 2.427 L -.316 .541 L -.1 .37 L .123 1.835 L .231 .867 L .012 .427 L -.596 .317 L -.172 .172 L -.106 .271 L .094 1.226 L .125 .128 L .555 .111 L .088 .655 L -.191 1.458 L .252 .585 L .26 .185 L .789 .11 L .302 .17 L -.007 .186 L -.245 .202 L -.322 .13 L -.726 .033 L -.757 .146 L .176 .171 L .586 .298 L .552 .385 L .017 .216 L -.767 .794 L -.059 1.094 L .158 1.035 L -.216 .896 L -.212 .434 L -.226 .262 L -.598 .161 L -.28 .219 L -.249 .781 L .446 .648 L -.069 .188 L -.296 1.218 L -.307 .263 L -1.729 1.01 L -.271 .292 L -.037 .45 L .28 1.309 L .508 1.123 L .218 .043 L .961 -.283 L .654 -.121 L .187 .248 L .231 2.285 L .778 .568 L .669 .041 L 1.41 -.052 L 2.827 .132 L .841 .217 L 1.385 .36 L .286 .039 L h 236.642 296.773 m -.394 -.113 L -.43 -.028 L -.21 -.171 L -.133 -.229 L .21 -.457 L .15 -.657 L -.087 -.514 L .011 -.414 L .364 -.728 L .817 -.116 L .36 .327 L .044 .328 L -.688 .443 L -.146 .229 L .493 .771 L -.194 1.058 L -.167 .271 L h 238.177 317.937 m -.445 -.177 L .083 -.842 L -.849 .075 L -.073 -.368 L .218 -.354 L .823 .102 L .508 -.207 L .205 .103 L .054 .812 L -.267 .34 L -.257 .518 L h 247.801 322.062 m -1.033 .102 L -.467 -.118 L -.55 -.237 L -.42 .001 L -.481 .104 L -.935 .226 L -.496 .03 L .125 -.343 L .202 -.312 L -.104 -.312 L .906 -.15 L 1.434 .058 L .433 .323 L .706 -.007 L -.622 -.689 L -.307 -.163 L -.56 -.117 L -.178 -.089 L -.188 .03 L -.338 -.341 L -.229 -.4 L 1.611 -.581 L -.044 -.296 L -.165 -.147 L -1.819 .285 L -.292 -.222 L .263 -.474 L .146 -.163 L 1.074 -.52 L .868 -.637 L .414 .28 L 1.153 .062 L -.008 1.144 L -.098 3.675 L +456.133 239.67 N .187 .154 L .163 .027 L .154 .169 L .264 .097 L -.103 .227 L .267 .451 L .43 .478 L .469 .604 L .246 .96 L .377 .662 L .563 .491 L .57 .321 L .533 .223 L .552 .266 L .106 .169 L -.051 .537 L .109 .211 L .201 .098 L .78 -.019 L .127 .239 L -.032 .565 L .163 .564 L .524 .873 L .352 .153 L .938 .136 L .549 .167 L .479 .35 L .306 .451 L .186 .098 L -.317 .411 L -.388 .327 L -.507 .243 L -.747 .075 L -.304 .115 L -.7 .823 L -.586 .583 L -.362 .229 L -.747 .357 L -.388 .355 L -.107 .636 L -.222 .666 L -.247 .241 L -.634 .357 L -.98 .33 L -.249 .214 L -.217 .708 L -.345 .963 L -.288 .354 L -.237 .129 L -.584 .116 L -.43 -.026 L -.473 .06 L -.511 -.011 L -.819 -.193 L -.744 -.32 L -.979 -.645 L -.545 -.039 L -.333 .186 L -.084 .24 L -.585 1.134 L -.382 .469 L -.651 .625 L -.632 .428 L -.8 .372 L -.823 .033 L -.854 .047 L -.368 -.097 L -.11 -.183 L .003 -.48 L .243 -.609 L .166 -.538 L -.21 -.762 L -.547 -.943 L -.716 -.787 L -.528 -.067 L -.007 -.806 L -.013 -1.624 L .009 -1.201 L .106 -2.657 L .146 -.028 L 1.564 -.052 L .586 -.046 L -.002 -3.561 L .043 -1.201 L .025 -.876 L .007 -1.286 L -.005 -1.215 L 1.183 -.021 L 2.962 -.47 L 1.048 -.134 L .62 .773 L .209 -.029 L .993 -.938 L .284 -.143 L .891 -.02 L .811 -.315 L +279.288 257.295 N .02 .239 L -.544 1.57 L -.375 .468 L -1.007 .74 L -.301 .27 L -.352 .51 L -.609 -.363 L -.35 -.097 L -.235 .029 L -.387 .172 L -.745 .131 L -.71 .005 L -.564 -.096 L -.992 -.333 L -.607 -.025 L -1.187 .332 L -.19 -.056 L .064 -.212 L .425 -.426 L .486 -.398 L .11 -.198 L -.21 -.619 L .048 -.227 L .625 -.851 L .617 -1.203 L .018 -.268 L -.939 -.503 L -.65 -.18 L -1.448 -.697 L -1.632 -1.106 L -.671 -.307 L -1.173 -.204 L -.498 -.237 L -.835 -.588 L -.576 -.562 L -1.271 -1.376 L -.782 -.913 L -.225 -.337 L -.19 -.056 L .149 -.325 L .395 -1.104 L .385 -1.188 L -.016 -.635 L .133 -.509 L .278 -.341 L .698 -1.105 L .332 -.383 L .33 -.044 L .784 -.202 L 1.104 -.162 L 1.076 -.204 L .126 -.128 L .843 .01 L .928 -.02 L .352 .054 L 1.952 .991 L .089 .084 L .253 .408 L .084 .663 L .521 .872 L .104 .959 L -.132 .862 L -.086 .721 L -.006 .72 L .372 .04 L .818 .15 L .925 .221 L .346 -.03 L .709 -.413 L .115 -.001 L .724 .278 L .843 .404 L .121 .437 L .487 2.524 L .254 .563 L .224 .055 L 1.29 -.445 L .234 .112 L .491 .336 L .019 .141 L -.321 .75 L -.298 .835 L -.222 .819 L -.027 .777 L .063 .423 L +444.673 255.519 N .528 .067 L .716 .787 L .547 .943 L .21 .762 L -.166 .538 L -.243 .609 L -.003 .48 L .11 .183 L .368 .097 L .854 -.047 L .823 -.033 L .8 -.372 L .632 -.428 L .651 -.625 L .382 -.469 L .585 -1.134 L .084 -.24 L .333 -.186 L .545 .039 L .979 .645 L .744 .32 L .819 .193 L .511 .011 L .473 -.06 L .43 .026 L .584 -.116 L .237 -.129 L .288 -.354 L .345 -.963 L .217 -.708 L .249 -.214 L .98 -.33 L .634 -.357 L .247 -.241 L .222 -.666 L .107 -.636 L .388 -.355 L .747 -.357 L .362 -.229 L .586 -.583 L .7 -.823 L .304 -.115 L .747 -.075 L .507 -.243 L .388 -.327 L .317 -.411 L .067 .042 L .72 .023 L .597 .139 L .99 .403 L .31 -.016 L .529 -.145 L .442 .025 L .547 .124 L .342 .225 L .159 .183 L .295 1.199 L .181 .946 L .441 .689 L .33 .944 L .147 .678 L .072 .763 L -.057 1.301 L -.03 .806 L .095 .324 L -1.449 -.585 L -.279 .199 L -.657 .979 L -.28 .567 L -.005 .325 L .39 .676 L .307 .465 L .458 .322 L .671 .109 L .595 -.004 L .076 -.594 L .064 -.198 L .312 -.186 L .131 -.015 L .192 -.058 L 1.331 -.011 L -.182 1.195 L -.352 .849 L -.182 .184 L -.404 .1 L -.093 .24 L .199 .536 L -.104 .467 L -.248 .354 L -.569 .453 L -.923 .581 L -.591 .75 L -1.383 1.98 L -.631 .834 L -1.242 1.373 L -1.193 1.062 L -.829 .863 L -1.434 1.034 L -1.379 1.091 L -.552 .382 L -.989 .638 L -.676 .298 L -.782 .101 L -.98 -.012 L -.549 .071 L -.132 .354 L .013 .127 L -.109 .085 L -.449 -.098 L -.553 -.126 L -.303 .015 L -.25 .198 L -.272 .312 L -.226 .113 L -.36 -.056 L -.768 -.408 L -.759 -.168 L -.542 -.013 L -.31 .113 L -.38 .27 L -.482 -.099 L -.645 -.21 L -.295 .1 L -.638 .043 L -.589 .214 L -.729 .538 L -.72 .086 L -.44 -.013 L -.667 -.084 L -.738 .072 L -.575 .199 L -.827 .82 L -1.251 -.576 L -.092 -.509 L -.218 -.183 L -.479 -.056 L -.28 .085 L -.257 -.479 L -.343 -.056 L -.149 .255 L -.035 .197 L -.312 -.112 L -.119 -.226 L .267 -.495 L .103 -.424 L -.857 -1.354 L -.323 -.282 L -.134 -.226 L .173 -.17 L .636 -.044 L .172 -.424 L .06 -.819 L -.163 -.663 L -.186 -.522 L -.61 -1.143 L -.75 -1.029 L -.472 -.903 L -.612 -1.383 L -.646 -1.467 L -.573 -.818 L -.436 -.467 L .152 -.068 L .584 -.27 L .317 -.416 L .109 -.217 L .335 -.116 L .329 .127 L .637 .348 L .193 .222 L .042 .345 L .055 .528 L .296 .212 L .517 .039 L .892 -.048 L .745 .042 L .581 .166 L .427 -.034 L .581 -.498 L .545 -.302 L .454 -.318 L .057 -.205 L -.025 -2.246 L -.031 -1.894 L .006 -3.434 L h 462.462 268.501 m .412 -.044 L .194 -.553 L .633 -.343 L 1.035 -.303 L .263 -.199 L .582 -1.007 L .268 -.326 L .143 -.241 L -.104 -.226 L -.967 -.744 L -.33 -.337 L -.422 -.266 L -.308 .086 L -.995 .359 L -.65 .329 L -.513 .567 L -.275 .44 L -.691 .611 L .12 .409 L .582 .858 L .285 .366 L .739 .561 L h 432.955 250.661 m .456 .006 L .077 .749 L -.04 .678 L -.772 .02 L -.078 -.354 L -.028 -.396 L .285 -.297 L .101 -.406 L +471.719 258.047 N .075 .296 L -.071 .495 L .261 .889 L .068 .382 L -.131 .015 L -.312 .186 L -.064 .198 L -.076 .594 L -.595 .004 L -.671 -.109 L -.458 -.322 L -.307 -.465 L -.39 -.676 L .005 -.325 L .28 -.567 L .657 -.979 L .279 -.199 L 1.449 .585 L +462.462 268.501 N -.739 -.561 L -.285 -.366 L -.582 -.858 L -.12 -.409 L .691 -.611 L .275 -.44 L .513 -.567 L .65 -.329 L .995 -.359 L .308 -.086 L .422 .266 L .33 .337 L .967 .744 L .104 .226 L -.143 .241 L -.268 .326 L -.582 1.007 L -.263 .199 L -1.035 .303 L -.633 .343 L -.194 .553 L -.412 .044 L +790.15 283.022 N .738 .197 L .008 -.227 L -.242 -.524 L .052 -.284 L .233 .014 L .389 .17 L .37 .751 L .277 .964 L .48 .17 L 1.753 .691 L .506 .113 L .37 -.072 L .699 -.483 L .885 -.343 L .4 .027 L .329 .17 L .066 .454 L -.022 .198 L -.402 1.236 L -.283 .072 L -.761 .058 L -.035 .683 L -.124 .156 L -.424 .029 L -.746 .016 L -.432 .2 L -.271 .284 L .041 .384 L .254 .525 L -.002 .213 L -.151 .199 L -.646 .515 L -.898 1.129 L -.847 1.058 L -.756 .587 L -.68 .316 L -.337 -.171 L -.47 -.313 L -.237 -.328 L .056 -.314 L .288 -.386 L .307 -.671 L .398 -.5 L -.031 -.343 L -.271 -.128 L -.761 -.582 L -.421 -.185 L -.593 -.184 L -.98 -.452 L -.306 -.256 L -.11 -.17 L .081 -.128 L .419 -.157 L 1.389 -.685 L .209 -.512 L -.078 -.695 L .087 -.312 L .396 -.441 L .032 -.383 L -.482 -.837 L .081 -.567 L -.156 -.311 L -.479 -.655 L -.574 -.678 L .102 -.164 L -.145 -.304 L -.291 -.351 L -.336 -.188 L -.29 -.163 L .117 .233 L .497 .515 L .049 .141 L -.169 0 L -.211 -.281 L -.525 -.631 L -.622 -.771 L -.518 -.561 L .001 -.117 L -.268 -.257 L .04 -.141 L .013 -.14 L -.048 -.188 L -.197 -.396 L -.379 -.42 L -.347 -.257 L .163 -.046 L .205 .093 L .358 -.047 L .131 -.093 L .084 .28 L -.149 .187 L .186 .303 L .177 .21 L .167 .116 L .228 .164 L .041 -.141 L .269 .023 L .519 .257 L .42 .117 L .274 .07 L .128 .257 L -.011 .141 L .185 .023 L .146 -.188 L .185 .023 L -.022 .164 L .227 .351 L .249 .187 L .233 .28 L -.18 .023 L -.076 .164 L .093 .163 L -.242 -.023 L -.175 -.047 L .143 .117 L .251 .188 L .23 .233 L .352 .28 L .063 .234 L .019 .21 L -.261 -.047 L .096 .164 L .239 .351 L .256 .188 L -.292 .023 L -.226 0 L -.205 -.047 L -.006 .141 L .306 .14 L .324 .164 L -.09 .211 L .205 .046 L .265 -.023 L .226 0 L .223 .141 L -.114 .07 L -.031 .141 L .025 .141 L .136 .06 L h 782.939 297.694 m -.088 .158 L -.558 .13 L -.309 .288 L -.322 .101 L -.246 .244 L -.692 -.242 L -.16 .086 L .15 .216 L .429 .415 L -.141 .173 L .02 .259 L -.064 .431 L -.218 -.071 L -.976 -.099 L .418 .229 L .449 .244 L -.278 .49 L -.427 .896 L -.212 .549 L -.418 .318 L -.673 .349 L -.171 .246 L -.259 .145 L -.581 .233 L -.593 .406 L -.398 .015 L -1.156 -.258 L -.628 .112 L -.585 -.442 L -.812 -.158 L -.373 -.066 L -.162 -.308 L -.467 -.098 L -.24 .142 L -.062 .168 L -.78 .095 L -.214 -.166 L -.515 -.095 L -.146 -.286 L .432 -.089 L -.223 -.216 L .328 -.116 L .322 -.001 L -.452 -.482 L .82 .266 L -.464 -.576 L .121 -.145 L .946 .156 L .082 -.13 L -.141 -.173 L -.201 -.216 L -.06 -.288 L .283 -.303 L .569 -.246 L .328 -.374 L .561 -.375 L .102 -.302 L .998 -.575 L 1.106 -.275 L .713 -.331 L .544 -.36 L .377 -.101 L .685 -.575 L .066 -.272 L .48 -.302 L .373 -.015 L .787 -.331 L .664 -.402 L .126 -.215 L -.008 -.172 L .266 -.144 L .448 -.302 L -.109 -.501 L .076 -.214 L .166 -.44 L .306 .048 L .066 -.152 L .58 -.259 L .444 -.272 L .137 -.285 L .131 -1.187 L .512 -.647 L .372 .047 L .365 .165 L .032 .259 L .337 .06 L .187 .186 L .231 .799 L .312 .242 L .973 -.645 L .426 -.029 L .367 .113 L .222 .5 L -.197 .399 L .299 .429 L .066 .271 L -.611 .659 L -.261 .401 L -.476 .358 L -.868 .746 L -.578 .359 L -.295 .13 L -.236 .258 L -.389 .159 L -.271 .258 L .416 .407 L .428 .047 L .421 .289 L -.276 .113 L -.484 .07 L -.503 -.296 L -.488 .131 L -.352 .158 L +247.899 318.387 N .008 -1.144 L .821 .289 L .06 .206 L -.354 .312 L -.534 .337 L h 248.453 316.576 m -.286 -.039 L -1.385 -.36 L -.841 -.217 L -2.827 -.132 L -1.41 .052 L -.669 -.041 L -.778 -.568 L -.231 -2.285 L -.187 -.248 L -.654 .121 L -.961 .283 L -.218 -.043 L -.508 -1.123 L -.28 -1.309 L .037 -.45 L .271 -.292 L 1.729 -1.01 L .307 -.263 L .296 -1.218 L .069 -.188 L -.446 -.648 L .249 -.781 L .28 -.219 L .598 -.161 L .226 -.262 L .212 -.434 L .216 -.896 L -.158 -1.035 L .059 -1.094 L .767 -.794 L -.017 -.216 L -.552 -.385 L -.586 -.298 L -.176 -.171 L .757 -.146 L .726 -.033 L .322 -.13 L .245 -.202 L .007 -.186 L -.302 -.17 L -.789 -.11 L -.26 -.185 L -.252 -.585 L .191 -1.458 L -.088 -.655 L -.555 -.111 L -.125 -.128 L -.094 -1.226 L .106 -.271 L .172 -.172 L .596 -.317 L -.012 -.427 L -.231 -.867 L -.123 -1.835 L .1 -.37 L .316 -.541 L .511 -2.427 L .053 -.312 L .126 -.17 L .951 -.529 L .202 -.143 L -.437 -.932 L -.249 -1.103 L -.014 -1.16 L .142 -1.075 L .231 -.312 L 1.334 -1.11 L .078 -.325 L -.189 -1.06 L -.088 -.409 L .319 -.595 L 1.083 -1.854 L .075 -.41 L -.055 -.69 L -.784 -2.816 L -.408 -1.154 L -.285 -.633 L .156 -.961 L .388 -1.201 L .292 -.34 L .492 -.271 L .124 -.185 L -.054 -.762 L -.167 -1.466 L .823 -1.839 L .282 -.439 L .608 -.694 L .464 -.835 L .329 -.835 L .791 -.089 L .333 -.017 L .152 -.311 L -.011 -.227 L -.53 -.477 L -.114 -.507 L .161 -.382 L .273 -.369 L -.03 -.226 L -.34 -.449 L -.113 -.437 L .007 -.579 L .421 -.722 L -.25 -.817 L .204 -.312 L .819 -.372 L 1.346 -.53 L .36 -.256 L .541 -1.457 L .093 -.636 L -.161 -.154 L -.212 -.14 L -.107 -.056 L 2.026 -2.087 L .292 -.27 L .322 .181 L .193 .169 L .615 .194 L .901 -.034 L .527 -.045 L .531 .067 L .37 .195 L .341 .309 L .416 1.084 L 1.034 -1.784 L .686 -.004 L 1.33 .077 L .592 .109 L .19 .056 L .225 .337 L .782 .913 L 1.271 1.376 L .576 .562 L .835 .588 L .498 .237 L 1.173 .204 L .671 .307 L 1.632 1.106 L 1.448 .697 L .65 .18 L .939 .503 L -.018 .268 L -.617 1.203 L -.625 .851 L -.048 .227 L .21 .619 L -.11 .198 L -.486 .398 L -.425 .426 L -.064 .212 L .19 .056 L 1.187 -.332 L .607 .025 L .992 .333 L .564 .096 L .71 -.005 L .745 -.131 L .387 -.172 L .235 -.029 L .35 .097 L .609 .363 L .352 -.51 L .301 -.27 L 1.007 -.74 L .375 -.468 L .544 -1.57 L -.02 -.239 L .957 -.161 L .462 -.017 L .206 .196 L .517 1.154 L -.094 1.638 L -.161 .467 L -.521 .313 L -1.754 .744 L -.348 .242 L -1.633 1.448 L -1.435 1.363 L -1.805 1.816 L -.833 .88 L -.214 .27 L -.443 .524 L -.065 .452 L -.595 2.359 L -.103 .522 L .049 .847 L .168 .986 L -.118 .325 L -.48 .524 L -.24 .495 L -.011 .522 L .194 .577 L -.054 .338 L -.162 .273 L -.26 .325 L .015 .226 L .924 .831 L .68 .281 L .715 .281 L .283 .169 L .281 .325 L -.025 .325 L -.362 .523 L -.043 .396 L .105 .339 L .174 .269 L .466 .325 L .522 .168 L .109 .113 L .226 .892 L -.308 .481 L -.75 .937 L -.729 .766 L -.313 .737 L -.368 .284 L -.832 .342 L -1.04 .342 L -1.92 .401 L -1.795 .188 L -1.361 .116 L -.945 .044 L -1.175 -.11 L -.934 -.226 L -.128 .199 L .036 .808 L .322 .312 L .308 .184 L -.09 .298 L -.381 .624 L -.345 .498 L -.069 .385 L .392 .682 L .066 .285 L -.208 .214 L -.105 .057 L -1.251 .473 L -1.137 .116 L -.814 -.069 L -.967 -.34 L -1.47 -.396 L -.246 .057 L -.23 .271 L .041 .598 L .429 .684 L .037 .398 L -.242 .643 L .092 .385 L .773 .54 L .796 .084 L .369 -.2 L -.387 -.398 L .872 -.188 L .383 -.043 L .234 1.041 L .052 .3 L -.144 .157 L -.299 .101 L -.448 .072 L -.261 -.157 L -.104 -.299 L -.115 -.071 L -1.046 .073 L -.67 .201 L -.212 .101 L .151 .214 L .591 .07 L .47 .113 L .452 .113 L .06 .028 L -.864 .388 L -.776 .287 L -.577 .602 L .003 .414 L .161 .787 L -.081 .258 L -.815 .817 L .022 .215 L .423 .371 L -.491 .116 L -1.194 .088 L -.48 .087 L -.632 .246 L -.619 .389 L -.56 .548 L -.549 .821 L -.052 .389 L .061 .375 L .312 .591 L .48 .446 L .98 .633 L .657 .244 L .97 .143 L .362 .086 L .14 .274 L -.151 .796 L -.128 .348 L -.342 .464 L -.189 .145 L -1.08 .524 L -1.541 .814 L -.712 .698 L -.179 .276 L -.093 .45 L .111 .523 L -.169 .451 L -.239 .32 L -.97 .454 L -.969 .25 L -.421 .221 L -.323 .396 L -.226 .791 L -.054 .514 L .2 .777 L .547 .896 L .699 .779 L .235 .339 L -.101 .032 L h 247.899 318.387 m .18 .182 L .148 .073 L .607 -.075 L .344 .133 L .648 .725 L .908 .665 L .993 .756 L .525 .222 L .73 .37 L .246 .074 L .42 -.001 L .483 .163 L 1.283 .027 L .142 -.016 L -.006 .224 L -.19 .209 L -.492 .06 L -1.198 .092 L -.777 .196 L -.364 0 L -1.179 -.355 L -.753 -.088 L -1.15 -.027 L -.814 -.014 L -.831 .081 L .098 -3.675 L +346.758 54.457 N .127 -.162 L .42 -.179 L .894 .015 L .674 -.098 L -.354 -.227 L -.405 -.34 L .317 -.342 L .277 0 L .956 .42 L .67 .048 L .3 -.163 L -.191 -.26 L -.625 -.373 L .366 -.245 L 1.037 .226 L .957 .08 L .746 .275 L .446 .551 L -.119 .405 L -.441 .292 L .922 .806 L .553 -.356 L .352 -.13 L .63 -.114 L .49 -.179 L .061 -.21 L -.169 -.778 L .542 -.245 L .501 .454 L .426 .307 L .489 .209 L .215 .016 L .185 -.13 L -.264 -.454 L .243 -.163 L .27 -.033 L .817 -.164 L .683 .438 L .536 .242 L .542 .063 L .05 -.178 L -.358 -.535 L 1.006 .145 L 1.439 .079 L .787 -.115 L .427 -.229 L -.021 -.716 L 1.167 .08 L .635 .471 L 1.118 .323 L .683 .015 L .273 .243 L -.252 .552 L .786 .29 L 1.674 .159 L .127 .145 L .143 .548 L -.07 .387 L -.152 .256 L -.152 .256 L -.443 .129 L -.815 .018 L -.195 .096 L -.04 .431 L -.515 .463 L -.497 .16 L -.568 -.031 L -.422 -.159 L -.817 .495 L -.539 .144 L -1.46 .463 L -.853 .113 L -.726 .001 L -.771 .097 L -.784 .587 L -.473 .127 L -1.078 .097 L -.709 -.03 L -1.316 -.171 L -.608 -.142 L -1.283 -.489 L -1.058 -.093 L -.443 .064 L -1.041 -.014 L -1.834 -.124 L -.297 -.206 L .434 -.191 L 1.127 -.352 L .701 -.59 L -.818 -.015 L -.51 -.126 L -.428 -.398 L -.253 -.095 L -.358 .081 L -1.564 .115 L -.557 .033 L -.37 -.223 L .141 -.192 L .388 -.129 L .669 -.097 L .794 -.017 L .729 -.114 L 1.049 -.098 L .376 -.194 L .178 -.322 L -.144 -.258 L -.358 -.177 L -.426 -.015 L -.478 -.145 L -1.005 -.047 L -.821 .099 L -.424 .162 L -.676 .082 L -1.041 -.272 L -.16 -.21 L +462.829 67.958 N .145 .053 L .16 .131 L -.043 .174 L -.175 .044 L -.189 0 L -.116 0 L -.088 .043 L -.058 .131 L -.175 .277 L -.219 .204 L -.319 .131 L -.204 .131 L -.088 .16 L .029 .16 L .131 .437 L .073 .189 L .029 .16 L -.175 .131 L 0 .175 L .175 .233 L .203 .087 L .088 .073 L 0 .073 L .015 .087 L .043 .146 L .175 .043 L .059 .059 L -.175 .073 L -.262 .043 L -.16 .058 L -.059 .102 L -.087 .116 L -.131 0 L 461.402 72 l -.015 .087 L -.116 .058 L .081 .106 L -.125 .025 L -.087 -.015 L -.306 -.043 L -.16 -.058 L -.175 -.073 L -.204 -.044 L -.131 .102 L -.204 -.029 L -.131 .044 L -.16 .087 L -.146 .014 L -.146 -.087 L -.116 -.029 L -.175 0 L -.204 -.117 L -.116 -.174 L -.203 -.117 L -.146 -.043 L -.072 -.117 L -.189 0 L -.247 -.043 L -.204 -.117 L -.029 0 L -.276 -.014 L -.102 -.102 L -.248 -.043 L -.116 -.102 L -.189 -.087 L 0 .073 L -.116 .087 L -.131 -.058 L -.015 -.073 L -.087 -.029 L -.103 0 L -.276 .117 L -.102 .029 L -.131 .015 L -.219 .015 L -.146 .043 L -.262 .029 L -.276 .087 L -.116 .102 L -.087 0 L .156 -.19 L -.003 -.351 L .183 -.238 L -.368 -.21 L -.605 .437 L -.334 -.251 L -.527 -.038 L .043 -.942 L -.396 .188 L -.336 -.415 L .158 -.202 L -.209 -.254 L .265 -.074 L -.092 -.252 L .344 -.042 L 1.026 -.084 L -.006 -.132 L .561 -.108 L .133 -.188 L .436 .101 L .074 -.113 L .317 .05 L .083 -.215 L 1.104 .193 L .446 -.294 L .091 .165 L .514 -.089 L 1.383 .029 L 1.152 .167 L .305 .12 L .592 -.045 L .971 .09 L .426 -.108 L .271 -.24 L -.006 -.009 L +461.353 72.251 N .37 -.004 L -.015 .116 L 0 .117 L .232 .073 L .204 .087 L .087 .073 L .204 .058 L -.015 .087 L -.029 .116 L -.015 .087 L -.102 .073 L -.087 .015 L -.103 .029 L .131 .087 L -.072 .131 L .029 .117 L -.073 .087 L -.102 .073 L -.044 .102 L .204 -.059 L .146 -.015 L .131 .073 L .087 .014 L .073 .044 L -.059 .087 L -.043 .073 L .116 .102 L .131 .058 L .029 .16 L .146 .102 L .16 .043 L -.059 .087 L .131 .117 L -.015 .189 L .088 .233 L -.044 .087 L -.015 .117 L -.061 .042 L -.241 .044 L -.24 .051 L -.12 .12 L -.223 .034 L -.137 .154 L -.137 .085 L -.069 .103 L -.068 .206 L -.188 .035 L -.239 -.035 L -.24 -.034 L -.325 -.034 L -.359 0 L -.172 .068 L -.103 .137 L -.223 .085 L -.154 0 L -.103 -.017 L -.086 .052 L -.377 -.035 L -.273 -.068 L -.154 -.171 L -.138 -.154 L -.325 -.137 L -.497 -.223 L -.342 -.24 L -.377 -.034 L -.583 -.035 L -.325 -.12 L -.291 -.188 L -.086 -.257 L -.188 .017 L -.171 .068 L -.36 .171 L -.394 .017 L -.24 0 L -.273 .085 L -.24 -.085 L -.309 -.103 L -.6 -.017 L -.291 .069 L -.359 -.069 L -.291 -.051 L -.154 .034 L -.274 .069 L -.103 -.052 L -.12 -.137 L -.154 0 L -.257 .068 L -.188 0 L -.754 -.017 L -.445 -.085 L -.754 .171 L -.599 .154 L -.429 .103 L -.257 .137 L -.052 .188 L -.526 .026 L -.065 -.059 L .073 -.837 L .035 -.302 L .127 -.167 L .672 -.379 L .034 -.717 L .267 -.162 L .267 -.273 L .217 -.203 L .296 -.026 L 1.056 -.199 L .166 -.046 L .162 -.066 L .29 0 L .049 .237 L .657 .388 L .422 .162 L .23 .473 L .091 .15 L .441 .196 L .785 .059 L .868 -.244 L .24 -.122 L .178 -.288 L -.052 -.394 L -.193 -.869 L .198 -.243 L .045 -.055 L .087 0 L .116 -.102 L .276 -.087 L .262 -.029 L .146 -.043 L .219 -.015 L .131 -.015 L .102 -.029 L .276 -.117 L .103 0 L .087 .029 L .015 .073 L .131 .058 L .116 -.087 L 0 -.073 L .189 .087 L .116 .102 L .248 .043 L .102 .102 L .276 .014 L .029 0 L .204 .117 L .247 .043 L .189 0 L .072 .117 L .146 .043 L .203 .117 L .116 .174 L .204 .117 L .175 0 L .116 .029 L .146 .087 L .146 -.014 L .16 -.087 L .131 -.044 L .204 .029 L .131 -.102 L .204 .044 L .175 .073 L .16 .058 L .306 .043 L .087 .015 L .125 -.025 L +451.02 79.165 N -.029 -.038 L -.034 -.137 L -.018 -.171 L .068 -.206 L .068 -.154 L .224 -.12 L -.052 -.12 L -.018 -.137 L -.171 -.069 L -.188 -.034 L -.103 -.103 L -.086 -.137 L -.223 .017 L -.257 0 L -.445 0 L -.223 .051 L -.086 -.103 L -.514 -.068 L -.257 -.069 L -.223 -.12 L -.24 0 L -.086 -.052 L -.051 -.154 L -.12 .034 L -.353 .096 L -.043 -.077 L .128 -.012 L .034 -.183 L -.439 -.646 L -.008 -.14 L -.042 -.727 L -.112 -.102 L .526 -.026 L .052 -.188 L .257 -.137 L .429 -.103 L .599 -.154 L .754 -.171 L .445 .085 L .754 .017 L .188 0 L .257 -.068 L .154 0 L .12 .137 L .103 .052 L .274 -.069 L .154 -.034 L .291 .051 L .359 .069 L .291 -.069 L .6 .017 L .309 .103 L .24 .085 L .273 -.085 L .24 0 L .394 -.017 L .36 -.171 L .171 -.068 L .188 -.017 L .086 .257 L .291 .188 L .325 .12 L .583 .035 L .377 .034 L .342 .24 L .497 .223 L .325 .137 L .138 .154 L .154 .171 L .273 .068 L .377 .035 L -.017 .171 L -.086 .154 L -.034 .12 L -.12 .137 L -.086 .137 L .343 .034 L .274 .052 L .085 .051 L -.119 .051 L -.086 0 L -.103 .154 L -.018 .154 L -.171 .017 L -.12 -.086 L -.12 .051 L -.239 -.034 L -.154 .034 L -.086 .154 L -.103 .154 L -.257 .068 L -.429 0 L -.137 .137 L -.12 .12 L -.034 .154 L -.086 .171 L .103 .171 L -.068 .137 L -.239 .154 L 0 .137 L -.068 .085 L -.069 .137 L .172 .034 L .205 0 L .138 .206 L -.086 .188 L -.274 .017 L -.223 -.068 L 0 -.154 L -.034 -.085 L -.086 -.069 L -.171 .051 L -.12 .086 L -.291 -.034 L -.068 .137 L -.24 .12 L -.154 0 L -.188 -.034 L -.273 .103 L .086 .171 L -.069 .12 L -.171 .034 L -.137 -.034 L -.206 .051 L -.377 .154 L -.291 0 L -.068 -.103 L -.12 -.051 L -.239 .051 L -.377 .017 L -.24 .034 L -.291 -.034 L -.154 .034 L -.093 -.035 L -.09 -.171 L -.016 -.029 L -.099 -.186 L -.284 -.487 L -.679 -.243 L -.04 -.014 L -.641 .021 L +452.867 80.273 N .093 .035 L .154 -.034 L .291 .034 L .24 -.034 L .377 -.017 L .239 -.051 L .12 .051 L .068 .103 L .291 0 L .377 -.154 L .206 -.051 L .137 .034 L .171 -.034 L .069 -.12 L -.086 -.171 L .273 -.103 L .188 .034 L .154 0 L .24 -.12 L .068 -.137 L .291 .034 L .12 -.086 L .171 -.051 L .086 .069 L .034 .085 L 0 .154 L .223 .068 L .274 -.017 L .086 -.188 L -.138 -.206 L -.205 0 L -.172 -.034 L .069 -.137 L .068 -.085 L 0 -.137 L .239 -.154 L .068 -.137 L -.103 -.171 L .086 -.171 L .034 -.154 L .12 -.12 L .137 -.137 L .429 0 L .257 -.068 L .103 -.154 L .086 -.154 L .154 -.034 L .239 .034 L .12 -.051 L .12 .086 L .171 -.017 L .018 -.154 L .103 -.154 L .086 0 L .119 -.051 L -.085 -.051 L -.274 -.052 L -.343 -.034 L .086 -.137 L .12 -.137 L .034 -.12 L .086 -.154 L .017 -.171 L .086 -.052 L .103 .017 L .154 0 L .223 -.085 L .103 -.137 L .172 -.068 L .359 0 L .325 .034 L .24 .034 L .239 .035 L .188 -.035 L .068 -.206 L .069 -.103 L .137 -.085 L .137 -.154 L .223 -.034 L .12 -.12 L .24 -.051 L .241 -.044 L .165 .147 L .229 .066 L .197 -.131 L .181 .016 L .312 .033 L .132 .148 L .082 .148 L .197 -.033 L .214 -.065 L .361 -.049 L .312 .049 L .296 .065 L .147 .017 L 0 .115 L -.164 .099 L -.017 .099 L .065 .148 L .164 .148 L .197 0 L .214 -.197 L .279 -.016 L .165 0 L .147 -.099 L .23 -.083 L .131 .049 L .099 .049 L .247 -.049 L .542 .115 L .132 .131 L .279 .099 L .099 .099 L .147 .099 L .165 .033 L .147 -.033 L .049 .115 L -.065 .115 L 0 .083 L -.033 .164 L -.131 .165 L .197 .247 L .147 .099 L .05 .164 L -.066 .131 L -.114 0 L 0 .083 L -.115 .082 L -.099 .049 L -.033 .165 L -.049 .147 L .345 .049 L .132 .181 L .082 .115 L .181 -.049 L .132 .033 L -.099 .115 L -.066 .131 L .017 .099 L .214 .017 L .164 .263 L .115 .23 L .443 .213 L .23 .066 L .279 .082 L .164 .099 L .066 .148 L -.099 .197 L -.066 .181 L .182 .066 L .361 -.066 L .378 .066 L .361 .099 L .263 .066 L -.032 .065 L -.066 .049 L -.082 .017 L .099 .181 L .296 .148 L .279 .066 L .033 .131 L -.065 .164 L -.296 0 L -.148 .083 L -.049 .065 L -.444 .247 L -.525 .099 L -.51 -.016 L -.197 -.132 L -.328 -.049 L -.362 .017 L -.131 .165 L -.099 .131 L .017 .164 L .279 .263 L .296 .164 L 0 .165 L -.132 .066 L .099 .148 L .147 .131 L -.082 .099 L .033 .164 L .033 .23 L -.033 .099 L .164 .082 L .082 .115 L .165 .066 L .002 .142 L -.519 -.005 L -.522 .056 L -.112 .131 L -.205 -.056 L -.187 -.037 L -.336 .075 L -.057 .13 L -.111 .112 L -.317 .187 L -.188 .261 L -.261 .224 L -.057 .206 L .243 .205 L .056 .149 L -.131 .206 L -.261 -.019 L -.149 -.056 L -.149 -.206 L -.112 -.056 L -.187 -.075 L -.224 -.037 L -.225 .037 L -.242 .075 L -.299 .019 L -.149 -.131 L -.224 .075 L -.188 .093 L -.316 .056 L -.188 -.056 L -.037 -.205 L -.112 -.131 L -.168 -.131 L -.13 .038 L -.131 .075 L -.168 0 L -.299 .149 L -.131 .149 L -.168 0 L -.094 -.187 L -.13 -.075 L -.206 0 L -.224 .112 L -.131 -.187 L -.224 -.093 L -.131 .112 L -.354 .056 L -.262 -.112 L -.112 0 L -.019 .205 L -.168 .093 L -.093 -.056 L .056 -.224 L -.243 -.038 L -.187 -.056 L -.541 .112 L 0 -.149 L -.187 0 L .019 -.224 L -.28 -.037 L -.242 .075 L -.523 -.112 L -.578 -.056 L -.075 -.056 L -.522 0 L -.205 -.168 L -.262 .019 L -.522 -.093 L -.467 .075 L -.485 0 L -.354 -.056 L -.355 .056 L -.354 .056 L -.485 -.038 L -.485 .019 L -.205 .187 L -.037 .168 L -.374 .168 L -.373 .206 L -.112 -.112 L -.261 0 L -.374 -.019 L -.037 .131 L 0 .045 L -.126 -.137 L .315 -.752 L -.013 -.25 L -.218 -.146 L -.149 -.176 L -.421 -.146 L -.289 -.012 L .128 -.292 L .291 -.328 L .571 -.244 L .44 -.03 L .263 -.208 L .023 -.236 L -.172 -.502 L -.615 -1.5 L -.16 -.302 L +400.125 81.146 N .633 .305 L .208 .207 L .208 .37 L -.038 .193 L -.545 .563 L .714 .176 L .396 -.311 L .527 -.119 L .602 .028 L .807 .176 L .467 .354 L .235 .752 L -.077 .221 L -.322 .414 L -1.068 .473 L -.767 .561 L -.96 .237 L 1.223 .167 L .501 .043 L .354 -.104 L .39 .117 L -.066 .516 L -.997 .308 L .005 .199 L -.479 -.084 L -1.068 .443 L -.879 -.142 L -.293 -.048 L -1.119 .211 L -.587 -.211 L -.598 .112 L -1.584 .141 L .137 .295 L -.907 -.168 L -.264 .168 L -.911 -.337 L -.334 .143 L -.913 .089 L -.093 .569 L -.337 .316 L -.37 .042 L -.272 -.252 L -.53 -.172 L -.135 .151 L -.527 -.077 L -.948 .324 L -.701 .552 L -.326 -.231 L -.775 -.147 L 1.2 -.472 L .492 -.476 L .447 -.097 L .468 -.388 L .118 -.485 L .242 .063 L .367 -.211 L -.008 -.274 L 1.013 -.105 L .76 .119 L .927 .007 L .073 -.338 L .308 -.142 L .321 -.556 L -.939 .394 L -.725 .016 L -1.467 -.482 L -1.866 -.055 L -.399 -.191 L -.156 -.162 L .417 -.325 L .983 -.194 L .721 -.237 L .38 -.384 L .066 -.827 L -.119 -.192 L -.713 .046 L -.34 -.044 L .288 -.355 L .387 -.223 L .802 -.253 L 1.394 -.062 L .922 -.076 L -.316 -.548 L .172 -.683 L .253 -.461 L -.045 -.312 L -.834 .061 L -.484 -.296 L -.2 -.312 L .309 -.507 L .617 -.433 L -.347 -.104 L -.596 -.088 L -.735 .3 L -.476 .061 L -.753 -.222 L -.088 .194 L -.222 .194 L -.672 -.103 L -.464 -.133 L .1 -.343 L .348 -.36 L .604 -.706 L -.293 -.134 L -.305 -.39 L .028 -.24 L .304 -.106 L .3 -.196 L -.194 -.496 L -.306 .076 L -.636 .453 L -.442 .031 L -.526 .287 L -.14 -.421 L .302 -.527 L .438 -.559 L .065 -.257 L -.417 -.195 L -.196 -.045 L -.218 .302 L -.394 .257 L -.493 -.165 L .299 -.575 L .54 -.455 L .09 -.136 L -.225 -.575 L .366 -.092 L .225 -.197 L -.672 -.515 L .432 -.351 L .752 .151 L .387 -.092 L -.645 -.759 L .975 -.169 L -.457 -.502 L .416 -.382 L .924 .365 L .824 -.093 L .686 -.139 L .867 -.047 L .612 .014 L .303 .259 L -.307 .29 L -1.726 .704 L -.46 .274 L -.218 .441 L .222 .182 L .784 .029 L .877 -.078 L .685 -.001 L .53 .075 L 1.563 -.064 L .458 .378 L -.363 .425 L -.212 .323 L .098 .112 L -.565 .66 L -.226 .111 L -.339 .437 L -.696 .261 L -.382 .038 L .451 .186 L .508 .167 L -.116 .015 L -.272 .19 L -.61 .052 L -.275 .196 L -1.337 -.025 L .404 .223 L .302 0 L .492 .093 L .432 -.006 L .519 -.223 L .413 -.025 L .449 .161 L .656 .164 L .673 .566 L .496 .228 L .118 .165 L -.067 .238 L .312 .78 L .371 .536 L .438 .189 L .714 .107 L .59 .549 L .688 .593 L .135 .52 L -.188 .49 L .257 .124 L h 387.915 77.13 m -.128 -.325 L .149 -.335 L .38 -.089 L .079 .501 L -.307 .251 L -.173 -.003 L h 386.786 80.184 m -.178 -.272 L -.967 .072 L .123 -.256 L -.364 -.15 L -.26 -.257 L -.335 -.107 L -.253 .364 L -.751 .257 L -.778 -.192 L -.401 -.278 L -.101 -.278 L .86 -.278 L -.483 -.257 L .817 -.107 L .385 -.484 L -.029 -.235 L .449 -.09 L .508 -.15 L .781 -.077 L .424 .044 L .389 .104 L .362 -.046 L .218 .149 L .519 .791 L .047 .179 L -.081 .298 L .308 .446 L -.155 .328 L -.402 .328 L -.354 .12 L -.299 .038 L +578.943 106.217 N -.41 -.375 L -.466 -.098 L -.663 0 L -.196 -.27 L -.27 -.147 L -.147 -.344 L -.564 .049 L -.981 -.246 L -.662 .074 L -1.35 -.024 L -.662 -.098 L -.712 -.221 L -.785 .147 L -.761 0 L -.858 .024 L -.441 .27 L -.54 -.098 L -.908 -.196 L -.735 -.246 L -.761 -.27 L -.589 -.074 L -.688 .123 L -.466 .368 L -.245 .736 L .024 .442 L -.344 -.123 L -.81 -.123 L -.688 -.196 L -.883 -.245 L -.883 -.147 L -.663 .098 L -.736 .123 L -.318 .368 L -.393 .442 L .044 .273 L -.322 .031 L -.377 .377 L -.283 -.126 L -.22 .063 L -.346 .283 L -.534 .471 L -.755 .189 L -.943 .377 L -.282 .188 L -.221 .472 L -.439 .188 L -.504 .44 L .157 .409 L -.125 .188 L -.66 0 L -.44 -.346 L .062 -.283 L -.062 -.283 L -.44 -.314 L -.346 0 L -1.006 .094 L -.691 .032 L -.503 -.063 L -.346 -1.069 L -.221 -.817 L -1.006 0 L -.031 -.754 L .188 -.409 L .031 -1.038 L -.66 .314 L -.66 -1.006 L -.597 -.22 L -.724 -.723 L -1.1 .409 L -2.767 -.188 L -2.578 .346 L -2.012 -1.666 L -5.722 -2.986 L -5.658 1.289 L -.056 8.174 L -.158 -.014 L -.341 .106 L -.489 .043 L -.447 -.255 L -.638 -.703 L -.256 -.511 L -.617 -.383 L -.681 -.383 L -.512 -.234 L -.979 .085 L -1.277 .298 L -.937 .532 L -.529 .453 L .092 -.399 L -.06 -.18 L -.12 -.12 L .14 -.26 L .2 -.2 L .14 -.32 L .04 -.3 L .18 -.2 L -.159 -.24 L -.4 -.16 L -.459 .06 L -.18 -.16 L -.3 .06 L -.2 .04 L -.199 -.18 L -.221 -.32 L -.319 -.28 L -.34 0 L -.359 .02 L 0 -.2 L .08 -.28 L -.2 -.379 L -.239 -.12 L -.2 -.24 L -.399 -.799 L -.08 -.28 L -.56 -.12 L -.699 -.08 L -.14 -.16 L .02 -.439 L .16 -.12 L .3 -.06 L .399 .02 L .34 .02 L .479 .14 L .539 .18 L .18 -.08 L .36 -.08 L -.2 -.16 L -.26 -.12 L -.399 -.2 L -.2 -.24 L .26 -.36 L .28 -.04 L .08 -.26 L .18 -.299 L .12 -.14 L .26 .04 L .319 -.08 L .16 -.1 L .339 .12 L .24 0 L 1.119 -.04 L .999 .14 L .499 .02 L -.159 -.08 L -.34 -.2 L -.479 -.12 L -.021 -.3 L .2 -.2 L .279 -.22 L .221 -.28 L .119 -.52 L .12 -.28 L -.16 -.24 L -.14 -.16 L .1 -.2 L .26 -.2 L -.119 -.12 L -.101 -.3 L -.359 -.12 L -.359 -.04 L -.68 -.1 L -.2 .16 L -.199 .08 L -.52 .08 L -.46 -.12 L -.319 -.26 L -.26 -.06 L -.68 -.12 L -.56 .06 L -.659 .319 L -.42 .02 L -.799 .5 L -.72 .28 L -.499 .06 L -.42 -.02 L -.279 .24 L -.213 .18 L -.616 -.19 L -.857 -.377 L -.068 -.308 L .343 -.103 L .309 .103 L .445 .103 L .138 -.103 L -.96 -1.131 L -.343 -.514 L -.479 -.206 L -.515 -.445 L -.514 -.034 L -.343 .034 L -.583 -.206 L -.103 .343 L -.514 -.514 L .068 -.309 L -.138 -.377 L -1.37 -.343 L .65 -1.165 L .446 -.274 L .239 -.206 L -.239 -.274 L -.343 -.171 L .205 -1.303 L .823 -.137 L .343 -.549 L .103 -.308 L .411 -.069 L .514 .24 L .48 .548 L .514 .411 L .651 0 L .411 -.24 L .068 -.446 L -.171 -.411 L -.068 -.445 L .479 -.206 L .891 -.411 L .172 -.24 L .309 -.309 L .514 -.171 L .549 -.068 L .788 -.377 L .548 -.343 L .515 -.309 L .651 .069 L .479 0 L .309 .274 L .651 -.137 L .273 -.137 L .617 -.24 L .411 .069 L .411 .514 L .788 .035 L .617 -.069 L .96 .171 L 0 .343 L .582 .206 L .789 .343 L .411 .274 L .068 .583 L .274 .137 L .239 -.274 L -.205 -.48 L -.034 -.24 L .72 .068 L .582 .548 L .686 .137 L .411 .24 L .686 -.171 L .274 -.274 L .377 -.343 L .514 -.377 L .823 .068 L .65 .035 L .651 .411 L .617 -.068 L .137 -.412 L 1.062 -.103 L .754 .103 L .274 .548 L .926 .309 L .754 .137 L .411 .171 L .651 -.343 L .171 -.309 L .24 0 L .343 .343 L .959 .034 L 1.577 -.411 L .137 -.309 L .138 -.686 L -.24 -.24 L -1.165 -.171 L -.274 -.308 L -.651 -.069 L -.377 -.137 L .068 -.171 L -.377 -.137 L -.239 0 L -.164 -.274 L .467 -.067 L .735 -.368 L .588 -.147 L .331 -.294 L -.441 -.478 L -.146 -.257 L .662 -.515 L .698 -.184 L 1.103 .147 L .515 -.073 L .11 -.257 L -.956 -.294 L -1.065 -.11 L 0 -.331 L .294 -.074 L -.294 -.221 L -.074 -.441 L .185 -.515 L .33 -.074 L 1.066 .147 L .515 0 L .772 0 L .368 -.184 L 1.396 -.405 L 1.029 -.037 L .735 -.11 L 1.545 -.11 L .588 -.073 L .331 .073 L .221 -.331 L .625 -.331 L 1.177 -.037 L 2.021 -.405 L 1.876 -.073 L .625 -.074 L .367 -.368 L 77.39 V .515 -.037 L .589 -.184 L .11 -.221 L .735 -.037 L .919 .147 L .515 .11 L .772 .257 L .625 -.11 L .882 -.037 L .368 .404 L -.037 .331 L .147 .221 L .515 .22 L -.11 .331 L -.147 .257 L .073 .331 L -.33 .037 L .184 .257 L .478 .074 L .295 -.147 L .44 .11 L .368 -.147 L .367 .074 L .331 -.221 L .294 .11 L .295 .368 L .367 .221 L .147 -.147 L .184 -.147 L .478 .037 L .405 .294 L .478 .11 L .441 -.221 L .367 0 L -.146 .294 L -.441 .184 L -.331 .441 L .331 .184 L .441 -.11 L .771 -.073 L .441 .037 L .552 .184 L .294 -.294 L .772 -.441 L 1.103 -.257 L .956 -.515 L .772 -.221 L .515 -.22 L .809 -.074 L 0 .441 L -.515 .11 L -.11 .368 L 1.104 .588 L .809 .294 L 1.287 .772 L 1.066 1.029 L 1.69 2.133 L .846 .882 L 1.104 1.434 L .515 -.257 L .331 -.257 L .367 -.515 L .92 0 L .367 .331 L 0 .368 L .478 0 L .258 .257 L .184 .184 L .589 0 L .992 0 L .993 -.221 L .771 -.221 L .993 -.037 L .698 .441 L .772 .588 L .331 .625 L .956 .147 L .588 .552 L .662 .699 L .882 .073 L .993 .074 L .478 -.368 L .625 -.184 L -.073 .331 L .441 .331 L .294 .478 L .589 0 L .064 .145 L -.551 .034 L -.542 .148 L -.279 .262 L -.011 .275 L -.035 .478 L -.306 .219 L -.289 .06 L -1.199 .093 L -.428 .277 L -.34 .581 L .097 .75 L .213 .707 L -.157 .39 L -.444 .392 L -.417 .103 L -.718 .062 L -1.402 -.079 L -.594 -.141 L -.721 -.141 L -1.096 -.254 L -.427 .507 L -.516 1.141 L 584.2 97.43 l -.286 .605 L -.137 .418 L .622 .514 L .126 .286 L -.156 .245 L -.231 .145 L -.394 .074 L -1.133 -.238 L -.5 -.184 L -.35 .06 L -1.082 .207 L -1.799 .254 L -.393 .188 L -.215 .302 L -.068 .215 L .232 .185 L .366 -.06 L .483 .141 L .03 1.357 L .345 .627 L .29 .441 L .119 .47 L -.222 .33 L -.705 .546 L -.32 .401 L -.02 .399 L .139 .86 L +386.786 80.184 N -.304 .038 L -.223 .09 L .241 .252 L .361 .771 L .287 1.213 L -.061 .281 L -.359 .341 L -.242 .414 L -.145 .473 L -.185 .044 L -.284 -.058 L -.616 .031 L -.15 .212 L -.913 .042 L -.84 .132 L -.247 .144 L -.661 .286 L -.903 .498 L -.628 .035 L -.879 .283 L -1.28 .084 L .053 -.378 L -.089 -.441 L -.848 .1 L -.171 -.487 L .734 -.254 L -1.186 -.021 L .062 -.233 L 1.286 .027 L .198 -.104 L .039 -.222 L .107 -.31 L .515 -.134 L .692 -.031 L .13 -.281 L -1.07 .099 L .387 -.437 L -.187 -.159 L .481 -.468 L .694 -.011 L .163 -.089 L -.174 -.311 L -.348 .177 L -.309 -.131 L -.319 .03 L -.391 -.177 L -.414 .001 L -.182 .106 L 378 81.478 l .309 -.306 L -.29 -.142 L .759 -.126 L -.139 -.301 L .391 -.235 L -.481 -.214 L -.59 .128 L 378 79.792 l .38 -.268 L .215 -.16 L .928 .187 L .336 -.075 L .527 .038 L 1.102 .123 L -.214 -.358 L 382.132 79 l .198 -.321 L -1.373 0 L .154 -.15 L .569 -.107 L .061 -.29 L .291 -.479 L .505 -.181 L .804 -.169 L .22 .302 L .354 .149 L .156 -.031 L .029 .235 L -.385 .484 L -.817 .107 L .483 .257 L -.86 .278 L .101 .278 L .401 .278 L .778 .192 L .751 -.257 L .253 -.364 L .335 .107 L .26 .257 L .364 .15 L -.123 .256 L .967 -.072 L .178 .272 L +452.998 85.535 N 85.49 V .037 -.131 L .374 .019 L .261 0 L .112 .112 L .373 -.206 L .374 -.168 L .037 -.168 L .205 -.187 L .485 -.019 L .485 .038 L .354 -.056 L .355 -.056 L .354 .056 L .485 0 L .467 -.075 L .522 .093 L .262 -.019 L .205 .168 L .522 0 L .075 .056 L .578 .056 L .523 .112 L .242 -.075 L .28 .037 L -.019 .224 L .187 0 L 0 .149 L .541 -.112 L .187 .056 L .243 .038 L -.056 .224 L .093 .056 L .168 -.093 L .019 -.205 L .112 0 L .262 .112 L .354 -.056 L .131 -.112 L .224 .093 L .131 .187 L .224 -.112 L .206 0 L .13 .075 L .094 .187 L .168 0 L .131 -.149 L .299 -.149 L .168 0 L .131 -.075 L .13 -.038 L .168 .131 L .112 .131 L .037 .205 L .188 .056 L .316 -.056 L .188 -.093 L .224 -.075 L .149 .131 L .299 -.019 L .242 -.075 L .225 -.037 L .224 .037 L .187 .075 L .112 .056 L .149 .206 L .149 .056 L .261 .019 L .131 -.206 L -.056 -.149 L -.243 -.205 L .057 -.206 L .261 -.224 L .188 -.261 L .317 -.187 L .111 -.112 L .057 -.13 L .336 -.075 L .187 .037 L .205 .056 L .112 -.131 L .522 -.056 L .519 .005 L .357 .089 L .469 .022 L .313 -.156 L .179 -.291 L .134 -.268 L .536 .246 L .536 -.022 L .67 -.223 L .692 .112 L .514 -.134 L .201 .268 L .312 .134 L .246 .335 L .134 .201 L .246 .156 L .312 .156 L 0 .268 L -.312 -.022 L -.312 .134 L .134 .291 L .111 .357 L .269 .29 L .647 0 L .156 .112 L .514 -.067 L .38 .022 L 0 .312 L .402 0 L 0 .357 L .224 .268 L .089 .246 L -.089 .179 L .089 .224 L .179 .089 L .291 .29 L .268 -.179 L .47 -.067 L .268 .067 L .469 .291 L .201 -.067 L .179 .022 L .179 .156 L .425 -.112 L .312 -.112 L .269 0 L .536 -.134 L .357 -.067 L .111 .156 L .268 .179 L 0 .134 L .201 .179 L .022 .134 L .402 .044 L .179 .179 L .224 .112 L .29 -.134 L .045 -.157 L .224 -.067 L .29 .268 L .425 .067 L .469 .112 L .268 .112 L .357 -.067 L .201 .179 L .291 .089 L .469 .022 L .111 .224 L .357 .156 L .269 0 L .134 -.044 L .201 -.089 L .156 .089 L -.089 .111 L -.022 .179 L .111 .089 L .09 .179 L -.045 .224 L -.201 .089 L -.156 .067 L -.357 .201 L -.312 .044 L .223 .246 L .269 .089 L .29 .044 L -.134 .156 L -.312 0 L -.246 0 L -.045 .179 L -.044 .224 L .156 .067 L .179 .067 L .044 .134 L .045 .179 L .09 .201 L .066 .067 L -.156 .491 L -.156 .291 L 0 .156 L -.335 .134 L -.805 -.157 L -.736 .045 L -.269 0 L -.022 .179 L -.223 .179 L -.38 .134 L -.357 .022 L -.224 .089 L -.09 .514 L 0 .224 L -.021 .112 L -.012 .126 L -.779 .104 L -.971 .06 L -.511 .405 L -.729 .189 L -1.135 .075 L -1.119 .248 L -.502 .318 L -.463 .059 L -.453 -.316 L -.369 .621 L -.31 .188 L -.477 .044 L -.438 -.057 L -.959 .031 L -.5 .16 L .641 .287 L 1.957 1.004 L .053 .172 L -.093 .188 L .163 .244 L .562 .042 L .511 -.13 L .675 -.146 L 1.052 .013 L .439 .114 L -.235 .259 L -.106 .245 L -.228 .144 L -.578 .116 L -.31 .029 L -.591 -.157 L -.473 .044 L -.71 .489 L -1.007 .045 L -.538 .188 L -.527 .488 L -.269 .101 L -.786 -.07 L -.588 -.171 L .364 -.746 L -.096 -.416 L -.264 -.287 L -.854 -.286 L -.193 -.014 L -.629 .016 L -.151 .043 L -.16 -.187 L .887 -.505 L .644 -.261 L .772 -.188 L .221 -.116 L -.246 -.46 L -.435 -.071 L -.799 .044 L -1.015 .045 L -.698 -.1 L -.195 -.101 L -.418 -.432 L .584 -.405 L -.528 -.605 L -.378 .361 L -.541 .001 L -1.001 .146 L -.565 .131 L -.694 .722 L -1.003 .867 L -.754 .203 L -.223 .044 L -.287 .504 L .079 .158 L .178 .093 L -.706 -.131 L -.665 .261 L -.457 0 L -.033 .189 L -.609 -.047 L -.398 -.166 L -.119 -.249 L -.15 .02 L .055 -.077 L .102 -.025 L .126 .013 L .113 .013 L .189 0 L .088 -.114 L 0 -.088 L -.063 -.113 L .025 -.113 L .126 -.063 L .051 -.063 L .075 -.013 L .089 -.025 L .088 -.063 L .089 -.088 L .024 -.126 L -.013 -.114 L .14 -.013 L .29 -.063 L .075 -.076 L -.025 -.088 L -.062 -.088 L .126 -.114 L .037 -.063 L -.012 -.088 L -.114 -.113 L .051 -.101 L -.088 -.151 L -.063 -.101 L .202 -.151 L .239 -.025 L .126 -.088 L .113 .025 L .013 .088 L -.013 .214 L .063 .013 L .113 0 L 96.92 V -.013 -.063 L .101 .038 L .063 .051 L .025 -.076 L .075 -.038 L .139 -.012 L 0 .075 L .089 .063 L .075 0 L .126 .164 L .076 -.076 L .075 -.076 L .013 -.05 L .101 -.025 L .177 0 L -.037 .189 L .176 .025 L .038 -.038 L .038 -.038 L .139 .013 L .227 0 L .038 -.025 L .075 -.076 L -.126 -.013 L -.164 -.126 L -.101 -.051 L -.075 -.05 L .013 -.038 L .101 -.063 L -.025 -.113 L .038 -.101 L -.013 -.126 L -.051 -.139 L -.101 -.063 L -.177 -.076 L -.075 0 L -.151 -.126 L -.151 -.063 L -.151 -.038 L .051 -.151 L .037 -.088 L -.037 -.051 L -.127 .038 L -.062 -.114 L .113 -.038 L -.013 -.189 L .089 -.075 L -.025 -.101 L -.038 -.088 L -.113 0 L -.102 .05 L -.088 .051 L -.113 -.088 L -.089 -.101 L -.188 -.101 L -.139 -.025 L -.102 -.139 L -.05 -.139 L .177 -.139 L 0 -.189 L .024 -.114 L .051 -.05 L -.126 -.063 L .164 -.151 L -.113 -.025 L -.076 -.063 L -.062 -.126 L -.14 -.013 L -.062 .101 L -.126 -.025 L -.215 -.025 L -.126 -.189 L -.05 -.189 L -.417 -.075 L -.277 .012 L -.062 .051 L -.076 .101 L -.062 -.05 L 0 -.076 L -.089 -.025 L -.101 .038 L .038 -.05 L .088 -.101 L -.025 -.063 L -.113 0 L -.177 .038 L -.126 -.025 L -.101 .013 L -.076 -.076 L -.05 -.063 L -.101 -.063 L -.151 -.013 L -.139 -.05 L -.14 -.126 L -.214 -.088 L -.038 -.013 L -.126 .025 L -.05 .025 L -.114 -.051 L -.088 -.025 L -.139 .025 L -.177 .051 L -.177 -.025 L -.062 .038 L -.126 .114 L -.202 0 L -.265 -.038 L -.126 .051 L -.315 -.114 L -.088 .101 L .012 .113 L -.126 0 L -.075 -.063 L -.126 .114 L -.06 .052 L -.634 .08 L -.151 .311 L -.278 .178 L -1.992 .191 L -.186 .215 L -.243 .119 L -.339 .06 L -.188 -.227 L -.327 .004 L -.025 -.231 L -.363 .045 L -1.115 -.066 L -.958 -.193 L -.241 .107 L -.787 -.121 L -.136 .085 L -.678 -.387 L -.554 -.2 L -.668 -.301 L -.166 .015 L 1.047 -1.471 L .653 .018 L -.349 -.383 L -.044 -.552 L .082 -.306 L 1.509 -1.218 L .599 -.398 L .286 -.181 L .429 -.013 L .255 -.24 L .009 -.314 L -.328 -.302 L .085 -.133 L .298 -.048 L -.316 -.193 L -.816 -.835 L .074 -.242 L -.161 -.175 L +660.044 89.132 N -.295 .31 L -.687 1.207 L -1.224 1.959 L -.381 .58 L .269 .836 L .051 .029 L .342 -.045 L .929 -.395 L .754 -.062 L .576 -.018 L .317 .085 L .431 .416 L .292 .07 L 1.191 -.786 L .438 -.002 L .928 .212 L .538 .199 L .797 .5 L .879 .99 L .599 .501 L .048 .273 L -.107 .217 L -.414 .218 L -.464 -.127 L -1.074 -.008 L -.432 -.099 L -.854 .033 L -.937 .221 L -.539 .146 L -.831 .278 L -.353 .189 L -.483 -.127 L -.464 .045 L -.47 .204 L -.363 .333 L -.312 .82 L -.241 .216 L -.347 .188 L -.638 .248 L -.896 .134 L -.624 -.054 L -.438 -.012 L -.224 -.013 L -1.192 .91 L -.742 .433 L -.744 .047 L -.982 .005 L -.592 -.125 L -.668 -.382 L -.718 -.154 L -.316 .073 L -.457 .231 L -.539 .589 L -.214 .401 L .003 .343 L .389 .569 L .599 .411 L .188 .228 L -.123 .271 L -.326 .259 L -1.265 .292 L -.67 .389 L -1.111 1.046 L -.265 .172 L -1.941 .737 L -.651 .061 L -.987 -.08 L -1.514 .065 L -1.339 .007 L -1.204 .349 L -.816 .289 L -.736 .274 L -.303 .101 L -1.44 .534 L -.686 .289 L -.481 .017 L -.433 -.197 L -.253 -.297 L -.61 -.067 L -.663 .061 L -.929 -.123 L -1.599 -.433 L -1.006 -.365 L -.815 -.551 L -.521 -.168 L -1.69 -.119 L -1.164 -.022 L -.937 -.023 L -2.861 .059 L -1.165 -.022 L -.802 -.109 L -1.241 -.207 L -1.979 -.018 L -.444 -.254 L -.467 -.439 L -1.571 -2.161 L -.105 -.542 L -.744 -.096 L -.839 -.31 L -1.645 -.806 L -.632 -.268 L -.998 -.224 L -.668 -.083 L -.995 -.038 L -1.505 -.021 L -1.062 -.181 L -.724 -.312 L -.233 -.229 L -.105 -.43 L .035 -.129 L .369 -.347 L .214 -.389 L .237 -.75 L .215 -.447 L -.401 -.66 L -1.07 -1.451 L -.568 -.618 L -.354 -.143 L -.633 -.144 L -.731 -.167 L -.614 -.069 L -.834 -.415 L -1.301 -.745 L -.371 -.433 L -.24 -.563 L -.131 -.405 L -.062 -.145 L .154 -.044 L .799 -.425 L .599 -.207 L 1.387 -.08 L .603 -.148 L .727 -.381 L .017 -.012 L .971 -.692 L .787 -.398 L 1.143 -.341 L 1.512 -.476 L .84 -.18 L .953 .097 L .932 .156 L 1.842 .122 L .831 .083 L .694 .755 L .393 .406 L .699 .113 L 1.458 -.008 L .719 .083 L .85 -.004 L .875 .068 L .312 .114 L .576 .186 L .562 -.018 L .755 -.28 L .31 -.162 L .744 -.572 L .163 -.526 L -.116 -.204 L -.396 -.304 L -.409 -.86 L .098 -.293 L .905 -.839 L 1.269 -.96 L .84 .201 L 1.028 .098 L 1.036 .185 L 1.748 .328 L .702 .231 L .989 .317 L .767 .143 L .145 .204 L .004 .541 L .182 .481 L .408 .451 L .421 .333 L 1.643 .531 L .673 .113 L 2.48 -.538 L .796 -.077 L 1.172 .037 L 1.423 .022 L .769 .229 L 1.333 .75 L .623 .331 L 1.132 .313 L .812 .373 L 1.318 .254 L .905 .241 L .984 .082 L .739 .039 L 1.602 -.11 L 1.018 -.063 L .532 -.075 L .867 -.106 L 1.147 -.136 L .526 -.163 L .604 -.264 L .447 -.394 L .755 -.498 L 1.165 -.487 L .333 -.002 L .609 -.047 L .74 .156 L .751 .506 L .34 .129 L .86 .169 L 1.228 -.297 L .622 -.018 L .431 .168 L +406.183 86.551 N 1.051 -.494 L .485 -.089 L .574 .087 L .465 -.016 L .209 -.147 L .477 .098 L .407 .042 L .52 -.034 L -.025 -.157 L .307 .012 L .307 0 L .267 -.182 L .313 .242 L .173 -.121 L .228 .061 L .292 .375 L .535 -.109 L .754 .375 L -.11 .423 L -.172 .097 L .001 .338 L .672 -.024 L .344 .177 L .282 .365 L .038 .468 L -.422 .376 L -.225 -.072 L -.142 .08 L -.245 .147 L -.213 .322 L .017 .327 L .31 .204 L -.136 .348 L -.079 -.114 L -.694 .174 L -.127 -.228 L -.371 -.204 L -.341 -.192 L -.529 -.048 L .039 -.228 L -.146 -.18 L .119 -.373 L -.245 .072 L -.193 .313 L -.446 .035 L -.406 .075 L -.285 -.122 L .072 -.198 L -.091 -.175 L .159 -.241 L -.375 -.168 L -.576 -.048 L -.259 .012 L -.159 -.301 L -.518 .012 L -.194 -.133 L -.202 -.458 L -.153 -.17 L -.41 .208 L -.141 .071 L -.266 -.127 L -.311 -.335 L -.208 -.447 L +438.22 91.952 N .039 -.044 L .065 -.105 L .014 -.131 L .092 -.066 L .146 -.119 L .026 -.04 L .171 -.053 L .093 -.026 L .092 .053 L .132 .053 L .158 0 L .065 -.026 L .093 0 L .065 .026 L .065 .026 L .093 -.026 L .145 -.04 L .132 0 L .118 -.053 L .079 -.053 L .066 -.026 L .105 -.026 L .039 0 L .053 -.079 L .04 -.092 L .079 -.079 L .092 .026 L .105 -.04 L .145 -.066 L .053 -.105 L .053 -.079 L .026 -.132 L .026 -.092 L .053 -.092 L .118 -.013 L .105 -.013 L .132 -.079 L .119 -.053 L .118 -.092 L .053 -.079 L .132 -.066 L .065 -.04 L 442 89.998 l .145 .013 L .105 .026 L .066 -.04 L .065 -.066 L .071 .012 L .285 .041 L .03 .228 L .43 -.048 L .183 -.24 L .193 .016 L .062 -.112 L .261 -.024 L .194 .24 L .073 .169 L .331 -.025 L .066 .18 L -.026 .083 L .003 .204 L .389 -.083 L .18 .12 L .149 -.135 L .104 -.177 L .558 -.204 L .168 .056 L .483 -.046 L .46 .254 L .373 -.18 L .073 -.137 L .508 .041 L .561 -.076 L .129 .13 L .703 .186 L .104 .216 L .424 .101 L .831 .33 L -1.047 1.471 L -.629 .076 L -.437 -.143 L -.534 -.359 L -1.062 .035 L -.717 .047 L -1.024 .759 L 444.857 93 l -.59 -.072 L -.499 .061 L -.761 .134 L -.255 .001 L -.334 .568 L -1.651 -.036 L -.414 -.027 L -.617 -.17 L -.399 -.172 L -.245 .146 L -.761 -.547 L -.155 -.26 L .097 -.581 L -.053 -.093 L +442.391 98.111 N -.589 .203 L -.433 .031 L -.668 .047 L -.58 -.098 L -1.116 -.671 L -1.412 -.612 L -.215 -.197 L -.364 -.333 L -.304 -.59 L .346 -.299 L .154 -.294 L -.204 -.188 L .04 -.375 L .409 -.062 L .157 -.206 L -.136 -.196 L -.452 -.063 L .223 -.197 L .325 0 L .164 .134 L .701 -.054 L .019 -.367 L .636 -.291 L .245 -.146 L .399 .172 L .617 .17 L .414 .027 L 1.651 .036 L .334 -.568 L .255 -.001 L .761 -.134 L .499 -.061 L .59 .072 L .427 -.063 L 1.024 -.759 L .717 -.047 L 1.062 -.035 L .534 .359 L .437 .143 L .629 -.076 L .166 -.015 L .668 .301 L .554 .2 L .678 .387 L -.45 .338 L -1.125 .267 L -.581 .408 L -.968 1.451 L -.63 .84 L -.753 .567 L -.361 .16 L -.724 .047 L -.264 .103 L -.176 -.002 L -.907 -.067 L -.889 .077 L -1.535 .529 L +459.717 92.836 N .06 -.052 L .126 -.114 L .075 .063 L .126 0 L -.012 -.113 L .088 -.101 L .315 .114 L .126 -.051 L .265 .038 L .202 0 L .126 -.114 L .062 -.038 L .177 .025 L .177 -.051 L .139 -.025 L .088 .025 L .114 .051 L .05 -.025 L .126 -.025 L .038 .013 L .214 .088 L .14 .126 L .139 .05 L .151 .013 L .101 .063 L .05 .063 L .076 .076 L .101 -.013 L .126 .025 L .177 -.038 L .113 0 L .025 .063 L -.088 .101 L -.038 .05 L .101 -.038 L .089 .025 L 0 .076 L .062 .05 L .076 -.101 L .062 -.051 L .277 -.012 L .417 .075 L .05 .189 L .126 .189 L .215 .025 L .126 .025 L .062 -.101 L .14 .013 L .062 .126 L .076 .063 L .113 .025 L -.164 .151 L .126 .063 L -.051 .05 L -.024 .114 L 0 .189 L -.177 .139 L .05 .139 L .102 .139 L .139 .025 L .188 .101 L .089 .101 L .113 .088 L .088 -.051 L .102 -.05 L .113 0 L .038 .088 L .025 .101 L -.089 .075 L .013 .189 L -.113 .038 L .062 .114 L .127 -.038 L .037 .051 L -.037 .088 L -.051 .151 L .151 .038 L .151 .063 L .151 .126 L .075 0 L .177 .076 L .101 .063 L .051 .139 L .013 .126 L -.038 .101 L .025 .113 L -.101 .063 L -.013 .038 L .075 .05 L .101 .051 L .164 .126 L .126 .013 L -.075 .076 L -.038 .025 L -.227 0 L -.139 -.013 L -.038 .038 L -.038 .038 L -.176 -.025 L .037 -.189 L -.177 0 L -.101 .025 L -.013 .05 L -.075 .076 L -.076 .076 L -.126 -.164 L -.075 0 L -.089 -.063 L 0 -.075 L -.139 .012 L -.075 .038 L -.025 .076 L -.063 -.051 L -.101 -.038 L .013 .063 L 0 .088 L -.113 0 L -.063 -.013 L .013 -.214 L -.013 -.088 L -.113 -.025 L -.126 .088 L -.239 .025 L -.202 .151 L .063 .101 L .088 .151 L -.051 .101 L .114 .113 L .012 .088 L -.037 .063 L -.126 .114 L .062 .088 L .025 .088 L -.075 .076 L -.29 .063 L -.14 .013 L .013 .114 L -.024 .126 L -.089 .088 L -.088 .063 L -.089 .025 L -.075 .013 L -.051 .063 L -.126 .063 L -.025 .113 L .063 .113 L 0 .088 L -.088 .114 L -.189 0 L -.113 -.013 L -.126 -.013 L -.102 .025 L -.055 .077 L -.03 .004 L -.062 -.237 L -.218 -.106 L .16 -.071 L -.021 -.267 L -.104 -.561 L .323 -.978 L .027 -.404 L -.353 -.856 L -.604 -.286 L -1.037 -1.119 L 460.567 93 l -.626 -.191 L -.225 .028 L +445.722 97.573 N .176 .002 L .264 -.103 L .724 -.047 L .361 -.16 L .753 -.567 L .63 -.84 L .968 -1.451 L .581 -.408 L 1.125 -.267 L .45 -.338 L .136 -.085 L .787 .121 L .241 -.107 L .958 .193 L 1.115 .066 L .363 -.045 L .025 .231 L .327 -.004 L .188 .227 L .339 -.06 L .243 -.119 L .186 -.215 L 1.992 -.191 L .278 -.178 L .151 -.311 L .634 -.08 L .225 -.028 L 460.567 93 l .767 1.17 L 1.037 1.119 L .604 .286 L .353 .856 L -.027 .404 L -.323 .978 L .104 .561 L .021 .267 L -.16 .071 L .218 .106 L .062 .237 L .03 -.004 L .15 -.02 L .119 .249 L .398 .166 L .609 .047 L .033 -.189 L .457 0 L .665 -.261 L .706 .131 L .149 .079 L .062 .259 L -.293 .446 L -.27 .316 L -.436 .044 L -.382 .043 L -.382 .245 L -.515 .617 L -.252 .645 L -.096 .787 L -.044 .223 L -.671 -.12 L -1.346 -.336 L -.514 -.226 L -.295 -.042 L -.671 -.369 L -.562 -.04 L -.618 .218 L -1.904 .771 L -.38 .059 L -1.385 -.35 L -.3 -.013 L -.69 .261 L -.34 .031 L -1.151 -.395 L -.506 -.002 L -.771 .189 L -.266 .023 L -.048 -.189 L .234 -.318 L -.352 -.106 L -.392 -.204 L -.418 -.186 L -.146 -.33 L .32 -.201 L .351 .012 L -.114 -.13 L -.625 -.248 L -.253 .13 L -.215 .283 L -.147 .118 L -.414 -.239 L -.194 -.139 L -.594 -.059 L -.02 -.189 L -.234 0 L -.245 -.036 L -.052 -.165 L .178 -.094 L .271 -.071 L -.239 -.083 L -.183 -.059 L .124 -.146 L .19 -.127 L -.069 -.142 L -.306 -.118 L -.555 -.141 L -.712 -.471 L .058 -.088 L -.104 -.119 L .075 -.356 L -.202 -.036 L -.19 -.237 L -.569 -.178 L -.054 -.309 L +420.177 113.472 N -.274 -.042 L -.253 -.155 L -.367 -.325 L -.096 -.213 L .202 -.738 L .097 -.681 L -.046 -.583 L -.133 -.569 L -.503 -.44 L -.094 -.271 L .181 -.157 L .366 -.015 L .801 -.001 L .339 -.172 L .861 -.543 L .633 .625 L .451 .754 L -.014 .271 L -.204 .285 L -.145 .484 L .149 .894 L -.11 .525 L -.377 .695 L -.405 -.198 L -.52 .03 L -.143 .1 L -.149 .27 L -.248 .17 L h 433.783 118.446 m -.712 -.084 L -.902 -.607 L -.772 -.239 L -1.904 -.817 L -.833 -.126 L -.232 -.127 L -.173 -.283 L .139 -.34 L .328 -.34 L .264 -.1 L .629 .112 L .569 -.341 L .68 .424 L .403 .141 L .722 -.016 L 1.403 -.187 L 1.38 -.329 L .148 .085 L .043 .127 L -.112 .127 L -.536 .823 L -.153 .497 L .009 .382 L .411 .509 L -.179 .128 L -.43 .567 L -.188 .015 L h 431.244 98.829 m -.281 -.329 L -.242 -.027 L -.281 .196 L -.156 -.125 L -.47 -.071 L -.114 .32 L -.458 .054 L -1.001 .364 L .078 -.151 L -.452 .133 L -.063 .249 L -.157 .044 L -.01 .125 L .303 .08 L .021 .302 L .193 .119 L .253 .236 L -.104 .213 L -.449 .254 L .016 .272 L .143 .554 L .783 .814 L 2.008 .889 L .29 .357 L .134 .558 L .274 .557 L .395 .585 L .694 .57 L .254 .274 L .446 .195 L .041 .21 L .408 .167 L 1.17 .255 L 1.254 -.105 L .388 .141 L .024 .212 L -.465 .247 L -.258 .294 L .262 .213 L .954 .283 L 1.168 .411 L .829 .366 L 1.589 .739 L .058 .185 L .719 .458 L .31 .475 L -.198 .435 L -.152 .337 L -.455 -.281 L -.318 -.167 L -.109 -.486 L -.263 -.17 L -.512 -.099 L -.483 -.009 L -.439 -.236 L .086 -.217 L -.353 -.065 L -.301 .098 L -.232 .262 L -.259 .399 L -.273 .208 L .043 .271 L -.197 .303 L -.007 .298 L .76 .342 L .611 .271 L -.093 .314 L .03 .432 L .133 .142 L -.191 .238 L -.659 -.024 L -.41 .219 L -.202 .228 L .11 .595 L -.536 .303 L -.617 .866 L -.595 .048 L -.167 -.071 L -.184 -.14 L -.002 -.508 L .364 -.141 L .317 -.542 L -.236 -.184 L .361 -.249 L .361 .074 L .133 -.17 L -.077 -.34 L -.211 -.181 L -.206 -.924 L -.367 -.516 L -.15 -.607 L -.201 -.352 L -.334 .058 L -.187 .171 L -.899 -.496 L -.286 -.065 L .208 -.291 L -.092 -.398 L -.461 -.34 L -.909 .247 L .034 -.109 L .322 -.194 L -.276 -.27 L -.29 -.003 L -.42 .19 L -.242 -.512 L -.198 -.207 L -.124 -.228 L -.663 -.241 L -.505 -.027 L -.654 -.127 L -.745 -.355 L -.548 -.441 L -.959 -.612 L -1.036 -.826 L -.872 -.384 L -.805 -.67 L -.566 -.856 L -.434 -1.043 L -.347 -.443 L -.505 -.457 L -.483 -.243 L -1.188 -.341 L -.579 -.142 L -.5 .044 L -1.078 .647 L -.46 .359 L -.646 .173 L -.303 .043 L .146 -.469 L -.062 -.281 L -.849 .07 L -.754 -.391 L -.193 -.442 L .315 -.371 L .175 -.01 L -.135 -.331 L -.616 -.191 L -.352 -.358 L .437 -.186 L .183 .111 L .541 -.353 L .199 -.272 L -.43 -.192 L -.025 -.292 L -.532 -.344 L .624 -.301 L .599 .062 L .627 -.204 L .629 .168 L .275 -.16 L .349 -.432 L -.103 -.212 L .777 -.404 L .016 .415 L .534 .363 L .311 .071 L -.098 .182 L .385 .312 L .285 -.151 L .018 -.535 L .425 -.384 L -.019 -.333 L .371 -.081 L .143 .354 L .23 .142 L .216 -.03 L .071 -.122 L .469 -.05 L .244 .333 L .228 -.415 L -.244 -.131 L .081 -.273 L .283 -.091 L .176 .162 L .315 .051 L .038 -.192 L -.112 -.212 L .126 -.309 L .631 .171 L .597 .034 L .329 -.411 L .366 -.096 L .183 .083 L .445 -.11 L .301 .103 L .856 -.227 L .023 .363 L .318 .096 L .32 .391 L 1.311 .247 L .894 .082 L .478 .112 L .116 .199 L -.614 .303 L .098 .151 L .297 .002 L .187 .185 L -.367 .285 L .336 .089 L -.127 .361 L .36 .11 L .284 .198 L -.056 .214 L +430.73 96.731 N 1.04 .065 L .179 .107 L .612 -.009 L .287 .152 L .646 -.5 L .566 -.107 L .85 .08 L .298 -.196 L .89 .116 L -.082 -.393 L .693 -.157 L .304 .59 L .364 .333 L -.035 -.009 L -.1 -.073 L -.145 -.036 L -.172 0 L -.145 .009 L -.055 .063 L 0 .072 L .019 .09 L .009 .082 L -.063 .009 L -.136 -.009 L -.108 -.036 L -.091 .063 L -.045 .082 L -.081 .063 L -.082 .045 L -.081 .009 L -.163 .036 L -.117 .036 L -.108 .036 L -.055 .045 L -.153 -.009 L -.127 .072 L -.063 .054 L -.018 .082 L .036 .072 L .081 .054 L .063 .055 L .045 .045 L .019 .063 L .018 .09 L -.036 .108 L -.018 .063 L -.046 .1 L -.108 0 L -.081 -.009 L -.091 .027 L -.108 .009 L -.117 .054 L -.091 .018 L -.081 .027 L -.1 .045 L -.055 .063 L -.036 .027 L .055 .018 L .063 .009 L .026 .027 L .037 .072 L -.046 .063 L -.027 .009 L -.081 .027 L -.009 .045 L .045 .081 L 0 .072 L .045 .1 L -.054 .072 L -.063 -.018 L -.1 .045 L -.117 .018 L -.127 -.036 L -.063 -.027 L -.1 -.063 L -.099 0 L -.063 -.027 L -.118 -.045 L -.018 .045 L -.027 .045 L -.1 .027 L -.136 0 L -.054 -.045 L -.072 -.063 L -.127 -.018 L -.019 -.09 L -.026 -.018 L -.063 -.054 L -.055 -.027 L -.018 -.054 L -.01 -.054 L -.036 -.009 L -.063 .018 L -.036 .054 L -.009 .027 L -.054 .063 L -.019 .018 L -.018 .081 L -.063 .045 L -.046 .018 L -.062 .054 L -.036 .009 L -.254 0 L -.108 -.027 L -.108 .027 L -.145 .009 L -.1 -.009 L -.1 -.036 L -.045 -.019 L -.055 0 L 0 .037 L 0 .036 L -.045 .027 L -.045 .018 L -.136 -.009 L -.027 -.036 L -.108 .018 L -.019 .018 L -.136 .018 L -.063 .018 L -.126 .018 L -.272 -.063 L .428 -.077 L .113 -.16 L .056 -.214 L -.284 -.198 L -.36 -.11 L .127 -.361 L -.336 -.089 L .367 -.285 L -.187 -.185 L -.297 -.002 L -.098 -.151 L .614 -.303 L -.116 -.199 L +439.573 104.709 N -1.051 -.672 L -.185 -.222 L -.783 -.149 L -.203 -.159 L -.403 -.115 L -.683 .177 L -.326 -.486 L -1.112 -.627 L -.584 -.678 L .277 .007 L .608 .016 L -.583 -.221 L -.659 -.469 L -.183 -.407 L .086 -.452 L -.289 -.336 L -.646 -.418 L -.378 -.126 L -.258 .579 L -.142 .116 L .03 .15 L -.284 .106 L -.154 .248 L -.213 .053 L -.496 -.647 L -.063 -.286 L -.259 -.612 L .065 -.012 L .272 .063 L .126 -.018 L .063 -.018 L .136 -.018 L .019 -.018 L .108 -.018 L .027 .036 L .136 .009 L .045 -.018 L .045 -.027 L 0 -.036 L 0 -.037 L .055 0 L .045 .019 L .1 .036 L .1 .009 L .145 -.009 L .108 -.027 L .108 .027 L .254 0 L .036 -.009 L .062 -.054 L .046 -.018 L .063 -.045 L .018 -.081 L .019 -.018 L .054 -.063 L .009 -.027 L .036 -.054 L .063 -.018 L .036 .009 L .01 .054 L .018 .054 L .055 .027 L .063 .054 L .026 .018 L .019 .09 L .127 .018 L .072 .063 L .054 .045 L .136 0 L .1 -.027 L .027 -.045 L .018 -.045 L .118 .045 L .063 .027 L .099 0 L .1 .063 L .063 .027 L .127 .036 L .117 -.018 L .1 -.045 L .063 .018 L .054 -.072 L -.045 -.1 L 0 -.072 L -.045 -.081 L .009 -.045 L .081 -.027 L .027 -.009 L .046 -.063 L -.037 -.072 L -.026 -.027 L -.063 -.009 L -.055 -.018 L .036 -.027 L .055 -.063 L .1 -.045 L .081 -.027 L .091 -.018 L .117 -.054 L .108 -.009 L .091 -.027 L .081 .009 L .108 0 L .046 -.1 L .018 -.063 L .036 -.108 L -.018 -.09 L -.019 -.063 L -.045 -.045 L -.063 -.055 L -.081 -.054 L -.036 -.072 L .018 -.082 L .063 -.054 L .127 -.072 L .153 .009 L .055 -.045 L .108 -.036 L .117 -.036 L .163 -.036 L .081 -.009 L .082 -.045 L .081 -.063 L .045 -.082 L .091 -.063 L .108 .036 L .136 .009 L .063 -.009 L -.009 -.082 L -.019 -.09 L 0 -.072 L .055 -.063 L .145 -.009 L .172 0 L .145 .036 L .1 .073 L .035 .009 L .215 .197 L 1.412 .612 L 1.116 .671 L .58 .098 L .668 -.047 L .433 -.031 L .589 -.203 L .201 .142 L .056 .089 L .022 .112 L -.022 .078 L .045 .044 L .011 .067 L -.078 .056 L -.011 .146 L .078 .067 L .145 -.034 L .101 .034 L .045 .089 L -.078 .011 L -.056 -.022 L -.022 .078 L .033 .1 L -.045 .034 L -.044 .022 L .066 .111 L .168 -.022 L .033 .078 L .123 .1 L .122 0 L .101 0 L .09 .078 L .122 .011 L .134 0 L .012 .078 L -.033 .056 L -.135 -.011 L -.089 -.034 L -.067 .022 L -.078 -.011 L -.066 -.045 L -.056 -.011 L -.045 .011 L .033 .067 L -.101 .089 L -.078 0 L 0 .156 L .045 .067 L -.033 .078 L .022 .078 L .011 .078 L -.089 .033 L -.09 -.033 L -.056 .067 L .078 .089 L -.078 .011 L -.189 .022 L -.201 -.022 L -.145 -.123 L .056 -.101 L -.045 -.089 L -.123 -.011 L -.022 -.112 L -.145 -.056 L -.146 -.045 L -.101 .089 L -.1 -.011 L -.156 -.078 L -.067 -.022 L -.146 0 L -.156 -.045 L -.111 .067 L -.134 .045 L -.134 -.045 L -.111 -.067 L -.112 0 L -.122 .089 L -.168 .078 L -.156 -.067 L -.268 -.089 L -.179 .011 L -.156 .011 L -.189 -.056 L -.168 -.011 L -.156 -.089 L -.089 .078 L -.111 .022 L -.057 -.056 L -.234 -.078 L -.156 -.056 L -.134 -.045 L -.089 -.011 L -.134 .123 L -.112 -.011 L -.223 -.022 L -.168 -.033 L -.212 .022 L -.101 .111 L -.145 .145 L -.123 .201 L -.201 -.022 L -.256 -.134 L -.156 -.19 L -.101 -.111 L -.312 -.034 L -.123 .044 L -.089 .179 L -.045 .167 L .045 .134 L 0 .078 L .033 .212 L -.123 .067 L .022 .089 L .134 .078 L .09 .089 L .122 .034 L .101 .033 L .179 .179 L .146 .234 L .089 .134 L .022 .123 L .156 .111 L -.078 .056 L -.012 .1 L .022 .146 L .168 -.011 L .089 .111 L .056 .123 L .112 .111 L .167 .045 L .167 .033 L .369 .357 L .021 .167 L .078 .044 L .213 .078 L .379 .357 L .224 .123 L .223 .067 L .101 .056 L 0 .112 L .078 .279 L .201 .078 L .189 .167 L .146 .112 L .245 .123 L .067 .212 L -.284 .083 L h 439.792 104.833 m .132 -.118 L .134 .011 L .123 .034 L .045 .078 L .066 .089 L .146 .089 L .179 .078 L .212 .011 L .312 .257 L .045 .067 L .134 -.033 L .123 .022 L .089 .034 L .062 .063 L .005 .004 L -.022 .089 L .033 .078 L .082 .072 L .029 .092 L -.002 .1 L -.589 -.367 L -.549 -.371 L -.789 -.378 L +451.009 101.725 N -.328 .346 L -.383 .374 L -.18 .302 L .056 .271 L 1.326 1.122 L .028 .2 L -.302 .302 L -.762 .333 L -.246 .301 L -.008 .514 L -.013 .208 L -.058 -.017 L -.072 .029 L -.16 .022 L -.145 .021 L -.116 .022 L -.058 .015 L -.102 -.051 L -.087 .043 L -.088 .021 L -.102 -.043 L -.064 -.021 L -.131 .116 L -.087 .08 L -.152 -.015 L -.196 -.007 L -.064 .007 L -.175 -.043 L -.152 .087 L -.151 .102 L -.109 .058 L .059 .072 L -.029 .058 L -.116 0 L -.094 -.109 L -.131 -.058 L -.087 -.073 L -.08 .065 L -.116 .058 L -.246 .058 L -.225 .058 L -.088 .058 L -.058 .167 L .029 .13 L -.029 .072 L -.072 .087 L -.188 0 L -.14 -.049 L -.018 -.109 L -.733 -.866 L -.382 -.369 L -.058 -.004 L .109 -.286 L 0 -.067 L -.078 -.067 L -.101 0 L -.056 -.056 L .022 -.089 L .111 -.033 L .146 .011 L .167 .033 L .057 -.033 L .021 -.067 L .09 -.044 L .134 -.022 L .089 -.011 L -.011 -.089 L -.101 -.101 L -.167 -.067 L -.134 -.045 L -.057 -.044 L -.111 .022 L -.078 -.045 L -.033 -.067 L -.123 -.101 L -.078 -.1 L -.066 -.022 L -.067 .044 L -.078 -.011 L -.101 -.056 L -.279 -.078 L -.078 -.022 L -.056 -.033 L -.167 -.134 L -.101 -.146 L -.111 -.111 L -.168 -.078 L -.156 -.101 L -.223 -.056 L 0 -.101 L .179 -.101 L .089 -.111 L .078 -.011 L .067 .034 L .078 .044 L .1 .022 L .045 -.022 L .012 -.134 L .011 -.19 L -.134 -.145 L -.179 -.19 L -.212 -.134 L -.101 -.145 L .101 .022 L .101 .011 L .145 .056 L .224 .044 L .134 -.078 L .089 -.056 L .067 -.078 L -.089 -.044 L -.135 -.022 L -.089 -.089 L -.123 -.078 L -.156 -.089 L -.033 -.101 L -.045 -.1 L -.212 .011 L -.167 -.056 L -.078 -.1 L -.022 -.134 L .078 -.067 L 0 -.089 L -.033 -.1 L .056 -.056 L .066 -.078 L .156 -.156 L .156 -.223 L .034 -.167 L .056 -.1 L -.022 -.067 L -.123 -.022 L -.179 -.011 L -.156 0 L -.212 .112 L -.078 -.089 L .056 -.067 L .09 .033 L .089 -.033 L -.011 -.078 L -.022 -.078 L .033 -.078 L -.045 -.067 L 0 -.156 L .078 0 L .101 -.089 L -.033 -.067 L .045 -.011 L .056 .011 L .066 .045 L .078 .011 L .067 -.022 L .089 .034 L .135 .011 L .033 -.056 L -.012 -.078 L -.134 0 L -.122 -.011 L -.09 -.078 L -.101 0 L -.122 0 L -.123 -.1 L -.033 -.078 L -.168 .022 L -.066 -.111 L .044 -.022 L .045 -.034 L -.033 -.1 L .022 -.078 L .056 .022 L .078 -.011 L -.045 -.089 L -.101 -.034 L -.145 .034 L -.078 -.067 L .011 -.146 L .078 -.056 L -.011 -.067 L -.045 -.044 L .022 -.078 L -.022 -.112 L -.056 -.089 L -.201 -.142 L 1.535 -.529 L .889 -.077 L .907 .067 L .054 .309 L .569 .178 L .19 .237 L .202 .036 L -.075 .356 L .104 .119 L -.058 .088 L .712 .471 L .555 .141 L .306 .118 L .069 .142 L -.19 .127 L -.124 .146 L .183 .059 L .239 .083 L -.271 .071 L -.178 .094 L .052 .165 L .245 .036 L .234 0 L .02 .189 L .594 .059 L .194 .139 L .414 .239 L .147 -.118 L .215 -.283 L .253 -.13 L .625 .248 L .114 .13 L -.351 -.012 L -.32 .201 L .146 .33 L .418 .186 L +551.198 117.997 N -.351 -.48 L -.236 -.126 L -1.217 -.05 L -.646 -.011 L -.096 -.016 L .091 -.726 L -.062 -.503 L .157 -.251 L .062 -.22 L -.503 -.094 L -.534 -.283 L -.566 -.189 L -.471 .063 L -.378 -.251 L -1.132 -.597 L -.565 -.22 L -.943 -.597 L -.314 .063 L -1.006 -.503 L -.377 -.44 L -1.194 -.597 L -1.384 -.975 L 0 -.283 L -.188 -.44 L -.283 -.188 L -.408 -.597 L -.126 -.566 L -.22 -.377 L -.881 -.251 L -.188 .157 L -.439 .063 L -.535 -.126 L -.439 .032 L -.503 .094 L -.314 -.157 L -.691 -.314 L .094 -.22 L .157 -.188 L -.188 -.22 L .031 -.188 L .188 -.157 L -.439 -.283 L 0 -.22 L -.032 -.22 L -.251 -.22 L -.534 -.094 L -.692 -.095 L -.22 -.314 L -.346 -.032 L -.629 -.377 L -.472 -.095 L -.188 .063 L -.565 .157 L .251 .251 L .188 .377 L -.597 -.283 L -.283 0 L -.126 .126 L -.22 .346 L -.283 .126 L -.629 0 L -.503 .251 L -.503 .409 L -.062 .628 L .314 .409 L -.126 .314 L -1.383 .032 L -1.03 -.063 L .056 -8.174 L 5.658 -1.289 L 5.722 2.986 L 2.012 1.666 L 2.578 -.346 L 2.767 .188 L 1.1 -.409 L .724 .723 L .597 .22 L .66 1.006 L .66 -.314 L -.031 1.038 L -.188 .409 L .031 .754 L 1.006 0 L .221 .817 L .346 1.069 L .503 .063 L .691 -.032 L 1.006 -.094 L .346 0 L .44 .314 L .062 .283 L -.062 .283 L .44 .346 L .66 0 L .125 -.188 L -.157 -.409 L .504 -.44 L .439 -.188 L .221 -.472 L .282 -.188 L .943 -.377 L .755 -.189 L .534 -.471 L .346 -.283 L .22 -.063 L .283 .126 L .377 -.377 L .322 -.031 L .349 -.126 L .441 .246 L -.368 .172 L -.368 .171 L -.221 .049 L -.073 .196 L -.295 .049 L -.294 .172 L -.196 .147 L -.441 .295 L -.172 .098 L -.024 .123 L .294 .049 L .295 .074 L .146 .123 L .418 -.147 L .098 .221 L .172 .221 L .368 .27 L .589 0 L .393 0 L .049 -.393 L .221 .049 L .196 -.196 L .024 -.245 L .196 .098 L .196 .172 L .172 .294 L .049 .147 L .393 .024 L .147 -.024 L .073 .246 L .025 .098 L .343 -.025 L .319 .147 L .245 .196 L .516 .074 L .466 .024 L .172 .123 L -.49 .221 L -.197 .147 L -.221 .147 L -.49 -.024 L -.245 -.049 L .049 .171 L 0 .147 L -.319 0 L -.172 .049 L -.343 .196 L -.221 .196 L -.271 .049 L -.221 .196 L -.245 -.147 L -.319 -.098 L -.294 -.098 L -.221 .025 L -.246 .073 L -.318 -.073 L -.042 .098 L -.345 -.005 L -.409 .031 L -.188 -.283 L -.251 -.063 L -.126 -.188 L .251 -.126 L .409 -.346 L .188 -.22 L -.252 -.251 L -.439 -.377 L -.221 .251 L -.471 .346 L -.692 .188 L -.22 .157 L -.252 -.22 L -.22 -.157 L -.346 0 L .031 .22 L -.283 .314 L .189 .314 L -.032 .346 L -.062 .126 L -.472 -.095 L -.565 .095 L -.503 .094 L .251 .125 L .534 -.031 L .126 .094 L -.251 .063 L -.188 .063 L -.032 .346 L -.188 0 L -.251 .157 L -.063 .409 L -.282 .188 L -1.069 -.094 L -.629 -.126 L -.472 .283 L -.125 .471 L .251 .283 L .346 .188 L .157 .157 L .44 .032 L .346 0 L .126 .22 L -.126 .22 L -.031 .472 L .126 .409 L .471 .314 L .126 .283 L -.157 .22 L -.503 .346 L -.283 .503 L -.377 .377 L .063 .377 L -.375 .843 L +439.792 104.833 N -.113 -.054 L -.105 -.07 L .284 -.083 L -.067 -.212 L -.245 -.123 L -.146 -.112 L -.189 -.167 L -.201 -.078 L -.078 -.279 L 0 -.112 L -.101 -.056 L -.223 -.067 L -.224 -.123 L -.379 -.357 L -.213 -.078 L -.078 -.044 L -.021 -.167 L -.369 -.357 L -.167 -.033 L -.167 -.045 L -.112 -.111 L -.056 -.123 L -.089 -.111 L -.168 .011 L -.022 -.146 L .012 -.1 L .078 -.056 L -.156 -.111 L -.022 -.123 L -.089 -.134 L -.146 -.234 L -.179 -.179 L -.101 -.033 L -.122 -.034 L -.09 -.089 L -.134 -.078 L -.022 -.089 L .123 -.067 L -.033 -.212 L 0 -.078 L -.045 -.134 L .045 -.167 L .089 -.179 L .123 -.044 L .312 .034 L .101 .111 L .156 .19 L .256 .134 L .201 .022 L .123 -.201 L .145 -.145 L .101 -.111 L .212 -.022 L .168 .033 L .223 .022 L .112 .011 L .134 -.123 L .089 .011 L .134 .045 L .156 .056 L .234 .078 L .057 .056 L .111 -.022 L .089 -.078 L .156 .089 L .168 .011 L .189 .056 L .156 -.011 L .179 -.011 L .268 .089 L .156 .067 L .168 -.078 L .122 -.089 L .112 0 L .111 .067 L .134 .045 L .134 -.045 L .111 -.067 L .156 .045 L .146 0 L .067 .022 L .156 .078 L .1 .011 L .101 -.089 L .146 .045 L .145 .056 L .022 .112 L .123 .011 L .045 .089 L -.056 .101 L .145 .123 L .201 .022 L .189 -.022 L .078 -.011 L .212 -.112 L .156 0 L .179 .011 L .123 .022 L .022 .067 L -.056 .1 L -.034 .167 L -.156 .223 L -.156 .156 L -.066 .078 L -.056 .056 L .033 .1 L 0 .089 L -.078 .067 L .022 .134 L .078 .1 L .167 .056 L .212 -.011 L .045 .1 L .033 .101 L .156 .089 L .123 .078 L .089 .089 L .135 .022 L .089 .044 L -.067 .078 L -.089 .056 L -.134 .078 L -.224 -.044 L -.145 -.056 L -.101 -.011 L -.101 -.022 L .101 .145 L .212 .134 L .179 .19 L .134 .145 L -.011 .19 L -.012 .134 L -.045 .022 L -.1 -.022 L -.078 -.044 L -.067 -.034 L -.078 .011 L -.089 .111 L -.179 .101 L -.056 -.033 L -.156 .056 L -.112 -.022 L -.066 -.044 L -.112 .033 L -.078 .056 L .012 .078 L .089 .1 L .123 .167 L .056 .101 L -.056 .101 L -.111 0 L -.09 -.056 L -.056 -.089 L -.056 -.044 L -.123 -.011 L -.122 .056 L -.168 .078 L -.045 .101 L -.044 .089 L -.112 .101 L .034 .089 L .011 .1 L 442 104.458 l -.134 .011 L -.111 .022 L -.101 .089 L -.012 .134 L .012 .112 L .011 .145 L .012 .044 L .066 .112 L .078 .089 L .045 .101 L -.09 .089 L -.183 .108 L -.062 -.063 L -.089 -.034 L -.123 -.022 L -.134 .033 L -.045 -.067 L -.312 -.257 L -.212 -.011 L -.179 -.078 L -.146 -.089 L -.066 -.089 L -.045 -.078 L -.123 -.034 L -.134 -.011 L -.132 .118 L +450.198 105.998 N .013 -.208 L .008 -.514 L .246 -.301 L .762 -.333 L .302 -.302 L -.028 -.2 L -1.326 -1.122 L -.056 -.271 L .18 -.302 L .383 -.374 L .328 -.346 L .392 .204 L .352 .106 L -.234 .318 L .048 .189 L .266 -.023 L .771 -.189 L .506 .002 L 1.151 .395 L .34 -.031 L .69 -.261 L .3 .013 L 1.385 .35 L .38 -.059 L 1.904 -.771 L .618 -.218 L .562 .04 L .671 .369 L .295 .042 L .514 .226 L 1.346 .336 L .671 .12 L -.066 .335 L -.077 .258 L -.261 .086 L -.313 -.028 L -.339 .129 L -.327 .73 L -.039 .586 L -.075 .143 L -.404 .115 L -.338 .372 L -.017 .257 L .252 -.036 L .255 .224 L .033 .154 L .391 .375 L .01 .223 L -1.333 -.005 L -.527 -.111 L -.497 .045 L -.629 .374 L -.498 .445 L -.363 -.026 L -.344 .216 L .097 .327 L -.086 .257 L -1.117 .277 L -.388 .031 L -.619 -.21 L -1.473 -.505 L -.584 .06 L -.799 .261 L -1.855 .195 L -.09 .029 L -.047 -.199 L .104 -.3 L .006 -.499 L -.225 -.469 L -.358 -.383 L -.666 -.296 L -.134 -.213 L .007 -.106 L +381.009 107 N -.121 -.278 L .138 -.4 L .343 -.5 L -.358 -.471 L -.304 -.428 L -.514 -.07 L -.164 -.1 L -.053 -.329 L .163 -.243 L .409 -.272 L .365 -.101 L .563 -.03 L .634 -.03 L .133 -.172 L .068 -.415 L .535 -.273 L .763 .042 L 1.078 .37 L .763 .07 L .756 -.087 L .577 -.173 L .508 -.144 L .354 -.001 L .629 .285 L .694 .156 L .939 .084 L 1.538 .04 L .583 .027 L .957 .141 L .491 -.158 L .419 -.229 L .531 .027 L .891 .47 L .67 -.016 L .335 .062 L .472 .243 L .469 -.03 L .058 .122 L -.205 .243 L .094 .106 L .15 .03 L .112 -.106 L 1.088 .334 L .15 -.061 L .507 .395 L .056 -.076 L .262 .03 L .131 -.076 L .431 .152 L .028 .038 L .084 .114 L .767 -.03 L .037 .122 L .337 -.061 L .542 .015 L -.017 -.319 L .355 0 L 1.252 .304 L .091 .213 L .035 .289 L .187 .076 L .374 -.076 L .206 -.03 L .335 .091 L .036 .152 L .261 .015 L .395 -.167 L .427 .197 L .485 .015 L .039 -.136 L .75 -.137 L .334 .091 L -.001 .088 L -.001 .463 L .156 .1 L -.062 .485 L -1.112 .528 L -.95 .385 L -.267 .328 L -1.046 .198 L -.664 .116 L -.96 .301 L -.323 .326 L -.053 .2 L .261 .128 L -.088 .157 L -.628 .143 L -.594 .783 L -.886 .787 L -.096 .192 L -.18 .361 L -.245 .45 L .353 .827 L .072 .111 L .084 .13 L .648 .295 L .103 .185 L -.621 .327 L -.215 .105 L -.515 .252 L -.286 .479 L -.224 .085 L -.461 .926 L .155 .322 L -.257 .099 L -.992 .049 L -.581 .242 L -.425 .327 L -.274 .757 L -.663 .496 L -.258 -.213 L -.599 .028 L -.305 .27 L -.342 0 L -.121 -.113 L -3.282 .042 L -.69 .524 L -1.021 .17 L -.35 .382 L -.028 .283 L -.083 .085 L -.073 -.212 L -.068 -.014 L .005 .241 L -.389 .127 L -.421 -.142 L -.788 -.467 L -.224 -.382 L .036 -.262 L -.345 -.113 L -.125 -.213 L .175 -.163 L -.468 -.51 L -.702 -.284 L 385 117.498 l -.484 -.135 L -.586 .039 L .008 -.018 L .304 -.951 L .242 -.37 L .884 -.643 L -.408 -.31 L -.812 -.123 L .17 -.455 L .506 -.655 L .347 -.371 L -.163 -.198 L -.455 -.551 L -.488 -.494 L .288 -.129 L .482 -.045 L .458 -.229 L .043 -.199 L -.057 -.938 L .132 -.983 L -.072 -.456 L .051 -.442 L .084 -.072 L 1.234 -.506 L .288 -.216 L -.062 -.242 L -.842 -.495 L -.15 -.242 L -.272 -.227 L -.335 -.055 L -.531 .26 L 382.981 107 l -.531 -.439 L -.55 .188 L 381.009 107 l +489.685 103.693 N .112 -.309 L .26 -.166 L .284 .047 L .07 .047 L .402 .023 L .449 .023 L .283 .095 L .284 .142 L .188 .094 L .189 .047 L .331 0 L .213 0 L .212 .166 L .261 .095 L .307 .071 L .355 .047 L .307 0 L .426 -.095 L .544 0 L .401 .166 L .189 0 L .283 -.047 L .354 .166 L .095 .142 L .284 .213 L .52 .118 L .354 .071 L .236 .118 L .308 .119 L -.142 .118 L -.048 .118 L .261 .118 L .212 .071 L .261 -.118 L .283 0 L .166 -.166 L .094 -.095 L .213 -.071 L .354 0 L .261 .071 L .188 .142 L .142 -.166 L .095 -.071 L .118 0 L .236 .118 L .143 .094 L .212 0 L .189 .118 L .213 .166 L .378 0 L .354 .024 L .118 .142 L -.118 .189 L -.118 .307 L .354 .284 L .284 .166 L .26 .094 L .284 .047 L .236 -.023 L .236 .071 L .126 .189 L -.268 .189 L -.143 .142 L -.095 .071 L .143 .26 L .213 .307 L .614 .166 L .118 .213 L -.095 .331 L -.236 .095 L -.236 .047 L -.26 -.189 L -.143 -.071 L -.188 -.023 L -.284 .047 L -.638 -.189 L -.189 -.213 L -.331 -.189 L -.473 -.024 L -.236 0 L -.418 .308 L -.291 .094 L -.378 .047 L -.591 .095 L -.592 -.047 L -.401 .118 L -.426 .023 L -.308 .095 L -.307 -.024 L -.377 .108 L -.031 -.028 L -1.326 -1.018 L -.41 -.041 L -.761 .36 L -.226 .072 L -.491 -.068 L -1.212 -.082 L .083 -.065 L .322 -.585 L .032 -.143 L -.064 -.728 L -.331 -1.084 L -.206 -.399 L -.639 -.513 L -.341 -.128 L -.916 -.155 L -.679 -.271 L -.341 -.243 L +443.617 107.095 N -.065 -.035 L -.435 -.156 L -.017 -.15 L -.501 -.485 L -.848 -.3 L -.033 -.021 L .002 -.1 L -.029 -.092 L -.082 -.072 L -.033 -.078 L .022 -.089 L -.005 -.004 L .183 -.108 L .09 -.089 L -.045 -.101 L -.078 -.089 L -.066 -.112 L -.012 -.044 L -.011 -.145 L -.012 -.112 L .012 -.134 L .101 -.089 L .111 -.022 L .134 -.011 L .056 -.056 L -.011 -.1 L -.034 -.089 L .112 -.101 L .044 -.089 L .045 -.101 L .168 -.078 L .122 -.056 L .123 .011 L .056 .044 L .056 .089 L .09 .056 L .111 0 L .056 -.101 L -.056 -.101 L -.123 -.167 L -.089 -.1 L -.012 -.078 L .078 -.056 L .112 -.033 L .066 .044 L .112 .022 L .156 -.056 L .056 .033 L 0 .101 L .223 .056 L .156 .101 L .168 .078 L .111 .111 L .101 .146 L .167 .134 L .056 .033 L .078 .022 L .279 .078 L .101 .056 L .078 .011 L .067 -.044 L .066 .022 L .078 .1 L .123 .101 L .033 .067 L .078 .045 L .111 -.022 L .057 .044 L .134 .045 L .167 .067 L .101 .101 L .011 .089 L -.089 .011 L -.134 .022 L -.09 .044 L -.021 .067 L -.057 .033 L -.167 -.033 L -.146 -.011 L -.111 .033 L -.022 .089 L .056 .056 L .101 0 L .078 .067 L 0 .067 L -.109 .286 L -.361 -.022 L -.727 -.11 L -.273 .273 L -.279 .515 L .133 .427 L -.002 .342 L +558.52 110.652 N .042 -.098 L .318 .073 L .246 -.073 L .221 -.025 L .294 .098 L .319 .098 L .245 .147 L .221 -.196 L .271 -.049 L .221 -.196 L .343 -.196 L .172 -.049 L .319 0 L 0 -.147 L -.049 -.171 L .245 .049 L .49 .024 L .221 -.147 L .197 -.147 L .49 -.221 L -.172 -.123 L -.466 -.024 L -.516 -.074 L -.245 -.196 L -.319 -.147 L -.343 .025 L -.025 -.098 L -.073 -.246 L -.147 .024 L -.393 -.024 L -.049 -.147 L -.172 -.294 L -.196 -.172 L -.196 -.098 L -.024 .245 L -.196 .196 L -.221 -.049 L -.049 .393 L -.393 0 L -.589 0 L -.368 -.27 L -.172 -.221 L -.098 -.221 L -.418 .147 L -.146 -.123 L -.295 -.074 L -.294 -.049 L .024 -.123 L .172 -.098 L .441 -.295 L .196 -.147 L .294 -.172 L .295 -.049 L .073 -.196 L .221 -.049 L .368 -.171 L .368 -.172 L -.441 -.246 L -.349 .126 L -.044 -.273 L .393 -.442 L .318 -.368 L .736 -.123 L .663 -.098 L .883 .147 L .883 .245 L .688 .196 L .81 .123 L .344 .123 L -.024 -.442 L .245 -.736 L .466 -.368 L .688 -.123 L .589 .074 L .761 .27 L .735 .246 L .908 .196 L .54 .098 L .441 -.27 L .858 -.024 L .761 0 L .785 -.147 L .712 .221 L .662 .098 L 1.35 .024 L .662 -.074 L .981 .246 L .564 -.049 L .147 .344 L .27 .147 L .196 .27 L .663 0 L .466 .098 L .41 .375 L .031 .194 L -.051 .157 L -.325 .187 L -.97 .219 L -1.338 .349 L -.445 .145 L -.405 .301 L -.638 .701 L -.646 .345 L -.478 .102 L -.459 .017 L -1.248 -.235 L -.238 .03 L -.467 .472 L -.463 .784 L -.268 .243 L -.885 .132 L -.507 .145 L -.344 -.055 L -.183 -.567 L -.06 -.071 L -.359 .03 L -1.737 .734 L -1.422 .704 L -.274 .186 L -.129 .213 L -.139 .739 L -.196 -.073 L -.344 .098 L -.344 .171 L -.539 0 L -.663 -.073 L -.834 .221 L -.172 .147 L -.196 0 L -.172 -.319 L -.368 .024 L -.318 .172 L -.074 -.221 L -.049 -.172 L -.122 .024 L -.319 -.123 L -.049 -.147 L -.221 -.024 L -.442 .123 L -.343 .049 L .024 .221 L -.295 .049 L -.393 -.074 L -.073 -.196 L -.147 -.123 L -.368 -.098 L -.49 .147 L -.196 -.073 L -.688 .024 L -.564 0 L -.589 .024 L -.122 -.098 L -.049 -.147 L -.099 -.27 L .099 -.245 L .196 -.196 L .098 .221 L .196 -.074 L -.049 -.196 L .098 -.27 L .123 0 L .981 -.196 L .515 .147 L .516 .196 L .099 .172 L .196 0 L .024 -.246 L .441 -.196 L .302 -.147 L +685.343 114.455 N -.571 .678 L -.309 .115 L -.511 -.096 L -.579 -.068 L -.595 -.011 L -.315 .157 L -.633 .738 L -.283 .256 L -.235 .171 L -.268 -.206 L -.35 .34 L -.319 .199 L -.373 -.608 L -.398 -.112 L -.649 .78 L -.195 -.382 L -.232 -.254 L -.683 -.367 L -.169 -.453 L .095 -.312 L .429 -.411 L .754 -.229 L .056 -.269 L -.591 -.282 L .407 -.879 L .189 -.34 L -.199 -.269 L -.632 -.296 L -.139 0 L -.381 .029 L -.312 .143 L -.234 -.07 L -.52 -.368 L -.167 -.233 L .379 -.528 L .415 -.442 L .52 -.329 L 1.533 -.604 L 1.032 -.545 L .636 -.543 L .686 -1.027 L .386 -.13 L .448 -.017 L .273 .396 L .493 .253 L .508 .153 L .975 -.048 L .527 -.159 L -.046 -.113 L -.508 -.765 L .025 -.342 L .273 -.243 L .392 -.059 L .333 .126 L .452 .054 L .538 -.017 L .62 -.259 L .955 -.532 L .23 -.713 L .383 -.358 L .253 -.129 L .247 -.001 L .579 .68 L .298 .439 L .167 .393 L -1.356 .923 L -.408 .457 L -.112 .414 L .09 .427 L -.154 .456 L -.187 .868 L -.668 .115 L -.36 .229 L -.497 .385 L -.766 .641 L -.468 .214 L -.678 .03 L -.577 .199 L -.265 .228 L -.248 .312 L -.364 .893 L .284 .326 L 1.225 .847 L .419 .354 L +536.625 121.017 N -.078 -.028 L -.15 -.692 L -.01 -.565 L -.038 -.848 L -.185 -.211 L -.787 .075 L -.696 -.01 L -.655 -.506 L -1.803 -1.362 L -.597 -.336 L -.66 -.167 L -.5 -.054 L -.788 -.066 L -.822 -.335 L -.708 -.251 L -.402 -.437 L -1.055 -.107 L -.519 -.054 L -.343 .129 L -.517 .343 L -.333 .03 L -.78 -.038 L -.609 .032 L -.413 .144 L -.476 .328 L -.621 .654 L -.466 .3 L -.562 .13 L -.441 -.025 L -.066 -.376 L -.128 -.681 L -.106 -.447 L .128 -.298 L 0 -.383 L 0 -.532 L .106 -.191 L .106 -.298 L .085 -.234 L -.085 -.212 L -.256 -.128 L -.319 -.191 L -.213 -.255 L -.042 -.149 L -.171 0 L -.191 -.042 L -.361 -.106 L -.191 .192 L -.086 -.234 L .086 -.106 L .148 -.255 L .128 .106 L .383 -.042 L .426 .085 L .128 .021 L .043 -.128 L -.319 -.213 L -.256 -.021 L -.085 -.277 L .17 -.255 L .213 -.191 L -.404 -.042 L -.319 .085 L -.383 0 L -.319 -.085 L -.128 .149 L -.17 -.255 L -.149 -.298 L 0 -.34 L -.042 -.298 L .17 -.213 L .106 -.319 L .043 -.255 L .105 -.277 L .086 -.234 L .213 .34 L .063 .128 L .17 .17 L .405 -.085 L .383 .128 L .106 -.149 L -.021 -.149 L .106 0 L .148 .021 L .064 .319 L .106 .191 L .298 -.021 L .298 -.063 L .256 -.106 L .233 .085 L .192 .064 L .085 -.128 L -.149 -.191 L -.042 -.213 L .191 -.042 L .106 .149 L .233 .085 L .256 -.085 L .213 -.064 L .021 -.234 L -.171 -.341 L -.34 -.234 L -.532 -.319 L -.426 -.213 L -.063 -.319 L -.043 -.34 L -.213 -.17 L 0 -.213 L 0 -.213 L -.085 -.127 L -.554 -.064 L -.617 .085 L -.426 .021 L -.446 .127 L -.192 .277 L -.085 .298 L .128 .192 L -.063 .276 L -.086 .405 L .064 .234 L .021 .298 L -.256 -.553 L -.361 -.319 L .042 -.17 L -.063 -.191 L -.274 -.143 L .529 -.453 L .937 -.532 L 1.277 -.298 L .979 -.085 L .512 .234 L .681 .383 L .617 .383 L .256 .511 L .638 .703 L .447 .255 L .489 -.043 L .341 -.106 L .158 .014 L 1.03 .063 L 1.383 -.032 L .126 -.314 L -.314 -.409 L .062 -.628 L .503 -.409 L .503 -.251 L .629 0 L .283 -.126 L .22 -.346 L .126 -.126 L .283 0 L .597 .283 L -.188 -.377 L -.251 -.251 L .565 -.157 L .188 -.063 L .472 .095 L .629 .377 L .346 .032 L .22 .314 L .692 .095 L .534 .094 L .251 .22 L .032 .22 L 0 .22 L .439 .283 L -.188 .157 L -.031 .188 L .188 .22 L -.157 .188 L -.094 .22 L .691 .314 L .314 .157 L .503 -.094 L .439 -.032 L .535 .126 L .439 -.063 L .188 -.157 L .881 .251 L .22 .377 L .126 .566 L .408 .597 L .283 .188 L .188 .44 L 0 .283 L 1.384 .975 L 1.194 .597 L .377 .44 L 1.006 .503 L .314 -.063 L .943 .597 L .565 .22 L 1.132 .597 L .378 .251 L .471 -.063 L .566 .189 L .534 .283 L .503 .094 L -.062 .22 L -.157 .251 L .062 .503 L -.091 .726 L -1.454 -.244 L -.565 -.294 L -.445 .356 L -.417 .2 L -1.135 .205 L -.432 .809 L -.203 .991 L -.103 .128 L -.508 .243 L -1.985 .689 L -.568 .159 L -.119 .199 L -.001 .466 L -.22 .199 L -.636 .3 L -.534 .031 L -.573 -.082 L -.999 -.348 L -.937 -.193 L -.193 -.112 L +445.294 112.196 N -.07 -.115 L -.138 -.469 L -.5 -.452 L -.966 -.541 L .024 -.141 L .23 .062 L .023 -.237 L -.345 -.414 L .418 -.616 L -.182 -.22 L .188 -.563 L -.251 -.282 L .182 -.396 L .268 -.079 L -.027 -.45 L -.331 -.081 L -.2 -.107 L .002 -.342 L -.133 -.427 L .279 -.515 L .273 -.273 L .727 .11 L .361 .022 L .058 .004 L .382 .369 L .733 .866 L .018 .109 L .035 .218 L -.132 .429 L .074 .641 L .298 .668 L .722 .608 L -.09 .029 L -.449 .842 L -.402 .386 L -.496 .472 L -.583 .884 L +451.512 108.463 N -.507 .16 L -.532 .245 L -.622 -.054 L -.361 -.041 L -.365 .159 L -.395 .429 L -.606 .146 L -.809 .076 L -.722 -.608 L -.298 -.668 L -.074 -.641 L .132 -.429 L -.035 -.218 L .14 .049 L .188 0 L .072 -.087 L .029 -.072 L -.029 -.13 L .058 -.167 L .088 -.058 L .225 -.058 L .246 -.058 L .116 -.058 L .08 -.065 L .087 .073 L .131 .058 L .094 .109 L .116 0 L .029 -.058 L -.059 -.072 L .109 -.058 L .151 -.102 L .152 -.087 L .175 .043 L .064 -.007 L .196 .007 L .152 .015 L .087 -.08 L .131 -.116 L .064 .021 L .102 .043 L .088 -.021 L .087 -.043 L .102 .051 L .058 -.015 L .116 -.022 L .145 -.021 L .16 -.022 L .072 -.029 L .058 .017 L -.007 .106 L .134 .213 L .666 .296 L .358 .383 L .225 .469 L -.006 .499 L -.104 .3 L .047 .199 L +383.93 117.402 N -.249 .101 L -.517 .291 L -.439 .052 L -.548 -.178 L -.58 0 L -.28 -.073 L -.719 .292 L -.058 -.177 L .389 -1.012 L -.021 -.856 L -.182 -.115 L .244 -.542 L -.054 -.397 L .13 -.114 L -.144 -.141 L -.375 .085 L -.476 .097 L -.108 -.449 L .48 -.052 L .283 -.22 L -.042 -.17 L -.178 -.226 L -.3 .417 L -.413 .136 L -.357 -.042 L -.059 -.188 L .198 -.397 L .138 -.616 L -.039 -.303 L .258 -.114 L .403 -.503 L .45 -1.098 L -.12 -.115 L .612 -1.783 L -.35 -.924 L -.007 -.42 L -.146 -.378 L .255 -.271 L .891 -.251 L .55 -.188 L .531 .439 L 1.822 .047 L .531 -.26 L .335 .055 L .272 .227 L .15 .242 L .842 .495 L .062 .242 L -.288 .216 L -1.234 .506 L -.084 .072 L -.051 .442 L .072 .456 L -.132 .983 L .057 .938 L -.043 .199 L -.458 .229 L -.482 .045 L -.288 .129 L .488 .494 L .455 .551 L .163 .198 L -.347 .371 L -.506 .655 L -.17 .455 L .812 .123 L .408 .31 L -.884 .643 L -.242 .37 L -.304 .951 L -.008 .018 L +500.121 117.572 N -.407 -.016 L -.433 .388 L -.164 .126 L -.318 -.105 L -.102 -.269 L .03 -.259 L -.274 -.151 L -.366 -.082 L -.244 .234 L -.343 -.023 L -.811 -.153 L -.364 .032 L -.304 -.16 L -.437 .094 L -.266 .143 L -.23 .043 L -.064 -.245 L -.207 -.023 L -.24 .292 L -.693 .304 L -1.185 .224 L -.711 -.039 L -.747 -.123 L -.439 .073 L -1.498 .673 L -.567 .13 L -1.104 .176 L -.556 -.153 L -1.532 -.444 L -.278 .03 L -.929 .373 L -.746 .075 L -.575 -.025 L -.777 -.166 L -.222 .001 L -.142 -.035 L -.055 .319 L .102 .452 L .243 .423 L -.627 .127 L -.156 .374 L -.2 .169 L -.171 -.041 L -.114 .127 L -.39 -.125 L -.311 .001 L -.245 -.459 L -.119 -.093 L .097 -.175 L .242 -.197 L .617 -.403 L .021 -.175 L -.049 -.134 L -.279 -.28 L -.146 -.053 L -.487 .368 L -.23 .041 L -.137 .064 L .092 .041 L -.118 .216 L -.172 .023 L -.063 -.047 L -.076 .088 L -.297 .058 L -.332 -.222 L -.447 -.198 L -.461 -.157 L -.395 .046 L -.849 .548 L -.337 .286 L .006 .204 L -.141 .046 L -.122 .07 L -.005 .082 L -.179 -.169 L -.604 .206 L -.689 .185 L -.594 -.013 L -.587 -.07 L -.678 -.267 L -.963 -.819 L -1.181 -.479 L -1.034 -.182 L -.692 .072 L -.119 .255 L -.097 .609 L -.053 .411 L -.173 .156 L -.256 0 L -.253 -.155 L -1.12 .243 L -.423 -.027 L -.386 -.183 L -.657 -1.159 L -.42 .354 L -.764 -.451 L -.451 .057 L -.562 .412 L -.227 -.382 L .066 -.127 L .242 -.17 L -.116 -.17 L -.989 -.012 L -.545 -.013 L -.088 -.269 L .571 -.199 L -.074 -.241 L -.284 -.198 L -.454 -.07 L -.084 -.297 L .041 -.34 L .087 -.284 L -.089 -.255 L -.396 -.126 L -.627 -.353 L -.371 .086 L -.265 -.084 L -.004 -.255 L .171 -.501 L .131 .059 L .478 .311 L .567 -.271 L -.396 -.283 L .021 -.124 L -.296 -.128 L .03 -.128 L .571 -.159 L .152 -.113 L -.068 -.142 L -.149 -.088 L -.337 -.035 L .01 -.187 L .18 -.07 L -.163 -.164 L -.198 -.117 L -.009 -.152 L -.227 -.012 L .263 -.181 L .296 -.275 L .161 -.035 L .07 -.16 L -.341 -.042 L -.573 .12 L -.905 .164 L -.166 -.035 L .046 -.33 L .127 -.125 L -.003 -.199 L -.029 -.286 L .13 -.264 L .299 .012 L .184 -.41 L .175 -.023 L .63 -.422 L .514 .012 L .133 -.129 L .479 -.047 L .128 .211 L .268 .102 L .169 .028 L .529 .022 L .147 -.129 L -.067 -.129 L -.269 -.129 L .286 -.094 L .324 .036 L .117 .082 L -.219 .223 L .213 -.026 L 1.053 -.073 L .619 .042 L .379 .046 L .279 .047 L .155 -.176 L -.086 -.094 L -.468 -.035 L -.212 -.118 L .275 -.212 L 1.386 -.151 L .417 -.012 L .377 -.117 L -.442 -.012 L -.592 .023 L -.215 0 L -.068 -.146 L -.611 -.382 L .325 -.528 L .926 .14 L 1.244 .048 L .264 -.117 L 1.086 .321 L 1.051 -.031 L .414 -.243 L -.041 -.27 L .624 -.244 L .455 -.214 L 1.218 -.573 L .598 -.215 L 1.039 -.23 L .889 -.073 L .758 .07 L .905 .126 L .798 .041 L .753 -.372 L .216 .527 L .416 .298 L .278 .099 L .592 .013 L .622 -.144 L .453 .74 L .492 .255 L .574 -.172 L .391 .056 L .968 .582 L 1.265 .04 L 1.094 .197 L .749 -.001 L 1.084 -.272 L .514 -.044 L .651 .141 L .764 .098 L .787 -.016 L .554 -.144 L 1.518 -.573 L .424 -.335 L 1.212 .082 L .491 .068 L .226 -.072 L .761 -.36 L .41 .041 L 1.326 1.018 L .031 .028 L .795 .722 L .026 .199 L -.421 .813 L .033 .412 L .284 .211 L 1.413 .12 L .492 .451 L -.072 .211 L -.409 -.023 L -.231 .141 L -.009 .433 L -.584 .267 L -.039 .27 L .264 .67 L -.122 .375 L .224 .492 L .09 .117 L .106 -.105 L .288 .203 L .039 .207 L -.229 .281 L -.287 .535 L -.06 .128 L .213 .14 L .424 .111 L -.145 .245 L .099 .421 L .42 .374 L .275 .035 L .023 .308 L h 462.617 106.804 m .241 .211 L -.019 .287 L .115 .285 L .077 .071 L .593 .355 L .819 .241 L .605 .155 L .152 .121 L 464.943 109 l -.304 .166 L -.515 -.072 L -.94 -.246 L -.326 .07 L -.209 .152 L -1.019 -.012 L -.357 .384 L -.109 .273 L -.833 .316 L -.612 .282 L -.222 .258 L -.307 .152 L -.268 .293 L -.255 .082 L .164 -.258 L .019 -.141 L -.062 -.176 L .584 -.293 L .22 -.141 L -.226 -.191 L -.082 .015 L -.653 -.056 L -.229 -.148 L .326 -.546 L .387 -.558 L .678 -.631 L -.127 -.227 L -.427 -.197 L -.105 0 L .498 -.445 L .629 -.374 L .497 -.045 L .527 .111 L 1.333 .005 L +509.077 114.955 N -.72 -.317 L -.268 .016 L -.356 -.433 L -.374 -.105 L -.13 -.363 L .532 -.27 L .095 -.222 L -.43 -.176 L -.027 -.188 L .63 -.129 L .094 -.155 L -.061 -.113 L -.487 -.21 L -.351 -.281 L -.306 -.166 L -.456 .234 L -1.058 .492 L -.374 .445 L -.642 .188 L -.254 .255 L -.014 -.027 L .094 -.118 L -.094 -.213 L -.189 -.071 L .26 -.095 L .166 -.047 L -.261 -.189 L -.236 -.236 L .236 -.118 L .095 -.189 L -.283 -.047 L -.354 -.024 L -.284 -.118 L -.213 -.212 L -.236 -.024 L -.26 -.354 L -.283 -.142 L -.048 -.094 L .166 0 L .378 0 L .165 -.236 L 0 -.236 L -.213 -.024 L -.188 -.142 L -.544 -.331 L -.283 -.354 L .047 -.284 L .402 -.142 L -.119 -.236 L -.212 -.166 L -.426 -.071 L -.284 -.095 L .071 -.094 L .071 -.118 L -.284 -.095 L -.087 -.212 L .418 -.308 L .236 0 L .473 .024 L .331 .189 L .189 .213 L .638 .189 L .284 -.047 L .188 .023 L .143 .071 L .26 .189 L .236 -.047 L .236 -.095 L .095 -.331 L -.118 -.213 L -.614 -.166 L -.213 -.307 L -.143 -.26 L .095 -.071 L .143 -.142 L .268 -.189 L .229 -.023 L .023 .166 L .213 -.047 L .189 0 L .142 .189 L .473 .284 L .095 .118 L .118 0 L .283 .284 L 0 .308 L .591 .094 L .449 .142 L .379 -.047 L .165 -.213 L .308 -.331 L .283 -.094 L .496 -.284 L .292 -.449 L .465 .331 L .236 .378 L .26 .189 L .284 .307 L .095 .52 L .142 .236 L .283 .26 L .284 .165 L 0 .166 L .449 .236 L .473 -.047 L .378 .071 L .284 .166 L .236 .189 L .095 .189 L 0 .142 L -.355 -.142 L -.401 -.047 L -.213 0 L -.26 .047 L -.142 .118 L -.402 .071 L -.213 .142 L -.047 .189 L -.023 .473 L -.118 .26 L -.095 .236 L -.095 .378 L .213 .236 L -.023 .189 L -.237 -.071 L -.094 .095 L -.071 .331 L -.071 .26 L -.118 -.047 L -.094 -.236 L -.143 -.095 L -.165 .095 L -.047 .307 L .07 .166 L -.118 .118 L -.118 .095 L .095 .26 L -.363 .91 L h 499.844 111.738 m .709 .061 L .142 -.047 L .26 -.071 L .236 .236 L .071 .166 L .378 .142 L .213 .071 L .308 -.118 L .52 0 L -.071 .213 L .024 .236 L .118 .023 L .331 .166 L -.071 .236 L .421 .763 L -.009 .001 L -.253 -.133 L -.416 .038 L -.512 -.025 L -.421 -.125 L -.335 -.211 L -.294 -.402 L -.551 -.223 L -.281 -.417 L -.265 -.381 L -.252 -.197 L +455.452 122.442 N .049 -.209 L -.057 -.128 L -.812 -.256 L -.691 -.006 L -.506 -.116 L -.484 .017 L -.121 -.046 L -.103 -.093 L .139 -.56 L .315 -.005 L -.005 -.088 L -.009 -.122 L .069 -.07 L .083 .157 L .021 .146 L .303 .021 L .172 .055 L .184 -.076 L -.014 -.082 L .108 -.029 L .157 .105 L -.037 .093 L -.099 .006 L -.04 .053 L .088 .023 L .144 .035 L .094 .046 L .021 .128 L .353 .041 L .846 -.122 L .509 .016 L .035 .13 L .192 .035 L .608 .064 L .307 .051 L .358 -.121 L .09 .05 L -.101 .312 L .163 .11 L .105 0 L .325 -.169 L .286 -.058 L .078 .052 L .154 -.07 L .232 -.146 L -.083 .187 L .015 .186 L -.183 .268 L -.582 -.046 L -.349 .081 L -.335 -.017 L -1.994 .169 L h 445.294 112.196 m .583 -.884 L .496 -.472 L .402 -.386 L .449 -.842 L .09 -.029 L .809 -.076 L .606 -.146 L .395 -.429 L .365 -.159 L .361 .041 L .622 .054 L .532 -.245 L .507 -.16 L .09 -.029 L 1.855 -.195 L .799 -.261 L .584 -.06 L 1.473 .505 L .619 .21 L .388 -.031 L 1.117 -.277 L .086 -.257 L -.097 -.327 L .344 -.216 L .363 .026 L .105 0 L .427 .197 L .127 .227 L -.678 .631 L -.387 .558 L -.326 .546 L -.062 -.407 L -.794 -.056 L -.743 -.041 L -.566 -.125 L -.062 -.144 L -.459 .186 L -.248 .123 L -.403 .012 L -.031 -.247 L -.335 .029 L -.301 .314 L -.431 .186 L -.31 .03 L -.306 -.159 L -.252 .07 L -.004 .133 L .169 .185 L .169 .34 L .308 .059 L .826 .609 L -.166 .07 L -.369 -.258 L -.015 -.105 L -.276 -.082 L -.331 -.105 L -.116 .099 L -.211 .007 L .069 .129 L -.016 .129 L .338 .164 L .145 -.012 L .114 .234 L -.03 .129 L -.245 .023 L -.445 -.457 L -.341 -.141 L -.207 -.059 L -.128 -.012 L .003 .094 L -.075 .035 L .138 .164 L .102 .105 L .154 .141 L .193 .059 L .153 .035 L .103 .094 L -.093 .058 L -.494 -.046 L -.253 -.035 L .035 -.176 L -.137 -.293 L -.164 -.188 L -.401 -.108 L -.472 -.373 L .258 -.118 L .025 -.136 L -.053 -.122 L -.182 -.035 L -.153 .199 L -.465 .176 L .245 .224 L -.25 .371 L -.05 .249 L .13 .121 L .065 .172 L .311 .338 L .133 .036 L .131 .479 L .579 .421 L .359 .467 L -.172 .14 L -.237 .082 L .106 -.187 L -.121 -.187 L -.142 -.128 L -.139 -.035 L -.151 -.047 L -.29 .175 L .102 .188 L .153 .081 L .08 .316 L -.193 .187 L -.652 .141 L .248 .046 L .27 .14 L .391 .058 L .188 .222 L .257 -.012 L .155 .012 L .048 .126 L .367 .269 L .306 .014 L .138 .292 L .282 .012 L .27 0 L .348 .303 L .015 .128 L -.193 .082 L .238 .782 L -.153 .175 L -.185 0 L -.226 -.385 L -.222 -.047 L -.207 -.278 L -.101 -.142 L -.17 0 L -.496 .14 L -.479 .105 L -.184 .128 L .315 .093 L .013 .188 L .007 .291 L .229 .117 L .153 -.026 L .225 -.079 L -.021 .198 L .235 .175 L -.519 .093 L .002 .117 L -.169 .062 L -.309 -.086 L .121 -.21 L -.186 -.086 L -.508 -.056 L -.158 -.092 L -.008 .206 L .194 .453 L .193 .17 L -.045 .163 L .209 .204 L .213 .96 L -.688 -.31 L -.331 .071 L -.298 .439 L -.442 -.735 L -.46 -.367 L -.452 .44 L -.428 -.353 L -.127 -.297 L .212 -.425 L -.028 -.241 L -.215 -.269 L -.491 -.424 L -.167 -.226 L .017 -.17 L .471 -.61 L .609 .098 L .425 -.298 L .202 .042 L 1.668 .663 L .337 -.1 L .483 -.355 L -.266 -.049 L -.27 -.056 L -1.204 -.493 L -1.127 -.083 L -.367 .058 L -.66 .058 L -.427 .143 L -.89 -1.118 L .269 -.1 L .253 .056 L .218 -.114 L .122 -.185 L -.339 -.24 L -.235 .114 L -.496 -.042 L -1.035 -.721 L -.199 -.325 L +504.136 113.458 N -.327 .328 L -.377 .03 L -.421 -.763 L .071 -.236 L -.331 -.166 L -.118 -.023 L -.024 -.236 L .071 -.213 L -.52 0 L -.308 .118 L -.213 -.071 L -.378 -.142 L -.071 -.166 L -.236 -.236 L -.26 .071 L -.142 .047 L -.709 -.061 L -.492 -.451 L -1.413 -.12 L -.284 -.211 L -.033 -.412 L .421 -.813 L -.026 -.199 L -.795 -.722 L .377 -.108 L .307 .024 L .308 -.095 L .426 -.023 L .401 -.118 L .592 .047 L .591 -.095 L .378 -.047 L .291 -.094 L .087 .212 L .284 .095 L -.071 .118 L -.071 .094 L .284 .095 L .426 .071 L .212 .166 L .119 .236 L -.402 .142 L -.047 .284 L .283 .354 L .544 .331 L .188 .142 L .213 .024 L 0 .236 L -.165 .236 L -.378 0 L -.166 0 L .048 .094 L .283 .142 L .26 .354 L .236 .024 L .213 .212 L .284 .118 L .354 .024 L .283 .047 L -.095 .189 L -.236 .118 L .236 .236 L .261 .189 L -.166 .047 L -.26 .095 L .189 .071 L .094 .213 L -.094 .118 L .014 .027 L +566.651 117.4 N -.565 -.153 L -.496 -.054 L -.264 -.151 L -.564 .227 L -.974 .147 L -.137 -.059 L .129 -.176 L -.198 -.077 L -.678 .03 L -.739 .315 L -.592 .486 L -.589 .064 L -.745 .495 L -.351 .03 L -.368 -.026 L -.128 -.084 L -.164 -.409 L -.199 -.521 L .185 -.444 L .099 -.775 L .029 -.255 L -.17 -.187 L -.484 .093 L .156 -.597 L -.576 -.45 L -.153 -.056 L -.384 .016 L -.286 .162 L -.134 .363 L -.435 .428 L -.049 .425 L .006 .255 L -.208 .228 L -.442 .158 L -.133 -.013 L -.587 -.152 L -.292 .058 L -.073 .185 L .007 .311 L -.3 .313 L -.21 .128 L -.381 .016 L -.63 -.237 L -.325 .001 L -.581 .286 L -.58 .343 L -.485 .144 L -.245 -.041 L -.129 -.141 L -.04 -.055 L .375 -.843 L -.063 -.377 L .377 -.377 L .283 -.503 L .503 -.346 L .157 -.22 L -.126 -.283 L -.471 -.314 L -.126 -.409 L .031 -.472 L .126 -.22 L -.126 -.22 L -.346 0 L -.44 -.032 L -.157 -.157 L -.346 -.188 L -.251 -.283 L .125 -.471 L .472 -.283 L .629 .126 L 1.069 .094 L .282 -.188 L .063 -.409 L .251 -.157 L .188 0 L .032 -.346 L .188 -.063 L .251 -.063 L -.126 -.094 L -.534 .031 L -.251 -.125 L .503 -.094 L .565 -.095 L .472 .095 L .062 -.126 L .032 -.346 L -.189 -.314 L .283 -.314 L -.031 -.22 L .346 0 L .22 .157 L .252 .22 L .22 -.157 L .692 -.188 L .471 -.346 L .221 -.251 L .439 .377 L .252 .251 L -.188 .22 L -.409 .346 L -.251 .126 L .126 .188 L .251 .063 L .188 .283 L .409 -.031 L .345 .005 L -.302 .147 L -.441 .196 L -.024 .246 L -.196 0 L -.099 -.172 L -.516 -.196 L -.515 -.147 L -.981 .196 L -.123 0 L -.098 .27 L .049 .196 L -.196 .074 L -.098 -.221 L -.196 .196 L -.099 .245 L .099 .27 L .049 .147 L .122 .098 L .589 -.024 L .564 0 L .688 -.024 L .196 .073 L .49 -.147 L .368 .098 L .147 .123 L .073 .196 L .393 .074 L .295 -.049 L -.024 -.221 L .343 -.049 L .442 -.123 L .221 .024 L .049 .147 L .319 .123 L .122 -.024 L .049 .172 L .074 .221 L .318 -.172 L .368 -.024 L .172 .319 L .196 0 L .172 -.147 L .834 -.221 L .663 .073 L .539 0 L .344 -.171 L .344 -.098 L .196 .073 L -.011 .069 L .023 1.031 L -.207 .223 L .077 .305 L .325 .394 L .463 -.045 L .229 -.162 L .22 .06 L .692 .039 L .273 .154 L .295 .494 L -.009 .284 L .028 .246 L .152 .012 L .049 .123 L -.126 .428 L .245 .237 L -.152 .36 L .2 .163 L -.181 .185 L -.08 .249 L -.354 .136 L +500.121 117.572 N -.023 -.308 L -.275 -.035 L -.42 -.374 L -.099 -.421 L .145 -.245 L -.424 -.111 L -.213 -.14 L .06 -.128 L .287 -.535 L .229 -.281 L -.039 -.207 L -.288 -.203 L -.106 .105 L -.09 -.117 L -.224 -.492 L .122 -.375 L -.264 -.67 L .039 -.27 L .584 -.267 L .009 -.433 L .231 -.141 L .409 .023 L .072 -.211 L .252 .197 L .265 .381 L .281 .417 L .551 .223 L .294 .402 L .335 .211 L .421 .125 L .512 .025 L .416 -.038 L .253 .133 L .009 -.001 L .377 -.03 L .327 -.328 L .254 -.255 L .642 -.188 L .374 -.445 L 1.058 -.492 L .456 -.234 L .306 .166 L .351 .281 L .487 .21 L .061 .113 L -.094 .155 L -.63 .129 L .027 .188 L .43 .176 L -.095 .222 L -.532 .27 L .13 .363 L .374 .105 L .356 .433 L .268 -.016 L .72 .317 L .015 .007 L -.05 .707 L -.143 .581 L .205 .48 L .494 .252 L .925 .235 L .827 .052 L .424 .097 L .162 .282 L .312 .451 L .687 .463 L 1.902 .513 L .841 .052 L .438 -.059 L 1.354 -.262 L 1.192 -.148 L 1.469 -.079 L .41 -.229 L .185 -.354 L -.131 -.905 L .015 0 L .441 .025 L .562 -.13 L .466 -.3 L .621 -.654 L .476 -.328 L .413 -.144 L .609 -.032 L .78 .038 L .333 -.03 L .517 -.343 L .343 -.129 L .519 .054 L 1.055 .107 L .402 .437 L .708 .251 L .822 .335 L .788 .066 L .5 .054 L .66 .167 L .597 .336 L 1.803 1.362 L .655 .506 L .696 .01 L .787 -.075 L .185 .211 L .038 .848 L .01 .565 L .15 .692 L .078 .028 L -.145 .241 L -.084 .339 L -.246 .807 L -.49 1.272 L -.222 .297 L -.596 .384 L -.016 .141 L .119 .663 L .096 .098 L .738 .235 L .026 .183 L -.661 .935 L -.034 .155 L .254 1.085 L .167 1.283 L .143 .775 L .191 .21 L .209 .041 L 1.198 .275 L .401 .167 L .144 .366 L .046 .437 L -.425 .553 L -.853 .795 L -.853 1.034 L .802 1.083 L .71 1.068 L .353 .464 L .695 .391 L 1.144 .388 L .409 .224 L .168 .38 L .111 1.34 L .185 .394 L .652 .053 L .186 .281 L -.036 .974 L -.188 .255 L -.209 .072 L -1 .077 L -.697 .258 L -.794 .47 L -.285 .383 L -.31 .792 L -.049 .354 L -.182 .954 L -.502 .028 L -1.079 -.153 L -.236 -.197 L -.605 -.253 L -.403 -.056 L -1.43 .003 L -.783 -.041 L -.602 .072 L -.475 -.38 L -.163 -.126 L -.835 -.026 L -.576 .001 L -.465 .014 L -.212 -.239 L -.756 -.125 L -.305 -.183 L -.162 -.014 L -.021 -.5 L -.295 -.128 L -.103 -.514 L -.292 -.349 L -.013 -.639 L -.309 -.493 L -.237 .012 L -.035 -.181 L -.526 -.126 L -.807 -.013 L -.374 .017 L -.209 .222 L -.329 .018 L -.517 .075 L -.188 .364 L -.538 .138 L -.383 .443 L -.368 .283 L -.253 .043 L -1.292 -.689 L -.958 -.104 L -.562 -.359 L -1.088 -.317 L -.247 -.301 L -.324 -.282 L -.497 -.592 L -.997 -.436 L -.584 -.083 L -.194 -.028 L -.58 -.465 L -.596 -1.058 L -.635 -1.114 L -.209 -.268 L .005 -.593 L -.767 -.761 L -.506 -.719 L -.921 .143 L -.46 -.042 L -.13 -.126 L -.291 -.056 L -.191 -.268 L -.029 -.565 L -.448 .1 L -.166 .099 L -.32 .678 L -.195 .184 L -.355 .012 L -.014 -.12 L -.351 -.224 L -.686 -.546 L .064 -.212 L -.007 -.395 L -.164 -.465 L -.215 -.013 L -.551 .003 L -.034 -.325 L .055 -.579 L .197 -.622 L .014 -.508 L -.112 -.239 L -.29 -.28 L -.774 -.603 L -.436 -.209 L -1.242 -.925 L -.533 -.025 L -.321 .115 L 503 127.106 l .033 -.819 L -1.02 -.954 L -.312 -.351 L -.002 -.184 L .133 -.875 L .235 -.763 L 1.142 -.98 L -.422 -.761 L .013 -.254 L .468 -.596 L -1.067 -.107 L -.761 -.208 L -.065 -.198 L -.563 -1.086 L -.69 -1.397 L +535.734 133.791 N .853 -1.034 L .853 -.795 L .425 -.553 L -.046 -.437 L -.144 -.366 L -.401 -.167 L -1.198 -.275 L -.209 -.041 L -.191 -.21 L -.143 -.775 L -.167 -1.283 L -.254 -1.085 L .034 -.155 L .661 -.935 L -.026 -.183 L -.738 -.235 L -.096 -.098 L -.119 -.663 L .016 -.141 L .596 -.384 L .222 -.297 L .49 -1.272 L .246 -.807 L .084 -.339 L .145 -.241 L .193 .112 L .937 .193 L .999 .348 L .573 .082 L .534 -.031 L .636 -.3 L .22 -.199 L .001 -.466 L .119 -.199 L .568 -.159 L 1.985 -.689 L .508 -.243 L .103 -.128 L .203 -.991 L .432 -.809 L 1.135 -.205 L .417 -.2 L .445 -.356 L .565 .294 L 1.454 .244 L .096 .016 L .646 .011 L 1.217 .05 L .236 .126 L .351 .48 L .04 .055 L .129 .141 L .245 .041 L .485 -.144 L .58 -.343 L .581 -.286 L .325 -.001 L .63 .237 L .381 -.016 L .21 -.128 L .3 -.313 L -.007 -.311 L .073 -.185 L .292 -.058 L .587 .152 L .133 .013 L .442 -.158 L .208 -.228 L -.006 -.255 L .049 -.425 L .435 -.428 L .134 -.363 L .286 -.162 L .384 -.016 L .153 .056 L .576 .45 L -.156 .597 L .484 -.093 L .17 .187 L -.029 .255 L -.099 .775 L -.185 .444 L .199 .521 L .164 .409 L .128 .084 L .368 .026 L .351 -.03 L .745 -.495 L .589 -.064 L .592 -.486 L .739 -.315 L .678 -.03 L .198 .077 L -.129 .176 L .137 .059 L .974 -.147 L .564 -.227 L .264 .151 L .496 .054 L .565 .153 L -.192 .145 L -.574 -.059 L .01 .269 L .236 .012 L .048 .088 L -.148 .142 L -.358 .004 L -.455 .297 L -.332 -.005 L -.338 .179 L -.647 -.144 L -1.345 .012 L -1.148 .152 L -.53 .292 L -.272 .19 L -.559 .395 L -.246 -.023 L -.258 .214 L -.464 .413 L .01 .32 L .411 .271 L .01 .336 L .232 .171 L -.119 .483 L .198 .477 L -.324 .426 L -.524 .355 L -.4 .341 L -.13 .283 L .223 .478 L .033 .31 L -.289 .255 L -.513 .215 L -.698 -.039 L -.997 -.122 L -.355 .129 L .35 .336 L .365 .407 L .129 .281 L .088 .437 L -.199 .255 L -.315 .115 L -.513 .031 L -.416 .115 L -.292 .228 L -.224 .424 L -.288 .834 L -.139 1.214 L -.021 .084 L -.34 .383 L -.237 .086 L -1.001 -.375 L -.562 -.025 L -.559 .243 L -.362 .271 L -.321 .693 L -.254 .086 L -.516 -.082 L -.644 -.039 L -.283 .072 L -.597 .441 L -.412 .369 L -.188 .34 L -.232 .876 L -.099 .903 L -.069 .184 L -.247 .156 L -1.066 .274 L -1.183 .19 L -.964 .175 L -1.234 .12 L -1.005 -.135 L -.349 .002 L -1.187 .218 L -.742 -.024 L -.541 -.039 L -.854 -.235 L -1.069 -.248 L -.63 -.194 L -.887 -.32 L +486.696 126.295 N 5.257 -2.711 L .589 -2.701 L -.024 -.467 L -.187 -.508 L .009 -.255 L .23 -.355 L .31 -.214 L .866 -.174 L .457 -.371 L .944 -.883 L -.059 -.24 L .23 -.043 L .266 -.143 L .437 -.094 L .304 .16 L .364 -.032 L .811 .153 L .343 .023 L .244 -.234 L .366 .082 L .274 .151 L -.03 .259 L .102 .269 L .318 .105 L .164 -.126 L .433 -.388 L .407 .016 L .69 1.397 L .563 1.086 L .065 .198 L .761 .208 L 1.067 .107 L -.468 .596 L -.013 .254 L .422 .761 L -1.142 .98 L -.235 .763 L -.133 .875 L .002 .184 L .312 .351 L 1.02 .954 L 503 127.106 l .075 .155 L .321 -.115 L .533 .025 L 1.242 .925 L .436 .209 L .774 .603 L .29 .28 L .112 .239 L -.014 .508 L -.197 .622 L -.055 .579 L .034 .325 L .551 -.003 L .215 .013 L .164 .465 L .007 .395 L -.064 .212 L .686 .546 L .351 .224 L .014 .12 L -.096 .003 L -.664 .101 L -.408 -.056 L -.157 .057 L -.103 .127 L -1.271 .044 L -.518 .13 L -.343 .693 L -.463 .609 L -.521 .568 L -4.048 -.132 L -1.557 -.697 L -.812 -.277 L -.118 -.253 L -.047 -.818 L .118 -.396 L -.135 -.366 L -.973 .048 L -.141 -.07 L -.399 -.633 L -.258 -.196 L -2.44 -1.101 L -1.14 -.473 L -2.034 -.934 L -.757 -.222 L -1.129 -.459 L -.093 -.056 L -.093 -.056 L -.311 -.69 L -.87 -1.632 L +479.916 127.377 N -.082 -.085 L .047 -.122 L -.021 -.183 L -.201 -.128 L -.183 -.346 L .398 -.209 L .041 -.099 L .526 -.396 L -.048 -.058 L -.223 -.099 L .077 -.151 L .298 -.25 L .599 -.006 L -.14 -.146 L -.035 -.046 L .078 -.111 L .177 -.163 L .169 -.116 L .299 -.239 L -.068 -.058 L .023 -.163 L -.09 -.047 L -.031 -.221 L -.241 -.157 L -.222 -.058 L .204 -.204 L -.125 -.052 L -.053 -.116 L -.12 .058 L -.335 .052 L -.388 -.023 L -.225 -.564 L .129 -.593 L .072 -.064 L -.1 -.507 L -.42 -.326 L .126 -.093 L .036 -.152 L .117 -.128 L -.093 -.222 L .107 -.012 L .259 -.32 L -.061 -.112 L .311 -.001 L .39 .125 L .114 -.127 L .171 .041 L .2 -.169 L .156 -.374 L .627 -.127 L -.243 -.423 L -.102 -.452 L .055 -.319 L .142 .035 L .222 -.001 L .777 .166 L .575 .025 L .746 -.075 L .929 -.373 L .278 -.03 L 1.532 .444 L .556 .153 L 1.104 -.176 L .567 -.13 L 1.498 -.673 L .439 -.073 L .747 .123 L .711 .039 L 1.185 -.224 L .693 -.304 L .24 -.292 L .207 .023 L .064 .245 L .059 .24 L -.944 .883 L -.457 .371 L -.866 .174 L -.31 .214 L -.23 .355 L -.009 .255 L .187 .508 L .024 .467 L -.589 2.701 L -5.257 2.711 L -.161 .071 L -2.96 1.541 L -1.139 .656 L -.253 .016 L -.365 -.167 L -1.902 -1.034 L +426.068 126.434 N -.093 .981 L .064 .564 L -.093 .269 L -.802 .428 L -.579 .314 L -1.473 1.138 L -.126 .354 L .274 .973 L -.147 .537 L -.155 .227 L -.864 .598 L -.22 .143 L -.564 -1.536 L -.699 -2.242 L -.323 -.464 L -.363 -.252 L -.432 -.181 L -.484 -.831 L -.225 -.465 L -.363 -.28 L -.452 -.097 L -.336 -.774 L -.301 -.888 L .112 -.509 L 1 -.853 L .414 -.355 L .163 -.411 L .048 -.537 L -.052 -.594 L -.026 -.892 L -.012 -1.429 L .114 -.439 L .685 -.627 L .012 -.184 L .508 -.185 L .633 -.455 L .591 -.228 L .703 -.016 L .643 .183 L .247 .212 L .059 .241 L .25 .538 L .27 .084 L .417 -.171 L .584 -.44 L .401 -.17 L .034 .354 L -.265 .567 L -.638 .511 L -.275 .468 L .005 .283 L .202 .438 L .508 .466 L .351 .127 L .303 .848 L -.094 .212 L -.541 .764 L -.59 .34 L -1.017 .92 L -.216 .339 L .287 .451 L .587 .55 L .528 .295 L .284 .056 L .396 -.227 L .316 .084 L .244 .635 L .582 .239 L +381.402 139.704 N -.027 -.876 L .069 -2.006 L .037 -.382 L .686 -.314 L 1.512 -.998 L .963 -.542 L 1.265 .078 L .397 -.059 L .181 -.693 L .864 -.033 L .777 -.174 L .527 -.229 L .524 -.356 L .484 -.652 L 1.109 -.332 L 1.52 -.701 L .129 -.227 L -.296 -.62 L -.025 -.396 L .079 -.227 L .265 -.114 L 1.186 -.12 L .381 -.186 L .309 -.553 L 1.022 .022 L .67 -.018 L 1.826 .004 L .34 -1.033 L -.07 -.211 L -.507 -.322 L 397 126.646 l -.158 -.465 L .016 -1.271 L .022 -.833 L -.165 -.889 L -.189 -.211 L -.563 -.279 L -.259 -.508 L .351 0 L .66 -.143 L .541 -.256 L .369 -.566 L .405 -.312 L .509 -.086 L .407 -.157 L .679 -.27 L .324 .226 L .176 .017 L .249 .024 L .238 -.142 L .407 -.51 L .613 -.426 L .682 -.355 L .614 -.171 L 1.16 -.116 L 1.587 -.06 L .513 -.072 L .634 -.312 L .578 .211 L .564 -.072 L .585 -.313 L .343 -.1 L .939 .012 L .513 -.015 L .307 .056 L .221 .042 L .322 .113 L .816 .168 L .529 -.015 L .772 -.171 L .705 -.2 L .612 -.554 L .994 .508 L .339 .099 L .312 -.143 L .314 -.241 L .228 -.156 L .528 .042 L .388 .197 L .162 .269 L .269 .126 L .516 -.086 L 1.093 -.158 L -.012 .184 L -.685 .627 L -.114 .439 L .012 1.429 L .026 .892 L .052 .594 L -.048 .537 L -.163 .411 L -.414 .355 L -1 .853 L -.112 .509 L .301 .888 L .336 .774 L .452 .097 L .363 .28 L .225 .465 L .484 .831 L .432 .181 L .363 .252 L .323 .464 L .699 2.242 L .564 1.536 L -.204 .156 L -.241 .383 L .88 1.605 L .147 .833 L .052 .691 L -.1 .862 L .101 .748 L -.16 .622 L -.158 .495 L .457 1.156 L -.061 .664 L -.086 .17 L -.666 .47 L -.249 .128 L -.152 .283 L 1.272 1.702 L .249 .917 L .562 .873 L .244 .154 L .544 -.201 L .702 .165 L 1.028 .347 L .178 .168 L .86 1.506 L .098 .07 L -.265 .186 L -1.632 .843 L -4.012 2.241 L -1.607 .956 L -2.308 1.454 L -.834 .655 L -3.084 2.617 L -1.82 .364 L -1.672 .321 L -2.176 .408 L -.146 -.564 L .161 -.679 L -.099 -.522 L -.277 -.352 L -.309 -.111 L -.748 -.024 L -.375 -.167 L -.588 -.562 L -.47 .314 L -.229 -.027 L -1.111 -1.039 L -.393 -.28 L -.082 -.183 L .096 -.396 L -.181 -.253 L -2.472 -1.469 L -.397 -.253 L -1.292 -.824 L -1.924 -1.26 L -3.283 -2.241 L -.811 -.575 L -2.054 -1.344 L -.895 -.531 L -.1 -.084 L -1.414 -.91 L -4.12 -2.42 L -2.829 -1.509 L +395.704 122.189 N .259 .508 L .563 .279 L .189 .211 L .165 .889 L -.022 .833 L -.016 1.271 L .158 .465 L .598 .788 L .507 .322 L .07 .211 L -.34 1.033 L -1.826 -.004 L -.67 .018 L -1.022 -.022 L -.309 .553 L -.381 .186 L -1.186 .12 L -.265 .114 L -.079 .227 L .025 .396 L .296 .62 L -.129 .227 L -1.52 .701 L -1.109 .332 L -.484 .652 L -.524 .356 L -.527 .229 L -.777 .174 L -.864 .033 L -.181 .693 L -.397 .059 L -1.265 -.078 L -.963 .542 L -1.512 .998 L -.686 .314 L -.037 .382 L -.069 2.006 L -1.42 .008 L -1.718 -.004 L -2.677 .001 L -2.511 0 L -1.635 .04 L .141 -.28 L .431 -.411 L .427 -.085 L 1.296 -.285 L 1.143 -.455 L .453 -.312 L 1.147 -.85 L 1.149 -.878 L 1.043 -1.104 L .46 -.693 L .133 -.509 L -.05 -.494 L -.427 -.776 L -.09 -.678 L .099 -.508 L .396 -.636 L .706 -.863 L .211 -.65 L -.063 -.367 L .071 -.353 L 1.285 -1.203 L .724 -.481 L .916 -.327 L 1.266 -.469 L .73 -.397 L .558 -.552 L .537 -.736 L .466 -.905 L .829 -1.925 L .269 -.128 L .54 -.171 L .19 .127 L .684 .848 L .138 .099 L 1.148 .507 L .661 -.001 L .595 .042 L 1.304 -.074 L .522 -.228 L .437 -.27 L .398 .551 L .256 .099 L .798 .097 L .361 0 L +480.248 123.437 N .388 .023 L .335 -.052 L .12 -.058 L .053 .116 L .125 .052 L -.204 .204 L .222 .058 L .241 .157 L .031 .221 L .09 .047 L -.023 .163 L .068 .058 L -.299 .239 L -.169 .116 L -.177 .163 L -.078 .111 L .035 .046 L .14 .146 L -.599 .006 L -.298 .25 L -.077 .151 L .223 .099 L .048 .058 L -.526 .396 L -.041 .099 L -.398 .209 L -.07 -.023 L -.088 .041 L -.067 .193 L -.009 .167 L -.355 .07 L -.07 -.099 L -.151 -.022 L -.372 .051 L .26 -.291 L .097 -.361 L .169 -.227 L .328 -.681 L -.017 -.232 L .181 0 L .138 -.192 L .072 -.32 L .018 -.32 L .409 -.431 L .232 -.07 L .116 -.174 L -.048 -.157 L +184.444 142.729 N -.367 .82 L -.518 .821 L -.186 .763 L -.179 1.159 L .017 1.851 L -.133 1.187 L -.016 1.13 L .564 1.737 L .275 .805 L .624 .945 L .76 .903 L .191 .452 L .481 .521 L .529 .974 L .729 1.228 L .375 .296 L .677 .069 L .436 -.015 L .577 .154 L .593 .451 L .503 .508 L .773 .069 L 1.016 -.242 L 1.55 -.456 L 1.396 -.3 L .803 -.157 L -.02 .542 L .838 .223 L .264 -.286 L .293 -.199 L -.104 -.247 L -.393 -.175 L 1.073 -.62 L .633 -.62 L .086 -.827 L .498 -.429 L -.094 -.477 L .092 -1.145 L .254 -.699 L .625 -.334 L .164 -.043 L .757 -.198 L .701 -.1 L 1.088 -.229 L 1.016 -.37 L .594 -.058 L .499 .056 L 1.139 .181 L .502 -.194 L .378 .093 L .62 .507 L .047 .297 L -.079 .424 L -.298 .382 L -.541 .496 L -.433 .425 L -.317 .445 L -.02 .7 L -.254 .297 L -.188 .354 L .155 .155 L .337 -.138 L -.101 .652 L -.262 1.196 L 205.356 159 l -.062 .24 L -.34 -.534 L -.167 -.452 L -.072 -.155 L -.386 .34 L -.02 .549 L -.437 .016 L -.178 .447 L -.599 .857 L -.386 -.27 L -.278 .095 L .025 .329 L -2.332 -.006 L -1.792 -.005 L -.04 1.24 L -.999 .032 L .396 .223 L .495 .541 L .624 .231 L .359 .69 L .532 .223 L -.211 .683 L -1.762 -.007 L -1.06 .007 L -1.076 1.812 L .305 .397 L -.207 .238 L .054 .553 L .044 .454 L -.704 -.555 L -.952 -.888 L -.956 -.761 L -1.069 -.859 L -.534 -.352 L -.053 -.071 L -.639 -.252 L -1.048 -.21 L -.657 .044 L -.817 .397 L -1.1 .567 L -.756 .256 L -.931 -.069 L -.724 -.21 L -.48 -.197 L -1.305 -.195 L -.588 -.267 L -.644 -.422 L -.935 -.521 L -.785 -.267 L -1.711 -.392 L -.963 -.365 L -.722 -.366 L -1.074 -.436 L -.592 -.352 L -1.123 -1 L -.207 -.07 L -.606 .058 L -.689 -.14 L -1.835 -.575 L -.565 -.536 L -.503 -.634 L -.495 -.395 L -1.049 -.577 L -.619 -.267 L -.5 -.494 L -.742 -.987 L -.363 -.55 L -.038 -.113 L .15 -.155 L .504 -.086 L .18 -.17 L .047 -.184 L -.331 -.367 L .457 -.679 L .041 -.381 L -.172 -.466 L -.744 -.959 L .121 -.297 L .146 -.17 L -.07 -.268 L -.665 -.62 L -1.495 -1.777 L -.546 -.493 L -.963 -1.058 L -.474 -.522 L -.815 -.578 L -.322 -.197 L -.158 -.268 L -.058 -.48 L -.144 -.183 L -.329 -.197 L -.609 -.197 L -.408 -.31 L -.366 -.522 L -.271 -.028 L -.414 .114 L -.238 -.155 L -.163 -.367 L -.005 -.325 L .459 -.736 L -.126 -.339 L -.751 -.62 L -.439 .255 L -.375 -.621 L -.118 -.353 L -.359 -.211 L -.61 -.168 L -.319 -.296 L -.125 -.254 L .05 -.381 L .084 -.269 L -.185 -.226 L -.561 -.21 L -.46 -.098 L -.46 -.253 L -.935 -.86 L -.478 -.706 L -.281 -.551 L -.646 -.832 L -.736 -1.073 L -.184 -.423 L -.38 -.678 L -.242 -.338 L -.152 -.452 L .042 -.509 L .032 -.311 L -.56 -.239 L -.795 -.196 L -.06 -.452 L -.128 -.155 L -.458 -.183 L -.289 .326 L -.251 .043 L -1.43 -.647 L -.285 1.004 L -.045 .438 L .033 .084 L .265 .339 L .264 .296 L .028 1.046 L .088 .509 L .51 .677 L .143 .169 L .643 .267 L .601 .536 L .525 .663 L .602 1.214 L .44 .282 L .328 .042 L .237 .169 L .325 1.398 L .102 .169 L .246 .155 L .497 .056 L .133 .056 L .215 .438 L .161 .65 L .445 .79 L .49 -.071 L .223 -.142 L .245 .452 L .344 1.469 L .531 1.059 L .649 1.2 L .069 .593 L -.014 .522 L .26 .353 L .378 .154 L .389 -.17 L .234 -.198 L .588 .804 L .258 .579 L .464 .253 L .281 .014 L .133 .311 L -.196 .537 L -.136 .127 L -.691 .595 L -.254 -.042 L -.251 -.409 L -.24 -.734 L -.617 -.578 L -.625 -.309 L -.516 -.479 L -.834 -.507 L -1.143 -.986 L -.416 -.451 L -.162 -.269 L .216 -.989 L -.035 -.254 L -.488 -1.002 L -.238 -.381 L -.327 -.282 L -.44 -.098 L -.5 -.31 L -.675 -.677 L -.305 .142 L -.363 -.056 L -1.262 -.746 L -.722 -.31 L -.896 -.973 L -.139 -.127 L -.246 -.254 L .679 .15 L .599 .013 L .588 -.284 L .244 -.326 L .093 -.636 L -.01 -.184 L -.458 -.635 L -.466 -.452 L -1.1 -.888 L -.986 -.493 L -.402 -.338 L -.203 -.522 L -.272 -.649 L -.091 -.155 L -.447 -.126 L -.15 -.353 L -.026 -.594 L -.203 -.395 L -.623 -.734 L -.434 -.706 L -.003 -.254 L .212 -.382 L -.777 -.62 L -.254 -.325 L -.22 -.485 L .34 -.017 L 2.367 -.155 L 2.381 -.084 L .316 .31 L .267 .154 L 1.186 .39 L 2.811 .933 L 3.516 1.112 L .338 .055 L 1.662 .019 L 1.544 .02 L .966 .037 L 1.867 -.011 L .213 -.101 L .096 -.892 L 1.858 .003 L 1.892 .046 L .209 .112 L .631 .662 L .766 .632 L .837 .519 L .708 .491 L .179 .226 L .284 .678 L .318 .847 L .445 .549 L 1.092 .659 L 1.104 .503 L .337 .069 L .501 .011 L .416 -.158 L .283 -.37 L .418 -.413 L .576 -.541 L .468 -.201 L .643 -.018 L .475 .082 L .783 .321 L .412 .252 L .363 .366 L .663 1.029 L .744 1.227 L .845 1.042 L .657 .576 L .268 .253 L .078 .467 L .332 .932 L .336 .592 L .375 .365 L .921 .32 L 1.029 .56 L .264 .069 L .416 -.116 L .296 -.001 L .816 .377 L .347 .119 L +507.047 133.665 N .055 .197 L .134 .691 L -.336 -.028 L -.513 .513 L .421 .194 L .418 -.206 L .306 .021 L .698 1.84 L -.644 .044 L -1.07 -.05 L -.185 -.239 L -.334 -.619 L -.408 -.054 L -1.657 -.259 L .521 -.568 L .463 -.609 L .343 -.693 L .518 -.13 L 1.271 -.044 L +606.155 150.953 N .595 .152 L .255 .14 L .25 -.129 L .273 -.368 L .015 -.678 L -.152 -.93 L .228 -.185 L .401 -.144 L .191 -.354 L -.146 -1.594 L .133 -.283 L .811 .32 L .391 .11 L .309 .013 L .17 -.128 L 1.148 -2.25 L 0 -.324 L -.192 -.408 L .045 -.212 L .938 -1.134 L .136 -.382 L -.057 -.761 L .197 -.354 L 1.446 -.883 L .719 -.512 L .312 -.129 L .558 .082 L .853 .221 L .295 -.058 L -.184 -.718 L .072 -.283 L .596 -.582 L .112 -.24 L .018 -.508 L .001 -.127 L .306 -.34 L .277 -.044 L .504 .279 L .397 .435 L .243 .901 L .217 .309 L .287 .041 L .504 -.031 L .146 .14 L .195 1.649 L .02 .875 L -.353 .862 L -.429 .722 L -.611 .525 L -.487 .271 L -.191 .198 L -.617 .85 L .075 .465 L .163 .705 L -.224 .58 L 0 .268 L .216 .069 L .312 -.086 L .819 -.442 L .771 -.089 L .479 -.017 L .156 .126 L .277 1.762 L .202 .324 L .554 -.074 L .521 .096 L .033 .268 L -.729 1.584 L .117 .352 L .228 .098 L .507 -.003 L .481 -.045 L .291 .379 L .341 .746 L .378 .266 L .246 .083 L .647 -.159 L .628 -.413 L .111 .38 L .153 .239 L -.502 .355 L -.53 .61 L -.442 .581 L -.582 .455 L -.193 .185 L -.08 .085 L -.158 .071 L -.645 .06 L -.436 .172 L -.528 .342 L -.394 .595 L -1.078 .316 L -.62 .018 L -.474 -.082 L -.362 .411 L -.143 .368 L -.036 .819 L -.114 .509 L .064 .409 L -.086 .24 L -.163 .001 L -.588 .131 L .739 .884 L .069 .183 L .112 .875 L .254 .14 L 1.091 .953 L .148 .324 L .646 1.041 L .163 .338 L -.194 .241 L -.451 .229 L -.128 .226 L .231 1.185 L -.171 .198 L -.812 .428 L .178 .38 L .6 1.436 L .54 .477 L .606 .604 L .203 .479 L .088 .663 L -.086 .636 L .006 .254 L .488 1.183 L .586 1.225 L -.077 .297 L -1.011 1.559 L -1.01 1.7 L -.098 .374 L -.359 -.181 L -.075 -.805 L .461 -.665 L .174 -.495 L .122 -.777 L .287 -.466 L -.512 -.027 L -.104 -.084 L -.004 -.282 L .195 -.509 L -.177 -1.524 L -.246 -.832 L -.639 -1.185 L -.488 -1.312 L -.347 -.846 L -.179 -.875 L -.174 -1.736 L -.117 -.677 L -.034 -.564 L -.051 -.212 L -.344 -.084 L -.148 -.098 L -.304 -.917 L -.516 -.677 L -.226 -.225 L -.247 .029 L -.081 .988 L -.158 .424 L -.43 .41 L -.59 .284 L -1.089 .511 L -.359 .622 L -.298 .297 L -.196 .142 L -.237 -.282 L -.007 -.438 L -.212 .015 L -.338 .354 L -.321 -.013 L -.166 -.211 L .147 -.495 L -.001 -.113 L -.621 .171 L -.276 .127 L -.247 .283 L -.355 -.126 L -.002 -.466 L .553 -1.54 L .162 -.791 L .001 -.889 L -.101 -1.059 L -.384 -.973 L -.431 -1.072 L -.196 -.296 L -.281 .537 L -.32 -.126 L -.526 -.366 L .482 -.17 L .312 -.015 L -.149 -.479 L -.054 -.268 L -.684 -.775 L -.182 -.183 L -.19 -.028 L -.407 .1 L -.38 -.267 L .086 -.438 L -.026 -.141 L -.209 -.112 L -.365 .043 L -.577 -.465 L -.504 -.606 L -.117 -.244 L .252 -.341 L .801 -.527 L -.194 -1.607 L +605.297 153.429 N -.126 -.264 L -.269 -.55 L -.223 -1.213 L -.611 -1.41 L -.357 -.395 L -.73 .354 L -.393 0 L -.034 -.084 L -.242 -.211 L -.356 -.592 L -.124 -.042 L -.152 .127 L -.026 .537 L .374 .79 L -.006 .424 L -.143 .169 L -.455 .086 L -.235 .537 L -.261 .1 L -.255 -.437 L -.311 -.395 L -.073 -.057 L -.163 .669 L -.28 .249 L -.203 .043 L -.271 -.536 L -.495 .636 L -.359 -.265 L -.147 -.532 L -.402 -1.775 L -.325 -1.409 L -.352 -.45 L -.04 -.254 L .505 -.765 L .029 -.269 L -.193 -.21 L -1.042 -.431 L -.339 -.323 L .548 -.61 L .4 -.299 L .502 -.13 L .382 -.101 L .047 -.155 L -.126 -.112 L -1.224 -.938 L -.494 -.237 L -.083 -.155 L .124 -.283 L .555 -.525 L .234 -.171 L 1.252 .303 L .339 .266 L .372 .266 L .489 -.06 L .417 .054 L .129 .324 L .053 .479 L .079 .719 L .095 .099 L .537 .109 L .547 .053 L .916 -.062 L .559 -.003 L 2.473 .198 L .111 .098 L .057 .127 L -.012 .79 L -.159 .34 L -.938 .767 L -.498 .13 L -.651 .356 L -.131 .283 L .009 .522 L .001 .381 L .23 .281 L .249 .267 L .529 .448 L .224 -.354 L .395 -1.159 L .281 -.115 L .4 -.044 L .064 .578 L .627 2.479 L .037 .466 L .194 1.607 L -.801 .527 L -.252 .341 L +627.408 186.411 N -.086 .337 L -.495 .35 L -.11 .575 L -.644 .089 L -.05 -.478 L -.309 -.163 L -.279 .28 L -.244 .394 L -.204 -.083 L -.118 -.239 L .213 -.398 L -.041 -.21 L -.055 -.226 L -.261 -.238 L -.447 -.119 L -.106 -.466 L -.571 .013 L -.448 .17 L .013 -.104 L .128 -.297 L -.15 -.183 L -.411 .212 L -.301 -.07 L -.38 -.38 L -.116 -.508 L .064 -.282 L -.151 -.438 L -.229 -.169 L -.388 .043 L -.39 -.719 L -.209 -.508 L -.3 -.324 L -.311 -.155 L -.456 -.395 L -.343 .1 L -.218 .142 L -.216 -.381 L -.04 -.607 L .163 -.749 L .559 -1.738 L .29 -.848 L -.087 -.044 L .098 -.374 L 1.01 -1.7 L 1.011 -1.559 L .077 -.297 L -.586 -1.225 L -.488 -1.183 L -.006 -.254 L .086 -.636 L -.088 -.663 L -.203 -.479 L -.606 -.604 L -.54 -.477 L -.6 -1.436 L -.178 -.38 L .812 -.428 L .171 -.198 L -.231 -1.185 L .128 -.226 L .451 -.229 L .194 -.241 L -.163 -.338 L -.646 -1.041 L -.148 -.324 L -1.091 -.953 L -.254 -.14 L -.112 -.875 L -.069 -.183 L -.739 -.884 L .588 -.131 L .163 -.001 L .086 -.24 L -.064 -.409 L .114 -.509 L .036 -.819 L .143 -.368 L .362 -.411 L .474 .082 L .62 -.018 L 1.078 -.316 L .394 -.595 L .528 -.342 L .436 -.172 L .645 -.06 L .158 -.071 L .08 -.085 L .541 .166 L .295 .182 L .118 .168 L .01 .423 L -.106 .805 L .066 .367 L .186 .154 L .423 -.003 L .489 -.2 L .414 -.045 L .045 .113 L .249 1.311 L -.085 .41 L -.528 1.569 L -.117 .438 L -.027 .494 L .145 .324 L .481 .138 L .37 -.411 L 1.173 -1.178 L .346 -.03 L .835 .348 L .59 .265 L .223 -.072 L .543 -.257 L .2 -.538 L .286 -.453 L .403 .012 L .893 .192 L .266 .153 L .052 .282 L .285 .535 L .688 .659 L .435 .632 L .058 1.524 L .107 .366 L .255 .464 L .979 1.279 L .419 .703 L .157 .507 L .002 .945 L -.121 .438 L -.808 .64 L -.301 -.167 L -.599 -.109 L -.575 -.039 L -.558 .074 L -.798 -.066 L -1.172 .091 L -.383 .101 L -.521 .441 L -.92 1.233 L -.146 .297 L -.076 .382 L .026 .635 L .219 .648 L .487 .717 L .16 .479 L -.146 .176 L -.026 -.063 L -.286 -.183 L -.458 -.084 L -.9 -.887 L -.434 -.154 L -.304 -.014 L -.572 .227 L -.391 -.112 L -.29 -.141 L -.337 -.014 L 0 -.282 L .19 -1.243 L -.107 -.184 L -.719 -.055 L -.248 -.084 L -.521 .043 L -.443 .212 L -.244 .297 L .207 .593 L -.103 .339 L -.318 .707 L .083 .579 L .054 .41 L -.293 .664 L -.583 1.187 L -.7 1.682 L -.255 1.314 L .104 1.171 L .172 .296 L .229 .169 L .55 -.072 L .396 -.142 L .252 .07 L .135 .353 L .009 .325 L -.08 .466 L .141 .282 L .178 .211 L .271 -.094 L .17 .46 L .209 .974 L -.032 .254 L .127 .737 L .434 .871 L .167 .155 L .801 .281 L .539 .112 L .467 -.058 L .294 .197 L .266 .612 L .664 .544 L .212 .145 L +204.31 158.989 N -.175 .412 L .612 -.173 L .026 .429 L -.419 1.241 L .178 .269 L -.237 .795 L .189 .318 L -.092 .397 L -.358 .875 L -.3 .35 L -.36 .032 L -.054 .286 L -.388 .238 L 0 .286 L -.69 .016 L .215 -4.297 L -.025 -.329 L .278 -.095 L .386 .27 L .599 -.857 L .178 -.447 L .437 -.016 L +200.276 169.481 N -.151 -.056 L -.928 -.342 L -.614 .032 L -.766 -.032 L -.608 -.239 L -.909 -.656 L -.513 -.419 L -.044 -.454 L -.054 -.553 L .207 -.238 L -.305 -.397 L 1.076 -1.812 L 1.06 -.007 L 1.762 .007 L .211 -.683 L -.532 -.223 L -.359 -.69 L -.624 -.231 L -.495 -.541 L -.396 -.223 L .999 -.032 L .04 -1.24 L 1.792 .005 L 2.332 .006 L -.215 4.297 L .69 -.016 L .303 .095 L .311 .302 L .14 -.191 L -.066 -.381 L .336 .157 L .458 .367 L -1.507 1.208 L -.499 .238 L -.177 .493 L .162 .604 L -.438 .302 L -.467 .048 L -.043 .254 L .164 .159 L -.351 .111 L -.184 .302 L -.22 -.016 L -.565 .461 L -.012 .223 L +204.413 165.093 N .312 -.03 L .612 -.27 L .639 -.058 L .743 .126 L .478 .069 L 1.443 .04 L .699 -.228 L .379 -.199 L .567 .267 L .788 -.03 L .763 -.101 L .63 -.001 L .5 .126 L .564 .253 L -.038 .353 L -.102 .226 L .228 .282 L .787 .238 L .557 .069 L .244 .524 L -1.425 .486 L -.424 .229 L -.248 .086 L -.463 -.097 L -.328 -.182 L -.259 -.013 L -.294 .242 L -.503 .794 L -1.207 .997 L -.725 -.42 L -.513 .583 L -.882 .034 L -.005 .961 L -.293 .412 L -.29 .143 L -1.001 .125 L -.311 -.661 L -.025 -.085 L -.478 -.3 L .085 -.731 L -.128 -.175 L -.272 0 L -.541 -.276 L -.433 .34 L -.365 -.016 L -.066 -.271 L -.565 -.35 L -.409 -.08 L -.208 -.418 L -.677 -.17 L .438 -.302 L -.162 -.604 L .177 -.493 L .499 -.238 L 1.507 -1.208 L +205.532 170.085 N .035 .076 L -.203 .057 L .01 .265 L -.237 .334 L -.68 -.046 L -.853 -.139 L -1.697 -.505 L -1.305 -.435 L -.325 -.21 L .012 -.223 L .565 -.461 L .22 .016 L .184 -.302 L .351 -.111 L -.164 -.159 L .043 -.254 L .467 -.048 L .677 .17 L .208 .418 L .409 .08 L .565 .35 L .066 .271 L .365 .016 L .433 -.34 L .541 .276 L .272 0 L .128 .175 L -.085 .731 L +242.38 173.617 N -.128 -.105 L -.84 .171 L -.534 .156 L -.414 .2 L -.056 .288 L .048 .497 L -.129 .396 L -.227 -.027 L -.381 .059 L -.99 1.758 L -.172 .722 L -.241 .722 L -.709 1.191 L .402 .025 L .234 -.1 L .384 -.017 L .31 .606 L .855 1.45 L .103 .395 L -.226 1.132 L .099 .353 L .401 .309 L .429 .548 L .397 .252 L .496 -.017 L 1.163 -.12 L 1.167 -.05 L .521 .181 L .64 .321 L .188 .253 L .847 .998 L .554 .576 L .144 0 L .522 -.13 L .76 -.174 L 1.99 -.224 L .644 .081 L -.409 .525 L -.085 1.004 L -.379 .511 L -.147 .326 L .026 .254 L .035 .438 L .048 .367 L .162 .804 L .447 .789 L .256 .437 L .486 .647 L .121 .282 L -.731 .612 L -.479 .526 L .51 .491 L .797 1.182 L -.52 .286 L -.834 .57 L -.412 .158 L -.463 .017 L -2.812 -.082 L -.64 -.024 L -.042 .325 L -.013 1.031 L .178 .154 L .896 .122 L .177 .084 L .293 .408 L .052 .367 L -.384 -.04 L -.417 -.11 L -.687 .032 L -.493 .187 L -.111 .085 L -.001 1.071 L 0 .554 L .192 .197 L .688 .363 L .192 .183 L -.031 .777 L .399 .562 L .031 .212 L -.326 1.428 L -.706 4.411 L -.073 .382 L -.133 .198 L -.156 -.14 L -.575 -.703 L -.237 -.126 L -.161 .058 L -.448 .031 L 1.155 -1.956 L .035 -.198 L -.127 -.069 L -1.299 -.84 L -.509 -.209 L -.708 .442 L -.397 -.182 L -.523 -.421 L -.452 .427 L -.337 .157 L -.496 .031 L -1.038 -.008 L -.573 -.152 L -.092 -.281 L .004 -.396 L -.173 -.296 L -.479 -.039 L -.366 -.14 L -.078 -.282 L -.251 -.761 L -.988 -.672 L -.526 -.364 L -.208 -.62 L -.208 -.324 L -.513 -.435 L -.897 -.418 L -.927 -.107 L -.081 -.112 L -.269 -.162 L -.197 -.118 L -.709 -.631 L -.128 -.056 L -.89 .401 L -.67 .061 L -.977 -.277 L -.355 -.309 L -.166 -.493 L -.227 -.225 L -1.432 -.656 L -1.496 -.803 L .033 -.068 L -.117 -.311 L -.181 -.282 L .108 -.212 L .509 -.114 L .465 .112 L .186 -.325 L -.348 -.564 L .086 -.424 L .314 -.227 L .878 -.058 L .193 .042 L .41 -.227 L .445 -.679 L .45 -.961 L .651 -1.061 L -.122 -.268 L -.56 -.408 L -.071 -.184 L .306 -.721 L .089 -.523 L -.149 -.861 L -.371 -.86 L .085 -.254 L .49 -.143 L .135 -.212 L -.088 -.198 L -.565 -.479 L -.042 -.226 L .103 -.198 L .242 -.326 L .036 -.254 L -.173 -.282 L -.739 -.719 L -.364 -.396 L .256 -.753 L .228 -.082 L -.045 -.45 L .19 .082 L .085 .307 L .584 -.409 L .094 -.43 L .322 -.062 L -.509 -1.038 L -.228 -.149 L -.084 -.327 L .142 .075 L .42 .338 L .397 .507 L .22 .508 L .235 .197 L .199 -.17 L .147 -.241 L -.332 -.776 L .02 -.212 L .176 -.297 L .445 -.34 L .399 -.297 L .501 -.736 L .327 -.156 L .684 -.101 L .217 -.382 L -.104 -.381 L .174 -.777 L .067 -.65 L .207 -.48 L .498 -.439 L .429 -.283 L .592 -.242 L .113 0 L .374 .206 L .22 .443 L .281 -.34 L .031 -.438 L .199 -.551 L .22 -.071 L .267 .126 L .855 .041 L .562 -.001 L .623 -.27 L .237 -.254 L .476 -.298 L .848 -.256 L .435 -.396 L .278 -.551 L .333 -.255 L .469 -.17 L .58 .013 L .526 .338 L .155 .126 L .155 .339 L -.285 .332 L +408.6 174.04 N -.062 .777 L .164 .762 L .388 .718 L -.316 .962 L -.19 .566 L -.223 .298 L -.656 .414 L -.095 .34 L .116 .592 L -.078 .368 L -.433 .13 L -.257 .03 L -.237 .397 L .002 .381 L .003 .48 L -.012 .876 L -.09 .989 L .217 1.439 L -.121 1.188 L .006 .234 L -.333 .015 L -1.232 .144 L -.669 .052 L -.106 -.205 L -.295 -1.072 L .188 -.708 L .026 -.833 L -.036 -.537 L -.135 -.974 L -.006 -.862 L -.035 -.522 L .013 -.579 L -.442 -1.311 L -.164 -.691 L -.403 -.323 L -.468 -.294 L -.18 -.395 L .141 -.594 L .046 -.424 L .062 -.142 L .24 -.157 L .366 -.553 L .415 -.271 L .418 -.045 L .739 .095 L .337 -.158 L .415 -.468 L .237 -.764 L -.131 -.367 L .577 -.3 L .321 -.073 L .339 .28 L .727 .589 L .902 .503 L +394.266 178.814 N .191 -.17 L -.02 -.41 L -.261 -1.934 L .125 -.34 L .271 -.157 L 2.119 -.041 L .867 .037 L 1.429 .006 L .976 -.458 L .161 .032 L .595 .119 L -.25 .849 L .05 .254 L .633 .915 L .244 .451 L -.188 .721 L .02 .396 L .265 1.114 L .181 .592 L .503 .788 L .032 .155 L -.286 .242 L -.174 .382 L .01 1.314 L -.011 .72 L .021 .551 L .18 .479 L .468 .577 L .752 .608 L -.503 .682 L -.304 .099 L -.593 -.013 L -.992 .144 L -.463 .185 L -.188 .098 L -.898 .469 L -1.263 .398 L -.942 .412 L -.958 .567 L -.578 -.324 L -.945 -.436 L -.074 -.124 L -.066 -.741 L -.554 -1.155 L -.263 -.747 L -.103 -.706 L .327 -1.005 L .437 -1.274 L .521 -.851 L .203 -.595 L -.334 -1.438 L -.189 -1.285 L -.178 -.154 L +400.72 175.499 N 1.013 .163 L .611 .166 L .29 .041 L -.046 .424 L -.141 .594 L .18 .395 L .468 .294 L .403 .323 L .164 .691 L .442 1.311 L -.013 .579 L .035 .522 L .006 .862 L .135 .974 L .036 .537 L -.026 .833 L -.188 .708 L .295 1.072 L .106 .205 L -.452 .035 L -.479 .128 L -.368 .212 L -.023 .04 L -.752 -.608 L -.468 -.577 L -.18 -.479 L -.021 -.551 L .011 -.72 L -.01 -1.314 L .174 -.382 L .286 -.242 L -.032 -.155 L -.503 -.788 L -.181 -.592 L -.265 -1.114 L -.02 -.396 L .188 -.721 L -.244 -.451 L -.633 -.915 L -.05 -.254 L .25 -.849 L +383.772 190.418 N .041 -.919 L .105 -.565 L .247 -.849 L .059 -.452 L -.131 -.282 L -1.264 -1.334 L -.592 .032 L -.369 -.097 L -.194 -.183 L -.05 -.183 L .501 -.865 L .059 -.438 L -.119 -.55 L .062 -.17 L .047 -.099 L .602 -.554 L .188 -.354 L -.179 -.21 L -.296 -.549 L .03 -.127 L .158 -.199 L .304 -.03 L .548 .223 L .304 .012 L .19 -.143 L -.051 -.226 L -.648 -.561 L -.309 -.351 L .332 -.37 L .125 -.283 L -.197 -.31 L -.695 -.405 L -.214 -.409 L .264 -.623 L .379 -.397 L .522 -.54 L .352 -.059 L .566 .321 L .455 .436 L .35 -.228 L .362 -.469 L .571 -.483 L .239 -.114 L .257 .041 L .147 .211 L .004 .297 L .117 .381 L .148 .239 L .352 -.059 L .604 -.399 L .159 -.1 L .259 .168 L .545 -.003 L .308 .252 L .15 .465 L .52 .562 L .452 .223 L .354 .083 L .368 -.115 L .446 -.257 L .608 -.159 L .769 -.075 L .644 .166 L .63 .434 L .178 .154 L .189 1.285 L .334 1.438 L -.203 .595 L -.521 .851 L -.437 1.274 L -.327 1.005 L .103 .706 L .263 .747 L .554 1.155 L .066 .741 L -.119 -.201 L -.289 -.197 L -.208 .015 L -.143 .24 L -.096 .042 L -.48 -.027 L -.705 -.167 L -.608 -.083 L -2.352 .062 L -1.279 .243 L -.575 .199 L -1.07 .369 L -1.739 .781 L -.701 .425 L -.256 -.013 L -.075 -.032 L +627.408 186.411 N .035 .024 L .523 .098 L 1.061 1.198 L .693 .916 L .506 .762 L .081 .579 L -.023 .805 L -.134 .862 L .07 1.073 L -.07 .636 L .097 .494 L .196 .381 L .53 .493 L .338 .536 L .705 1.608 L .062 .127 L -.366 -.069 L -.895 -.055 L -.401 .142 L -.175 -.07 L -.521 -.437 L -.885 -.605 L -.6 -.337 L -1.231 -.675 L -1.02 -.732 L -.217 -.254 L -.16 -.988 L -.438 -.691 L -.895 -.817 L -.195 -.663 L .039 -.494 L .03 -.283 L -.107 -.409 L -.399 -.634 L -.347 -1.849 L -.188 -.72 L .043 -.362 L .448 -.17 L .571 -.013 L .106 .466 L .447 .119 L .261 .238 L .055 .226 L .041 .21 L -.213 .398 L .118 .239 L .204 .083 L .244 -.394 L .279 -.28 L .309 .163 L .05 .478 L .644 -.089 L .11 -.575 L .495 -.35 L .086 -.337 L h 643.95 196.042 m .081 .044 L .375 .408 L .397 .141 L .861 .083 L .413 .168 L .761 .436 L .335 .042 L .337 -.1 L -.503 -.535 L .169 -.551 L .365 -.608 L .528 -1.258 L .584 -.27 L 1.481 -.342 L 1.018 -.299 L .428 -.326 L .524 -1.021 L .523 -.323 L .87 -1.117 L .22 -.212 L .244 -.147 L .112 -.068 L .084 .126 L .062 .37 L .234 -.012 L .111 .259 L .309 .271 L .383 -.271 L 1.234 -.42 L -.025 -.086 L -.197 -.197 L .013 -.247 L .024 -.111 L -.148 -.444 L -.11 -.174 L .167 -.042 L .188 .143 L .085 -.016 L .449 -.084 L .161 -.283 L -.036 -.24 L -.478 -.366 L .197 -.396 L .436 -.071 L .511 .041 L .154 -.605 L .408 -.313 L .284 -.48 L .531 -.58 L .498 -1.032 L .075 -.17 L .322 .465 L .33 .098 L .315 -.424 L .305 .494 L .351 .282 L .402 .211 L .075 .338 L -.182 .354 L -.234 .452 L .037 .198 L .631 -.128 L .472 -.128 L .115 .226 L -.349 .495 L .742 -.1 L .357 -.085 L .269 .056 L 1.035 .662 L .345 .14 L .1 .24 L -.158 .269 L -.201 .155 L -.44 .143 L -.594 .029 L -.683 -.083 L -.355 .311 L .096 .254 L .888 .69 L -.161 .311 L -.458 .199 L -.646 .1 L -.518 .114 L -.067 .15 L -.182 -.09 L -.753 -.292 L -.446 -.04 L -.624 .018 L -.651 -.081 L -.748 -.081 L -.464 .017 L -.247 .157 L -.381 .638 L -.119 .565 L .106 .988 L -.22 .383 L -.646 .244 L -.218 .34 L .076 .748 L -.928 1.785 L -.387 .299 L -.864 .175 L -.465 .172 L -.467 .356 L -.287 .03 L -.559 -.152 L -.524 -.223 L -.557 -.251 L -.431 -.11 L -.479 .074 L -.531 .441 L -.403 .525 L -.528 .342 L -.399 .172 L -.543 -.11 L -.526 -.223 L -.255 .001 L -.928 .416 L -.446 -.28 L -.304 -.083 L -1 -.983 L -.253 -.295 L -.288 -.792 L +274.556 195.884 N .06 -.212 L -.332 -.563 L -.49 -1.127 L -.246 -.832 L -.185 -.295 L -.561 -.067 L -.532 -.675 L -.571 -.831 L .328 -.694 L .095 -.467 L -.078 -.777 L .169 -.17 L 1.131 -.091 L .183 -.27 L .082 -.862 L .142 -.496 L .015 -.339 L .326 -.312 L .382 -.057 L 1.392 .463 L .465 .042 L .083 -.41 L .141 -.085 L .337 .027 L .833 .012 L .863 -.03 L .723 .069 L .63 .182 L .999 .427 L -.647 .876 L -.391 .751 L -.137 .594 L .094 .381 L .134 .635 L .086 .664 L .521 .844 L .029 .438 L -.424 1.472 L -.489 .963 L -1.05 -.488 L -.319 .001 L -.534 .385 L -.398 .059 L -.418 -.139 L -.642 -.124 L -.172 .156 L -.2 .326 L .611 1.014 L -.528 -.054 L -1.108 -.276 L -.4 -.04 L +285.859 190.719 N .015 .422 L -1.102 1.646 L -.427 .765 L -.439 .992 L -.464 .681 L -.299 .214 L -.56 -.025 L -1.11 -.389 L -.882 .613 L -.225 -.069 L -.649 -.505 L .489 -.963 L .424 -1.472 L -.029 -.438 L -.521 -.844 L -.086 -.664 L -.134 -.635 L -.094 -.381 L .137 -.594 L .391 -.751 L .647 -.876 L .218 .093 L 1.033 .294 L .55 .196 L .799 .549 L 1.264 1.084 L .545 .564 L .317 .465 L .193 .028 L +429.505 210.684 N -.695 -.533 L -.351 .13 L -.68 .513 L -.536 .414 L -.112 -.177 L -.392 -.86 L -1.381 -1.344 L .184 -.295 L .413 -.229 L .803 .307 L .343 -.681 L -.052 -.296 L -.274 -.253 L -.39 -.521 L -.116 -.366 L .058 -.495 L .127 -.1 L .909 -.146 L .604 -.243 L .125 -.213 L .167 -.807 L .174 -.185 L .239 -.029 L .193 .14 L .341 .479 L .405 .521 L .386 .195 L .287 -.016 L .188 -.228 L .362 -.482 L .29 .253 L .167 .578 L .146 .112 L .304 .068 L .255 -.114 L .184 -.68 L .243 -1.089 L .131 -1.229 L .229 -1.047 L -.114 -.338 L -.161 -.127 L -.384 -.082 L -.528 -.208 L -.242 -.31 L -.132 -.437 L .008 -.109 L .021 -.3 L .157 -.284 L .492 -.398 L .556 -.441 L .094 -.354 L -.389 -.902 L -.369 -.322 L -.592 -.067 L -.939 .5 L -.463 -.025 L -.146 -.253 L -.068 -.734 L .077 -.679 L .396 -.468 L .56 .109 L .863 .023 L .878 -.076 L .271 .055 L .479 .04 L .56 .124 L .576 .194 L .864 .334 L .863 .292 L .271 -.086 L -.1 -.861 L .159 -.185 L .303 -.312 L .365 -.497 L .158 -.523 L .222 -1.287 L .255 -.228 L .479 -.102 L .975 -.175 L .367 .054 L .624 .138 L .895 .093 L .751 -.287 L .128 .197 L -.031 .156 L -.398 1.203 L -.558 .837 L -.349 .821 L -.094 .551 L -.156 .764 L -.196 2.021 L -.254 1.342 L -.115 .61 L -.169 .708 L -.139 .523 L -.459 .427 L -.525 .229 L -.809 .599 L -.41 .454 L -.47 .836 L -.343 .751 L -.193 1.159 L -.074 .396 L .122 .72 L -.086 .706 L -1.025 .938 L -.364 .229 L -.931 .811 L -.554 .399 L -.57 .328 L -.147 -.211 L -.042 -.664 L -.054 -.424 L -1.495 .532 L -.327 .581 L -.443 .271 L -.177 -.013 L -.484 -.336 L +425.506 195.522 N .045 -.495 L .88 .093 L 1.773 .088 L .831 .038 L 1.022 .149 L -.396 .468 L -.077 .679 L .068 .734 L .146 .253 L .463 .025 L .939 -.5 L .592 .067 L .369 .322 L .389 .902 L -.094 .354 L -.556 .441 L -.492 .398 L -.157 .284 L -.021 .3 L -.008 .109 L .132 .437 L .242 .31 L .528 .208 L .384 .082 L .161 .127 L .114 .338 L -.229 1.047 L -.131 1.229 L -.243 1.089 L -.184 .68 L -.255 .114 L -.304 -.068 L -.146 -.112 L -.167 -.578 L -.29 -.253 L -.362 .482 L -.188 .228 L -.287 .016 L -.386 -.195 L -.405 -.521 L -.341 -.479 L -.193 -.14 L -.239 .029 L -.174 .185 L -.167 .807 L -.125 .213 L -.604 .243 L -.909 .146 L -.127 .1 L -.058 .495 L .116 .366 L .39 .521 L .274 .253 L .052 .296 L -.343 .681 L -.803 -.307 L -.413 .229 L -.184 .295 L -.038 -.037 L -.563 -.493 L -.532 -.55 L -.259 -.466 L -1.318 -1.169 L .286 -.312 L -.369 -.281 L -.528 -.056 L -.918 -1.438 L .382 -.297 L .111 -.1 L -.321 -.395 L -.464 -.14 L -.29 -.564 L -.369 -.451 L .319 -.17 L .541 -.411 L .223 -.396 L .291 -.976 L .089 -.295 L .415 .07 L .495 .013 L -.064 -.211 L -.56 -.352 L -.561 -.451 L .208 -.042 L .271 -.128 L .142 -.617 L .83 -.043 L .927 .008 L 1.245 .021 L .575 -.032 L -.001 -.155 L -.02 -.551 L -.026 -1.836 L +422.536 195.513 N 1.005 -.007 L 1.965 .017 L .026 1.836 L .02 .551 L .001 .155 L -.575 .032 L -1.245 -.021 L -.927 -.008 L -.83 .043 L .033 -.146 L -.049 -.297 L -.144 -.084 L -.416 -.098 L .287 -.467 L .447 -.523 L .335 -.58 L .066 -.403 L h 419.636 193.273 m -.484 -.049 L -.049 -.218 L .049 -.291 L .242 -.097 L .024 -.146 L 0 -.291 L .17 -.097 L .169 -.121 L .219 .048 L .218 .048 L .097 .194 L -.193 .169 L -.146 .243 L -.17 .339 L -.146 .267 L +222.291 207.801 N .188 -.126 L .264 -.312 L .585 -1.061 L .038 -.269 L -.209 -.733 L .058 -.391 L -.478 .617 L -.732 .623 L -.333 -.098 L -.601 -.324 L -.408 -.408 L .389 -.283 L .1 -.24 L -.167 -.579 L .005 -.438 L .133 -.466 L -.109 -.282 L -.362 -.649 L .193 -.17 L .48 -.198 L .721 -.454 L -.319 -.395 L 0 -.226 L .175 -.354 L .497 -.462 L .157 -.146 L .14 -.848 L -.116 -.452 L -.082 -.184 L .11 -.226 L .686 -.101 L .891 -.341 L .396 -.241 L .474 -.382 L .09 -.186 L 1.496 .803 L 1.432 .656 L .227 .225 L .166 .493 L .355 .309 L .977 .277 L .67 -.061 L .89 -.401 L .128 .056 L .709 .631 L .197 .118 L .269 .162 L .081 .112 L .387 .76 L .321 .789 L -.08 .255 L -.352 .384 L -.547 1.147 L -.533 .779 L -.71 .725 L -1.001 .755 L -.336 .087 L -1.028 .303 L -.901 .358 L -.809 .499 L -.59 .653 L -.284 .51 L -.987 2.506 L -.267 .312 L -.242 .072 L -.398 -.068 L -.398 -.491 L -.191 -.479 L -.312 -.252 L -.815 .005 L -.444 -.11 L -.105 -.197 L -.097 -.494 L .233 -.34 L .029 -.495 L .005 -.569 L +245.934 224.314 N 1.109 1.843 L .922 1.646 L .08 .24 L -.437 .736 L -.15 .523 L -.143 .848 L .057 .522 L .236 .902 L -.156 .34 L -.221 .34 L -.532 .582 L -.102 .452 L .347 .845 L -.21 .368 L -.159 .34 L .022 .48 L .604 1.168 L .015 .522 L -.285 .439 L -.723 .61 L -.12 .227 L .049 .48 L .132 .295 L .018 .142 L -.586 .187 L -.15 .199 L -.228 .933 L -.259 .298 L -.852 .275 L -.201 -.517 L -.289 -.31 L -1.422 -.618 L -.313 -.239 L -.233 -.678 L -.315 -.38 L -.559 -.225 L -.504 -.281 L -.489 -.254 L -.616 -.309 L -.873 -.464 L -.673 -.366 L -.866 -.379 L -.838 -.337 L -1.271 -.845 L -1.354 -.985 L -1.232 -1.099 L -.594 -.705 L -.42 -.677 L .008 -.438 L 0 -.903 L -.269 -.606 L -.781 -1.043 L -1.389 -2.778 L -.285 -.268 L -.467 -.211 L -.074 -.085 L .055 -.536 L -.02 -.396 L -.149 -.396 L -1.208 -2.199 L -.997 -1.961 L -.688 -1.27 L -1.365 -1.917 L -.272 -.353 L -.598 -.973 L -.462 -.423 L -.75 -.437 L -.914 -.365 L -.61 -.365 L .119 -.17 L .181 -.113 L .609 -.029 L .144 -.41 L -.118 -.282 L -.592 -.874 L -.353 -.437 L -.258 -.72 L .01 -.24 L .244 -.523 L .582 -.622 L 1.02 -.878 L .47 -.198 L .317 -.214 L -.005 .569 L -.029 .495 L -.233 .34 L .097 .494 L .105 .197 L .444 .11 L .815 -.005 L .312 .252 L .191 .479 L .398 .491 L .398 .068 L .242 -.072 L .267 -.312 L .987 -2.506 L .284 -.51 L .59 -.653 L .809 -.499 L .901 -.358 L 1.028 -.303 L .336 -.087 L 1.001 -.755 L .71 -.725 L .533 -.779 L .547 -1.147 L .352 -.384 L .08 -.255 L -.321 -.789 L -.387 -.76 L .927 .107 L .897 .418 L .513 .435 L .208 .324 L .208 .62 L .526 .364 L .988 .672 L .251 .761 L .078 .282 L .366 .14 L .479 .039 L .173 .296 L -.004 .396 L .092 .281 L .573 .152 L 1.038 .008 L .496 -.031 L .337 -.157 L .452 -.427 L .523 .421 L .397 .182 L .708 -.442 L .509 .209 L 1.299 .84 L .127 .069 L -.035 .198 L -1.155 1.956 L .448 -.031 L .161 -.058 L .237 .126 L .575 .703 L .156 .14 L .136 .324 L -.341 .186 L -.793 -.235 L -.493 -.096 L -.322 .072 L -.604 .441 L -.371 .115 L -.669 -.066 L -1.895 .773 L -.701 .442 L -.372 .172 L -.599 1.415 L -.319 .511 L -.021 .155 L .277 .86 L .012 .112 L -.625 .498 L -.62 .328 L -.349 .342 L -.247 .622 L .106 .564 L .619 .957 L 1.333 2.166 L .106 .127 L -.247 .495 L -.208 .312 L 1.085 .12 L .415 .04 L .312 .182 L .241 .323 L .096 .663 L 1.843 .032 L .762 -.499 L .648 -.484 L .326 -.114 L -.059 1.511 L -.098 1.173 L .108 .353 L .317 .337 L .285 .068 L .358 -.072 L .786 -.259 L .42 -.045 L +279.288 257.295 N -.063 -.423 L .027 -.777 L .222 -.819 L .298 -.835 L .321 -.75 L -.019 -.141 L -.491 -.336 L -.234 -.112 L -1.29 .445 L -.224 -.055 L -.254 -.563 L -.487 -2.524 L -.121 -.437 L -.843 -.404 L -.724 -.278 L -.115 .001 L -.709 .413 L -.346 .03 L -.925 -.221 L -.818 -.15 L -.372 -.04 L .006 -.72 L .086 -.721 L .132 -.862 L -.104 -.959 L -.521 -.872 L -.084 -.663 L -.253 -.408 L .421 -.666 L .38 -.765 L .238 -.834 L .185 -1.173 L -.022 -.494 L -.307 -.774 L -.316 -.479 L -.73 -.362 L -.436 -.407 L -.067 -.563 L .261 -.835 L -.042 -.296 L -.693 -.024 L -1.615 -.019 L -.5 -.012 L -.967 -.036 L -.153 -.112 L -.249 -.944 L -.138 -2.032 L -.03 -.706 L -.203 -1.029 L .038 -.565 L -.085 -.169 L -.403 -.237 L -.537 -.166 L -.636 -.123 L -1.148 .077 L -.22 -.084 L -.398 -.308 L -.385 -.774 L -.096 -.014 L -.882 -.037 L -.3 -.098 L -.75 -.603 L -.688 -.307 L -.676 -.25 L -.355 .03 L -.787 -.023 L -.316 -.097 L -1.1 -.939 L -.813 -.928 L -.335 -.591 L -.141 -.635 L -.036 -.818 L .064 -.622 L .079 -.621 L -.045 -.748 L -1.283 -.021 L -.934 .076 L -.36 .158 L -.874 .485 L -1.471 1.109 L -.415 .243 L -.48 -.025 L -.336 -.026 L -.946 .824 L -.355 .03 L -1.122 -.304 L -.939 -.136 L -.42 .045 L -.786 .259 L -.358 .072 L -.285 -.068 L -.317 -.337 L -.108 -.353 L .098 -1.173 L .059 -1.511 L -.326 .114 L -.648 .484 L -.762 .499 L -1.843 -.032 L -.096 -.663 L -.241 -.323 L -.312 -.182 L -.415 -.04 L -1.085 -.12 L .208 -.312 L .247 -.495 L -.106 -.127 L -1.333 -2.166 L -.619 -.957 L -.106 -.564 L .247 -.622 L .349 -.342 L .62 -.328 L .625 -.498 L -.012 -.112 L -.277 -.86 L .021 -.155 L .319 -.511 L .599 -1.415 L .372 -.172 L .701 -.442 L 1.895 -.773 L .669 .066 L .371 -.115 L .604 -.441 L .322 -.072 L .493 .096 L .793 .235 L .341 -.186 L -.136 -.324 L .133 -.198 L .073 -.382 L .706 -4.411 L .326 -1.428 L -.031 -.212 L -.399 -.562 L .031 -.777 L -.192 -.183 L -.688 -.363 L -.192 -.197 L 0 -.554 L .001 -1.071 L .111 -.085 L .493 -.187 L .687 -.032 L .417 .11 L .384 .04 L -.052 -.367 L -.293 -.408 L -.177 -.084 L -.896 -.122 L -.178 -.154 L .013 -1.031 L .042 -.325 L .64 .024 L 2.812 .082 L .463 -.017 L .412 -.158 L .834 -.57 L .52 -.286 L .148 .168 L .138 .437 L .161 .861 L .088 .452 L .199 .437 L .432 .054 L .694 .546 L .482 .223 L .414 -.073 L .757 -.697 L .083 .183 L .186 .776 L .271 -.016 L .645 -.739 L .74 -.654 L .554 -.286 L .652 -.173 L .235 -.213 L .259 -.666 L .203 -.199 L .652 -.131 L .569 -.272 L .265 -.27 L -.15 -.253 L -.434 -.125 L -.96 -.051 L -.166 -.239 L -.079 -.55 L -.302 -1.524 L -.391 -.69 L -.616 -.688 L .041 -.184 L .159 -.029 L .309 .125 L .896 .461 L .385 .04 L 1.149 -.035 L .344 .224 L .628 .618 L .348 -.115 L .232 -1.117 L .284 -.115 L .465 .054 L .557 -.074 L .807 -.23 L 1.74 -.9 L .592 -.385 L .163 -.326 L -.103 -.169 L .375 -.257 L .302 -.058 L .516 .124 L .26 .111 L .04 .212 L -.452 1.09 L .304 -.001 L .533 .138 L .435 .958 L -.179 .368 L -.547 1.416 L -.213 .962 L .156 .465 L .281 .394 L .167 .31 L -.072 .354 L .008 .396 L .15 .296 L 1.103 .897 L .613 .392 L .686 -.075 L .694 -.513 L .505 -.314 L 1 -.331 L .934 -.429 L .943 .022 L .4 .04 L 1.108 .276 L .528 .054 L -.611 -1.014 L .2 -.326 L .172 -.156 L .642 .124 L .418 .139 L .398 -.059 L .534 -.385 L .319 -.001 L 1.05 .488 L .649 .505 L .225 .069 L .882 -.613 L 1.11 .389 L .56 .025 L .299 -.214 L .464 -.681 L .439 -.992 L .427 -.765 L 1.102 -1.646 L -.015 -.422 L .409 -.241 L .276 .141 L .235 .423 L .164 .791 L .414 1.34 L .108 .607 L .472 1.383 L .296 .55 L .324 .324 L .978 .21 L .196 .338 L .038 .551 L -.045 .254 L -.524 .354 L -.933 1.414 L -.238 .325 L -.51 .411 L -.41 .231 L -.244 .138 L -.798 .778 L -.544 .947 L -.419 1.018 L -.402 .453 L .271 .112 L .512 -.072 L .497 -.198 L 1.202 -.709 L .112 -.028 L .299 .889 L .442 .818 L .255 .112 L .287 .07 L 1.135 -.031 L .592 -.058 L .737 -.298 L -.277 .679 L -.017 .584 L .448 -.557 L 1.254 -1.006 L .289 -.156 L .306 -.382 L .499 -.933 L .272 -.396 L .256 -.099 L 1.006 -.003 L .352 -.198 L .175 0 L .687 .549 L .654 .267 L .32 -.028 L .814 .28 L 1.069 .45 L .334 .281 L .269 .593 L .08 .028 L .176 -.015 L .402 -.354 L .319 .042 L .302 .254 L .538 .789 L .205 .396 L -.13 .254 L -.308 .41 L -.116 .424 L .091 .466 L .171 .396 L .825 -.821 L .369 -.156 L .609 -.156 L .995 -.454 L .224 -.028 L .367 .069 L .764 .38 L .907 .436 L .462 .098 L 1.117 .167 L 1.118 .083 L .464 -.058 L .48 -.029 L .577 -.171 L .416 -.016 L 1.131 .351 L .731 .408 L .762 .479 L .586 .437 L 1.595 1.395 L .742 .662 L .821 .605 L .41 .338 L .477 .196 L .734 .168 L 1.247 .097 L .912 .04 L .445 .197 L .265 .465 L .087 .607 L .592 2.004 L .268 1.143 L .062 .988 L -.076 .579 L -.179 .904 L -.243 .848 L -.559 1.301 L -.518 .849 L -1.347 1.175 L -1.388 1.288 L -.44 .198 L -.354 .043 L -.39 .637 L -.094 .396 L -.012 .353 L -.504 1.074 L -.6 .976 L -.8 1.104 L -.266 .212 L -.194 .015 L -.079 -.423 L -.278 -.296 L -.367 -.084 L -.064 .79 L -.538 1.64 L -.049 .734 L -.077 .607 L .318 2.738 L .078 .988 L -.577 2.543 L -.039 .663 L .14 .649 L .043 .085 L -.759 .495 L -.404 .51 L -.261 .791 L -.04 .367 L .245 1.468 L -.106 .367 L -.214 .283 L -.676 .608 L -.752 1.498 L -1.01 1.4 L -.201 .537 L -.055 .311 L .144 .945 L -1.203 .37 L -.544 .283 L -.355 .368 L -.084 .466 L .021 .367 L -.401 .114 L -.864 -.041 L -.979 .172 L -.654 .001 L -.764 -.055 L -.465 -.112 L -.922 .072 L -.736 .002 L -.214 .607 L -.295 .198 L -.795 .312 L -.481 .453 L -.21 .354 L -.747 -.267 L -.35 .071 L -.563 .255 L -1.864 1.232 L -.528 .396 L -.725 .383 L -.616 .438 L -.532 .679 L -.486 .241 L -.567 .072 L -.278 -.014 L .006 .24 L .336 .225 L .12 .536 L -.111 .537 L -.099 .282 L -.282 .156 L -.084 .155 L .384 .648 L .036 1.186 L .05 1.045 L -.057 .311 L -.11 .594 L -.198 .621 L -.464 .735 L -.566 .495 L -.788 .524 L -.866 1.046 L -.208 .396 L -.476 1.145 L -.499 .933 L -.75 1.004 L -.69 .623 L -.801 .78 L .321 -.808 L .436 -.594 L .629 -.566 L .605 -1.158 L -.06 -.254 L -.356 .142 L -.397 -.014 L -.633 -.21 L -.075 .155 L .002 .297 L -.401 1.215 L -.349 .48 L -.661 .438 L -.317 .283 L -.225 .424 L -.013 .354 L -.448 1.709 L -.481 .763 L -.787 .934 L -1.076 .979 L -.101 -.313 L -.258 -.746 L .103 -.269 L .634 -.766 L .017 -.269 L -.333 -.379 L -.163 -.027 L -.131 -.197 L -.853 -1.109 L -.474 -.435 L -.999 -.587 L -.55 -.194 L -.617 -.194 L -.432 -.576 L -.365 -.393 L -.693 .427 L -.27 .016 L -.232 -.38 L -.59 -.814 L -.379 -.407 L -.47 -.364 L -.266 -.098 L -.25 .101 L -1.042 .246 L -.55 .003 L .214 -.27 L .833 -.88 L 1.805 -1.816 L 1.435 -1.363 L 1.633 -1.448 L .348 -.242 L 1.754 -.744 L .521 -.313 L .161 -.467 L .094 -1.638 L -.517 -1.154 L -.206 -.196 L -.462 .017 L -.957 .161 L h 288.966 203.943 m -.558 -.125 L -.301 -.536 L -.078 -.382 L .16 -.197 L -.094 -.636 L .048 -.381 L .208 -1.018 L .176 -.099 L .479 -.058 L .879 .097 L 1.007 .11 L .479 -.199 L .368 .028 L .479 .168 L .479 .083 L .319 .155 L -.335 .538 L -.193 .946 L -.257 .494 L -.289 .312 L -.561 .326 L -.464 .171 L -.527 .015 L -.783 .016 L -.641 .171 L +732.92 214.323 N -.164 -.24 L -.225 -.197 L -.379 -.126 L -.416 .198 L -.399 -.38 L -.287 -.184 L -.659 -.238 L -.243 -.239 L .156 -.255 L .29 .027 L .731 -.058 L .538 .126 L .743 .083 L .523 -.058 L .258 -.185 L .232 -.509 L .056 .099 L .351 .395 L .286 .184 L .241 .014 L .961 -.2 L .366 -.227 L .361 -.722 L .241 -.212 L .653 -.029 L .263 -.128 L .04 -.282 L -.064 -.565 L -.043 -.536 L .495 .196 L .404 .056 L .324 -.354 L .318 .578 L .077 .353 L -.196 .495 L -.099 .184 L -.509 .044 L -.159 .226 L .061 .17 L .437 .479 L -.308 .354 L -.264 .113 L -.742 -.083 L -.416 .001 L -.091 .269 L -.408 .495 L -.275 .156 L -.973 .426 L -.484 .143 L -.798 .029 L -.807 .115 L h 713.795 220.696 m .031 -3.438 L -.046 -.805 L -.431 -1.368 L .44 -.822 L -.169 -7.966 L 2.581 .802 L .85 .337 L 1.04 .295 L 1.254 .378 L .848 .507 L .613 .323 L .597 .084 L .38 -.058 L .26 .508 L .274 .254 L .635 .352 L .687 .395 L .779 .718 L -.3 .947 L .033 .226 L .305 .226 L .665 .111 L 1.887 .787 L .354 .027 L .72 .183 L .181 .254 L .413 .535 L .211 .579 L -.166 .113 L -1.114 .073 L -.563 .156 L -.098 .155 L .047 .339 L .589 .987 L .5 .521 L 1.464 1 L .218 .847 L .725 1.044 L .288 .141 L .304 -.015 L .712 -.086 L .338 .013 L .087 .198 L -.354 .551 L .218 .212 L .401 .141 L .423 .041 L .63 .168 L .096 .127 L -.031 .142 L -.648 .213 L .287 .24 L 1.064 .28 L .538 .295 L .235 .763 L -.064 .226 L -1.094 -.012 L -.215 -.154 L -.146 -.466 L -.126 -.099 L -1.011 -.111 L -1.063 -.266 L -.644 -.126 L -.752 .016 L -.774 -.026 L -.573 -.211 L -.494 -.352 L -.223 -.522 L -.24 -.268 L -.726 -.31 L -.472 -.338 L -.135 -.197 L -1.089 -1.608 L -.613 -.817 L -.454 -.056 L -1.524 -.336 L -.671 -.31 L -.55 -.055 L -.415 .185 L -.394 .071 L -.78 -.45 L .282 .762 L -.027 .212 L -.249 .071 L -.382 -.126 L -.311 .1 L .296 .395 L -.116 .113 L -1.037 .045 L -1.125 -.182 L -.478 .029 L .237 .127 L .24 .154 L .642 .169 L .662 .352 L .404 .338 L .219 .395 L -.411 .199 L -.739 .425 L -.458 .213 L -.668 -.097 L -1.801 -.039 L -1.219 -.092 L +726.605 297.247 N -.479 -.229 L -1.179 -.471 L -.543 -.371 L -.508 -.715 L -.477 -.558 L -.216 -.414 L .264 -.044 L .169 .1 L .421 .171 L .129 -.143 L -.209 -.387 L -.703 -.699 L -.617 -.713 L -.149 -.257 L -.375 -.956 L -.008 -.67 L .177 -.044 L 1.004 .312 L 1.476 .354 L 1.089 .369 L .797 -.03 L .463 -.144 L .382 -.115 L .373 -.058 L .684 .027 L .306 -.301 L .716 -.244 L .475 .385 L -.009 .1 L .128 .8 L -.009 .686 L -.751 1.503 L -.124 .758 L -.245 .315 L -.943 .26 L -.553 .388 L -.49 .689 L -.189 .272 L -.274 .072 L h 716.883 224.344 m .682 .394 L .233 .509 L .047 .649 L .118 .678 L .256 .197 L .42 .013 L .102 .24 L -.45 .919 L .715 .338 L .175 .282 L .147 .593 L .08 1.3 L .144 .621 L .456 1.157 L .293 .268 L .422 .014 L .328 -.312 L .384 -.185 L .32 .663 L .363 .127 L .563 .408 L .385 .154 L .144 .155 L .002 .41 L .083 .96 L .275 .776 L -.046 1.06 L .279 .24 L .93 1.325 L .276 .706 L .055 .777 L -.209 .876 L .403 .649 L .275 .833 L .204 .353 L 1.395 .803 L .285 .154 L .744 .111 L .402 .649 L .843 .535 L .483 .169 L 1.141 .068 L .117 .197 L 731 245.42 l -.273 .565 L .309 .424 L .879 .479 L .22 .564 L .469 1.342 L .211 .748 L .112 .396 L .252 .311 L .771 .352 L -.021 -.127 L -.141 -.777 L .913 .507 L .567 .154 L .184 .127 L .136 .296 L .106 1.752 L .884 .762 L .573 .323 L .604 .154 L .287 .296 L .244 .579 L .229 .424 L .545 .168 L .176 .297 L .007 .269 L .19 .536 L .106 .113 L .506 .126 L .156 .112 L .162 .354 L .366 1.327 L .026 .876 L .013 .862 L -.132 .41 L -.181 .325 L .778 1.271 L .223 .48 L .181 .833 L .034 .749 L -.293 .708 L -.353 1.668 L -.585 1.755 L .137 .791 L -.065 .806 L -.306 .778 L -.661 .977 L -.203 .665 L -.598 .821 L -.45 .185 L -.465 .1 L -.423 .468 L -.466 .68 L -.328 1.527 L -.477 .638 L -.34 .495 L .014 .65 L -.208 .539 L -.331 .312 L -.601 .341 L -.27 .326 L -.3 1.021 L -.169 1.049 L -.079 .937 L .021 .666 L -.283 .64 L -.322 .354 L -.463 .3 L -.754 .101 L -1.158 .087 L -.82 .03 L -.527 .157 L -.516 .299 L -1.529 .94 L -.443 .129 L -.214 .284 L -.346 .071 L -.528 .059 L -.286 -.014 L .295 .368 L .209 .27 L -1.315 -.665 L -.885 -.353 L .003 -.469 L -.073 -.156 L -.56 -.467 L -.628 -.368 L -.421 -.014 L -.485 .172 L -.335 .242 L .748 .467 L -.97 .243 L -.929 .428 L -.953 .442 L -.222 .028 L -.604 -.226 L -.886 -.438 L -.67 -.226 L -1.086 -.311 L -.51 -.041 L -.239 .156 L -.044 .113 L -.716 -.169 L -.751 -.353 L -.522 -.298 L -.896 -.82 L -.526 -.34 L -.422 -.879 L .09 -1.035 L -.082 -.411 L -.184 -.495 L -.664 -.736 L -.141 -.523 L -.029 -.425 L -.534 -.014 L -.786 .398 L -.597 .114 L -.34 .058 L -.178 -.07 L -.167 -.17 L .517 -.454 L .233 -.567 L .073 -.821 L -.253 -.324 L -.536 -.593 L -.247 -.353 L -.485 .735 L -.443 1.431 L -.19 .113 L -.796 .002 L -.199 .156 L -.196 .015 L -.255 .028 L .198 -.396 L .081 -.396 L .079 -.1 L .634 .041 L .242 -.142 L .126 -.255 L -.105 -1.004 L .454 -.835 L .328 -.453 L .091 -.396 L .018 -.409 L .151 -.128 L .245 -.015 L .218 -.354 L -.052 -.227 L -.323 -.494 L -.338 -.494 L -.107 .707 L -.288 .255 L -.518 .299 L -.311 .467 L -.086 .155 L -.189 .467 L -.281 .326 L -.747 .242 L -.735 .481 L -.653 .567 L -.36 .693 L -.514 .808 L -.41 -.339 L -.38 -1.328 L -.263 -.579 L -.19 -.325 L -.688 -.79 L -.297 -.734 L -.176 -.212 L -.704 .072 L -.235 -.099 L -.139 -.24 L -.085 -.269 L .334 -.34 L -.047 -.297 L -.346 -.395 L -.543 -.494 L -.266 -.098 L -.83 .157 L -.486 -.07 L -.95 -.549 L -.274 -.014 L -.438 .17 L -.433 -.027 L -.421 -.183 L -.662 -.521 L -.921 -.437 L -.218 .001 L -.723 .213 L -1.282 .088 L -.669 .001 L -1.764 .061 L -.611 .129 L -.656 .213 L -.989 .44 L -.972 .256 L -1.039 .257 L -1.503 .088 L -.794 -.013 L -.383 .044 L -.927 .284 L -.993 .469 L -.773 .397 L -.538 .143 L -.431 .085 L -.361 .199 L -.615 .693 L -.774 1.02 L -.588 .284 L -.766 -.013 L -.547 -.013 L -.927 .143 L -.4 .185 L -.663 -.395 L -.294 -.084 L -.734 .016 L -1.572 .173 L -.938 .157 L -.459 -.041 L -.672 .044 L -.398 .227 L -.583 .793 L -.344 .128 L -.958 -.125 L -.158 .057 L -.57 .708 L -.465 .368 L -.919 .271 L -.586 .086 L -1.516 -.082 L -.638 -.055 L -.688 -.197 L -.633 -.366 L -.778 -.677 L -.74 -.353 L -.374 -.041 L -.151 -.07 L -.19 -1.229 L .055 -.255 L .489 .112 L .45 -.086 L .332 -.425 L .197 -.467 L .267 -1.357 L -.043 -1.215 L -.156 -.622 L -.258 -.593 L -1.117 -1.906 L -.208 -.635 L -.144 -.834 L .027 -.989 L -.16 -.692 L -.467 -1.072 L -.663 -.945 L -.603 -.734 L -.214 -.254 L .128 -.904 L -.215 -.536 L -.733 -1.115 L -.972 -1.018 L -.273 -.583 L .126 -.233 L .188 .187 L .152 .443 L .183 .163 L .235 .35 L .327 .188 L .354 .023 L -.348 -1.144 L -.437 -.396 L -.226 -.326 L .08 -.304 L .748 .84 L .495 .979 L .477 .065 L -.099 -.555 L .289 -.039 L .004 -.564 L -.282 -.48 L -1.03 -1.368 L -.354 -.691 L -.119 -.579 L -.038 -.734 L .355 -.595 L .323 -.523 L .21 -.664 L -.083 -1.031 L -.254 -.635 L .033 -.368 L .438 -.692 L .109 -.325 L .064 -.156 L .271 .649 L .011 .424 L .105 .184 L .35 .027 L .171 -.113 L .187 -.565 L .141 -.48 L .765 -.468 L 1.22 -.624 L .484 -.326 L .676 -.581 L .585 -.467 L .632 -.327 L .79 -.114 L .697 -.016 L .7 -.002 L .431 -.043 L .352 -.185 L .474 -.453 L .494 -.128 L .929 -.072 L .279 -.143 L .291 -.551 L .158 -.1 L .444 .027 L .877 .224 L .626 -.043 L .911 -.299 L 1.084 -.469 L .359 -.213 L .716 -.665 L .427 -.58 L .29 -.622 L .132 -.297 L .41 -.369 L .968 -.651 L .079 -.17 L -.067 -.409 L -.242 -.805 L -.016 -.495 L 1.063 -1.118 L .387 -.692 L .291 .169 L .341 .437 L .619 1.355 L .262 .253 L .177 -.579 L .021 -.466 L .436 .238 L .272 .07 L .189 -.607 L -.06 -.142 L -.563 -.238 L -.175 -.24 L .007 -.565 L .044 -.112 L .897 .04 L .661 .253 L .642 -.029 L .334 -.029 L .289 .074 L -.699 -.455 L -.431 -.141 L .128 -.537 L -.07 -.296 L .135 -.509 L .422 -.354 L .165 -.07 L .732 .394 L .202 -.043 L -.112 -.452 L .11 -.48 L .146 -.367 L -.041 -.522 L .358 -.171 L .4 -.113 L .813 .04 L .529 -1.088 L .371 -.298 L .35 .169 L .268 .451 L .265 -.552 L .222 -.227 L .197 -.48 L .695 .62 L .513 .084 L .293 .211 L .331 .536 L .632 .592 L .122 .706 L -.072 .594 L .181 .197 L .256 -.283 L .462 -.679 L .155 -.128 L 1.16 .082 L .479 .155 L .637 .492 L .332 .141 L .156 -.48 L .302 -.297 L .022 -.24 L -.266 -.324 L -.601 -.395 L -.079 -.184 L .008 -.24 L .145 -.099 L .604 -.538 L .007 -.452 L .191 -.213 L .518 -.283 L .268 -.241 L .151 -.269 L -.094 -.184 L .003 -.296 L .512 -.863 L .121 -.057 L .317 -.029 L .397 -.029 L .248 -.17 L -.205 -.409 L .377 -.396 L .344 -.071 L .793 .366 L .616 -.072 L 1.291 -.088 L .512 -.128 L .232 -.17 L .04 -.057 L -.077 -.197 L -.2 -.734 L -.248 -.282 L -.471 -.268 L -.374 .086 L -.244 -.141 L .035 -.212 L .367 -.143 L .396 -.043 L .617 .521 L .255 .099 L .34 -.1 L .364 .31 L .676 .465 L .36 .154 L 1.297 .294 L .591 .084 L .413 -.143 L .372 .014 L .396 .606 L .419 .112 L .141 -.029 L .562 -.438 L .454 .027 L .652 .38 L .331 .479 L .46 -.143 L .122 -.791 L .181 -.085 L .455 .465 L .337 .099 L .152 .154 L -.436 .411 L -.126 .424 L -.176 .212 L -.011 .438 L -.12 .255 L -.513 .015 L -.51 .228 L -.396 .34 L -.004 .551 L .301 .353 L -.187 .692 L -.381 .58 L -.559 .481 L -.155 .48 L .063 .17 L .469 .437 L 1.038 .619 L .81 .677 L .508 .606 L .246 .099 L .349 -.114 L .264 .027 L .782 .352 L .742 .465 L .434 .451 L .679 .535 L .335 .127 L .442 .027 L .784 .182 L .25 .184 L .218 .621 L .167 .169 L .507 .31 L .76 .423 L .537 .154 L .422 -.072 L .414 -.17 L .603 -.199 L .208 -.156 L .736 -1.344 L .403 -1.131 L .194 -1.314 L .259 -.721 L .43 -.679 L -.131 -.424 L -.409 -.621 L .022 -.311 L .236 -.637 L .187 -.48 L -.164 -.282 L -.183 -.395 L .088 -.692 L .104 -1.004 L .225 -.297 L .329 -.156 L .158 -.311 L -.534 -.521 L .033 -.198 L .576 -.947 L .312 -.934 L .072 -.833 L .191 -.241 L .279 -.297 L +270.934 276.123 N .054 -.338 L -.194 -.577 L .011 -.522 L .24 -.495 L .48 -.524 L .118 -.325 L -.168 -.986 L -.049 -.847 L .103 -.522 L .595 -2.359 L .065 -.452 L .443 -.524 L .55 -.003 L 1.042 -.246 L .25 -.101 L .266 .098 L .47 .364 L .379 .407 L .59 .814 L .232 .38 L .27 -.016 L .693 -.427 L .365 .393 L .432 .576 L .617 .194 L .55 .194 L .999 .587 L .474 .435 L .853 1.109 L .131 .197 L .163 .027 L .333 .379 L -.017 .269 L -.634 .766 L -.103 .269 L .258 .746 L .101 .313 L -.059 .053 L -.803 1.103 L -.625 .552 L -.775 .454 L -.441 .156 L -.818 .1 L -.874 -.337 L -.551 .044 L -.551 .114 L -.64 .283 L -.38 -.042 L -.846 -.676 L -.637 -.252 L -.76 -.154 L -.469 .128 L -.507 .072 L -.327 -.127 L -.548 -.563 L -.354 -.159 L +418.763 73.869 N .391 -.499 L .389 -.262 L .283 .081 L .663 -.062 L .762 -.075 L .324 -.137 L .891 -.787 L .979 -.2 L .224 .025 L .198 -.219 L .175 .032 L -.349 .531 L .11 .106 L .026 .481 L -.288 .156 L -.17 .368 L -1.675 .069 L -.376 -.106 L -.428 .031 L -.14 -.062 L -.239 .081 L -.275 .031 L -.153 .417 L -.249 .218 L -.353 .118 L -.08 .112 L -.229 -.155 L -.411 -.292 L h 421.68 78.002 m -1.839 .129 L -.116 -.016 L .064 -.404 L -.19 -.638 L -.174 .015 L -.36 -.293 L -.233 .184 L -.398 -.172 L .2 -.355 L .434 -.293 L -.007 -.181 L -.445 -.541 L .018 -.256 L .131 -.498 L .279 -.106 L .318 .15 L .495 .12 L .43 -.574 L .299 -.091 L .296 .437 L .391 -.046 L .022 -.528 L .107 -.363 L 1.032 -.017 L .848 .089 L .03 .544 L .187 .301 L 1.138 .058 L .14 .166 L -.307 .604 L -.565 .142 L -.119 -.261 L -.331 .031 L -.263 .136 L .121 .278 L -.184 .414 L -.312 .077 L -.069 .244 L -.635 .035 L .157 .229 L -.291 .094 L -.191 .24 L -.061 .285 L .003 .21 L -.215 .338 L .166 .084 L h 427.177 77.967 m -.139 -.149 L -.312 -.344 L -.405 .031 L -.665 -.059 L -.123 -.329 L -.285 -.66 L .433 -.091 L .603 -.467 L .356 .495 L .521 .179 L .2 -.271 L .078 -.586 L .333 -.046 L .459 .044 L .056 .571 L -.134 .36 L -.144 .09 L -.413 .286 L .603 .299 L -.285 .166 L -.499 .39 L -.238 .09 L +417.259 94.301 N -.135 -.233 L .216 -.701 L -.091 -.076 L .075 -.295 L .321 -.372 L .054 -.358 L .054 -.213 L .954 -.806 L -.605 -.193 L -.479 .014 L -.456 -.09 L -.095 -.186 L -.233 -.007 L -.072 .048 L -.689 .062 L -.045 -.145 L -.395 .055 L -.337 -.277 L -.428 -.319 L -.074 -.353 L .248 -.144 L .044 -.288 L -.466 -.096 L -.41 -.312 L -.062 -.301 L .422 -.376 L -.038 -.468 L -.282 -.365 L -.344 -.177 L .165 -.278 L -.143 -.217 L -.182 -.037 L .08 -.097 L .235 -.133 L .236 -.133 L -.193 -.121 L .201 -.275 L .095 -.148 L -.152 -.292 L -.082 -.265 L -.376 -.182 L .07 -.182 L .341 -.078 L .175 -.092 L .378 .134 L .664 -.151 L .32 -.152 L .128 -.376 L .412 -.207 L .003 -.328 L -.16 -.17 L -.188 .061 L -.44 -.134 L .029 -.184 L .113 -.181 L .571 .036 L .084 -.401 L .345 -.361 L -.151 -.438 L .066 -.147 L -.465 -.192 L .126 -.43 L .285 -.181 L .371 -.028 L 1.12 -.062 L .293 -.012 L .095 .16 L .195 .271 L -.155 .158 L .324 .113 L .148 -.068 L .042 -.192 L -.159 -.204 L .259 .012 L .437 .169 L -.163 -.362 L .247 -.419 L .687 .113 L .614 -.091 L -.596 -.17 L -.084 -.227 L .282 -.102 L -.252 -.114 L -.12 -.147 L .166 -.08 L .068 -.136 L -.675 .08 L -.06 -.182 L .664 -.125 L .218 -.193 L -.464 -.42 L -.324 -.341 L .045 -.28 L .116 .016 L 1.839 -.129 L .254 .13 L .565 .341 L .271 .297 L -.02 .228 L -.252 .175 L .445 -.05 L .171 .216 L .157 -.078 L .283 .021 L .235 .156 L .45 .073 L .866 -.121 L .077 .208 L -.07 .149 L -.057 .125 L -.665 .295 L .316 .193 L .649 -.136 L .113 .182 L .457 -.006 L .349 -.391 L 1.059 -.136 L .602 -.234 L .757 -.266 L .249 .113 L .396 -.17 L .184 .182 L .085 .159 L .634 .29 L .182 .074 L .526 -.12 L .156 .12 L .059 .34 L .036 .227 L .154 .102 L .354 .125 L .372 -.022 L .028 .13 L .201 .025 L .319 .835 L -.219 .52 L -.391 .147 L -.051 .328 L .391 .102 L .683 .429 L -.217 .395 L .094 .18 L .312 .146 L -.021 .304 L .131 .102 L -.118 .292 L -.214 .124 L -.007 .191 L .325 .27 L -.114 .258 L .468 .188 L .281 .485 L -.435 .698 L -.142 .115 L -.344 -.072 L -.031 -.278 L -.308 -.121 L -.436 .072 L .282 .218 L -.254 .084 L -.284 .097 L -.524 .048 L -.124 .169 L -.735 .024 L -.112 .217 L -.176 -.072 L -.358 .061 L -.097 .229 L -.382 .012 L -.078 .181 L -.442 0 L -.422 .201 L -.293 -.033 L -.26 .181 L -.243 .168 L .037 .056 L .258 .378 L .413 .098 L -.155 .25 L -.08 .406 L .159 .085 L .036 .233 L .244 .173 L .478 .265 L .188 -.072 L .573 .515 L .431 .17 L .184 .201 L .219 -.084 L .165 .18 L .207 .036 L .447 .633 L -.682 .26 L -.437 -.151 L -.132 .027 L -.039 .337 L -.162 .172 L -.968 .295 L -.364 .227 L .538 .571 L -.197 .295 L .334 .014 L .056 .158 L -.098 .343 L -.082 .055 L -.441 -.178 L .049 -.165 L -.146 -.117 L -.564 .062 L -.195 -.138 L -.433 .035 L -.092 .178 L -1.25 .035 L -.125 .171 L -.319 .014 L -.044 .13 L 425.4 94.7 l -.594 .021 L -.059 -.144 L -.093 -.145 L -.493 -.089 L -.262 .055 L -.237 -.041 L .032 .274 L -.452 .343 L -.215 0 L .078 -.195 L -.26 -.039 L .011 -.165 L -.194 -.048 L -.104 -.137 L -.249 -.007 L -.096 -.11 L -.164 .137 L -.368 -.014 L -.664 -.261 L -.852 -.007 L -.149 -.089 L -.199 .014 L -.017 -.151 L -.709 .199 L .179 .199 L -.354 .021 L -.278 -.11 L -.567 .158 L -.271 -.096 L -.272 .117 L -.271 -.089 L h 432.012 80.473 m -.171 -.038 L -.088 -.049 L -.447 .08 L -.111 -.264 L .002 -.213 L .647 .281 L .168 .203 L +450.734 91.05 N -.831 -.33 L -.424 -.101 L -.104 -.216 L -.703 -.186 L -.129 -.13 L -.561 .076 L -.508 -.041 L -.073 .137 L -.373 .18 L -.46 -.254 L -.483 .046 L -.168 -.056 L -.558 .204 L -.104 .177 L -.149 .135 L -.18 -.12 L -.389 .083 L -.003 -.204 L .026 -.083 L -.066 -.18 L -.331 .025 L -.073 -.169 L -.194 -.24 L -.261 .024 L -.062 .112 L -.193 -.016 L -.183 .24 L -.43 .048 L -.03 -.228 L -.285 -.041 L -.105 -.331 L -.382 -.096 L -.188 -.208 L .02 -.249 L -.802 -.132 L -.311 -.181 L -.368 .161 L -.293 -.013 L -.013 -.221 L .001 -.253 L -.329 .084 L .181 -.283 L -.709 .005 L -.258 -.121 L -.509 -.193 L -.286 -.024 L -.003 .145 L .282 .302 L -.41 .12 L -.22 .187 L -.318 -.072 L -.296 -.38 L -.55 -.247 L .224 -.211 L .208 -.024 L .099 -.121 L -.199 -.181 L -.257 -.024 L -.061 .066 L -.466 .066 L .005 -.169 L -.278 .037 L -.132 -.181 L -.568 -.054 L -.201 -.025 L -.363 -.163 L -.093 -.26 L -.211 -.091 L -.361 .018 L -.063 .084 L .062 .073 L -.024 .151 L -.375 0 L .435 -.698 L -.281 -.485 L -.468 -.188 L .114 -.258 L -.325 -.27 L .007 -.191 L .214 -.124 L .118 -.292 L -.131 -.102 L .021 -.304 L -.312 -.146 L -.094 -.18 L .217 -.395 L -.683 -.429 L -.391 -.102 L .051 -.328 L .391 -.147 L .219 -.52 L -.319 -.835 L .34 .043 L .23 .125 L -.093 -.193 L .156 -.153 L -.019 -.147 L -.166 -.13 L -.021 -.129 L -.012 -.075 L .93 -.154 L .431 -.051 L .516 -.152 L 1.304 -.128 L .48 -.158 L .797 -.479 L 1.117 -.298 L 1.515 -.303 L 1.382 -.086 L 1.067 .417 L -.882 -.294 L -.054 .147 L .256 .172 L .132 .466 L .355 .135 L .648 .061 L .645 -.11 L 1.063 -.409 L .054 .004 L -.978 .417 L -.19 .11 L -.004 .123 L .218 .012 L .286 -.123 L .613 -.208 L .543 -.253 L .842 .006 L 2.246 .115 L 2.96 -.101 L .641 -.021 L .04 .014 L .679 .243 L .284 .487 L .099 .186 L .016 .029 L .09 .171 L .16 .302 L .615 1.5 L .172 .502 L -.023 .236 L -.263 .208 L -.44 .03 L -.571 .244 L -.291 .328 L -.128 .292 L .289 .012 L .421 .146 L .149 .176 L .218 .146 L .013 .25 L -.315 .752 L .126 .137 L .161 .175 L -.074 .242 L .816 .835 L .316 .193 L -.298 .048 L -.085 .133 L .328 .302 L -.009 .314 L -.255 .24 L -.429 .013 L -.286 .181 L -.599 .398 L -1.509 1.218 L -.082 .306 L .044 .552 L .349 .383 L -.653 -.018 L h 431.844 80.27 m .232 .024 L .069 .208 L -.134 -.029 L -.168 -.203 L h 432.739 80.361 m -.03 .129 L -.278 -.024 L -.191 .03 L -.046 -.208 L .174 -.012 L .266 0 L .106 .085 L +416.488 81.945 N .151 .438 L -.345 .361 L -.084 .401 L -.571 -.036 L -.113 .181 L -.029 .184 L .44 .134 L .188 -.061 L .16 .17 L -.003 .328 L -.412 .207 L -.128 .376 L -.32 .152 L -.664 .151 L -.378 -.134 L -.175 .092 L -.341 .078 L -.07 .182 L .376 .182 L .082 .265 L .152 .292 L -.095 .148 L -.201 .275 L .193 .121 L -.236 .133 L -.235 .133 L -.08 .097 L .182 .037 L .143 .217 L -.165 .278 L -.672 .024 L -.001 -.338 L .172 -.097 L .11 -.423 L -.754 -.375 L -.535 .109 L -.292 -.375 L -.228 -.061 L -.173 .121 L -.313 -.242 L -.267 .182 L -.307 0 L -.307 -.012 L .025 .157 L -.52 .034 L -.407 -.042 L -.477 -.098 L -.07 -.162 L -.496 -.264 L .795 -.472 L .858 -.621 L .273 -.354 L .563 -1.167 L .173 -.104 L .644 -.12 L .367 .251 L .136 .268 L -.28 .203 L -.228 -.056 L .066 .496 L -.191 .124 L 1.163 .225 L .225 -.236 L .406 -.113 L .134 -.417 L -.458 -.022 L -.123 -.124 L -.02 -.203 L .236 -.158 L -.171 -.023 L -.558 -.067 L .072 -.328 L -.034 -.13 L -.023 -.034 L .128 -.283 L .572 -.198 L .709 -.238 L .654 .03 L 1.089 -.151 L .245 .275 L .329 .045 L .076 .181 L .259 0 L +431.57 91.965 N -.447 -.633 L -.207 -.036 L -.165 -.18 L -.219 .084 L 430.349 91 l -.431 -.17 L -.573 -.515 L -.188 .072 L -.478 -.265 L -.244 -.173 L -.036 -.233 L -.159 -.085 L .08 -.406 L .155 -.25 L -.413 -.098 L -.258 -.378 L -.037 -.056 L .243 -.168 L .26 -.181 L .293 .033 L .422 -.201 L .442 0 L .078 -.181 L .382 -.012 L .097 -.229 L .358 -.061 L .176 .072 L .112 -.217 L .735 -.024 L .124 -.169 L .524 -.048 L .284 -.097 L .254 -.084 L -.282 -.218 L .436 -.072 L .308 .121 L .031 .278 L .344 .072 L .142 -.115 L .375 0 L .024 -.151 L -.062 -.073 L .063 -.084 L .361 -.018 L .211 .091 L .093 .26 L .363 .163 L .201 .025 L .568 .054 L .132 .181 L .278 -.037 L -.005 .169 L .466 -.066 L .061 -.066 L .257 .024 L .199 .181 L -.099 .121 L -.208 .024 L -.224 .211 L .55 .247 L .296 .38 L .318 .072 L .22 -.187 L .41 -.12 L -.282 -.302 L .003 -.145 L .286 .024 L .509 .193 L .258 .121 L .709 -.005 L -.181 .283 L .329 -.084 L -.001 .253 L .013 .221 L .293 .013 L .368 -.161 L .311 .181 L .802 .132 L -.02 .249 L .188 .208 L .382 .096 L .105 .331 L -.071 -.012 L -.065 .066 L -.066 .04 L -.105 -.026 L 442 89.998 l -.119 .013 L -.065 .04 L -.132 .066 L -.053 .079 L -.118 .092 L -.119 .053 L -.132 .079 L -.105 .013 L -.118 .013 L -.053 .092 L -.026 .092 L -.026 .132 L -.053 .079 L -.053 .105 L -.145 .066 L -.105 .04 L -.092 -.026 L -.079 .079 L -.04 .092 L -.053 .079 L -.039 0 L -.105 .026 L -.066 .026 L -.079 .053 L -.118 .053 L -.132 0 L -.145 .04 L -.093 .026 L -.065 -.026 L -.065 -.026 L -.093 0 L -.065 .026 L -.158 0 L -.132 -.053 L -.092 -.053 L -.093 .026 L -.171 .053 L -.026 .04 L -.146 .119 L -.092 .066 L -.014 .131 L -.065 .105 L -.039 .044 L -.055 -.095 L -.545 -.2 L -1.332 .181 L -1.019 -.227 L -1.374 -.341 L -.746 .773 L -.598 .163 L -.483 -.099 L -.354 -.129 L -.145 -.014 L +421.683 94.397 N .368 .014 L .164 -.137 L .096 .11 L .249 .007 L .104 .137 L .194 .048 L -.011 .165 L .26 .039 L -.078 .195 L .215 0 L .452 -.343 L -.032 -.274 L .237 .041 L .262 -.055 L .493 .089 L .093 .145 L .059 .144 L 425.4 94.7 l .377 -.103 L .044 -.13 L .319 -.014 L .125 -.171 L 1.25 -.035 L .092 -.178 L .433 -.035 L .195 .138 L .564 -.062 L .146 .117 L -.049 .165 L .441 .178 L .082 -.055 L .098 -.343 L -.056 -.158 L -.334 -.014 L .197 -.295 L -.538 -.571 L .364 -.227 L .968 -.295 L .162 -.172 L .039 -.337 L .132 -.027 L .437 .151 L .682 -.26 L .145 .014 L .354 .129 L .483 .099 L .598 -.163 L .746 -.773 L 1.374 .341 L 1.019 .227 L 1.332 -.181 L .545 .2 L .055 .095 L .053 .093 L -.097 .581 L .155 .26 L .761 .547 L -.636 .291 L -.019 .367 L -.701 .054 L -.164 -.134 L -.325 0 L -.223 .197 L .452 .063 L .136 .196 L -.157 .206 L -.409 .062 L -.04 .375 L .204 .188 L -.154 .294 L -.346 .299 L -.693 .157 L .082 .393 L -.89 -.116 L -.298 .196 L -.85 -.08 L -.566 .107 L -.646 .5 L -.287 -.152 L -.612 .009 L -.179 -.107 L -1.04 -.065 L -.478 -.112 L -.894 -.082 L -1.311 -.247 L -.32 -.391 L -.318 -.096 L -.023 -.363 L -.856 .227 L -.301 -.103 L -.445 .11 L -.183 -.083 L -.366 .096 L -.329 .411 L -.597 -.034 L -.631 -.171 L .029 -.171 L -.215 -.117 L -.579 .332 L -.55 -.242 L -.008 -.144 L -.622 -.062 L .09 -.192 L -.214 -.288 L .266 -.274 L -.193 -.336 L +431.763 171.063 N -.067 .354 L .091 .72 L .108 .508 L .225 .168 L .562 .11 L .144 .183 L .077 .353 L -.089 1.116 L -.146 .227 L -.274 .171 L -.885 .217 L -.291 .256 L -.664 1.275 L -.503 1.203 L -.243 1.004 L -.354 .129 L -.369 .03 L -.129 .354 L -.146 1.229 L -.192 .312 L -.385 .045 L -.257 .284 L -.417 .836 L -.944 2.223 L -.304 .624 L -.352 .496 L -.368 .355 L -.239 .114 L -.145 -.056 L -.722 -.97 L -.145 -.14 L -1.104 -.05 L -.272 .03 L -1.31 1.265 L -.941 .839 L -.495 .526 L .02 .974 L -.189 .552 L -.376 .686 L -.188 -.119 L -.224 -.042 L -.176 -.127 L -.145 .212 L .144 .296 L -.063 .127 L -.353 .198 L -.56 .03 L -.977 .101 L -.607 -.267 L -.288 .043 L -.271 .368 L -.177 .113 L -.432 -.07 L -1.247 -.011 L -.528 -.225 L -.543 -.451 L -.416 -.72 L -.192 -.649 L .048 -.254 L .208 -.254 L -.144 -.296 L -.513 -.069 L -.128 -.254 L -.464 -.55 L -.561 -.465 L -.608 -.253 L -.641 -.253 L -.272 -.31 L -.513 .072 L -.24 .297 L -.336 .071 L -.881 .044 L -.659 .03 L -.006 -.234 L .121 -1.188 L -.217 -1.439 L .09 -.989 L .012 -.876 L -.003 -.48 L -.002 -.381 L .237 -.397 L .257 -.03 L .433 -.13 L .078 -.368 L -.116 -.592 L .095 -.34 L .656 -.414 L .223 -.298 L .19 -.566 L .316 -.962 L -.388 -.718 L -.164 -.762 L .062 -.777 L .092 -.961 L .158 -.849 L .353 -.482 L .687 -1.614 L .676 -.4 L 1.064 -.188 L 1.174 -.108 L 1.111 .121 L .821 .277 L 1.095 1.223 L .209 .098 L .37 -.002 L 1.337 -.544 L .467 -.116 L .354 .083 L 1.173 .742 L .965 .277 L .934 -.005 L .273 -.059 L .629 -.399 L .403 -.327 L .774 -.287 L .628 -.103 L .709 -.047 L .531 .04 L .884 .221 L .724 .193 L .609 .208 L .259 -.058 L .761 -.697 L .453 -.299 L .437 -.2 L .951 -.034 L .173 .394 L .575 .52 L .351 .407 L +425.506 195.522 N -1.965 -.017 L -1.005 .007 L .029 -.176 L -.208 -.536 L .271 -.989 L -.159 -.72 L -.191 -.522 L -.399 -.649 L .433 -.396 L -.287 -.367 L -.24 -.056 L -.576 .058 L -.559 -.268 L -.176 -.324 L -.063 -.537 L -.111 -.211 L -.527 -.14 L -.101 -.064 L .376 -.686 L .189 -.552 L -.02 -.974 L .495 -.526 L .941 -.839 L 1.31 -1.265 L .272 -.03 L 1.104 .05 L .145 .14 L .722 .97 L .145 .056 L .239 -.114 L .368 -.355 L .352 -.496 L .304 -.624 L .944 -2.223 L .417 -.836 L .257 -.284 L .385 -.045 L .192 -.312 L .146 -1.229 L .129 -.354 L .369 -.03 L .354 -.129 L .243 -1.004 L .503 -1.203 L .664 -1.275 L .291 -.256 L .885 -.217 L .274 -.171 L .146 -.227 L .089 -1.116 L -.077 -.353 L -.144 -.183 L -.562 -.11 L -.225 -.168 L -.108 -.508 L -.091 -.72 L .067 -.354 L .627 .109 L .208 .083 L .923 1.238 L .395 .887 L .119 1.2 L -.134 .651 L .169 1.228 L .205 .578 L .381 .633 L .208 .21 L .047 .127 L -.225 .143 L -.674 .032 L -1.187 -.191 L -.481 -.082 L -.24 .1 L -.29 .312 L -.323 .539 L 1.088 1.067 L 1.343 1.179 L .638 1.07 L .382 1.057 L .208 .183 L -.208 .114 L -.354 .327 L -.866 1.743 L -.4 .511 L -.528 .399 L -.144 .198 L -.064 .424 L .112 .776 L .273 1.185 L .207 .592 L .4 .661 L .432 .605 L .064 .791 L .112 .324 L 1.217 1.236 L .498 .802 L .194 .804 L .209 .451 L -.159 .185 L .1 .861 L -.271 .086 L -.863 -.292 L -.864 -.334 L -.576 -.194 L -.56 -.124 L -.479 -.04 L -.271 -.055 L -.878 .076 L -.863 -.023 L -.56 -.109 L -1.022 -.149 L -.831 -.038 L -1.773 -.088 L -.88 -.093 L -.045 .495 L +551.793 147.278 N -.788 -.111 L -.458 -.253 L -.379 -.367 L -.248 -1.101 L -.112 -.141 L -.342 -.141 L -.662 -.083 L -.105 -.07 L -.014 -.268 L .116 -.466 L -.178 -.451 L -.418 -.38 L -.294 -.013 L -1.181 .412 L -1.229 .087 L -.81 .143 L -.947 .073 L -.415 -.083 L -.263 -.226 L -.135 -.197 L -.909 .143 L -.548 .382 L -.856 .016 L -1.264 -.011 L -.691 .128 L -.723 .115 L -.541 .03 L .182 -.954 L .049 -.354 L .31 -.792 L .285 -.383 L .794 -.47 L .697 -.258 L 1 -.077 L .209 -.072 L .188 -.255 L .036 -.974 L -.186 -.281 L -.652 -.053 L -.185 -.394 L -.111 -1.34 L -.168 -.38 L -.409 -.224 L -1.144 -.388 L -.695 -.391 L -.353 -.464 L -.71 -1.068 L -.802 -1.083 L .887 .32 L .63 .194 L 1.069 .248 L .854 .235 L .541 .039 L .742 .024 L 1.187 -.218 L .349 -.002 L 1.005 .135 L 1.234 -.12 L .964 -.175 L 1.183 -.19 L 1.066 -.274 L .247 -.156 L .069 -.184 L .099 -.903 L .232 -.876 L .188 -.34 L .412 -.369 L .597 -.441 L .283 -.072 L .644 .039 L .516 .082 L .254 -.086 L .321 -.693 L .362 -.271 L .559 -.243 L .562 .025 L 1.001 .375 L .237 -.086 L .34 -.383 L .021 -.084 L .139 -1.214 L .288 -.834 L .224 -.424 L .292 -.228 L .416 -.115 L .513 -.031 L .315 -.115 L .199 -.255 L -.088 -.437 L -.129 -.281 L 556.193 125 l -.35 -.336 L .355 -.129 L .997 .122 L .698 .039 L .513 -.215 L .289 -.255 L -.033 -.31 L -.223 -.478 L .13 -.283 L .4 -.341 L .524 -.355 L .324 -.426 L -.198 -.477 L .119 -.483 L -.232 -.171 L -.01 -.336 L -.411 -.271 L -.01 -.32 L .464 -.413 L .258 -.214 L .246 .023 L .559 -.395 L .272 -.19 L .53 -.292 L 1.148 -.152 L 1.345 -.012 L .647 .144 L .338 -.179 L .332 .005 L .455 -.297 L .358 -.004 L .148 -.142 L .313 .14 L .105 .112 L .281 -.21 L .296 .047 L .554 .117 L .004 .456 L .282 -.128 L .625 -.009 L .373 .323 L .213 .247 L .007 .501 L -.312 .516 L .301 .07 L .198 .218 L .252 .281 L .52 -.196 L .239 0 L .104 .199 L .178 .09 L .565 .436 L 1.337 .104 L .305 .111 L .147 .126 L -.207 .084 L -.688 .37 L -.411 .232 L -.155 .43 L -.071 .479 L -.234 .116 L -.125 -.179 L -.621 -.102 L -.438 .132 L -.271 .298 L -.262 -.116 L -.557 .265 L -.928 -.149 L -.568 -.138 L -1.708 -.325 L -.894 .265 L -.38 .611 L .09 .166 L .336 0 L .047 .314 L -.202 .149 L .101 .199 L .598 -.017 L -.002 .347 L -.384 .099 L -.139 .413 L .389 .232 L -.116 .479 L -.215 .132 L .089 .248 L .606 .298 L -.003 .532 L .782 -.003 L -.039 .43 L .188 .248 L .702 -.05 L .668 .377 L .012 .211 L -.2 .255 L -.504 .2 L -.643 .196 L -.517 .248 L .032 .366 L .188 .377 L -.237 .977 L -1.512 1.503 L .261 .38 L -.358 .281 L -.609 .133 L -.353 .467 L -.509 1.216 L -.478 .547 L -1.193 .496 L -.177 .364 L -.277 .481 L -.563 .61 L -.076 .38 L -.71 .259 L -.734 -.011 L -.895 .314 L -.361 -.094 L -.158 -.518 L -.207 -.132 L -.404 .083 L -.535 .463 L -.144 .446 L -.979 .893 L -.186 .543 L -.079 .269 L .116 .38 L .541 .163 L .504 .085 L .425 .014 L -.114 .689 L -.154 .735 L .412 .411 L .33 .099 L .537 -.099 L .112 .441 L .216 .507 L .654 1.333 L -.232 .149 L .241 .463 L -.317 .066 L -.15 .248 L -.55 .083 L -.145 -.335 L -.183 -.062 L -.78 .215 L -.2 .331 L -.735 -.099 L -.229 -.149 L -.835 -.021 L -.835 -.009 L -.259 -.052 L .015 .728 L -.866 .017 L -.296 .431 L -.37 .036 L +606.155 150.953 N -.037 -.466 L -.627 -2.479 L -.064 -.578 L -.4 .044 L -.281 .115 L -.395 1.159 L -.224 .354 L -.529 -.448 L -.249 -.267 L -.23 -.281 L -.001 -.381 L -.009 -.522 L .131 -.283 L .651 -.356 L .498 -.13 L .938 -.767 L .159 -.34 L .012 -.79 L -.057 -.127 L -.111 -.098 L -2.473 -.198 L -.559 .003 L -.916 .062 L -.547 -.053 L -.537 -.109 L -.095 -.099 L -.079 -.719 L -.053 -.479 L -.129 -.324 L -.417 -.054 L -.489 .06 L -.372 -.266 L -.339 -.266 L -1.252 -.303 L -.234 .171 L -.555 .525 L -.124 .283 L .083 .155 L .494 .237 L 1.224 .938 L .126 .112 L -.047 .155 L -.382 .101 L -.502 .13 L -.4 .299 L -.548 .61 L .339 .323 L 1.042 .431 L .193 .21 L -.029 .269 L -.505 .765 L .04 .254 L .352 .45 L .325 1.409 L .402 1.775 L .147 .532 L -.172 .322 L .068 .183 L -.321 .071 L -.35 -.056 L -.148 -.706 L -.198 -.084 L -.253 .354 L -.171 .354 L -.172 .057 L -.115 -.099 L -.28 -.592 L -.152 -.169 L -.412 .537 L -.504 .298 L -.992 .397 L -.571 .213 L -.264 .226 L -.05 .113 L .106 .579 L .183 .409 L -.336 .495 L -.305 .332 L -.013 .257 L -.548 .415 L -.593 .467 L -.467 .185 L -.432 .057 L -.746 .206 L -.591 .362 L -.459 .58 L -.551 .552 L -.88 1.061 L -.611 .552 L -.673 .276 L -.675 .829 L -.676 .467 L -.728 .368 L -.452 .241 L -.427 .312 L -.192 .509 L -.073 .466 L -.341 .41 L -.649 .298 L -.428 .058 L -.506 -.098 L -.258 .269 L -.366 .887 L -.277 .23 L -.505 -.253 L -.614 .142 L -.354 .283 L -.304 .565 L -.165 .48 L -.005 .508 L .166 1.539 L .018 .805 L -.208 .495 L .227 .324 L .315 .423 L -.015 .508 L -.199 .607 L -.669 1.611 L -.341 .834 L -.13 .636 L .047 .649 L .21 1.764 L -.081 .24 L -.643 .001 L -.433 -.013 L -.186 .142 L -.334 .961 L -.324 .594 L .025 .127 L .493 .352 L -.805 .327 L -.306 .015 L -.77 .284 L -.295 .41 L -.101 .692 L -.157 .255 L -.367 .283 L -.526 .255 L -.099 .057 L -.066 .042 L -.231 .156 L -.145 0 L -.174 -.056 L -1.417 -1.451 L -.092 -.395 L -.276 -.522 L -.34 -1.397 L -.689 -1.792 L -.94 -1.933 L -.979 -1.508 L -.554 -1.722 L -.507 -1.792 L -.738 -1.636 L -.82 -1.42 L -.424 -.737 L -.598 -1.439 L -.363 -1.157 L -.767 -3.274 L -.469 -2.695 L -.157 -1.566 L -.051 -.24 L .232 -.565 L .546 -.834 L .007 -.311 L -.404 -.281 L -.367 -.437 L -.113 -.635 L -.108 -.917 L .065 -.622 L -.837 .03 L -.19 .212 L -.235 .424 L .009 .183 L .276 .254 L .074 .183 L -.073 .438 L -.301 .438 L -.503 .368 L -.812 .369 L -.504 .114 L -.617 .255 L -.377 .015 L -.861 -.281 L -.572 -.38 L -1.018 -1 L -1.391 -1.268 L -.516 -.705 L .267 -.043 L 1.062 .125 L .615 -.086 L .443 -.142 L .461 -.283 L .521 -.608 L -.067 -.24 L -.156 .071 L -.587 .114 L -.847 -.026 L -.607 -.112 L -.632 -.132 L -.5 -.218 L -.203 -.07 L -.929 -.661 L -.668 -.775 L -.057 -.197 L .37 -.036 L .296 -.431 L .866 -.017 L -.015 -.728 L .259 .052 L .835 .009 L .835 .021 L .229 .149 L .735 .099 L .2 -.331 L .78 -.215 L .183 .062 L .145 .335 L .55 -.083 L .15 -.248 L .317 -.066 L -.241 -.463 L .232 -.149 L -.654 -1.333 L -.216 -.507 L -.112 -.441 L 557 143.058 l -.33 -.099 L -.412 -.411 L .154 -.735 L .114 -.689 L -.425 -.014 L -.504 -.085 L -.541 -.163 L -.116 -.38 L .079 -.269 L .186 -.543 L .979 -.893 L .144 -.446 L .535 -.463 L .404 -.083 L .207 .132 L .158 .518 L .361 .094 L .895 -.314 L .734 .011 L .71 -.259 L .076 -.38 L .563 -.61 L .277 -.481 L .177 -.364 L 1.193 -.496 L .478 -.547 L .509 -1.216 L .353 -.467 L .609 -.133 L .358 -.281 L -.261 -.38 L 1.512 -1.503 L .237 -.977 L -.188 -.377 L -.032 -.366 L .517 -.248 L .643 -.196 L .504 -.2 L .2 -.255 L -.012 -.211 L -.668 -.377 L -.702 .05 L -.188 -.248 L .039 -.43 L -.782 .003 L .003 -.532 L -.606 -.298 L -.089 -.248 L .215 -.132 L .116 -.479 L -.389 -.232 L .139 -.413 L .384 -.099 L .002 -.347 L -.598 .017 L -.101 -.199 L .202 -.149 L -.047 -.314 L -.336 0 L -.09 -.166 L .38 -.611 L .894 -.265 L 1.708 .325 L .568 .138 L .928 .149 L .557 -.265 L .262 .116 L .271 -.298 L .438 -.132 L .621 .102 L .125 .179 L .234 -.116 L .071 -.479 L .155 -.43 L .411 -.232 L .688 -.37 L .207 -.084 L .502 -.152 L 0 .515 L .441 1.03 L .221 .515 L .81 .11 L .441 .405 L .221 .258 L -.331 .221 L -.184 .184 L .073 .589 L .037 .552 L .294 .221 L .718 .096 L .092 .078 L .044 .182 L .68 .099 L -.104 .414 L .367 .694 L -.578 .364 L -.376 .281 L -.368 .049 L -.337 -.264 L -.033 -.364 L -.785 .198 L .157 .694 L .579 .595 L -.104 .446 L .272 .364 L -.215 .215 L .099 .43 L .198 .066 L .477 -.314 L .383 .248 L .772 .843 L .363 -.116 L 1.078 .579 L -.116 .364 L .756 .248 L .154 -.066 L .859 .596 L -1.07 .909 L -.281 .116 L .008 .364 L -.221 .265 L .04 .396 L -.309 .397 L -.218 .43 L .039 .248 L .63 .38 L .466 -.083 L .665 .479 L .704 .149 L .305 .529 L 1.242 .678 L .231 -.166 L 1.027 .595 L .538 -.066 L .182 .397 L .835 .166 L .304 .198 L .15 -.066 L .087 -.215 L .503 0 L .482 .265 L .582 -.347 L .494 .298 L .643 .066 L .142 .231 L -.101 .446 L .663 .149 L .286 .281 L .618 .265 L .584 -.281 L .313 .066 L -.034 .331 L .312 .248 L .379 -.231 L .721 .148 L .847 .364 L .606 -.297 L .268 .364 L .399 .116 L .357 -.132 L .271 .083 L .687 -.132 L .336 .05 L .311 -.694 L -.429 -.827 L .07 -.876 L .318 -.761 L -.037 -.022 L .345 -.129 L .471 -.102 L .231 .069 L .139 .183 L -.052 .861 L .212 .662 L -.092 .113 L .235 .493 L .637 .18 L .559 .081 L .869 .214 L .085 .021 L .544 -.074 L .531 -.313 L .301 .055 L .335 .125 L 1.238 .063 L 1.036 -.062 L .624 -.06 L .217 -.58 L -.017 -.282 L -.258 -.238 L -.313 -.069 L -.326 -.294 L -.042 -.24 L .07 -.156 L .189 -.1 L .784 -.033 L .714 -.216 L .397 -.27 L 1.123 -1.107 L .543 -.37 L .829 -.258 L 1.105 -.726 L .546 -.299 L .355 -.087 L .286 .167 L .975 .319 L .377 -.044 L 1.377 -.84 L .455 .392 L .716 .715 L .046 .38 L -.354 .454 L -.138 .269 L .102 .056 L .3 .055 L .657 .081 L .73 .179 L .624 .081 L -.018 .508 L -.112 .24 L -.596 .582 L -.072 .283 L .184 .718 L -.295 .058 L -.853 -.221 L -.558 -.082 L -.312 .129 L -.719 .512 L -1.446 .883 L -.197 .354 L .057 .761 L -.136 .382 L -.938 1.134 L -.045 .212 L .192 .408 L 0 .324 L -1.148 2.25 L -.17 .128 L -.309 -.013 L -.391 -.11 L -.811 -.32 L -.133 .283 L .146 1.594 L -.191 .354 L -.401 .144 L -.228 .185 L .152 .93 L -.015 .678 L -.273 .368 L -.25 .129 L -.255 -.14 L -.595 -.152 L +478.516 135.173 N .052 -.292 L -.049 -.169 L -.197 -.107 L .107 -.175 L .292 -.919 L -.015 -.818 L .517 -1.09 L .3 -.891 L -.004 -.409 L .133 -.283 L .07 -.749 L .033 -.847 L .062 -.174 L .026 -.278 L -.065 -.411 L .037 -.119 L .102 -.063 L 1.902 1.034 L .365 .167 L .253 -.016 L 1.139 -.656 L 2.96 -1.541 L .161 -.071 L .87 1.632 L .311 .69 L .093 .056 L -.46 .44 L -.257 .171 L -.97 .26 L -2.586 .622 L -.646 .229 L 1.146 1.32 L .698 .885 L -.765 .724 L -.456 .37 L -.24 .072 L -1.249 .332 L -.462 .61 L -.975 .782 L -2.079 -.299 L -.154 -.017 L +456.028 151.46 N -.021 1.003 L .033 3.078 L -.088 .17 L -1.561 -.019 L -.52 -.011 L -.073 1.13 L -1.981 -.963 L -5.577 -2.792 L -4.941 -2.372 L -5.231 -2.554 L -.41 .059 L -1.818 .858 L -1.519 .729 L -.231 .157 L -1.192 -.911 L -.258 -.182 L -1.008 -.333 L -1.646 -.442 L -.832 -.137 L -.098 -.07 L -.86 -1.506 L -.178 -.168 L -1.028 -.347 L -.702 -.165 L -.544 .201 L -.244 -.154 L -.562 -.873 L -.249 -.917 L -1.272 -1.702 L .152 -.283 L .249 -.128 L .666 -.47 L .086 -.17 L .061 -.664 L -.457 -1.156 L .158 -.495 L .16 -.622 L -.101 -.748 L .1 -.862 L -.052 -.691 L -.147 -.833 L -.88 -1.605 L .241 -.383 L .204 -.156 L .22 -.143 L .864 -.598 L .155 -.227 L .147 -.537 L -.274 -.973 L .126 -.354 L 1.473 -1.138 L .579 -.314 L .802 -.428 L .093 -.269 L -.064 -.564 L .093 -.981 L 1.436 .59 L .995 .309 L .521 .013 L .863 -.129 L .604 .027 L 1.552 .223 L .614 .479 L .794 .224 L .486 -.001 L .342 .197 L .173 .226 L .26 .819 L .39 .564 L .688 .591 L .378 .126 L .678 .14 L 1.031 .083 L .447 .07 L .973 .224 L .639 .224 L .552 .281 L 1.289 .788 L .84 .464 L .465 .013 L .441 -.128 L .758 -.411 L .706 -.623 L .3 -.523 L 0 -.254 L -.276 -.621 L -.112 -.579 L .044 -.41 L .237 -.537 L .661 -.58 L .333 -.198 L .554 -.241 L .644 -.298 L 1.376 -.413 L 1.205 .054 L .728 .154 L .844 .365 L .188 .169 L .043 .508 L .281 .253 L .301 .014 L .945 .125 L .712 .309 L .45 .027 L 1.286 .04 L .302 .197 L .068 .381 L .276 .296 L -.099 .208 L -.369 .228 L -.21 .34 L .354 1.283 L -.231 .425 L -.322 .553 L -.056 .311 L .185 .945 L .388 .916 L .042 .367 L -.015 .988 L -.019 3.869 L -.016 1.468 L -.008 2.048 L -.001 .692 L .045 2.81 L -.021 1.342 L .011 2.612 L +478.212 134.714 N -.834 -1.746 L -.796 -1.944 L -.124 -.289 L .109 -.066 L .679 -.851 L .219 -.438 L .183 -.507 L .171 -.566 L .188 -.822 L .116 .018 L .137 -.093 L .006 -.204 L .028 -.315 L .372 -.051 L .151 .022 L .07 .099 L .355 -.07 L .009 -.167 L .067 -.193 L .088 -.041 L .07 .023 L .183 .346 L .201 .128 L .021 .183 L -.047 .122 L .082 .085 L -.102 .063 L -.037 .119 L .065 .411 L -.026 .278 L -.062 .174 L -.033 .847 L -.07 .749 L -.133 .283 L .004 .409 L -.3 .891 L -.517 1.09 L .015 .818 L -.292 .919 L -.107 .175 L -.067 .068 L -.042 .042 L +495.751 163.817 N -.03 -.184 L -.112 -.537 L -.508 -.945 L -.73 -.987 L -.438 -.493 L -.846 -.69 L -.51 -.875 L -.814 -1.876 L -.474 -.889 L -.28 -.409 L -.794 -.507 L -1.271 -.689 L -.527 -.634 L -.8 -1.17 L -.081 -.96 L -.061 -.776 L -.002 -.89 L -.104 -.381 L -.312 -.663 L -.944 -1.65 L -.357 -.494 L -.758 -.62 L -.459 -.225 L -.499 -.126 L -.308 -.282 L -.483 -.578 L .149 -.692 L -.111 -.437 L -.474 -.818 L -.747 -1.072 L -.793 -.902 L -1.069 -1.494 L -.525 -.931 L -.352 -.479 L -.722 -.761 L -.524 -.056 L -.248 0 L .077 -.296 L .193 -.283 L .311 -1.314 L .104 -.583 L .154 .017 L 2.079 .299 L .975 -.782 L .462 -.61 L 1.249 -.332 L .24 -.072 L .456 -.37 L .765 -.724 L -.698 -.885 L -1.146 -1.32 L .646 -.229 L 2.586 -.622 L .97 -.26 L .257 -.171 L .46 -.44 L .093 .056 L 1.129 .459 L .757 .222 L 2.034 .934 L 1.14 .473 L 2.44 1.101 L .258 .196 L .399 .633 L .141 .07 L .973 -.048 L .135 .366 L -.118 .396 L .047 .818 L .118 .253 L .812 .277 L 1.557 .697 L 4.048 .132 L 1.657 .259 L .408 .054 L .334 .619 L .185 .239 L 1.07 .05 L .644 -.044 L .043 .121 L .277 .648 L .365 .494 L .178 .663 L .052 .113 L .615 -.029 L .248 .126 L -.204 .237 L .194 .187 L .184 .282 L .234 .067 L .234 .27 L .886 .168 L .423 .437 L -.07 .28 L -.235 .035 L -.111 .25 L .316 .381 L -.188 .593 L -.122 .198 L .165 .268 L .302 .666 L .149 -.117 L .372 .282 L .105 .616 L .422 .696 L -.028 .423 L .222 .268 L .16 .197 L .287 .084 L .136 -.007 L .336 .083 L 1.043 2.198 L .548 1.154 L .261 .902 L 3.362 .375 L 3.387 .446 L .839 .108 L .584 -.469 L .152 -.057 L .581 .914 L .155 1.453 L -5.346 2.982 L -2.35 1.213 L -1.691 .815 L -.169 .085 L -1.148 .346 L -3.097 1.035 L -4.618 1.566 L -.484 .229 L -.041 .127 L -.383 .397 L -1.907 2.271 L -2.042 2.667 L -1.302 -2.703 L -1.211 -2.45 L -.452 -.012 L -.715 .047 L -.446 -.125 L -.671 -.151 L -.216 .1 L -.174 .185 L -.11 .495 L .041 .678 L -.113 .565 L -.692 .563 L +476.458 130.735 N .124 .289 L .796 1.944 L .834 1.746 L -.38 .381 L -.479 1.145 L -.334 1.413 L -.171 .593 L -.18 .156 L -.407 -.07 L -.448 -.521 L -.782 -.676 L -.386 -.494 L -.338 -.988 L -.521 -.45 L -.289 -.621 L -.17 -.479 L -.198 -.353 L -.466 .17 L -.267 .523 L .604 1.34 L .131 .381 L .634 .86 L .933 1.042 L .473 1.199 L .526 .973 L .277 .818 L .391 .465 L .912 1.735 L 1.072 1.904 L .428 .705 L .586 .549 L .451 .352 L .151 .183 L -.241 .17 L -.285 .1 L -.043 .155 L .238 1.087 L .252 .467 L .127 .238 L .812 .591 L .397 .168 L .406 .521 L .416 .38 L .311 .56 L -10.382 -.006 L -2.138 -.001 L -2.774 .002 L -2.513 .015 L -2.268 -.029 L -1.664 .01 L -1.241 .007 L -1.614 -.019 L -.914 .005 L -.819 .089 L -.011 -2.612 L .021 -1.342 L -.045 -2.81 L .001 -.692 L .008 -2.048 L .016 -1.468 L .019 -3.869 L .015 -.988 L -.042 -.367 L -.388 -.916 L -.185 -.945 L .056 -.311 L .322 -.553 L .231 -.425 L -.354 -1.283 L .21 -.34 L .369 -.228 L .099 -.208 L .337 .168 L .553 -.015 L .628 -.1 L .786 -.001 L 1.513 .293 L .587 .115 L .779 .122 L .721 .154 L .348 .409 L .4 0 L .928 .083 L .998 .394 L .628 .069 L .245 -.127 L .72 -.538 L .925 -.397 L .837 -.186 L .78 -.27 L .375 -.072 L .346 .056 L .535 -.001 L .723 .126 L .202 .465 L .596 .366 L .518 -.156 L .64 .267 L .382 .027 L .561 -.401 L .241 .179 L .277 .056 L .674 .13 L .338 -.062 L .46 -.165 L .51 -.308 L +580.625 132.873 N .24 .43 L .299 .05 L .276 -.314 L .134 -.513 L .275 .066 L .186 -.182 L 1.079 .199 L .132 .612 L .867 .264 L .726 .595 L .472 .215 L .15 -.132 L .454 .281 L .657 .794 L .158 -.166 L .71 -.116 L .289 .166 L .178 .38 L -.069 .281 L 1.451 .893 L .333 -.248 L .326 .017 L -.175 .396 L .014 .265 L .935 .066 L .365 -.066 L .54 .496 L .141 .463 L .237 -.099 L -.01 -.364 L .685 .38 L .271 -.083 L .08 -.331 L .407 0 L .63 .281 L .319 .364 L .849 -.066 L .341 .116 L .339 -.281 L .655 .159 L .037 .022 L -.318 .761 L -.07 .876 L .429 .827 L -.311 .694 L -.336 -.05 L -.687 .132 L -.271 -.083 L -.357 .132 L -.399 -.116 L -.268 -.364 L -.606 .297 L -.847 -.364 L -.721 -.148 L -.379 .231 L -.312 -.248 L .034 -.331 L -.313 -.066 L -.584 .281 L -.618 -.265 L -.286 -.281 L -.663 -.149 L .101 -.446 L -.142 -.231 L -.643 -.066 L -.494 -.298 L -.582 .347 L -.482 -.265 L -.503 0 L -.087 .215 L -.15 .066 L -.304 -.198 L -.835 -.166 L -.182 -.397 L -.538 .066 L -1.027 -.595 L -.231 .166 L -1.242 -.678 L -.305 -.529 L -.704 -.149 L -.665 -.479 L -.466 .083 L -.63 -.38 L -.039 -.248 L .218 -.43 L .309 -.397 L -.04 -.396 L .221 -.265 L -.008 -.364 L .281 -.116 L 1.07 -.909 L +374.125 167.166 N -1.41 -.924 L -.661 -.604 L -.537 -.788 L -.292 -.662 L -.15 -.183 L -.312 -.154 L -.567 -.053 L -.655 -.307 L -.695 -.561 L -.604 -.194 L -.567 -.025 L -1.209 .12 L -1.821 .194 L -.523 .417 L .06 -.502 L .563 -1.301 L .188 -.819 L .13 -1.13 L -.162 -1.101 L -.3 -.791 L -.624 -.747 L .267 -.283 L .182 -.424 L .067 -.975 L -.065 -.537 L -.174 -.353 L -.808 -.817 L -.297 -.112 L -.393 .438 L -.055 -.197 L -.013 -.381 L .08 -.689 L .474 .013 L 5.055 .056 L 2.396 .014 L .732 -.033 L .212 .027 L -.051 -1.102 L -.164 -1.539 L .01 -.707 L .249 -.383 L .575 -.427 L .726 -.315 L .809 -.287 L .144 -.128 L .099 -2.6 L .07 -2.261 L .047 -.509 L .557 -.074 L 6.005 .022 L .56 .011 L .104 -.396 L -.002 -.65 L .03 -1.752 L 2.829 1.509 L 4.12 2.42 L 1.414 .91 L -.523 .13 L -3.231 .089 L .049 .776 L .908 7.962 L .19 1.468 L .178 1.736 L .325 2.753 L .202 2.386 L .186 1.468 L .724 .787 L -.379 1.613 L -6.457 .01 L -1.953 .026 L -.945 .344 L -.387 .031 L -.485 -.054 L -.713 -.137 L -.535 -.124 L -.06 .212 L .055 .296 L -.107 .269 L -.454 -.082 L -.214 -.168 L -.568 -.83 L -.261 -.111 L -.402 .073 L -.252 .256 L -.181 .552 L -.018 .607 L -.332 .284 L +476.114 191.139 N -.563 .54 L -.626 .314 L -.367 .016 L -.303 -.196 L -.303 -.097 L -.88 .132 L -.881 .33 L -.911 .048 L -.942 -.234 L -.495 -.011 L -.464 .087 L -.496 .229 L -1.288 -1.32 L -1.032 -.926 L -.207 -.083 L -.258 .157 L -.436 .582 L -.16 .1 L -.684 -.631 L -.384 -.012 L -.529 .37 L -.258 .242 L -.352 .016 L -.366 -.195 L -.525 -.477 L -.348 -.493 L -.795 -.772 L -.143 -.239 L -.031 -.07 L .083 -.679 L -.157 -.352 L -.558 -.477 L -.814 -.165 L -.367 -.224 L -.285 -.436 L -.059 -.72 L -.206 -.366 L -.207 -.168 L -.717 -.434 L -.558 -.378 L -.445 -.351 L -.173 -.395 L .148 -.481 L -.223 -.267 L -.351 -.196 L -.799 -.235 L -.797 -.447 L -.223 -.225 L -.252 -.493 L -.207 -.126 L -.272 .001 L -.802 .019 L -.158 -.211 L -.01 -.664 L .416 -1.472 L -.122 -.536 L -.347 -.549 L -1.342 -1.673 L .15 -.425 L -.026 -.367 L -.266 -.465 L -.444 -.407 L -.155 -.295 L -.137 -.522 L -.221 -1.228 L -.141 -.225 L -.338 -.012 L -.517 .088 L -.219 -.352 L .316 -.609 L .542 -.596 L .087 -.34 L -.342 -.662 L .053 -.24 L .718 -.428 L .149 -.212 L -.131 -.677 L .122 -.438 L .583 -.809 L .417 -1.245 L .229 -.143 L 1.245 -.05 L .839 .009 L .04 -.283 L -.031 -1.229 L -.036 -1.002 L .038 -.749 L -.085 -2.5 L .036 -.636 L .016 -.946 L .02 -1.045 L .073 -1.13 L .52 .011 L 1.561 .019 L .088 -.17 L -.033 -3.078 L .021 -1.003 L .819 -.089 L .914 -.005 L 1.614 .019 L 1.241 -.007 L 1.664 -.01 L 2.268 .029 L 2.513 -.015 L 2.774 -.002 L 2.138 .001 L 10.382 .006 L .229 .414 L .499 1.115 L .281 3.501 L .319 1.637 L .182 .211 L .625 .394 L .595 .366 L .617 .507 L .491 .197 L .254 .223 L -.238 .199 L -.277 .327 L -.306 .566 L -.369 .242 L -.511 .172 L -.427 .116 L -.153 .142 L -.235 .496 L -.348 .171 L -.73 .033 L -.204 .552 L -.038 .452 L -.202 .862 L -.242 .722 L -.541 1.302 L -.068 .495 L .092 .903 L -.013 .679 L -.001 .083 L -.148 .947 L -.398 1.231 L -.214 1.061 L -1.04 .331 L -.414 .37 L -.693 1.134 L -.154 .34 L -.191 1.088 L -.141 1.074 L -.197 .185 L -.274 .044 L -.431 -.096 L -.259 .072 L -.163 .114 L -.187 1.103 L -.115 .933 L -.2 1.272 L .039 .522 L -.229 1.159 L -.469 .299 L -.288 -.012 L -.928 -.122 L -.321 .03 L -.188 .806 L -.054 .466 L .094 .141 L .479 .11 L .734 .123 L .334 .167 L .805 .913 L 1.06 1.067 L .751 1.464 L .345 .732 L .348 .421 L .462 .28 L .415 .097 L .269 .309 L .117 .988 L -.034 .17 L -.018 .141 L -.079 -.028 L -.464 .017 L -1.009 .133 L -.832 .005 L -.671 -.052 L -.291 .327 L -.678 .795 L +518.402 163.079 N -.282 .097 L -.538 .27 L -.656 .566 L -.265 .297 L -.166 .508 L -.062 .41 L -.41 .326 L -1.418 .652 L -2.27 .641 L -1.285 .412 L -.843 .312 L -.356 .297 L -.473 .622 L -.436 .269 L -.506 .114 L -.593 -.069 L -.521 .072 L -.83 .439 L -.65 .396 L -.956 .397 L -.752 .199 L -1.16 .003 L -.562 -.013 L -.297 .128 L -.386 .312 L -.272 .297 L -.45 .312 L -.511 .241 L -.389 .043 L -.239 -.042 L -.535 .411 L -.839 .058 L -.494 -.112 L -.623 -.437 L -.17 -.155 L -.317 -.437 L -.084 -.254 L .18 -.721 L -.081 -.635 L -.312 -.507 L -.341 -1.171 L -.572 -1.919 L -.072 -.438 L .268 -.707 L -.124 -.748 L .692 -.563 L .113 -.565 L -.041 -.678 L .11 -.495 L .174 -.185 L .216 -.1 L .671 .151 L .446 .125 L .715 -.047 L .452 .012 L 1.211 2.45 L 1.302 2.703 L 2.042 -2.667 L 1.907 -2.271 L .383 -.397 L .041 -.127 L .484 -.229 L 4.618 -1.566 L 3.097 -1.035 L 1.148 -.346 L .169 -.085 L .092 .663 L .226 .634 L .604 .971 L .933 1.364 L .127 .253 L -.006 .296 L .483 .689 L .241 .306 L +494.64 172.627 N -.261 -.166 L -.476 -.633 L -.475 -.159 L -.437 -.911 L -1.267 -.792 L -.277 -.594 L -.673 -.673 L -.594 -.119 L -.871 -.554 L -.555 .079 L -.158 -.158 L -.237 .04 L -.277 -.198 L -.356 .159 L -.476 .079 L -.277 -.436 L -.158 .237 L -.436 .198 L -.792 .079 L -.554 -.594 L -.238 0 L -.396 -.317 L -.832 1.663 L -.436 -.871 L -.475 .079 L -.277 .356 L -.396 -.08 L -.349 .041 L .013 -.679 L -.092 -.903 L .068 -.495 L .541 -1.302 L .242 -.722 L .202 -.862 L .038 -.452 L .204 -.552 L .73 -.033 L .348 -.171 L .235 -.496 L .153 -.142 L .427 -.116 L .511 -.172 L .369 -.242 L .306 -.566 L .277 -.327 L .238 -.199 L .098 .129 L .718 2.102 L .442 1.623 L .689 1.919 L .618 .832 L .205 -.212 L -.072 -.479 L .093 -.226 L .31 .253 L .4 .677 L .384 .395 L .534 -.043 L .242 .014 L 1.338 1.282 L .809 .916 L .124 .099 L .706 .055 L .618 .874 L .021 .24 L -.025 .198 L .118 .212 L .507 .182 L .915 .869 L -.075 .094 L -.529 .78 L -.331 -.182 L -.396 -.125 L -.214 .114 L -.055 .085 L +370.147 172.035 N -2.301 -.043 L -1.045 .006 L -.505 .384 L -.51 .187 L -.74 -.024 L -.819 .047 L -.463 .139 L -.009 -.003 L -.278 -.226 L -.169 -.409 L .104 -.424 L -.095 -.55 L -.018 -.198 L .001 -.046 L 1.695 .014 L 0 -.434 L .155 0 L .341 -.016 L .186 -.077 L .248 .062 L .294 -.046 L .124 -.093 L .016 -.263 L .077 -.078 L .14 -.016 L .155 .155 L .232 .124 L .356 .108 L .046 .108 L .139 .047 L .217 -.031 L .263 .108 L .186 .17 L .434 0 L .186 -.108 L .263 -.108 L .279 0 L .108 -.124 L .016 -.124 L -.155 -.217 L -.202 -.077 L -.201 .031 L -.294 .093 L -.108 .093 L -.248 .062 L -.279 -.186 L -.031 -.186 L -.186 -.108 L -.17 -.015 L -.186 .124 L -.139 -.108 L -.108 -.217 L -.155 -.108 L -.201 .031 L -.17 -.062 L -.387 .17 L -.108 -.108 L -.155 .046 L -.202 .124 L -.093 .294 L -1.664 0 L -.007 -.067 L -.028 -.269 L -.377 -.268 L -.068 -.155 L -.057 -.367 L -.386 -.635 L -.399 -.494 L -.379 -.31 L -.472 -.183 L .54 -.34 L .723 -.75 L .588 -1.004 L .334 -.82 L .099 -.826 L .523 -.417 L 1.821 -.194 L 1.209 -.12 L .567 .025 L .604 .194 L .695 .561 L .655 .307 L .567 .053 L .312 .154 L .15 .183 L .292 .662 L .537 .788 L .661 .604 L 1.41 .924 L -.506 .399 L -.057 .339 L .251 1.1 L .144 .663 L .22 .479 L .181 .197 L .554 .322 L .265 .337 L .082 .833 L -.004 .565 L -.062 .142 L -.146 -.042 L -.963 .091 L -.658 .074 L -.725 -.081 L -.503 -.209 L -.795 -.32 L -1.255 -.021 L +495.973 175.881 N -.363 .807 L .083 .409 L .428 .732 L .587 .844 L .732 .801 L .596 .547 L .634 .321 L .54 .209 L 4.26 1.443 L 1.447 .472 L 1.875 -.04 L .236 .154 L -4.087 4.205 L -1.562 1.69 L -.813 .909 L -.8 .004 L -1.693 -.046 L -.626 .088 L -.562 .215 L -.388 .214 L -.502 .497 L -.294 .426 L -.337 .115 L -1.216 .078 L -.305 .101 L -.453 .511 L -1.103 -.106 L -.461 -.181 L -.46 -.336 L -.271 -.098 L -.852 .358 L -.675 .343 L -.258 .199 L -.71 .753 L -.16 .114 L -.847 -.094 L -.67 -.193 L -1.373 -.133 L -.335 -.041 L -2.353 -1.525 L -.604 -.293 L -.749 -.193 L -1.054 -.149 L -.319 -.069 L .018 -.141 L .034 -.17 L -.117 -.988 L -.269 -.309 L -.415 -.097 L -.462 -.28 L -.348 -.421 L -.345 -.732 L -.751 -1.464 L -1.06 -1.067 L -.805 -.913 L -.334 -.167 L -.734 -.123 L -.479 -.11 L -.094 -.141 L .054 -.466 L .188 -.806 L .321 -.03 L .928 .122 L .288 .012 L .469 -.299 L .229 -1.159 L -.039 -.522 L .2 -1.272 L .115 -.933 L .187 -1.103 L .163 -.114 L .259 -.072 L .431 .096 L .274 -.044 L .197 -.185 L .141 -1.074 L .191 -1.088 L .154 -.34 L .693 -1.134 L .414 -.37 L 1.04 -.331 L .214 -1.061 L .398 -1.231 L .148 -.947 L .001 -.083 L .349 -.041 L .396 .08 L .277 -.356 L .475 -.079 L .436 .871 L .832 -1.663 L .396 .317 L .238 0 L .554 .594 L .792 -.079 L .436 -.198 L .158 -.237 L .277 .436 L .476 -.079 L .356 -.159 L .277 .198 L .237 -.04 L .158 .158 L .555 -.079 L .871 .554 L .594 .119 L .673 .673 L .277 .594 L 1.267 .792 L .437 .911 L .475 .159 L .476 .633 L .261 .166 L -.594 .921 L -.488 .61 L -.105 .254 L -.029 .396 L .202 1.157 L .5 -.074 L .892 -.246 L .4 .04 L .556 .195 L +364.011 169.929 N 1.664 0 L .093 -.294 L .202 -.124 L .155 -.046 L .108 .108 L .387 -.17 L .17 .062 L .201 -.031 L .155 .108 L .108 .217 L .139 .108 L .186 -.124 L .17 .015 L .186 .108 L .031 .186 L .279 .186 L .248 -.062 L .108 -.093 L .294 -.093 L .201 -.031 L .202 .077 L .155 .217 L -.016 .124 L -.108 .124 L -.279 0 L -.263 .108 L -.186 .108 L -.434 0 L -.186 -.17 L -.263 -.108 L -.217 .031 L -.139 -.047 L -.046 -.108 L -.356 -.108 L -.232 -.124 L -.155 -.155 L -.14 .016 L -.077 .078 L -.016 .263 L -.124 .093 L -.294 .046 L -.248 -.062 L -.186 .077 L -.341 .016 L -.155 0 L 0 .434 L -1.695 -.014 L .019 -.477 L .173 -.198 L .434 -.058 L .093 -.155 L -.006 -.059 L +495.973 175.881 N -.556 -.195 L -.4 -.04 L -.892 .246 L -.5 .074 L -.202 -1.157 L .029 -.396 L .105 -.254 L .488 -.61 L .594 -.921 L .055 -.085 L .214 -.114 L .396 .125 L .331 .182 L .529 -.78 L .075 -.094 L .627 .596 L .285 .465 L .036 .282 L -.118 .113 L -.361 .185 L -.438 .1 L -.56 .312 L -.566 .467 L .253 .127 L .645 -.058 L .321 .013 L .434 .124 L -.114 .26 L -.37 .468 L -.34 .567 L +363.763 172.732 N .463 -.139 L .819 -.047 L .74 .024 L .51 -.187 L .505 -.384 L 1.045 -.006 L 2.301 .043 L -.111 .792 L .115 .847 L -.186 .312 L -.333 .186 L -.513 .031 L -.401 .017 L -.381 .186 L -.789 .64 L -.321 .372 L -.047 -.126 L -.192 0 L -.501 -.14 L -.165 -.254 L .121 -.41 L .33 -.438 L .253 -.212 L -.131 -.141 L -.372 -.112 L -.498 .015 L -.415 .17 L -.161 0 L -.616 -.281 L -.36 -.296 L -.069 -.24 L -.323 -.084 L -.316 -.137 L +383.005 177.596 N -.379 .397 L -.264 .623 L .214 .409 L .695 .405 L .197 .31 L -.125 .283 L -.332 .37 L .309 .351 L .648 .561 L .051 .226 L -.19 .143 L -.304 -.012 L -.548 -.223 L -.304 .03 L -.158 .199 L -.03 .127 L .296 .549 L .179 .21 L -.188 .354 L -.602 .554 L -.047 .099 L -.339 -.224 L -.337 -.097 L -.143 .086 L -.756 .922 L -.321 -.026 L -.404 -.322 L -.277 -.323 L .044 -.283 L -.009 -.65 L -.22 -.846 L -.165 -.366 L -.338 -.097 L -.528 .046 L -.367 .143 L -.252 .242 L -.193 .376 L -.26 -.656 L -.165 -1.369 L -.252 -.761 L -.475 -.619 L -.456 -.421 L -.42 -.224 L -.466 -.04 L -1.137 .148 L -.594 -.039 L -.238 .157 L -.643 .866 L -1.088 1.235 L .051 -.392 L -.312 -.55 L -.764 -.775 L -.122 -.649 L -.84 -.366 L -.908 -.563 L -.277 -.296 L .09 -.396 L -.053 -.311 L -.547 -.041 L -.323 -.098 L -.115 -.155 L .059 -.311 L -.038 -.1 L .321 -.372 L .789 -.64 L .381 -.186 L .401 -.017 L .513 -.031 L .333 -.186 L .186 -.312 L -.115 -.847 L .111 -.792 L 1.255 .021 L .795 .32 L .503 .209 L .725 .081 L .658 -.074 L .963 -.091 L .146 .042 L .113 .028 L .18 .183 L .882 .715 L .536 .265 L .252 -.256 L .475 -.413 L .338 .026 L .356 .153 L .565 .152 L .43 -.243 L .3 -.327 L .684 -.428 L .323 .055 L .246 .281 L .022 .339 L .271 .832 L .265 .451 L .474 .478 L .349 .718 L .194 1.143 L .559 .901 L +266.015 188.956 N .103 .169 L -.163 .326 L -.592 .385 L -1.74 .9 L -.807 .23 L -.557 .074 L -.465 -.054 L -.284 .115 L -.232 1.117 L -.348 .115 L -.628 -.618 L -.344 -.224 L -1.149 .035 L -.385 -.04 L -.896 -.461 L -.309 -.125 L -.159 .029 L -.041 .184 L .616 .688 L .391 .69 L .302 1.524 L .079 .55 L .166 .239 L .96 .051 L .434 .125 L .15 .253 L -.265 .27 L -.569 .272 L -.652 .131 L -.203 .199 L -.259 .666 L -.235 .213 L -.652 .173 L -.554 .286 L -.74 .654 L -.645 .739 L -.271 .016 L -.186 -.776 L -.083 -.183 L -.757 .697 L -.414 .073 L -.482 -.223 L -.694 -.546 L -.432 -.054 L -.199 -.437 L -.088 -.452 L -.161 -.861 L -.138 -.437 L -.148 -.168 L -.797 -1.182 L -.51 -.491 L .479 -.526 L .731 -.612 L -.121 -.282 L -.486 -.647 L -.256 -.437 L -.447 -.789 L -.162 -.804 L -.048 -.367 L -.035 -.438 L -.026 -.254 L .147 -.326 L .379 -.511 L .085 -1.004 L .409 -.525 L -.644 -.081 L -1.99 .224 L -.76 .174 L -.522 .13 L -.144 0 L -.554 -.576 L -.847 -.998 L -.188 -.253 L -.64 -.321 L -.521 -.181 L -1.167 .05 L -1.163 .12 L -.496 .017 L -.397 -.252 L -.429 -.548 L -.401 -.309 L -.099 -.353 L .226 -1.132 L -.103 -.395 L -.855 -1.45 L -.31 -.606 L -.384 .017 L -.234 .1 L -.402 -.025 L .709 -1.191 L .241 -.722 L .172 -.722 L .99 -1.758 L .381 -.059 L .227 .027 L .129 -.396 L -.048 -.497 L .056 -.288 L .414 -.2 L .534 -.156 L .84 -.171 L .128 .105 L -.9 .151 L -.731 .312 L -.145 .212 L .19 .607 L .142 .407 L .224 .126 L -.043 .145 L .153 .579 L -.135 .367 L -.327 .364 L -.348 .824 L -.137 .368 L .253 .479 L .288 .253 L .25 .72 L .341 .353 L .523 -.114 L .184 -.156 L .419 -.255 L .12 -.142 L .066 -.523 L -.167 -.649 L -.21 -.282 L -.438 -.804 L -.136 -.135 L -.118 -.395 L -.247 -.18 L .239 -.099 L .095 -.251 L -.204 -.144 L 1 -.379 L 1.085 -.327 L .998 -.272 L .086 -.225 L .69 -.086 L .143 -.008 L -.042 -.157 L -.055 -.198 L -.125 -.036 L -.039 -.108 L -.128 -.072 L -.226 .071 L -.156 .027 L -.229 -.012 L -.315 -.55 L .109 -.254 L .337 -.213 L .367 -.043 L .09 .112 L .14 .368 L .186 .162 L -.001 .148 L .026 .193 L .068 .09 L .004 .198 L .253 .258 L .329 -.02 L .699 .111 L .455 .07 L .593 .196 L .323 .254 L .393 .564 L .156 .635 L .358 .324 L .359 .084 L 1.02 -.129 L .928 -.059 L .59 -.058 L .799 -.059 L .714 .125 L .4 .479 L .267 .169 L .578 .253 L .49 .14 L 1.094 .04 L .382 -.057 L .388 -.227 L 1.042 -.807 L .47 -.185 L .453 .042 L .959 -.073 L 1.152 -.073 L .919 .055 L .248 .112 L -.056 .141 L -.294 .185 L -.854 -.041 L -.433 .015 L -.083 .212 L .059 .184 L .593 .253 L .609 .535 L .195 .649 L .246 -.523 L .185 -.142 L .415 .253 L .483 .027 L .374 .098 L .258 .338 L .918 .394 L .464 .295 L -.729 .496 L -.161 .65 L -.214 .226 L -1.055 .417 L .5 .064 L .598 .098 L .368 -.029 L .33 -.142 L .929 -.03 L .725 .083 L .84 .274 L .095 .296 L -.061 .41 L -1.655 1.239 L -.101 .255 L .074 .212 L .62 .604 L .141 .282 L -.308 .299 L -.41 .144 L -1.032 .19 L -.061 .452 L .008 .58 L -.395 .539 L -.071 .212 L .324 .521 L .732 .745 L .503 .647 L +493.044 204.258 N -1.223 -1.771 L -.027 -.932 L -.03 -1.43 L -.042 -2.045 L -.003 -1.017 L 0 -.438 L .016 -.848 L .004 -1.215 L .002 -.508 L 1.649 -2.467 L .453 -.511 L .305 -.101 L 1.216 -.078 L .337 -.115 L .294 -.426 L .502 -.497 L .388 -.214 L .562 -.215 L .626 -.088 L 1.693 .046 L .8 -.004 L .813 -.909 L 1.562 -1.69 L 4.087 -4.205 L -.236 -.154 L -1.875 .04 L -1.447 -.472 L -4.26 -1.443 L -.54 -.209 L -.634 -.321 L -.596 -.547 L -.732 -.801 L -.587 -.844 L -.428 -.732 L -.083 -.409 L .363 -.807 L .34 -.567 L .37 -.468 L .114 -.26 L .154 .044 L .935 1.142 L .586 .62 L .243 .381 L .265 .211 L .372 -.071 L .417 -.001 L .465 .027 L .372 -.071 L .572 -.27 L .836 -.425 L .585 -.157 L .397 .098 L .76 .267 L .549 -.072 L .56 -.326 L .779 -.566 L .247 -.127 L .447 .041 L .479 .098 L .419 -.043 L 1.195 -.482 L .288 .027 L .682 .196 L .74 -.03 L .764 -.185 L .964 -.327 L .9 -.666 L .47 -.382 L .604 .154 L .391 .211 L .08 .014 L .147 .268 L -.414 .919 L .021 .564 L .132 .621 L -.165 .452 L -.375 .509 L -.028 .678 L -.047 .833 L -.163 .509 L -1.264 2.262 L -.842 .792 L -.122 .311 L .102 .353 L -.893 1.569 L -.834 1.272 L -.214 .947 L -.351 .636 L -.712 1.117 L -.874 1.188 L -1.159 1.498 L -.384 .439 L -2.274 2.504 L -1.82 1.557 L -2.164 1.121 L -.593 .382 L -1.28 1.09 L -1.74 1.755 L -.06 .061 L -1.055 1.1 L -1.235 1.569 L -.615 .835 L .1 .353 L -.094 .276 L +264.768 176.039 N -.128 .225 L -.115 .067 L -.029 .135 L .039 .25 L -.058 .086 L .125 .376 L -.039 .424 L -.453 .154 L -.135 -.01 L -.144 .039 L -.482 -.039 L -.192 .039 L -.087 -.048 L -.356 0 L -.02 -.058 L .039 -.067 L .202 -.029 L .222 -.135 L .019 -.087 L .106 .02 L .154 .01 L .135 -.145 L -.096 -.279 L .048 -.125 L .029 -.183 L -.067 -.125 L -.097 -.135 L -.279 -.048 L .116 -.096 L .164 -.019 L .231 -.029 L .115 -.087 L .385 .02 L .106 -.039 L .299 -.067 L .244 .006 L +654.075 190.187 N .206 -.125 L .63 -.114 L .656 -.938 L .241 -.07 L -.069 .268 L .122 .087 L .187 -.046 L .11 .174 L .148 .444 L -.024 .111 L -.013 .247 L .197 .197 L .025 .086 L -1.234 .42 L -.383 .271 L -.309 -.271 L -.111 -.259 L -.234 .012 L -.062 -.37 L -.084 -.126 L +493.044 204.258 N -.602 .389 L -.557 .171 L -.385 -.112 L -.086 .777 L -.282 .367 L -.67 .115 L -.394 .382 L -.088 .48 L .006 .353 L -.356 .622 L -.964 1.358 L .092 .536 L -.337 .65 L -.25 .255 L -.334 .1 L -.084 .152 L -1.067 -.807 L -2.427 -1.752 L -.07 -.239 L .116 -.552 L -.137 -.381 L -3.553 -1.984 L -4.663 -2.568 L -1.448 .033 L 1.144 -2.479 L .105 -.229 L .656 -.835 L .985 -.938 L .477 -.525 L .43 -.695 L .143 -.566 L -.048 -.664 L -.223 -.606 L -.224 -.352 L -.732 -1.069 L -.174 -.465 L -.027 -.861 L -.126 -.226 L -.477 -.463 L -.3 -.493 L .678 -.795 L .291 -.327 L .671 .052 L .832 -.005 L 1.009 -.133 L .464 -.017 L .079 .028 L .319 .069 L 1.054 .149 L .749 .193 L .604 .293 L 2.353 1.525 L .335 .041 L 1.373 .133 L .67 .193 L .847 .094 L .16 -.114 L .71 -.753 L .258 -.199 L .675 -.343 L .852 -.358 L .271 .098 L .46 .336 L .461 .181 L 1.103 .106 L -1.649 2.467 L -.002 .508 L -.004 1.215 L -.016 .848 L 0 .438 L .003 1.017 L .042 2.045 L .03 1.43 L .027 .932 L 1.223 1.771 L +466.196 203.275 N .188 -.298 L .076 -.27 L -.057 -.748 L .025 -.734 L -.021 -.593 L .107 -.507 L .217 -1.02 L .395 -.681 L .255 -.284 L 1.241 -.996 L 1.195 -1.066 L .191 -.453 L -.111 -.31 L -.271 -.182 L -.479 -.04 L -.191 -.027 L -.128 -.253 L .26 -1.88 L .018 -.424 L -.159 -.183 L -.063 -.028 L .496 -.229 L .464 -.087 L .495 .011 L .942 .234 L .911 -.048 L .881 -.33 L .88 -.132 L .303 .097 L .303 .196 L .367 -.016 L .626 -.314 L .563 -.54 L .3 .493 L .477 .463 L .126 .226 L .027 .861 L .174 .465 L .732 1.069 L .224 .352 L .223 .606 L .048 .664 L -.143 .566 L -.43 .695 L -.477 .525 L -.985 .938 L -.656 .835 L -.105 .229 L -1.144 2.479 L -4.659 0 L -1.277 .05 L -.319 .017 L -.554 .398 L -.458 .427 L -.431 .045 L -.546 -.223 L -.064 -.042 L +713.621 206.298 N .169 7.966 L -.44 .822 L .431 1.368 L .046 .805 L -.031 3.438 L -.515 -.512 L -.927 -.888 L -.716 -.902 L -.406 -.056 L -.776 .101 L -.739 .143 L -.434 -.013 L .091 -.382 L .435 -.65 L .006 -.283 L -.561 -.521 L -.565 -.775 L .028 -.226 L .442 .111 L .236 -.042 L .135 -.113 L -.467 -.409 L -.595 -.408 L -.287 -.381 L -.275 -.648 L -1.053 -1.693 L -.508 -.394 L -.467 -.282 L -.604 -.196 L -1.983 -.603 L -1.26 -.379 L -.613 -.069 L -.705 -.238 L -.63 -.323 L .072 -.34 L -.098 -.268 L -.193 -.028 L -.617 .101 L -.389 -.07 L -.412 -.196 L -.408 -.395 L -.209 -.579 L .133 -.494 L -.155 -.226 L -.187 .113 L -.234 .396 L -.122 .664 L -.251 .608 L -.334 .269 L -.696 .354 L -.155 -.169 L -.331 -.677 L .022 -.155 L .384 -.27 L -.152 -.424 L -.173 -.239 L -.564 -.395 L -.707 -.394 L -.338 -.056 L -.059 -.212 L .038 -.226 L .413 -.044 L .388 .084 L .603 .239 L .158 -.029 L .368 -.34 L .525 -.41 L .146 .056 L .3 .269 L 1.021 -.045 L .139 -.128 L .09 -.522 L -.063 -.409 L -.238 .028 L -.345 .199 L -.604 .071 L -.656 -.041 L -.766 .044 L -1.026 -.082 L -.411 -.31 L -.135 -.197 L -.148 -.664 L -.202 -.338 L -.42 -.155 L -1.249 -.124 L .265 -.297 L .058 -.255 L .004 -.593 L .463 -.029 L .92 -.411 L .49 -.383 L .444 -.283 L .352 .027 L .4 .069 L 1.494 .646 L .515 .169 L .913 .153 L .382 .705 L .138 .396 L -.283 .749 L -.067 .381 L .221 .381 L .115 .494 L .115 .48 L .215 .521 L .186 .197 L .197 .127 L .226 -.65 L .085 .113 L .087 .141 L .309 1.073 L .169 .169 L .234 .183 L .294 .112 L .354 .056 L .58 -.198 L .504 -.439 L 1.192 -1.853 L .352 -.015 L 1.078 -.215 L .378 -.142 L .045 -.085 L .014 -.509 L .219 -.17 L 1.1 -.609 L .335 -.043 L 1.732 .759 L 2.129 .941 L 1.54 .52 L 1.299 .404 L h 691.208 208.707 m -.388 -.069 L -.693 -.38 L -.852 -.647 L -.295 -.141 L -.414 .028 L -.059 .1 L .024 .452 L -.206 .028 L -1.014 -.407 L -.258 -.353 L -.582 .199 L -.289 .269 L -.326 .185 L -.186 -.184 L -.312 -.451 L -.245 -.451 L .246 -.198 L .303 -.029 L .274 .056 L 1.104 .04 L .574 .31 L .319 -.015 L .544 -.326 L .414 -.015 L .534 .126 L .857 .21 L .499 .395 L .293 .395 L .179 .621 L -.049 .254 L h 682.045 208.699 m -.419 -.056 L -.715 -.493 L -.232 -.451 L .146 -.283 L .603 -.1 L .766 -.044 L .246 .126 L .256 .311 L .313 .197 L .108 .226 L -.067 .226 L -.125 .057 L -.879 .285 L h 707.635 219.095 m -1.11 -.209 L .589 -1.032 L .56 -.708 L .407 -.269 L .427 -.072 L .527 .338 L .198 .24 L -.11 .184 L -.324 .637 L -.256 .17 L -.638 .693 L -.27 .028 L h 673.797 218.703 m -.562 .257 L .034 .233 L -.886 .326 L -.582 .274 L -.339 -.041 L -.453 .325 L -.504 -.069 L -.427 -.112 L -.378 .255 L -.3 .058 L -.358 -.07 L -.58 -.196 L -1.046 -.04 L -.316 .043 L -.211 -.564 L .027 -.24 L .383 -.198 L .672 -.199 L .528 -.016 L 1.142 .407 L .445 .324 L .338 .013 L .326 -.297 L .464 -.016 L .429 -.071 L .414 .187 L .467 -.116 L -.072 -.222 L .421 -.187 L .404 -.233 L .094 -.151 L -.076 -.117 L -.184 .023 L .116 -.198 L .16 .012 L .22 .094 L .177 .221 L .013 .304 L h 662.661 219.065 m -.312 -.099 L -.203 -.127 L -.062 -.169 L .03 -.212 L .256 -.198 L .315 -.036 L .17 .092 L .053 .212 L .182 .098 L .305 -.145 L .34 .105 L .104 .151 L -.012 .451 L .183 -.148 L .163 -.304 L .318 -.029 L .229 .226 L .021 .424 L .181 -.036 L .062 .104 L -.025 .397 L -.316 -.211 L -.311 -.058 L -.141 .058 L .072 .155 L -.852 .157 L -.143 -.091 L .097 -.268 L -.085 -.059 L -.308 .269 L -.229 .256 L -.296 -.046 L -.63 .225 L -.624 .199 L -.357 -.051 L -.31 .123 L -.392 -.07 L -.103 -.07 L -.202 -.123 L -.063 -.279 L .143 -.261 L -.08 -.253 L .193 -.115 L .23 -.113 L .233 -.156 L .224 .07 L .61 .013 L .4 .104 L .089 .28 L .291 .109 L .294 .056 L .189 -.259 L .29 -.012 L .051 -.187 L -.263 -.15 L h 656.294 219.602 m -.393 -.282 L -.855 -.449 L -.118 -.269 L .417 -.001 L .514 -.185 L .462 -.029 L .925 .521 L -.338 .17 L -.232 .1 L -.381 .425 L h 631.053 200.125 m -.061 .225 L -.413 .439 L -.204 .41 L -.381 .354 L .164 .353 L .162 .169 L .806 .493 L .832 .055 L .241 .112 L .151 .381 L .128 .763 L -.007 .409 L .267 .423 L .212 .127 L .544 .041 L -.45 .933 L .151 .212 L .703 -.453 L .824 .252 L .177 .042 L .265 .254 L .144 .438 L .698 .676 L -.515 1.979 L -.04 .452 L .23 .946 L -.021 .438 L .021 .664 L -.002 .268 L -.149 1.06 L -.087 .156 L -.107 .07 L -.367 -.253 L -.381 -.522 L -.261 -.084 L -.262 .481 L -.081 .268 L -1.043 -.619 L -.219 .086 L .394 .747 L -.163 .213 L -.204 -.197 L -1.343 -1.424 L -.775 -.761 L -1.011 -.859 L -1.348 -.958 L -.391 -.451 L -.199 -.493 L -.191 -.339 L -1.003 -.633 L -.697 -.677 L -1.186 -1.509 L -.074 -.353 L .039 -.339 L -.324 -.875 L -.841 -1.467 L -.667 -1.044 L -.612 -.775 L -.369 -.301 L -.287 -.234 L -.64 -.295 L -.254 -.748 L -.688 -1.806 L .067 -.24 L -.107 -.311 L -.157 -.197 L -.662 -.507 L -.711 -.394 L -.539 -.21 L -.317 -.099 L -.119 -.353 L -.077 -.734 L -.18 -.409 L -.386 -.479 L -.818 -.831 L -.368 -.423 L -.725 .128 L -.613 -.676 L -.646 -.606 L -.593 -.69 L -.562 -.945 L -.229 -.635 L -.032 -.367 L .057 -.198 L .149 -.113 L .401 -.043 L .364 .098 L .25 .126 L .632 .563 L .361 .155 L .922 .153 L .335 .027 L .548 -.1 L .454 -.142 L .4 -.015 L .323 .31 L .919 1.156 L .513 .31 L .058 .155 L -.12 .537 L 1.066 .916 L .749 .493 L 1.175 .689 L .678 .323 L .139 .169 L .03 .593 L -.02 .155 L .573 .055 L .745 .944 L .612 .55 L .271 -.015 L .004 -.198 L -.123 -.226 L .069 -.24 L .507 .21 L .479 .804 L .441 .38 L .446 .056 L .429 .197 L .314 .366 L .28 .734 L .316 .437 L .431 .268 L .511 .126 L .767 .083 L .431 .154 L .494 .38 L .576 .606 L -.019 .071 L h 684.201 200.125 m -.007 -.172 L -.414 -1.058 L .18 -.551 L -.078 -.141 L -.141 -.296 L .036 -.325 L .286 -.89 L .514 -.82 L .263 .367 L .152 .353 L -.054 .283 L -.246 .396 L -.361 .763 L .061 .325 L .19 .141 L .097 -.141 L .436 -.411 L .135 -.522 L .179 -.142 L .806 -.412 L .141 .141 L -.052 .254 L .104 .55 L -.354 .212 L -.467 .354 L -.162 .311 L .159 .099 L .446 .126 L .398 .211 L -.016 .141 L .159 .353 L -.688 -.154 L -.431 -.154 L -.367 -.042 L -.304 .156 L -.08 .438 L .049 .258 L .131 .688 L .341 .62 L .405 .438 L .196 .282 L -.156 .212 L -.26 -.211 L -.664 -.648 L -.55 -.733 L -.002 -.396 L -.011 -.251 L h 637.361 207.144 m -.863 -.394 L -.377 -.239 L -.205 -.367 L -.045 -.367 L -.156 -.395 L -.507 -.395 L -.291 -.099 L -.446 .029 L -.116 -.141 L .271 -.65 L .234 -.24 L .509 .55 L .148 -.467 L .313 -.269 L .072 .395 L .312 .89 L .648 .817 L .698 .31 L -.265 .184 L -.118 .283 L .183 .564 L h 634.321 215.345 m -.091 -.187 L .316 -.023 L .402 .093 L .369 -.129 L .068 -.524 L .018 -.14 L .309 .057 L -.043 -.5 L .222 -.235 L .093 -.277 L .202 .121 L .631 .112 L .474 -.047 L .237 .443 L .524 -.089 L .158 -.297 L .022 -.244 L .259 .116 L .618 .168 L .411 .438 L .338 -.046 L .204 .271 L .446 -.029 L .453 -.185 L .302 .211 L .369 .522 L .179 .521 L .884 .041 L .462 .188 L .49 -.077 L 1.435 .124 L .479 -.029 L .34 -.17 L .213 -.65 L .271 -.269 L .447 -.015 L .223 .211 L .289 .494 L .633 .125 L .53 .027 L .774 .083 L .796 .153 L .289 .24 L .293 .288 L -.08 .445 L .275 .466 L .119 .099 L .877 .352 L .422 .069 L .658 .013 L .45 -.185 L .415 -.015 L .628 .238 L .048 .197 L -.255 .425 L -.152 .494 L .578 .776 L -.499 -.211 L -.802 -.196 L -.599 -.253 L -.891 -.309 L -.528 .001 L -.589 .256 L -.348 .057 L -.714 -.098 L -1.454 -.138 L -1.47 -.138 L -.805 -.253 L -.839 -.479 L -1.099 -.336 L -1.125 -.267 L -.948 -.04 L -.556 .298 L -.445 .043 L -.957 -.153 L -.805 -.492 L -.357 -.07 L -1.606 -.066 L -.363 -.155 L .055 -.141 L .448 -.468 L -.402 -.267 L -.551 -.099 L -.506 -.14 L -.307 -.027 L -1.261 -.121 L h 675.004 223.092 m .249 -.494 L .023 -.537 L .113 -.312 L .674 -.481 L 1.447 -.624 L .662 -.454 L .36 -.607 L .466 -.157 L 1.578 -.102 L .91 -.214 L .541 -.044 L .869 -.143 L .118 .07 L .099 .197 L -.237 .212 L -.36 .256 L -1.609 .61 L -1.369 .44 L -.713 .256 L -.606 .354 L -1.09 .963 L -.653 .481 L -.439 .086 L -.552 .228 L -.48 .015 L h 667.866 223.149 m -.217 -.069 L -.917 -.605 L -.8 -.45 L -.347 -.099 L -.493 -.126 L -.292 -.197 L .108 -.212 L .371 -.142 L .992 -.03 L .502 -.114 L .35 .296 L 1.147 .746 L .265 .381 L -.125 .325 L -.246 .24 L -.299 .057 L h 661.819 191.241 m -.041 .09 L .319 .691 L -.23 .142 L -.546 .043 L -.579 .086 L .198 .226 L .115 .296 L -.169 .226 L .216 .211 L .235 .112 L .546 .832 L .536 .747 L .043 .198 L -.338 .721 L .075 .226 L .406 .465 L .743 .45 L .6 .493 L .551 .761 L -.465 .17 L -.75 -.026 L -.797 -.238 L -.337 .1 L -.387 .467 L -.354 .918 L -.08 .476 L -.046 .272 L .132 .649 L .116 .424 L -.133 .848 L -.256 0 L -.466 -.154 L -1.037 .963 L -.433 .65 L -.751 .608 L .443 .381 L .06 .396 L .17 .296 L -.685 .058 L .452 .578 L .009 .212 L -.103 .227 L -.547 .665 L -.206 .396 L -.127 .354 L -.529 .594 L -1.294 .61 L -.607 .284 L -.292 .198 L -.194 -.311 L .024 -.424 L -.33 -.804 L -.306 -.381 L -.265 -.184 L -.286 .029 L -.503 .523 L -.302 .029 L -.328 -.508 L -.313 -.197 L -.437 -.112 L -.387 -.451 L -.342 -.154 L -.35 .806 L -.135 .198 L -.381 .058 L -.356 -.112 L -.442 .128 L -.318 .354 L -.364 .071 L -.059 -.551 L .034 -.311 L -.314 -1.03 L -.336 .396 L -1.42 .44 L -.321 -.408 L -.639 .015 L -.281 .156 L -.303 .029 L -.058 -.649 L -.022 -.65 L -.267 -1.411 L -.012 -.48 L -.352 -.747 L -.406 -.409 L -.79 -.422 L -.146 -.141 L .555 -.354 L -.531 -.38 L -.258 -.296 L .188 -.735 L -.074 -.128 L -.278 -.478 L -.352 -.296 L .065 -.466 L -.125 -.593 L .182 -.65 L .133 -.353 L .424 -.58 L .303 -.806 L .318 .028 L .204 .11 L .288 .792 L .253 .295 L 1 .983 L .304 .083 L .446 .28 L .928 -.416 L .255 -.001 L .526 .223 L .543 .11 L .399 -.172 L .528 -.342 L .403 -.525 L .531 -.441 L .479 -.074 L .431 .11 L .557 .251 L .524 .223 L .559 .152 L .287 -.03 L .467 -.356 L .465 -.172 L .864 -.175 L .387 -.299 L .928 -1.785 L -.076 -.748 L .218 -.34 L .646 -.244 L .22 -.383 L -.106 -.988 L .119 -.565 L .381 -.638 L .247 -.157 L .464 -.017 L .748 .081 L .651 .081 L .624 -.018 L .446 .04 L .753 .292 L .182 .09 L h 666.561 200.125 m .012 -.049 L .48 -1.188 L .434 -.41 L .289 -.142 L .429 .338 L .29 -.311 L .162 -.325 L .293 -.481 L .496 -.058 L .605 .14 L .729 .535 L .447 .027 L .863 -.044 L .478 .168 L .749 .267 L .577 -.227 L 1.853 .081 L .72 -.128 L .627 -.354 L .211 -.283 L -.156 -.268 L .196 -.283 L .388 -.241 L .295 -.41 L .289 -.057 L .075 .24 L -.073 .537 L -.117 .311 L -.081 .127 L -.082 .127 L -.969 1.259 L -.416 .396 L -.464 .1 L -1.23 .229 L -.495 -.069 L -.591 -.422 L -1.149 -.068 L -1.151 .059 L -.878 -.041 L -1.039 .045 L -.575 -.083 L -.671 .029 L -.415 .1 L -.433 .368 L -.259 .461 L -.154 .274 L -.187 .721 L .068 .48 L .263 .494 L .194 .183 L .403 .226 L .259 .196 L .221 .607 L .179 .154 L .226 .042 L .815 .026 L .249 -.269 L .652 -.976 L .385 .056 L .307 .183 L .496 .041 L .363 -.227 L .669 -.156 L .62 -.143 L .268 -.298 L .271 -.057 L .466 .196 L .131 .212 L -.083 .734 L -.469 -.267 L -.544 -.042 L -.361 .298 L -.389 .523 L -.438 .425 L -1.059 .439 L -.214 .325 L -.143 .029 L -.241 -.042 L -.468 -.126 L -.03 .056 L .025 .312 L .212 .126 L .676 .578 L .467 .521 L .854 1.24 L -.097 .325 L -.156 .679 L .102 .409 L .447 .535 L .555 .438 L .062 .226 L -.045 .282 L -.436 -.056 L -.652 .059 L -.412 .297 L -.224 .692 L -.498 -.026 L -.461 -.183 L -.107 -.17 L .052 -.649 L .204 -.58 L -.978 -.845 L -.417 -.31 L -.174 -.269 L .036 -.24 L .284 -.396 L .116 -.579 L -.165 -.494 L -.737 -.055 L -.503 .213 L -.494 .396 L .16 .353 L .143 .932 L -.068 .509 L -.236 1.145 L .363 .903 L -.01 .311 L -.377 .636 L -.019 .227 L .275 .564 L -.726 .171 L -.513 .241 L -.476 .071 L -.245 -.324 L -.16 -.522 L .156 -.325 L .181 -.466 L .069 -.876 L .06 -1.073 L -.125 -.509 L .029 -.339 L -.213 -.395 L -.311 -.127 L -.391 .171 L -.574 .029 L .011 -.41 L -.25 -1.284 L .131 -.311 L .491 -.524 L .469 -.777 L .161 -.48 L -.089 -.918 L -.006 -.254 L .087 -.452 L .339 -.721 L .447 -.058 L -.043 -.861 L .254 -1.053 L +341.05 41.069 N 2.084 .272 L .344 .361 L -.869 .174 L -.541 .139 L -1.678 .106 L -1.159 .037 L -.689 .156 L -.372 .224 L -.308 .6 L -.361 .376 L 1.05 .39 L .971 .168 L 2.117 .064 L .601 -.001 L 1.775 -.242 L 1.93 -.038 L .866 .135 L .933 .219 L .417 .135 L .284 -.018 L 1.001 -.002 L 1.277 .032 L .615 .05 L -1.277 .626 L -1.583 .457 L -1.976 .523 L -.556 -.016 L -.695 -.116 L -.951 .671 L -1.061 .503 L -1.246 .452 L -1.125 .296 L -.211 .056 L -2.212 .054 L -.525 .134 L -.502 .001 L -.982 .201 L -.665 .167 L -.528 .051 L -.946 -.413 L -.375 .05 L -.69 .913 L -.958 .118 L -.631 -.065 L -.743 -.197 L -.622 -.463 L -.854 -.43 L -.647 -.215 L -.109 0 L .008 .2 L .707 1.043 L -.192 .249 L -.319 .017 L -.69 .249 L -.84 .249 L -.573 .38 L -1 .906 L -.657 .657 L -1.051 .851 L -.776 .262 L -1.034 .083 L -1.023 -.275 L -.148 .554 L -.438 .569 L -.783 .277 L -.992 -.095 L -.616 .05 L -1.18 .439 L .942 -1.723 L -.121 .017 L -.795 -.015 L -1.055 -.177 L .26 .423 L -.026 .455 L -.386 .407 L -.794 .39 L -1.16 .164 L -.973 .002 L -1.255 .083 L .467 .403 L .212 .403 L -.09 .387 L -.379 .097 L -.321 -.063 L -.47 .033 L -1.792 -.157 L .517 .32 L .765 .462 L .295 .351 L -.01 .224 L -.26 .176 L -1.197 .034 L -1.051 .129 L .844 .413 L .47 .126 L .448 .222 L .389 .333 L -.554 .461 L -.285 .111 L -.599 -.094 L -.478 .096 L .345 .474 L -.009 .127 L 308.501 60 l -.486 -.125 L -.583 -.062 L .026 .158 L .255 .457 L -.101 .347 L -.288 0 L -.656 -.093 L -.089 -.016 L -.979 .112 L -1.081 .018 L .682 .487 L 1.108 .391 L .331 .204 L -.077 1.035 L -.382 .938 L -.427 .094 L -.815 -.061 L .489 .591 L -.016 .498 L .156 .233 L -.068 .373 L -.316 .062 L -.495 -.03 L -.771 .079 L .762 .386 L .427 .603 L -.117 .447 L -.287 .031 L -.967 -.26 L -1.052 -.508 L -.498 .294 L -.425 .602 L -.635 -.599 L .158 -.573 L -.387 -.201 L -1.124 -.184 L -.577 -.309 L .04 -.187 L .253 -.249 L .066 -.218 L -.325 -.28 L -.366 -.186 L -.668 .359 L -.276 .016 L -.3 .141 L -.444 -.046 L -.98 .064 L -.417 .017 L -.571 .296 L -.476 .28 L -.426 -.403 L -.104 -.357 L -.222 -.217 L -.513 -.233 L -.817 -.232 L -.772 -.389 L -.517 -.781 L .07 -.737 L -.199 -.156 L -.434 -.094 L -.467 .048 L -.97 -.266 L -.108 -.094 L -.138 -.236 L .14 -.457 L .459 -.395 L .071 -.269 L -.258 -.062 L -.551 -.031 L -.542 -.094 L -.278 -.221 L -.058 -.633 L -.458 -.126 L -.616 .049 L -.589 -.57 L .023 -.191 L .198 -.254 L .618 -.367 L 1.22 -.337 L .405 -.304 L .476 -.128 L .051 -.383 L -.277 -.287 L -.473 .097 L -.921 .082 L -.493 .097 L -.635 .416 L -.538 .129 L -.63 .304 L -.339 -.318 L .038 -.623 L -.114 -.784 L -.206 -.451 L .015 -.355 L -.243 -.323 L -.504 .082 L -.271 -.032 L -.666 -.355 L -.594 -.485 L -.013 -.357 L .842 -.538 L .265 .019 L -.556 -.189 L -1.083 .064 L -.103 -.284 L .383 -.176 L .677 -.03 L .586 -.052 L .456 -.087 L .322 -.672 L -1.208 -.047 L -.572 .05 L -.362 -.032 L -.29 -.163 L -.116 -.197 L .223 -.28 L .218 -.008 L .18 -.16 L .427 -.055 L -.375 -.188 L -.552 .073 L -.22 -.248 L .057 -.188 L .073 -.132 L .259 0 L .309 -.099 L .827 -.25 L 1.218 .081 L .854 .163 L .776 .032 L .378 .131 L .927 .146 L 1.027 .097 L -.031 -.363 L .299 -.545 L -.298 -.182 L -1.02 -.263 L -1.356 -.312 L -.903 -.164 L -1.592 -.33 L -.354 -.116 L .336 -.35 L .788 -.001 L 1.462 .363 L 1.034 .048 L .463 -.067 L .114 -.067 L .088 -.6 L .088 -.301 L .595 -.034 L .528 .116 L .227 -.101 L -.027 -.351 L -.195 -.184 L -.891 -.317 L .162 -.437 L .528 -.455 L -.258 -.286 L -1.21 -.167 L -1.154 .002 L -1.178 -.286 L -1.649 -.49 L -.78 -.101 L -.903 -.05 L -.76 -.34 L -.811 -.477 L .156 -.035 L .323 -.155 L .605 -.001 L .572 -.019 L 2.085 .305 L .716 .033 L 1.249 .306 L 1.451 .458 L .729 .169 L .056 -.307 L -.311 -.426 L -.86 -.546 L -.172 -.446 L -.603 -.446 L -.485 -.051 L -.677 -.24 L .361 -.277 L .542 -.139 L 285.644 41 l -.704 -.241 L -1.101 -.015 L -.625 -.086 L -1.132 -.327 L -.88 .608 L -.324 .156 L -.274 .294 L -.875 .243 L -1.402 -.066 L -1.031 -.343 L -.306 -.242 L -.027 -.294 L .438 -.313 L .293 -.645 L -.152 -1.259 L .582 -.054 L .691 .192 L .372 -.124 L .151 -.334 L -.383 -.369 L -.933 -.545 L -.452 -.141 L -.946 -.796 L -.895 -.925 L -1.105 -1.289 L -.578 -.485 L -1.855 -.379 L -.667 -.255 L -.291 -.202 L -.052 -.701 L -.904 -.406 L -.962 -.109 L -1.589 -.165 L -1.928 -.425 L -1.903 -.333 L -2.133 -.183 L -.997 -.054 L -1.632 -.035 L -.785 .189 L -1.043 .096 L -.806 .188 L -1.419 .152 L -1.228 -.166 L -1.46 -.296 L .319 .747 L -.051 .093 L -1.051 -.017 L -1.294 -.184 L -3.168 -.611 L 1.538 -.566 L .463 -.114 L -.092 -.226 L -.423 -.169 L -1.067 -.017 L -2.21 -.015 L -.812 -.074 L -.629 -.018 L -1.238 -.434 L -.87 -.208 L .587 -.306 L 1.257 -.041 L 3.036 .147 L 2.025 .034 L 1.343 .017 L 2.117 -.157 L 1.055 -.212 L .292 -.096 L .054 -.345 L -.627 -.287 L -.82 -.21 L -1.217 .156 L -1.11 .252 L -1.31 .021 L -1.138 -.113 L -.753 .078 L -.879 .098 L -.68 -.056 L -.857 -.19 L -.664 -.365 L -.816 -.191 L -.662 -.057 L -.726 .059 L -.486 -.076 L -1.416 -.481 L -.044 -.35 L .36 -.45 L .81 -.119 L 1.235 -.1 L 1.517 -.14 L 2.074 -.161 L 1.29 -.081 L .951 -.396 L 1.089 -.259 L .843 -.081 L 2.478 -.005 L 1.101 -.101 L 1.942 .036 L .402 -.139 L .31 -.199 L .609 -.16 L .202 -.658 L .276 -.501 L .116 -.101 L -.89 -.228 L -1.947 -.039 L -1.155 .194 L -.959 -.125 L -1.243 -.383 L .595 -.781 L 1.38 -.332 L 2.845 -.359 L 1.407 -.225 L 1.962 -.249 L 2.112 -.162 L 1.163 .087 L 1.213 -.07 L 1.319 -.07 L .345 -.181 L .011 -.226 L -.357 -.753 L -.022 -.208 L .522 -.14 L 1.886 -.05 L 1.526 .205 L 2.141 .41 L 1.296 .226 L .802 .181 L .823 -.275 L -1.657 -.525 L -.697 -.509 L .167 -.047 L 2.2 -.122 L 1.166 -.12 L 1.854 -.216 L 2.52 -.195 L .73 .069 L 1.064 .116 L .232 1.738 L .913 -.162 L .539 -.322 L .432 -1 L 1.003 .021 L 2.004 .323 L 1.858 .414 L 1.529 .25 L .205 -.3 L -.644 -.3 L -.816 -.537 L -.894 -.4 L .295 -.287 L .742 .022 L 1.758 .02 L 1.136 .212 L 2.754 .373 L 1.284 .279 L 2.109 .322 L 1.878 .274 L 1.872 .204 L .8 -.209 L .816 -1.483 L -.326 -.191 L -1.292 -.334 L -1.176 -.533 L .708 -.247 L 2.404 -.005 L 2.962 -.328 L 1.329 -.077 L 1.527 .17 L 2.221 .488 L 1.567 .167 L 2.005 .142 L .3 -.761 L -.3 -.472 L 2.646 -.206 L 2.021 -.08 L 2.589 .095 L 1.989 .146 L 1.886 -.18 L 2.367 -.207 L 2.043 -.005 L 1.859 .223 L 1.825 -.055 L 1.315 .072 L .619 .099 L .55 -.102 L 1.946 .146 L 1.707 .046 L 1.673 .096 L 2.438 .761 L 1.368 .241 L 1.345 -.076 L 1.118 .168 L 2.594 .237 L .445 .408 L -.304 .12 L -.492 .192 L -1.683 .146 L -2.303 .124 L -1.152 .121 L -1.233 .05 L -1.469 -.068 L -2.831 -.064 L -2.22 -.066 L -1.389 .168 L -1.614 .027 L -1.933 .027 L -1.16 .026 L -1.485 .168 L -.444 .118 L -1.322 .213 L -.335 .464 L .743 .251 L 2.551 -.281 L 1.367 -.072 L 3.912 .038 L 2.223 -.12 L 2.331 -.005 L .997 -.025 L .93 .067 L 1.77 .434 L .671 .09 L 1.087 -.186 L 1.663 -.21 L 1.536 -.281 L 1.964 -.144 L .59 .462 L -.566 .482 L -2.316 .639 L -.973 .338 L -1.281 .734 L .12 .307 L .319 .152 L .796 -.089 L .477 -.044 L 1.616 -.553 L 1.766 -.537 L 1.413 -.385 L 1.706 -.32 L .775 -.207 L 1.662 -.163 L 1.618 .111 L 1.391 .065 L 1.497 -.3 L .703 -.324 L 1.129 -.234 L 2.148 -.004 L 1.672 .112 L 1.097 .044 L 1.197 .136 L 1.135 .228 L 1.107 .112 L .316 .25 L -.181 .273 L -1.97 .252 L -1.491 .138 L -1.245 .494 L -.557 .289 L -1.604 .355 L -1.57 .548 L -1.063 .089 L -.918 -.042 L -1.592 .047 L -2.213 -.039 L -1.491 .198 L -.731 .217 L -.495 .535 L .166 .322 L 1.949 -.305 L 1.581 -.046 L 1.856 .101 L .003 .42 L -.743 .241 L -2.388 .124 L -.463 .14 L -.213 .199 L -.156 .595 L -.471 .71 L -.678 .158 L -1.06 -.077 L -.742 .041 L -.837 .9 L -.987 1.087 L -.15 .347 L .454 .307 L .403 .095 L .602 -.481 L .743 -.368 L .856 -.041 L 2.345 .266 L .353 .096 L .262 .288 L -.059 .211 L -1.234 -.074 L -.673 -.018 L -.512 .097 L -.136 .191 L .29 .286 L 1.756 .188 L .557 .132 L 1.802 -.137 L .526 .208 L .214 .323 L -.049 .436 L -.256 .133 L -1.835 -.186 L -1.653 -.054 L -.781 -.074 L -1.295 .078 L -1.382 .475 L -.823 -.13 L -.49 -.15 L -1.06 .04 L -.283 .377 L 1.393 .599 L 1.187 .222 L 1.298 .128 L 1.665 .072 L .696 .148 L .551 .482 L .272 .444 L .014 .554 L -.434 .405 L -.384 .074 L -1.292 -.181 L -.82 -.109 L -.372 .111 L .023 .55 L .118 .236 L .426 .162 L .618 .089 L .723 .215 L .914 .142 L .752 .16 L .383 .376 L -.338 .233 L -.832 .145 L -.647 .126 L -1.747 -.032 L -1.176 -.087 L -1.624 -.086 L -.592 .448 L .551 .195 L 1.396 .051 L 1.052 .158 L .724 .248 L .088 .319 L -.035 .549 L -.13 -.005 L -1.092 -.045 L -1.247 .108 L -.596 .266 L -1.246 .02 L -1.225 -.139 L -1.497 -.404 L -.922 -.478 L -.373 -.07 L -1.094 .286 L 345 36.811 l -1.084 .09 L -.589 .178 L -1.451 -.033 L -.913 -.087 L -.969 .143 L -.395 .125 L -.174 .283 L .006 .141 L .354 .527 L .71 .245 L 1.284 .05 L 1.515 .26 L 1.567 -.056 L 1.323 .54 L .758 .226 L .482 .226 L 1.196 .329 L 1.252 .38 L .376 .276 L .483 .898 L .892 -.208 L .278 -.139 L .397 .207 L .298 .43 L .071 .344 L .198 1.164 L -.169 .205 L -.371 .12 L -.541 -.101 L -.546 -.119 L -.917 .002 L -1.041 .036 L -1.488 -.27 L -.637 -.409 L -.415 -.634 L -.354 -.274 L -1.17 -.566 L -.84 -.292 L -.748 -.137 L -1.095 -.084 L -.521 .14 L -.962 .105 L h 351.365 40.026 m -1.527 -.537 L -.96 -.225 L -.712 -.156 L -.159 -.069 L -.314 -.419 L 1.483 -.038 L .893 .139 L 1.064 .26 L .819 .296 L .162 .488 L -.215 .209 L -.533 .053 L h 281.574 46.135 m -.568 -.133 L -.707 -.318 L -.801 -.183 L -.197 -.101 L -.25 -.218 L -.08 -.844 L .287 -.34 L .368 -.018 L .646 .135 L 1.157 .066 L 1.287 .27 L .748 .269 L .595 .1 L .777 .217 L .603 .335 L -.144 .202 L -.112 .034 L -.543 .051 L -.774 .035 L -.77 .186 L -1.009 .153 L -.511 .102 L +105.98 81.688 N -.952 -.826 L -.198 -.342 L -.024 -.476 L .095 -.104 L .408 .044 L .312 -.045 L .781 .177 L .658 -.076 L .28 .119 L .138 .163 L -.234 .224 L -.173 .565 L -.028 .312 L -.581 .075 L -.483 .19 L h 125.24 92.375 m -1.312 -.288 L -1.345 -.434 L -.218 -.174 L .061 -.189 L .376 -.466 L -1.023 .002 L -.413 .248 L -.299 -.072 L -.416 -.188 L .166 -.452 L -.487 -.334 L -.269 -.014 L -.735 -.086 L -.226 -.262 L .317 -.292 L -.976 -.524 L -.556 .118 L -.386 -.102 L -.852 -.511 L -1.277 -.863 L -.219 -.235 L .02 -.117 L .962 -.12 L .337 .043 L 1.979 .598 L .981 .204 L 1.772 .202 L .385 .263 L .618 .526 L .426 .642 L .433 .422 L .362 .189 L 1.587 .536 L .316 .203 L .48 .756 L .116 .407 L -.279 .349 L -.407 .016 L h 271.379 92.089 m -1.202 -.23 L .641 -.743 L .358 -.161 L .279 .058 L .292 0 L .355 -.263 L -.697 -.653 L .079 -.219 L 272 89.003 l 1.121 -1.35 L 1.454 -1.31 L .725 -.442 L .496 -.192 L 1.315 -.194 L .198 .073 L .11 .221 L -.299 .221 L -.582 .03 L -.242 .133 L .349 .44 L -.755 .78 L -1.226 1.438 L -.271 .526 L .113 .291 L .11 0 L .428 -.176 L .483 -.555 L .458 -.191 L 1.115 .305 L -.896 .687 L .261 .203 L .229 .072 L 1.423 .565 L .758 -.03 L .325 -.408 L .309 -.059 L .718 .057 L .826 .202 L .616 .231 L -.297 .292 L -.373 .233 L -.708 .467 L .339 .333 L .477 .362 L .26 .014 L .417 -.161 L .464 -.132 L .278 .116 L .02 .16 L -.254 .262 L -.404 .248 L -.892 .104 L 280.84 93 l .273 .362 L .124 .405 L .28 .231 L .183 -.203 L .309 -.262 L .527 .159 L -.099 .449 L .149 .275 L .716 .028 L .085 -.015 L .015 .203 L -.168 .304 L -.25 .652 L -.34 .651 L -.222 -.072 L -.71 -.128 L -.301 -.144 L -.042 -.651 L -.601 .406 L -.374 .015 L -.095 -.274 L .497 -.652 L .011 -.333 L -.421 -.478 L -.279 -.072 L -.388 .392 L -.423 .291 L -.365 .146 L -.435 .204 L -.552 .536 L -.496 .334 L -.881 -.042 L -.222 -.217 L .165 -.145 L 1.229 -.408 L .466 -.522 L .632 -.363 L -.699 -.129 L -.601 -.057 L -.322 .464 L -.412 .015 L -.13 -.159 L .04 -.493 L -.757 .016 L -.148 .29 L -.41 .218 L -1.052 .045 L -.709 -.057 L -1.139 -.186 L -1.012 -.085 L -1.355 .061 L -1.014 .147 L -.145 -.188 L -.215 -.463 L .187 -.175 L .561 -.334 L .734 -.408 L .502 -.161 L .636 -.335 L h 265.435 98.655 m -.469 -.057 L -.497 -.273 L -.356 -.562 L .062 -.635 L .742 -.738 L .932 -1.043 L .816 .432 L -.375 .435 L -.112 .462 L -.233 .333 L -.262 .116 L -.58 .319 L -.244 .448 L .522 .244 L .168 -.029 L .279 -.26 L .42 -.362 L .617 -.319 L .309 .057 L .495 .461 L -.177 .347 L -.246 .159 L -1.134 .42 L -.682 .044 L h 211.34 59.677 m -.68 -.046 L .068 -.872 L -.375 -.333 L -.958 .161 L -2.375 .29 L .107 -.461 L .56 -.303 L 1.644 -.561 L -.302 -.478 L -.102 -.415 L .106 -.417 L .398 -.835 L .434 -.566 L .254 -.648 L .331 -.471 L 1.11 .566 L -.312 .518 L .791 .386 L .527 .047 L .402 -.469 L .67 .112 L .806 .289 L .917 .514 L .582 .255 L 2.168 .492 L .442 .271 L .176 .255 L -.09 .925 L .539 .047 L .57 -.065 L .934 .046 L .701 .142 L 1.019 .427 L -.419 .096 L -.269 .127 L -.46 .271 L -.949 -.046 L -.623 -.125 L -1.328 -.125 L -.438 -.126 L 217.259 58 l -.528 -.301 L -1.017 -.237 L -.528 .017 L -.203 .271 L .174 .588 L -.126 .096 L -1.314 .161 L -.673 .493 L -.588 .302 L -1.116 .287 L h 200.125 19.1 m -.862 -.015 L -1.085 -.195 L -.308 -.664 L .819 -.304 L .77 -.072 L .666 -.024 L 3.475 -.125 L 1.263 -.12 L 1.374 -.026 L 1.714 .324 L .397 -.094 L .397 -.377 L 1.303 -.287 L 1.759 -.099 L 1.975 .209 L .746 -.001 L 2.562 .137 L 2.621 .324 L 1.424 .09 L 1.461 .161 L .448 -.165 L -1.433 -.42 L -1.67 -.352 L -.816 -.429 L .293 -.242 L 1.361 -.148 L 1.101 -.246 L 1.431 -.101 L 2.382 -.201 L 1.666 .119 L 1.944 .191 L 1.009 .265 L 1.19 .456 L .354 .047 L .273 -.362 L -.959 -.508 L -.828 -.292 L .499 -.248 L 1.45 .121 L 1.832 .168 L 1.653 .07 L 1.639 .46 L .378 .023 L .062 -.195 L -.301 -.539 L 1.781 -.004 L 1.408 .046 L .832 .269 L .831 .34 L .618 -.001 L -.044 -.268 L -.331 -.467 L 1.075 -.077 L 3.691 .386 L 2.726 .288 L 1.937 -.077 L 2.987 .018 L .967 .047 L .757 .12 L .126 0 L 1.419 .094 L 1.089 .191 L .744 .095 L 1.685 .044 L 1.357 .357 L -.385 .358 L -1.237 .121 L -1.206 .356 L -1.849 .191 L -.978 -.045 L -2.191 -.159 L -2.284 .005 L -.776 .142 L -1.915 .168 L -.597 .465 L .75 .366 L .761 .044 L 1.03 -.048 L 1.705 -.279 L .79 .021 L .808 .434 L -.168 .114 L -1.246 .139 L -1.38 .207 L -1.174 .295 L -2.098 .518 L -1.316 .224 L -1.19 .355 L -.924 .286 L -2.252 .005 L .65 .906 L -.449 .193 L -2.297 .455 L -.768 -.019 L -1.587 -.037 L -1.462 -.218 L -2.386 -.164 L -.66 .33 L 2.591 .695 L -.662 .141 L -.967 -.038 L -1.297 .022 L -1.068 .022 L -2.58 -.214 L -2.009 .063 L -.134 .66 L 1.257 -.105 L 1.065 .018 L 2.312 .292 L .557 .157 L .12 .67 L -.33 .197 L -1.031 .12 L -.515 .705 L -1.073 .021 L -.448 -.058 L -.402 .176 L .297 .253 L .759 .25 L -.328 .136 L -1.615 .08 L -.867 -.037 L -1.71 -.171 L -.422 .078 L .41 .791 L -.08 .231 L -.649 .289 L -.767 .155 L -1.52 -.112 L -2.039 -.111 L -1.43 -.227 L -1.008 .079 L -1.219 .5 L 1.031 .112 L .368 .057 L 2.154 .11 L 1.759 .13 L 1.534 .168 L 2.001 .034 L .66 .34 L .045 .359 L -.907 .398 L -2.685 .268 L -.927 .115 L -1.054 .227 L -1.115 .077 L -.467 -.28 L -.797 -.638 L -.56 .039 L -.631 .001 L -1.453 -.318 L -.001 .17 L .331 .508 L -1.477 -.016 L -1.5 -.129 L -.875 -.319 L -1.033 -.471 L -.388 .058 L .527 .717 L -.24 .17 L -.821 .133 L -1.72 -.109 L -2.276 -.033 L -.972 -.073 L -1.382 -.394 L -.642 -.131 L -.282 .453 L -.619 .152 L -1.843 -.316 L .161 -.586 L .219 -.228 L 1.525 -.117 L .61 -.249 L .961 -.173 L 1.179 .036 L .499 -.172 L -1.073 -.4 L -1.043 -.651 L .052 -.154 L .479 -.117 L 1.316 .036 L 1.743 .093 L .888 .21 L 1.108 .517 L 1.35 .323 L 1.085 .093 L 1.667 -.022 L .829 -.136 L .086 -.268 L .514 -.304 L -3.019 .001 L -1.025 -.171 L -.156 -.85 L .211 -.154 L -1.74 -.153 L -1.963 -.152 L -.274 0 L -.631 .114 L .204 -.758 L 1.159 -.551 L 1.104 -.16 L 1.837 -.003 L 1.164 .037 L 1.37 .076 L 2.023 .311 L 1.342 .115 L .486 -.158 L 1.132 -.041 L -3.399 -.802 L -1.742 -.313 L -3.555 -1.27 L -.406 .242 L -1.398 -.878 L .025 -.258 L .313 -.108 L 1.747 .104 L 1.905 -.004 L 2.019 .06 L 1.6 .382 L 2.535 .784 L 1.448 -.043 L .833 .095 L -1.387 -.555 L -2.015 -.317 L 1.208 -.743 L 1.456 -.329 L 1.731 -.025 L 1.529 -.222 L 2.042 -.07 L 1.157 -.112 L 1.414 -.051 L -1.778 -.479 L -1.425 -.153 L -2.501 .027 L -1.243 .248 L -1.305 .158 L -1.425 .202 L -1.447 .047 L -.586 .067 L -1.532 -.438 L -.214 .111 L -.543 .156 L -2.16 -.018 L -1.58 .365 L .311 -.828 L .98 -.292 L .007 -.202 L -.606 -.247 L -1.375 -.156 L -1.39 .003 L -4.189 .505 L -2.031 .672 L -.408 -.11 L -.569 -.251 L .395 -.133 L .678 -.023 L -.117 -.316 L -.698 -.398 L -1.216 -.056 L -.216 -.003 L h 200.125 20.844 m .899 -.096 L .832 .196 L .339 .5 L .511 .495 L .427 .063 L 1.141 .041 L -.081 -.236 L .056 -.411 L .438 -.109 L .718 .194 L .718 .322 L .374 .3 L -.066 .171 L .056 .826 L .764 .442 L .953 -.017 L 1.276 -.074 L 1.646 .504 L -1.123 -.264 L -1.528 .34 L -1.599 .221 L -.83 .377 L -.287 .197 L -.265 .315 L -.448 .021 L -1.493 -.41 L -.656 .335 L .465 .43 L -.029 .235 L -.412 .196 L -.392 .04 L -1.086 -.31 L -.944 -.311 L -.26 .645 L -.117 .068 L -.083 .049 L -.888 .041 L -1.74 -.094 L -1.458 -.153 L -.888 -.154 L -.494 .021 L -3.115 -1.31 L -.191 -.276 L 1.971 -.241 L 3.32 .093 L .889 .097 L 1.573 .1 L -2.485 -.693 L -3.019 -.213 L -1.103 .122 L -1.43 -.017 L -.597 .18 L -1.008 .022 L -.606 -.198 L -1.066 -.517 L -1.425 -.479 L -.341 -.355 L 1.971 .124 L 2.278 -.175 L -1.255 -.249 L -.756 -.351 L .38 -.305 L .729 -.132 L .769 -.023 L .921 .042 L .156 -.219 L -1.799 -.793 L 1.053 -.114 L 1.213 -.182 L 1.13 .087 L .584 -.046 L .145 -.18 L -.514 -.475 L 1.362 .134 L .941 .066 L .83 .202 L 1.589 .869 L .653 .264 L .772 .24 L .674 -.001 L .36 -.039 L h 179.067 27.216 m -1.156 -.056 L -.604 -.173 L -.926 -.638 L -.621 -.193 L -3.102 -.091 L -1.487 .081 L -.622 .001 L -1.444 -.056 L -.767 -.154 L -1.019 -.37 L -.161 -.234 L .335 -.138 L .802 -.001 L 1.687 .232 L .867 -.021 L -.031 -.235 L -.252 -.275 L -1.344 -.49 L -.579 -.098 L -1.075 -.077 L -1.392 -.196 L .065 -.397 L 2.246 -.124 L 2.392 .155 L .77 .376 L .999 .453 L 1.979 .193 L 2.189 .114 L 1.178 .233 L .604 .254 L 1.123 .721 L .581 .446 L .168 .426 L -.481 .194 L -.919 .137 L h 185.907 26.758 m -1.078 -.037 L 184 26.529 l -1.029 -.484 L -1.144 -.76 L -.03 -.216 L .239 -.099 L 2.296 -.044 L 1.816 .311 L 3.101 .542 L -.047 .351 L -.254 .331 L -.436 .04 L -1.563 .177 L -1.043 .08 L h 156.886 26.865 m -1.573 .646 L -.558 .27 L -1.85 .042 L -1.019 .079 L -1.898 -.15 L -.577 -.114 L -.302 -.423 L .334 -.291 L 1.365 -.177 L .899 .056 L 2.351 -.102 L .496 0 L 2.331 .163 L h 132.902 31.305 m -.53 -.186 L -.95 -.466 L -.424 -.112 L -.33 .057 L -.56 .207 L -1.269 .059 L -.786 -.279 L -.283 -.319 L .23 -.264 L 1.13 -.097 L .503 -.133 L .771 -.134 L .977 -.399 L .848 -.211 L .726 -.172 L .548 -.344 L 1.083 -.231 L 1.277 -.079 L 2.532 -.158 L 1.68 .016 L .888 -.29 L 1.038 -.079 L 1.503 .438 L -.756 .097 L -.852 .231 L -.22 .268 L .12 .266 L .469 .474 L -.777 .001 L -.912 .115 L -.918 .662 L -1 -.017 L -.867 -.981 L -.694 -.15 L -.379 .02 L -.229 .285 L -.588 .342 L -.63 .623 L -.595 .151 L -.284 .375 L -.705 .356 L -.787 .058 L h 191.827 30.313 m -1.266 -.054 L -2.278 -.165 L -.426 .058 L -.332 -.094 L -.896 -.489 L -1.185 -.414 L .192 -.229 L 2.433 -.042 L 1.542 .263 L 1.472 .054 L .171 0 L .89 .358 L -.179 .246 L .123 .32 L -.263 .188 L h 144.688 31.739 m -2.222 -.395 L -.325 -.674 L .503 -.057 L .595 -.17 L .945 -.096 L .953 -.133 L 1.279 -.059 L .522 .187 L .65 .374 L .659 .186 L 1.55 -.209 L .617 .149 L 1.624 .762 L 1.016 .351 L .897 .036 L .96 -.058 L 1.418 .09 L .591 -.02 L 1.116 -.169 L .092 -.297 L -.557 -.559 L -.941 -.391 L -1.347 -.354 L .96 -.322 L .524 -.379 L .569 -.152 L 1.097 -.116 L .507 .17 L .773 .678 L -.017 .413 L .518 .654 L .565 .111 L .9 .036 L 1.805 .406 L -.334 -.465 L .151 -.28 L .409 -.076 L 1.495 .24 L .932 .39 L -.292 .409 L .039 .5 L -.358 .461 L -.573 .277 L -.755 .111 L -.782 .001 L -1.682 .095 L -1.156 -.071 L -1.757 -.18 L -.622 -.017 L -1.129 .277 L -1.132 .202 L -.76 .182 L -.977 .254 L -1.625 .292 L -1.338 .2 L 149.23 34.5 l -.748 -.07 L -1.445 -.286 L -.276 -.378 L .648 -.128 L 1.219 -.038 L .738 -.146 L .852 -.075 L 1.166 -.057 L .622 .017 L 1.09 -.149 L .483 -.553 L -2.768 -.087 L -.925 -.054 L -1.564 .28 L -1.625 .168 L -1.292 .04 L -.795 .093 L -1.681 -.347 L -.479 .167 L -.92 .075 L -.979 -.127 L -.854 -.33 L .023 -.111 L .863 -.427 L 1.098 -.058 L 2.047 -.022 L .96 -.159 L h 178.479 33.234 m -.984 -.219 L -.193 -.294 L .764 -.389 L .433 -.112 L .088 -.167 L -.447 -.333 L -1.161 -.054 L -2.13 .227 L -.939 .076 L -.331 .019 L -.854 -.276 L .039 -.335 L .739 -.02 L .542 -.244 L .587 -.057 L -.466 -.598 L .176 -.245 L .132 -.226 L .49 .018 L .859 .224 L 1.942 .746 L .426 .186 L .46 -.094 L -.101 -.243 L -.959 -.486 L -.371 -.131 L -.407 -.357 L .436 -.095 L .956 -.059 L .713 .131 L 1.033 .262 L .572 .168 L .27 .018 L .162 -.452 L .478 -.133 L .73 .112 L .717 .168 L .327 .168 L .367 .75 L -.034 .616 L -.247 .242 L -.831 .335 L -.017 .352 L .35 .625 L -.361 .147 L -1.648 -.089 L -.862 .112 L -1.446 .003 L h 200.125 30.572 m -.895 .045 L -.853 .17 L -.37 .467 L 1.133 .054 L .984 -.038 L .046 -.001 L .847 .11 L .463 .129 L .498 .463 L .727 .424 L .621 .091 L .213 -.074 L .043 -.314 L .286 -.056 L 1.075 -.002 L .883 -.187 L .766 .11 L .835 .239 L .665 .257 L .976 .053 L .775 -.463 L 1.393 -.281 L 1.704 -.114 L 1.951 -.246 L 1.533 .053 L 2.59 .014 L .381 .037 L .79 .314 L .911 .239 L 1.418 .146 L .653 .128 L .21 .037 L .361 .166 L .181 .257 L -.4 .148 L -1.833 .407 L -.135 .255 L .469 .666 L -2.486 .076 L -.592 .02 L -.651 .091 L -.768 -.053 L -.846 -.16 L -.405 -.125 L -.306 -.667 L -.833 -.218 L -.366 .129 L .072 .723 L -.536 .127 L -.747 -.053 L -.91 .109 L -.728 -.017 L -.495 .001 L -1.342 -.213 L -.593 -.197 L -.495 -.017 L -.209 .433 L -1.801 .111 L -.831 .074 L -1.453 -.069 L -.404 -.251 L -.144 -.686 L -1.237 .129 L -.389 .181 L -.326 .325 L -.955 .2 L -1.011 -.034 L -.112 -.027 L -.704 -.169 L -1.186 -.575 L -.675 .489 L -1.131 -.07 L -.666 -.688 L -.442 -.717 L .587 -.481 L .019 -.371 L -.292 -.316 L -1.249 -.651 L -.617 -.299 L -.047 -.338 L .636 -.133 L 1.226 -.078 L 2.472 -.023 L .763 .093 L 1.118 .261 L .188 .04 L .872 .184 L -.613 .189 L -.259 .013 L h 128.19 41.985 m -.926 -.016 L -1.059 -.102 L -.362 -.466 L -.549 -.467 L -.432 -.259 L -1.123 -.363 L -1.36 -.067 L -.951 -.138 L -.469 -.19 L -.168 -.174 L .537 -.106 L .589 -.298 L .481 -.211 L .08 -.386 L -.437 -.809 L .552 -.001 L .468 -.177 L .307 -.372 L 1.104 -.533 L .526 -.588 L -.121 -.32 L -.271 -.16 L -1.229 -.677 L -.375 -.448 L .869 -.001 L .823 -.056 L 1.455 .051 L .97 .016 L 1.515 -.092 L 1.284 -.146 L 1.242 -.074 L .495 .125 L 3.242 .801 L .918 .088 L .708 -.055 L 1.316 -.127 L 1.223 .016 L .771 .07 L 1.35 .373 L 2.389 .815 L -.242 .143 L -.432 .036 L -.26 .072 L -1.609 .322 L -1.073 .144 L -1.829 .428 L -1.069 .319 L -1.604 .725 L -1.025 .563 L -.549 .089 L -.974 .124 L .066 .924 L -.271 .504 L -.662 .278 L -1.215 .124 L -1.213 -.067 L -.521 .485 L -.898 .312 L h 190.483 39.666 m -1.146 -.208 L -.146 -.524 L -.941 -.806 L -.207 -.582 L .058 -.389 L .27 -.657 L .377 -.321 L 1.256 .033 L -.089 -.16 L -.416 -.266 L -.185 -.286 L .211 -.09 L .234 -.072 L 2.154 -.058 L 1.215 .087 L 1.464 .248 L 1.282 .051 L 1.316 -.146 L 1.051 .016 L .694 .105 L .639 .213 L -.007 .089 L -.224 .179 L -.824 .428 L -.874 .746 L -1.513 .92 L -1.386 .073 L -2.379 -.154 L -1.269 .055 L 1.392 .717 L -.188 .315 L -.855 .369 L -.964 .072 L h 181.204 41.523 m -.491 -.085 L -1.101 -.552 L -.952 -.641 L -1.014 -.468 L -.978 -.225 L -1.438 -.12 L -.55 -.174 L -2.255 -1.066 L .866 -.654 L .653 .14 L 1.032 .474 L 1.063 .227 L .46 .052 L .615 -.283 L .908 -.619 L .415 -.036 L .018 -.212 L -1.062 -.565 L -1.068 -.424 L -.177 -.231 L .132 -.107 L 1.683 .086 L .711 -.215 L .42 0 L .996 .39 L .56 .035 L .58 -.055 L .435 -.25 L 1.232 -.127 L 1.354 .069 L .912 .23 L -.324 .268 L -.58 .125 L -.323 .338 L -1.55 .375 L -.392 .16 L -.069 .194 L .253 .247 L .506 .105 L .692 -.089 L 1.08 .174 L .868 .245 L .391 .017 L .564 .262 L .186 .438 L -.681 .352 L -.156 .35 L -.271 .68 L -.457 .366 L -.508 .14 L -.658 .019 L -.582 -.103 L -.773 -.346 L -.653 -.103 L .013 .208 L 1.054 .553 L -.817 .399 L -.77 .036 L h 243.524 60.394 m -.234 -.208 L -1.199 -.235 L -.673 -.331 L -.154 -.269 L .346 -.064 L .616 -.461 L -1.378 -.521 L -1.132 -.125 L -.76 -.349 L -.929 -.731 L -.035 -.511 L -1.115 -.062 L -1.311 -.366 L -.675 -.031 L .284 .767 L -.155 .096 L -.409 -.015 L -1.704 -.332 L -.309 .033 L -.325 .304 L -.441 .288 L -1.312 .082 L -1.349 -.173 L -1.343 -.189 L -.813 -.254 L -.052 -.319 L .196 -.4 L .382 -.354 L 1.066 -.163 L .192 -.178 L -.128 -.516 L .206 -.033 L 1.357 .11 L 1.408 .175 L .517 .144 L .962 .626 L .051 -.386 L -.154 -.193 L .077 -.194 L .585 -.033 L .977 -.099 L .652 -.163 L .649 -.114 L .515 .063 L .785 .031 L .166 -.275 L -1.138 -.825 L -.773 -.356 L -.119 -.228 L .167 -.163 L .586 -.066 L .72 -.246 L 1.409 -.591 L .361 -.541 L .771 -.46 L .493 -.379 L -.109 -.593 L -.899 -.841 L -.407 -.496 L -.541 -.364 L -.414 .001 L -1.258 -.33 L -1.041 -.481 L -.244 -.467 L -.527 -.384 L -.442 .202 L -.551 .202 L -.825 -.015 L -.293 .117 L -.62 .018 L -1.255 .169 L -.214 -.667 L 1.032 -.052 L 1.23 -.103 L .163 -.269 L -1.604 -.618 L -1.552 -.67 L -.879 -.015 L -.567 -.185 L -.169 -.542 L -.677 -.339 L -.45 -.05 L -.918 -.306 L -.687 -.341 L -.385 -.119 L -.611 .155 L -.81 -.187 L -1.177 -.238 L -.489 -.085 L -.379 .138 L .529 .307 L .453 .05 L 2.838 .712 L .438 .271 L .069 .306 L -.505 .221 L -.669 .069 L -.541 -.033 L -.757 -.049 L -.818 -.252 L -1.153 -.27 L -.667 -.066 L -.323 .17 L .044 .204 L .426 .236 L .259 .438 L -1.703 -.553 L -.47 -.05 L -.396 .119 L -.63 .153 L -.767 -.218 L -.693 -.117 L -.859 .12 L -1.474 -.184 L -1.995 -.167 L -1.321 .037 L -1.146 -.032 L -.862 -.186 L -.003 -.597 L -.363 -.153 L -.904 -.049 L -.396 .342 L -.623 .086 L -1.214 -.049 L -1.076 -.168 L -1.303 -.477 L -.415 -.376 L .123 -.275 L .868 -.07 L 1.131 .067 L 1.212 .101 L .879 -.019 L .312 -.19 L -.934 -.463 L -.8 -.275 L -.905 -.102 L -1.106 -.119 L -.752 .036 L -.539 -.017 L -1.249 -.223 L .114 -.416 L .292 -.557 L .34 -.14 L .646 -.054 L .081 -.227 L -1.082 -.4 L -.044 -.175 L .449 -.79 L 1.197 -.919 L .565 -.284 L .918 -.321 L .74 -.374 L .423 -.037 L .37 -.178 L .698 -.001 L .481 -.125 L .71 -.09 L 1.436 -.109 L 1.348 .033 L .857 .194 L -.92 .393 L -.815 .48 L -1.394 .639 L -.43 .529 L .169 .369 L 1.256 .541 L -.444 .298 L -.076 .402 L .257 .313 L .862 .554 L 1.559 .621 L -.096 .121 L -1.272 .331 L -.072 .31 L .959 .033 L 1.504 .101 L .654 -.639 L -.103 -.415 L -.343 -.277 L -.724 -.103 L -.422 -.138 L -.884 -.538 L .101 -.157 L .506 -.245 L .473 -.193 L 1.001 .12 L .837 -.071 L -1.204 -.47 L -.703 -.034 L -.793 -.279 L -.056 -.193 L .053 -.545 L .886 -.319 L 1.207 .086 L 1.509 -.056 L -.939 -.281 L -1.233 -.351 L .793 -.303 L 1.288 -.198 L 1.044 -.126 L 1.688 -.323 L 1.114 .016 L .642 .052 L .833 .141 L .782 .478 L 1.536 .97 L .058 .141 L -.583 .687 L -.709 .632 L .038 .733 L .364 .086 L .65 .033 L 1.088 -.315 L .284 -.455 L .595 -.088 L .791 .034 L .454 .174 L -.006 .262 L .16 .47 L .875 .189 L .196 -.122 L -.204 -.854 L .218 -.123 L .456 -.474 L 1.038 -.265 L .98 -.054 L .748 .034 L .98 .174 L 1.172 .138 L 1.151 -.09 L .688 .139 L .327 .262 L .621 .331 L .574 .191 L 235.438 40 l 0 .191 L -.531 .088 L -.484 .279 L -.818 .262 L -.148 .225 L .45 .259 L .427 .068 L .897 -.417 L .652 -.174 L .502 .051 L .476 .242 L .365 .466 L .516 .413 L .342 -.242 L 1.304 -.798 L 1.935 .256 L .915 .361 L -.051 .069 L -.638 .346 L -.708 .517 L 1.167 -.054 L .455 -.173 L 1.078 -.105 L .033 .704 L .797 .324 L .523 -.069 L .831 -.207 L 1.316 -.088 L .816 .221 L .566 .273 L -.162 .154 L -.461 .223 L -1.87 .43 L -.238 .272 L .523 .253 L .456 -.068 L .747 -.171 L 1.235 -.122 L .406 -.29 L .361 -.103 L .479 .067 L .51 .187 L .544 .339 L .636 .522 L -1.019 .002 L -1.2 .053 L -.424 .135 L .059 .269 L .372 .134 L 1.333 .065 L .938 .183 L .543 .217 L .233 .301 L -.37 .034 L -.748 .001 L -1.011 -.082 L -.875 -.216 L -.824 -.065 L -.316 .185 L 1.23 .583 L -.216 .201 L -1.552 .12 L .245 .283 L .437 .166 L .551 .032 L 1.331 .364 L 1.312 .347 L .247 .182 L .039 .282 L .351 .38 L .75 -.217 L .536 .049 L 1.413 .295 L .298 -.067 L .649 -.15 L .61 .032 L .752 .379 L .862 .477 L .376 .346 L -.685 .1 L -.801 .117 L -.027 .444 L .795 -.001 L 1.405 -.052 L .51 -.132 L .895 .048 L -.386 .559 L .918 .179 L .514 -.001 L .943 -.379 L .685 .343 L 1.089 .407 L .194 .098 L -.275 .229 L -.254 .099 L -.103 .326 L -.819 .05 L -.718 -.21 L -.247 -.048 L -.794 .213 L .968 .454 L .279 .162 L .057 .276 L -1.057 .197 L -.356 .228 L -.312 .292 L -.372 -.113 L -.819 -.583 L -.29 1.103 L .354 .903 L -.419 .065 L -.677 -.257 L -.751 -.176 L -.205 -.177 L -.018 -.243 L -.315 -.274 L -.93 .276 L -.743 -.613 L .051 -.292 L .27 -.374 L -.304 -.129 L -.224 -.016 L -.992 -.08 L -.718 -.292 L -1.17 -.617 L -.769 -.292 L -.762 -.048 L -.452 .23 L -.645 .083 L 250 52.592 l .281 .179 L 1.05 .682 L -.321 .114 L -.686 .05 L -.359 -.259 L 249.277 53 l -.646 -.21 L .275 .488 L .859 .972 L .604 .015 L .587 .08 L .5 .581 L .612 .805 L .513 .432 L .615 -.321 L .285 .047 L .592 .399 L .585 .271 L 1.38 .396 L -.634 .113 L -.213 .208 L .254 .19 L .568 .286 L .962 .444 L .324 .237 L .242 .682 L -.112 .428 L -1.302 -1.155 L -.554 -.237 L -.027 .238 L .118 .27 L 1.055 1.281 L -.01 .3 L -.926 -.125 L .053 .205 L .432 .409 L .378 .519 L -.563 -.172 L -.615 -.313 L -.889 -.693 L -.145 -.031 L -.719 .064 L -.91 -.188 L -1.44 -.662 L -.319 -.285 L -1.062 -.665 L .187 .777 L -1.22 -.473 L -.567 -.158 L -.872 -.03 L .095 .222 L .799 .696 L .853 .426 L 1.842 .645 L 1.296 .644 L .774 .549 L .442 .486 L .429 .689 L -1.833 -.341 L -1.524 -.421 L -1.251 -.28 L -1.444 -.107 L -1.092 -.25 L -.898 -.644 L -1.146 -.14 L -.638 -.204 L -.635 -.141 L -.058 .145 L h 146.194 38.698 m .818 -.037 L .78 -.125 L 1.138 -.548 L .895 -.019 L 1.723 .243 L .939 .262 L -.188 .877 L .515 -.071 L .66 -.019 L .792 -.229 L .599 -.141 L .758 .016 L .334 -.071 L -.989 -.965 L .156 -.036 L 1.38 .138 L 1.208 .245 L .675 .245 L .259 .245 L .194 .508 L .965 1.063 L .638 .346 L 1.045 -.315 L .14 -.261 L -1.243 -1.361 L -.439 -1.321 L .228 -.354 L 1.91 .262 L 1.775 .156 L 2.031 .719 L .36 .175 L .3 .316 L .16 .701 L .511 .645 L .352 .26 L .856 .606 L .048 .19 L -.178 .243 L -.333 .605 L .179 .31 L .224 .12 L 1.4 .649 L .509 .171 L 1.151 .254 L 1.513 .1 L 2.056 .576 L 1.012 .39 L .364 .793 L -.168 .101 L -1.071 -.082 L -.811 -.234 L -.945 -.234 L -.551 .169 L -.665 .204 L -1.021 .036 L -.256 .118 L .208 .689 L 1.087 -.069 L .614 -.152 L .676 -.119 L .876 .536 L -.01 .235 L -.526 .151 L -.517 .252 L -.583 .102 L -1.417 .12 L -1.049 -.015 L -1.194 -.082 L -1.594 -.248 L -2.278 -.499 L -.553 -.217 L -.436 -.335 L -.482 -.033 L -.581 .102 L -.402 .37 L -1.114 .505 L -1.055 .019 L -1.411 .103 L -1.253 .42 L -2.753 .356 L -1.42 .019 L -1.205 .086 L -1.984 -.063 L -.483 .101 L -.916 -.015 L -1 -.282 L -.061 -.468 L .198 -.101 L .002 -.302 L -.395 -.2 L -.462 -.1 L -3.146 -.112 L -1.258 -.115 L -.864 -.167 L -.801 -.2 L -.753 -.504 L -1.274 -.554 L .303 -.069 L .531 -.222 L 1.572 -.054 L .603 -.188 L .558 .016 L .91 -.019 L .904 -.087 L 1.716 .031 L .935 -.002 L 2.14 .047 L 1.09 -.002 L 1.711 -.038 L .415 -.154 L -.681 -.221 L -2.312 -.492 L -1.942 -.202 L -4.059 -.061 L -1.569 -.014 L -1.694 .055 L -.955 .053 L -.604 .001 L -1.651 -.529 L .011 -.207 L .28 -.069 L .823 -.053 L 1.315 -.209 L .996 .032 L 1.78 -.141 L .931 -.105 L .5 -.277 L -.392 -.346 L -2.023 .073 L -1.578 .159 L -.393 -.051 L -.554 -.189 L -.677 -.346 L -.65 -.19 L -.692 .054 L -.709 -.242 L -.039 -.279 L 1.304 -.981 L 2.62 -.848 L .909 -.143 L .373 -.177 L 1.297 -.267 L 1.324 -.162 L .701 -.267 L 1.113 -.091 L 1.026 .246 L -.07 .212 L -.548 .354 L -.021 .81 L h 251.273 99.526 m -.188 .153 L -.16 -.291 L .192 -.077 L -.02 -.256 L .143 -.069 L -.042 -.154 L -.224 0 L -.606 -.231 L .077 -.229 L -.31 -2.819 L -.174 -.274 L -.488 -.288 L -.771 -.025 L -.41 .176 L -.381 -.085 L -.505 -.36 L -.273 -.085 L -.632 .526 L -.514 .626 L -1.139 2.22 L -1.139 1.45 L -1.161 -.124 L -.402 .06 L -.363 .435 L -.174 .375 L -1.093 -.095 L -1.855 -.004 L -2.508 -.029 L -1.76 .009 L -.968 .523 L -.534 .305 L -1.754 .814 L -.545 .164 L -.146 .434 L -.163 .512 L -.44 .275 L -1.156 .197 L -1.305 -.138 L -1.123 -.01 L -.93 .091 L -.47 .203 L -.162 .375 L .018 .319 L .16 .471 L .047 .362 L -.875 .427 L -1.464 .452 L -.944 .163 L -.919 .062 L -.88 .262 L -.939 .478 L -.925 .506 L -.524 .117 L -.573 -.068 L -.497 -.169 L -.371 -.427 L -.012 -.33 L .044 -.218 L .707 -.525 L .414 -.294 L .264 -.433 L .294 -.544 L .377 -.576 L .028 -.746 L -.054 -.545 L -.876 -3.16 L -2.529 -1.05 L -.26 -.33 L .11 -.318 L -.307 -.235 L -.916 -.181 L -.184 -.294 L -.178 -.135 L -.628 .024 L -.46 -.465 L -.101 -.429 L -2.15 -1.061 L -3.975 -1.576 L -.977 -.386 L -.797 -.227 L -.805 .189 L -1.469 .592 L -.707 -.074 L -.542 .049 L -.196 -.144 L -.156 -.115 L -.474 -.041 L -.855 .083 L -.197 -.116 L -.028 -.282 L -.373 .075 L -.412 .191 L -.219 .06 L -.573 .141 L -.506 -.098 L -.064 -.185 L -.469 -.086 L -.241 -.271 L -.502 -.013 L -.16 .247 L -.338 -.48 L -.271 .012 L -.02 -.185 L -1.425 -.208 L -.518 .076 L -.833 -.451 L -.468 -.46 L -.279 -.371 L -.896 -.748 L -.501 .036 L .131 .347 L .387 .588 L -.68 -.003 L -2.687 .029 L -2.798 -.029 L -1.348 .007 L -2.105 -.003 L -2.915 .016 L -2.781 -.029 L -2.131 .012 L -2.935 -.014 L -.601 .003 L -4.84 -.018 L -3.617 .004 L -.875 .005 L -3.821 -.023 L -1.089 .035 L -4.13 -.021 L -.74 -.011 L -5.117 .028 L -1.687 -.006 L -2.87 .001 L -3.938 -.008 L -4.588 .025 L -1.335 -.022 L -2.579 -.001 L -.194 -.013 L -.187 -.151 L -.509 -.305 L -.071 -.437 L .074 -.346 L -.708 .25 L -.373 -.029 L -.331 -.305 L -.162 -.496 L -.125 -.189 L -.385 .088 L -.23 .205 L -.483 .059 L -.721 -.495 L -.119 -.425 L -.201 -.821 L -1.051 .104 L -1.01 -.277 L -.487 -.087 L -.173 -.087 L -.143 -.396 L -.438 -.352 L -.591 .222 L -1.236 .046 L -.461 -.117 L -.383 -.249 L -.106 -.25 L .257 -.648 L .458 -.222 L -.227 -.294 L -1.24 -.086 L .617 -.518 L .398 -.281 L .547 -.149 L .605 -.508 L -.874 .006 L -.621 .149 L -.362 -.043 L 116 83.422 l -.039 -.978 L -.789 .002 L -1.015 -1.066 L .132 -.238 L .034 -.53 L -.547 .056 L -.83 .492 L -1.266 -.934 L -.384 -.521 L -.204 -.402 L -.068 -.432 L .419 -.404 L .161 -.254 L .436 -.3 L -.358 -.689 L -.393 -.777 L .163 -.788 L -.402 -.255 L -2.025 -.763 L -.98 -.314 L -.189 -.029 L -.512 -.393 L -1.67 -1.882 L -1.769 -1.768 L -.814 -.58 L -2.048 -1.175 L -.35 -.322 L -.371 -.492 L -.316 -.199 L -.832 -.073 L -.495 .126 L -.731 .498 L -1.225 .67 L -.848 .205 L -.238 .325 L -.945 -.673 L -2.162 -1.318 L -.348 -.292 L -.173 -.387 L -.332 -.388 L -.739 -.059 L -2.424 .122 L -.84 -.074 L -.196 -.279 L -.089 -1.046 L -.026 -2.167 L .043 -4.334 L .026 -2.183 L -.129 -2.796 L -.052 -2.335 L -.039 -2.259 L .003 -2.855 L -.102 -.483 L .71 .024 L .9 -.086 L .964 .116 L 2.012 .451 L 1.601 .518 L 1.214 .266 L 1.04 .115 L .731 .032 L 1.619 .164 L .888 .232 L .429 .149 L .254 -.034 L -.452 -.601 L -.357 -.2 L -.345 -.15 L -.064 -.419 L 1.344 -.423 L .745 .066 L .578 -.068 L .15 -.102 L 1.736 .148 L .771 -.001 L 1.125 -.373 L .309 -.186 L .442 0 L .656 -.221 L .759 -.069 L .866 -.086 L .734 -.086 L .469 -.239 L .392 -.188 L .771 -.104 L 1.045 -.002 L .872 .123 L -.445 .404 L -.352 .119 L -1.101 .137 L -1.092 .373 L -1.244 .171 L -1.22 .271 L -.699 .522 L -1.767 .255 L -.681 .487 L .846 .266 L 1.441 .748 L -.219 -.55 L .168 -.351 L 1.196 -.253 L .39 -.235 L .726 -.421 L 1.727 -.053 L .96 -.372 L 1.158 -.389 L 2.066 -.173 L .643 -.338 L .921 -.272 L .821 -.189 L .476 -.239 L -.178 -.272 L -.702 -.392 L -.655 -.444 L .899 .101 L .764 .272 L .701 .306 L .412 .324 L .376 .476 L .449 .523 L .393 .235 L 1.246 .486 L .186 .067 L 1.154 .216 L .394 -.018 L .199 -.151 L -.511 -.639 L .07 -.27 L .548 -.035 L .334 -.136 L .627 -.103 L .383 .354 L .059 .421 L -.205 .287 L .833 .133 L .938 -.069 L 1.136 -.457 L .536 -.49 L .479 -.069 L 1.131 .015 L 1.536 .267 L 1.745 .435 L 1.396 .334 L 2.095 .349 L 1.024 .216 L .619 .066 L 1.572 .282 L 1.121 .065 L 1.144 .148 L 1.096 .032 L 1.4 -.086 L .899 .099 L 1.008 .282 L .982 .349 L .434 .249 L .191 .333 L -.524 .134 L -.935 -.032 L -.566 .051 L -.849 .135 L -.354 .714 L 3.323 .358 L 1.726 .079 L 1.749 .014 L .868 -.068 L .738 -.051 L .94 -.167 L .895 -.118 L .938 -.101 L .886 .032 L 1.432 .477 L 1.452 .179 L .42 .115 L 1.225 .443 L -.013 .312 L -.504 .083 L -.35 .247 L .305 .147 L 1.823 .979 L -.162 -.392 L -.024 -.312 L .456 -.05 L .617 -.132 L -.062 -.181 L -.972 -.656 L -.128 -.198 L -.145 -.445 L .121 -.745 L .35 -.034 L 1.944 -.136 L .928 -.151 L .207 -.299 L .459 -.217 L .613 -.035 L 1.098 .281 L 1.528 .279 L .968 .064 L .969 -.102 L .612 .414 L .248 .082 L .962 .213 L 1.211 .13 L .678 .081 L 1.146 -.002 L .879 -.2 L 1.755 -.02 L 1.876 .029 L 1.07 -.052 L 1.18 -.267 L .959 .478 L .95 .296 L .522 -.018 L .243 -.314 L -.017 -.513 L -.666 -.231 L -.732 -.131 L -1.377 -.064 L .089 -.449 L 1.193 -.085 L .575 .065 L .804 .214 L .871 .198 L .858 .048 L .498 .198 L .088 .183 L -.095 .132 L -.287 .86 L .179 .51 L .304 .164 L .177 .065 L .792 .097 L .951 .311 L -.071 -.559 L -.466 -.989 L .137 -.48 L .258 -.266 L .712 .015 L .811 -.035 L 1.229 -.85 L .492 -.051 L .479 -.001 L .517 -.151 L .033 -.133 L -.15 -.367 L -.375 -.35 L -.307 .001 L -.81 .185 L -.988 -.082 L .535 -.52 L .806 -.069 L .435 -.168 L .572 -.001 L .739 .4 L .464 .167 L .065 -.268 L -.081 -.956 L -.744 .069 L -.897 -.032 L -.68 -.116 L -.859 -.318 L -.725 .085 L -1.245 -.183 L -.861 -.234 L -.956 -.218 L -.657 -.338 L -.092 -.136 L -.022 -.324 L .33 -.137 L .842 -.463 L -.486 -.221 L -1.188 -.375 L .09 -.207 L .58 -.604 L .593 -.294 L .387 -.035 L 1.032 .257 L .139 -.035 L .173 -.346 L -.709 -.362 L -.201 -.277 L .23 -.035 L .551 -.331 L .367 -.035 L 1.841 -.021 L .559 .086 L .728 .189 L 1.26 .449 L .432 .328 L .195 .38 L -.246 .603 L 1.261 .53 L .809 .495 L 1.134 .493 L -.377 .341 L -.985 .036 L -.474 .273 L -.416 .557 L .471 .067 L 1.071 .233 L .805 .049 L .387 -.136 L .597 -.001 L 1.477 .351 L -.335 .353 L -.563 .219 L .092 .151 L .796 .467 L .358 .601 L .025 .833 L .303 -.063 L .021 -.004 L .411 -.067 L .608 -.367 L .655 -1.137 L .668 -.42 L .523 .016 L .731 .284 L 1.064 .55 L .473 .383 L .209 .45 L -.159 .433 L -.336 .034 L -.796 -.098 L -.202 .299 L -.043 .415 L .35 .396 L 1.146 .659 L .61 .493 L .463 .279 L .595 -.166 L .896 -.167 L .369 -.132 L .208 -.66 L .764 -.398 L .599 -.416 L .249 -.664 L .363 -.75 L .237 -.184 L 1.394 .081 L .329 -.067 L .134 -.518 L -.985 -.333 L -.918 -.35 L .088 -.891 L .595 -.271 L .787 .032 L .42 -.068 L .571 .016 L 3.459 .616 L 1.325 .669 L .506 -.001 L .553 -.068 L .454 .201 L .244 1.036 L -.474 .268 L -.431 .101 L -.243 -.05 L -.718 -.532 L -.263 0 L -.799 .269 L .123 .316 L .309 .515 L .699 .729 L .855 .528 L 1.108 .576 L .024 .313 L -.478 .642 L -.439 .181 L -1.407 .772 L -.674 .083 L -1.123 .509 L -.763 -.276 L -1.654 -.962 L -.586 -.262 L -.497 -.048 L -.684 .281 L 1.364 .521 L 1.483 .896 L -.708 .067 L -.691 -.081 L -1.288 .084 L -.375 -.129 L -.596 -.62 L -1.147 -.014 L -1.857 .118 L -.253 .229 L .614 .244 L 1.311 .421 L -.159 .195 L -.611 .327 L -2.045 1.106 L -.657 .179 L -.527 .001 L -.859 -.241 L -.816 -.484 L -.225 -.081 L -1.189 -.225 L -.736 -.259 L -.598 -.112 L -.947 .014 L -.289 .004 L -1.214 .174 L 1.503 .278 L 1.136 .21 L 1.751 .774 L 1.629 .433 L 1.233 .126 L 1.02 .031 L -.618 1.091 L -1.237 .705 L -.856 .432 L -.728 .161 L -.829 .049 L -.928 -.126 L -1.062 -.38 L -.048 .351 L -.025 .287 L .321 .572 L -.02 .159 L -.741 .031 L -.058 .002 L -1.365 -.108 L -1.649 -.41 L -.884 -.078 L -2.962 -.322 L 2.146 .864 L 1.576 .156 L 1.367 .267 L .562 .205 L .33 .268 L -.011 .19 L -.642 .333 L -1.106 .207 L -1.429 -.076 L -.511 -.062 L -.367 .269 L 1.254 .423 L -.469 .426 L -1.06 .316 L -1.454 .662 L -.421 .252 L .218 .704 L -.313 .235 L -.909 .205 L -.31 .282 L -.529 .64 L -.276 .296 L -.241 .669 L -.274 .543 L -.323 .666 L .056 .416 L -.161 .554 L .123 .875 L .136 .536 L .598 .366 L .25 .015 L .257 .091 L .664 .014 L 1.164 -.094 L .276 .045 L .367 .29 L .413 .763 L .813 1.157 L .22 .668 L -.132 .91 L .673 .014 L 1.874 -.428 L 1.261 -.033 L .723 .074 L .535 .157 L 1.062 .311 L 2.129 .435 L 1.896 .903 L .993 .933 L 3.5 .67 L .644 .225 L .982 .403 L .986 .253 L .553 .104 L .702 -.091 L .453 .044 L .828 -.077 L 1.245 .163 L 1.407 .207 L .401 .194 L -.297 .702 L -.142 .85 L .154 .283 L .307 .342 L .07 .416 L -.115 1.025 L -.309 .593 L .022 .208 L .604 .266 L .481 .339 L .264 .354 L .046 .488 L -.076 .354 L .97 .116 L .963 .47 L .676 .588 L .392 .588 L .078 .162 L .64 .014 L .726 .41 L .907 .601 L -.349 -.66 L -.22 -.279 L .134 -.338 L .573 -.414 L .365 .176 L .381 .456 L .262 .353 L .165 -.354 L .107 -.545 L -.215 -.456 L .541 -.532 L .139 -.546 L -.183 -.517 L -.337 -.458 L -.261 -.754 L -.004 -.548 L -.205 -.593 L -.218 -.43 L .615 -.016 L -.097 -.476 L -.296 -.252 L -.657 -.163 L -.375 -.282 L -.326 -.923 L 1.252 -.271 L .872 -.241 L .625 -.271 L 1.758 -.949 L .629 -.302 L 1.043 -.935 L .434 -.544 L .237 -.665 L .054 -.529 L -.257 -1.045 L -.246 -.531 L -.239 -.319 L -.938 -.729 L -.467 -.274 L -1.105 -.532 L -.363 -.122 L -.453 -.274 L -.151 -.046 L -.293 -.351 L .08 -.107 L .868 -.522 L .553 -.875 L .293 -.416 L .25 -.092 L .447 -.017 L .295 -.277 L -.106 -.523 L -.18 -.355 L -.316 -.402 L -.048 -.202 L .258 -.357 L .005 -.264 L -1.751 -.105 L 1.084 -.92 L .503 -.704 L .007 -.125 L -.316 -.203 L -.609 -.265 L -.244 -.266 L -.043 -.533 L .305 -.425 L .554 -.315 L .57 -.19 L .827 .062 L 1.781 .374 L 1.097 .234 L .753 .077 L 1.44 .013 L 1.08 -.144 L .86 -.222 L .21 -.047 L .179 -.063 L .589 .078 L .991 .407 L .254 .125 L .754 .454 L .918 .375 L .796 .437 L -.294 .391 L .406 .233 L 1.698 .496 L 1.958 .354 L .725 -.033 L .368 -.203 L .339 .295 L -.013 .404 L -.577 .343 L -.123 .45 L .438 1.327 L .136 .722 L .23 .414 L -.049 .353 L -.248 .169 L -.445 -.014 L -.347 -.015 L -.138 .674 L .375 .274 L 1.137 -.415 L .366 -.047 L .781 -.047 L .286 .015 L .677 .32 L .378 .351 L .004 .259 L -.081 .123 L .277 .32 L .516 -.184 L .306 -.046 L 1.173 -.079 L .636 -.184 L .436 -.383 L .333 -.551 L .326 .015 L .194 .122 L .693 .717 L .042 -.062 L .108 -.764 L .317 -.583 L .475 -.262 L .539 -.385 L -.651 -.505 L .008 -.308 L .272 -.139 L .98 -.094 L .193 -.139 L .512 -.665 L .667 .37 L .607 .599 L .785 .506 L .596 .797 L 1.045 .764 L .264 .352 L -.344 .291 L .095 .335 L .573 -.031 L .365 .777 L .182 .183 L .324 .121 L .743 .136 L .281 .258 L .133 .38 L -.379 .092 L -.416 .168 L .411 .318 L .397 .227 L .77 .196 L .279 .227 L .034 .424 L -.056 .076 L -.409 .106 L -.676 -.029 L -.745 -.12 L -.316 .061 L .091 .166 L .273 .181 L .189 .241 L .333 .513 L .411 .226 L .634 .029 L .462 .18 L .838 .496 L .899 .435 L .246 .33 L -.035 .195 L -.447 .781 L .508 .059 L .663 -.166 L .786 -.077 L .79 .164 L .574 .194 L 1.162 .49 L .981 .132 L 1.517 .295 L -.184 .253 L -.718 .21 L -.736 .21 L -.663 .046 L -.834 .24 L -.583 .402 L -.65 .225 L -1.032 .061 L -.286 .075 L -.324 .268 L .029 .371 L -.271 .535 L 1.175 -.343 L .542 -.09 L .649 -.105 L 1.201 -.774 L 1.251 -.478 L 1.146 -.106 L .662 .237 L .35 .341 L -.398 .446 L .036 .119 L .307 .296 L .616 -.224 L .455 -.164 L .655 .192 L 1.051 .487 L .226 .251 L .022 .178 L -.299 .43 L -.05 .355 L -.406 .444 L 1.001 .929 L -.365 .37 L -.795 .282 L -1.078 .621 L -.662 .281 L -1.097 .046 L -.823 .119 L -1.548 .077 L -.433 .413 L -.916 .795 L -.686 .427 L -.612 .294 L -.938 .222 L -1.494 .172 L -1.845 .127 L -1.452 -.07 L -2.031 -.084 L -.355 .03 L -1.073 .075 L -1.058 -.012 L -1.873 -.099 L -.917 -.027 L -1.758 .106 L -.547 .206 L -.523 .294 L -.537 .585 L -.205 .554 L -.287 .335 L -.591 .19 L -1.07 .104 L -.537 .147 L -1.098 .555 L -.774 .54 L -.794 .612 L -.325 .363 L -.33 .233 L -.868 .843 L -.485 .566 L -.418 .276 L -.46 .58 L -.518 .968 L .749 -.737 L .375 -.131 L .688 -.479 L 1.059 -.944 L 1.097 -.785 L 2.028 -.948 L 1.245 -.395 L 1.797 -.512 L 1.065 -.235 L 1.03 -.235 L 1.473 -.148 L .922 .056 L .895 .289 L .509 .29 L .136 .189 L .144 .464 L -.125 .218 L -.326 .219 L -1.059 .292 L -.753 .452 L -.581 .044 L -.845 -.23 L -.726 .045 L -.645 .19 L .279 .08 L 1.13 .229 L .17 .122 L .256 .444 L .074 .095 L 1.299 -.485 L -.028 .216 L .479 -.148 L .372 .162 L -.36 .229 L -.231 .256 L .112 .27 L -.163 .014 L -.074 .229 L -.91 .444 L 1.216 .013 L .077 .188 L -.187 .282 L .091 .43 L .118 -.081 L .239 .134 L -.063 .134 L .048 .202 L .351 .457 L .009 .147 L .824 .054 L .154 .094 L .04 -.067 L .727 .147 L -.315 .134 L -.373 -.013 L -.047 .134 L .525 .147 L .211 .241 L .569 -.081 L .135 .134 L .212 -.014 L .134 .174 L .418 -.04 L -.075 -.107 L .843 .067 L .241 .107 L -.207 .201 L .242 -.107 L .26 .027 L .245 -.013 L .696 -.362 L .303 -.081 L .104 .362 L .377 .161 L .538 -.121 L .488 .416 L -.405 .254 L .089 .107 L .825 .027 L .164 .174 L -.521 .121 L -.161 -.121 L -.3 .134 L .118 .094 L -.515 0 L -.23 -.04 L .109 .161 L -.45 .04 L .056 .107 L -.443 .014 L -.128 .147 L -.45 .04 L -.368 .253 L -.09 -.106 L -.706 .28 L -.046 .053 L -.529 .133 L -.119 -.267 L -.274 .106 L -.163 .267 L -.188 -.187 L -.068 .253 L -.218 .08 L -.094 .187 L -.513 0 L -.081 -.08 L -.169 -.053 L .032 -.347 L -.242 .36 L -.202 .12 L -.131 -.253 L -.354 .027 L .043 .24 L -.233 .04 L .312 .08 L .033 .213 L -.103 .12 L -.174 -.067 L -.768 .453 L .127 .16 L -.235 .12 L -.194 .053 L .015 .213 L -.161 -.12 L .083 .173 L -.217 .08 L -.14 -.107 L .096 .253 L -.222 .066 L -.146 -.08 L -.148 0 L -.064 .133 L -.156 -.106 L -.243 .227 L -.086 .292 L -.201 -.226 L -.344 .133 L -.154 -.187 L -.349 -.479 L -.138 .24 L -.419 -.866 L .456 -.773 L .284 -.16 L .035 -.12 L -.35 .12 L -.357 .267 L -.076 -.106 L .924 -.507 L .125 .146 L .195 -.093 L -.258 -.107 L 1.103 -.52 L 1.109 -.562 L .658 -.361 L .336 .094 L -.067 .428 L .179 -.054 L .258 .281 L -.044 -.201 L -.017 -.174 L .632 -.214 L .73 -.134 L .192 .067 L .202 -.081 L -.152 -.094 L -.653 -.053 L -.595 .053 L -.42 -.053 L -.804 -.014 L -.306 .027 L -.251 .081 L -.246 .094 L .033 -.214 L 1.128 -.563 L .054 -.201 L .252 -.08 L -.052 -.174 L -.523 .281 L .097 -.134 L -.502 -.51 L .309 .443 L -.36 .482 L -.328 .013 L -1.974 .817 L -.284 .08 L -.362 -.201 L -.227 -.067 L .23 .201 L -.788 .401 L -.219 -.174 L -1.019 -.054 L -.124 .147 L -.38 -.241 L h 186.193 47.833 m -.713 -.032 L -.922 -.181 L -.882 -.065 L -1.25 -.314 L -.973 -.182 L -.604 -.049 L -1.083 -.199 L .43 -.335 L 1.542 -.405 L .385 -.186 L .115 -.673 L .305 -.236 L .831 -.069 L .743 .184 L 1.436 .603 L 1.287 .4 L .074 .285 L .315 .284 L 1.094 .516 L -.288 .117 L -1.263 .486 L -.578 .051 L h 231.09 50.646 m -1.319 -.03 L -.449 -.147 L -.232 -.247 L -.173 -.478 L .3 -.43 L .708 -.664 L .662 -.267 L 1.359 -.168 L .911 .197 L .79 .314 L -.021 .464 L -.039 .727 L -.362 .265 L -1.025 .348 L -1.108 .117 L +444.972 79.145 N .47 -.218 L .307 -.093 L -.294 -.024 L -.419 .061 L -.15 -.135 L -.125 .184 L -.108 -.012 L .066 -.491 L .177 -.218 L .41 .009 L 1.489 .062 L .417 .014 L .339 -.075 L .121 -.253 L -.175 -.288 L .246 -.05 L -.068 -.122 L -.068 -.123 L .353 -.096 L .12 -.034 L .051 .154 L .086 .052 L .24 0 L .223 .12 L .257 .069 L .514 .068 L .086 .103 L .223 -.051 L .445 0 L .257 0 L .223 -.017 L .086 .137 L .103 .103 L .188 .034 L .171 .069 L .018 .137 L .052 .12 L -.224 .12 L -.068 .154 L -.068 .206 L .018 .171 L .034 .137 L .029 .038 L -2.96 .101 L -2.246 -.115 L -.842 -.006 L h 717.633 81.109 m .42 .443 L .429 .62 L .183 .457 L .01 .767 L -.244 .442 L -.197 .78 L -.002 .764 L .29 .777 L .592 .849 L .65 1.446 L .899 1.614 L 1.115 1.679 L -1.26 -.677 L -.832 -.39 L -.99 -.056 L -.268 .088 L -.396 .204 L -.462 1.045 L -.266 1.101 L -.082 .579 L .277 .982 L .183 .216 L .659 .908 L .54 .201 L .463 .648 L -.314 1.246 L -.664 -1.258 L -.866 -.301 L -.224 .029 L -.415 .303 L -.311 .534 L -.643 .907 L -.422 -.5 L -.19 -.929 L .637 -1.146 L -.395 -.884 L .175 -.454 L .502 -.63 L -.131 -.723 L -.196 -.376 L -.27 -.55 L -.062 -.235 L .403 -.302 L .284 -.915 L .075 -.784 L .005 -1.326 L .15 -1.302 L -.09 -.732 L -.213 -.469 L -.83 -.85 L -.1 -.897 L .114 -.192 L .359 -.722 L .065 -.738 L -.336 -.457 L .172 -.237 L .374 -.03 L .62 -.031 L 1.023 -.534 L h 471.158 84.281 m -.002 -.142 L -.165 -.066 L -.082 -.115 L -.164 -.082 L .033 -.099 L -.033 -.23 L -.033 -.164 L .082 -.099 L -.147 -.131 L -.099 -.148 L .132 -.066 L 0 -.165 L -.296 -.164 L -.279 -.263 L -.017 -.164 L .099 -.131 L .131 -.165 L .362 -.017 L .328 .049 L .197 .132 L .51 .016 L .525 -.099 L .444 -.247 L .049 -.065 L .148 -.083 L .296 0 L .065 -.164 L -.033 -.131 L -.279 -.066 L -.296 -.148 L -.099 -.181 L .082 -.017 L .066 -.049 L .032 -.065 L -.263 -.066 L -.361 -.099 L -.378 -.066 L -.361 .066 L -.182 -.066 L .066 -.181 L .099 -.197 L -.066 -.148 L -.164 -.099 L -.279 -.082 L -.23 -.066 L -.443 -.213 L -.115 -.23 L -.164 -.263 L -.214 -.017 L -.017 -.099 L .066 -.131 L .099 -.115 L -.132 -.033 L -.181 .049 L -.082 -.115 L -.132 -.181 L -.345 -.049 L .049 -.147 L .033 -.165 L .099 -.049 L .115 -.082 L 0 -.083 L .114 0 L .066 -.131 L -.05 -.164 L -.147 -.099 L -.197 -.247 L .131 -.165 L .033 -.164 L 0 -.083 L .065 -.115 L -.049 -.115 L -.147 .033 L -.165 -.033 L -.147 -.099 L -.099 -.099 L -.279 -.099 L -.132 -.131 L -.542 -.115 L -.247 .049 L -.099 -.049 L -.131 -.049 L -.23 .083 L -.147 .099 L -.165 0 L -.279 .016 L -.214 .197 L -.197 0 L -.164 -.148 L -.065 -.148 L .017 -.099 L .164 -.099 L 0 -.115 L -.147 -.017 L -.296 -.065 L -.312 -.049 L -.361 .049 L -.214 .065 L -.197 .033 L -.082 -.148 L -.132 -.148 L -.312 -.033 L -.181 -.016 L -.197 .131 L -.229 -.066 L -.165 -.147 L .061 -.042 L .015 -.117 L .044 -.087 L -.088 -.233 L .015 -.189 L -.131 -.117 L .059 -.087 L -.16 -.043 L -.146 -.102 L -.029 -.16 L -.131 -.058 L -.116 -.102 L .043 -.073 L .059 -.087 L -.073 -.044 L -.087 -.014 L -.131 -.073 L -.146 .015 L -.204 .059 L .044 -.102 L .102 -.073 L .073 -.087 L -.029 -.117 L .072 -.131 L -.131 -.087 L .103 -.029 L .087 -.015 L .102 -.073 L .015 -.087 L .029 -.116 L .015 -.087 L -.204 -.058 L -.087 -.073 L -.204 -.087 L -.232 -.073 L 0 -.117 L .015 -.116 L -.37 .004 L -.081 -.106 L .116 -.058 L 461.402 72 l .029 -.117 L .131 0 L .087 -.116 L .059 -.102 L .16 -.058 L .262 -.043 L .175 -.073 L -.059 -.059 L -.175 -.043 L -.043 -.146 L -.015 -.087 L 0 -.073 L -.088 -.073 L -.203 -.087 L -.175 -.233 L 0 -.175 L .175 -.131 L -.029 -.16 L -.073 -.189 L -.131 -.437 L -.029 -.16 L .088 -.16 L .204 -.131 L .319 -.131 L .219 -.204 L .175 -.277 L .058 -.131 L .088 -.043 L .116 0 L .189 0 L .175 -.044 L .043 -.174 L -.16 -.131 L -.145 -.053 L -.089 -.13 L -.17 -.038 L .1 -.253 L .339 -.038 L .153 .165 L .229 .063 L .188 -.088 L -.094 -.139 L .301 -.154 L .485 .199 L .296 -.062 L .312 -.338 L .311 -.185 L .75 .106 L .781 .275 L .439 0 L .363 -.154 L -.386 -.399 L -.59 -.323 L -.393 -.03 L -1.204 .08 L -.616 -.091 L -.271 -.108 L -.299 -.309 L .258 -.434 L -.065 -.201 L -.199 .044 L .174 -.285 L 1.946 -1.145 L 1.983 -1.195 L 1.385 -.758 L .591 -.536 L .43 -.536 L .105 -.409 L -.161 -.346 L -.436 -.392 L -.703 -.265 L -1.357 -.499 L -.439 -.33 L .327 -.191 L .542 -.415 L .057 -.254 L -.151 -.253 L -1.286 -1.395 L -.37 -.509 L .029 -.37 L .187 -.403 L .44 -.535 L .196 -.356 L -.772 -1.195 L -1.402 -1.394 L .328 -.296 L 1.303 -.777 L .421 -.364 L -.543 -.392 L -.964 -.506 L -.872 -.194 L -.563 -.212 L -.116 -.529 L .258 -.465 L .024 -.283 L .689 -.303 L 1.013 -.672 L 1.023 -.49 L .77 -.121 L .824 -.021 L .514 -.204 L .404 -.288 L .617 -.051 L 1.002 -.254 L .643 -.237 L .01 .151 L .255 .386 L .358 .284 L .543 .2 L .919 .082 L .602 .1 L .078 .602 L .695 -.319 L .421 .049 L 1.083 .048 L .875 .015 L .522 .032 L 1.116 -.002 L 1.293 .281 L 2.728 .512 L .984 .364 L 1.595 .86 L .583 .214 L 1.48 .246 L 1.296 .212 L 2.018 .623 L .328 .279 L -.051 .444 L .147 .295 L .426 .294 L .104 .294 L -.24 .344 L -.69 .491 L -1.092 .54 L -.816 .262 L -1.75 .36 L -.907 .083 L -1.631 -.013 L -1.391 -.192 L -2.038 -.175 L -1.63 -.192 L -1.342 -.339 L -2.256 -.485 L -1.114 -.112 L -.476 -.048 L -.621 -.473 L -.371 -.163 L -.771 -.13 L -.943 .117 L .307 .163 L .149 .065 L .73 .538 L .482 .146 L 1.109 .601 L .832 .291 L .921 .161 L .634 .242 L .405 .453 L -.002 .405 L -.276 .291 L -.684 .195 L .086 .113 L .208 .531 L .771 .943 L .093 .494 L .155 .207 L .438 .174 L 1.203 .078 L .872 .125 L .499 .619 L .401 .095 L 1.26 .077 L .575 .126 L .364 .079 L .402 -.128 L .785 -.097 L .243 -.302 L -.001 -.318 L -.387 -.397 L -.471 -.079 L -.455 .096 L -.447 -.031 L -.589 -.206 L -.952 -.795 L .701 -.674 L .484 -.001 L 1.116 .479 L 1.441 .333 L 2.09 .427 L .952 .078 L .834 -.146 L .723 .174 L .261 -.224 L .05 -.415 L -.214 -.239 L -.858 -.656 L -.348 -.628 L .285 -.323 L .19 -.049 L 1.432 -.423 L 1.495 -.359 L .599 -.244 L 1.133 -.717 L .172 -.049 L .462 .064 L 1.829 .29 L 1.41 .533 L .341 -.001 L .052 -.065 L .154 -.503 L .581 -.767 L -.048 -.653 L -.317 -.408 L -.847 -.163 L -.3 -.229 L 1.139 -1.005 L .101 -.247 L -.205 -.594 L -.771 -.512 L .069 -.315 L .353 -.051 L 1.458 .23 L 2.025 -.12 L .631 .132 L .664 .611 L .616 .445 L .433 .461 L -1.045 .051 L -1.559 .085 L -.822 .215 L -.492 .51 L .191 .18 L .952 .293 L .732 .555 L .804 .194 L .723 .097 L 1.268 -.133 L 1.33 -.084 L .301 -.164 L .257 -.491 L .291 -.591 L .284 -.412 L 1.232 -.2 L 1.223 -.414 L .988 -.216 L 1.924 -.483 L 1.429 -.251 L 1.537 -.318 L .921 -.3 L .205 .464 L .278 .083 L .571 -.117 L .487 -.266 L .148 -.465 L .386 -.167 L .718 -.135 L .859 .065 L -.18 .399 L -.058 .597 L -.858 .084 L -.178 .149 L .002 .215 L .687 .197 L .507 -.083 L 1.169 -.167 L .436 -.001 L .161 .198 L .23 .049 L .278 -.133 L .264 -.216 L .29 -.431 L .464 -.183 L .861 -.118 L 1.049 -.068 L .768 .032 L 1.075 .23 L .755 -.018 L .36 -.083 L .963 -.467 L 1 -.285 L .803 -.052 L .952 .182 L .326 .166 L -.631 .45 L .129 .232 L .217 .099 L .632 .131 L .579 -.018 L .288 -.232 L .074 -.398 L .342 -.084 L .962 .065 L .543 -.184 L .395 -.316 L .115 -.417 L -1.37 -1.033 L .405 -.168 L .66 -.37 L .403 -.068 L .609 .016 L 2.171 .063 L 1.272 .199 L 1.241 .149 L 1.135 .199 L 2.111 .515 L 1.071 .098 L 1.712 .414 L 1.02 .248 L 1.305 .53 L 1.455 .611 L .864 .379 L .376 .049 L .229 -.1 L 1.145 -1.047 L .236 -.3 L -.927 .035 L -.4 -.049 L -.564 -.232 L -.365 -.433 L .027 -.652 L -.727 -.283 L -1.987 -.147 L -.19 -.268 L .064 -.168 L .305 -.303 L .693 -.255 L .236 -.153 L .085 -.187 L -.052 -.833 L -.251 -.238 L -1.135 -.066 L -.232 -.29 L .328 -.532 L .359 -.241 L .391 -.035 L 1.482 -.416 L 1.098 -.485 L .521 -.416 L .581 -.608 L .544 -1.22 L .637 -.421 L .374 .069 L 1.562 .155 L 1.613 -.125 L 1.605 -.091 L .695 .069 L 1.066 -.055 L .574 .122 L .309 .279 L -.018 .332 L -.423 .836 L -.348 .348 L -1.334 .833 L -.223 .345 L .752 .342 L .931 .667 L .277 .342 L .21 .818 L -.174 .222 L -.575 .375 L .254 1.179 L -.058 1.305 L .263 .583 L .45 .381 L 1.027 .264 L .19 .166 L -.001 .133 L -.485 .481 L -.417 .826 L -.333 .33 L -.784 .462 L -1.232 .625 L -.63 .198 L -.55 .263 L .321 .522 L -.433 .115 L 558 52.195 l -1.599 -.372 L -.731 -.08 L -.97 .034 L -.601 .115 L .195 .31 L .583 .276 L .738 .21 L 1.569 .208 L 1.133 .079 L .613 -.05 L 1.188 .144 L .922 -.034 L .472 -.358 L .303 -.358 L 1.352 -.328 L 1.166 -.492 L .268 -.278 L .386 -.606 L .818 -.313 L .864 -.626 L .064 -.362 L -.225 -.561 L -.609 -.545 L .244 -.548 L .237 -.1 L .677 -.151 L 1.38 -.152 L 1.757 -.003 L .74 .231 L .842 .463 L .151 .778 L -.34 1.023 L .302 .279 L .92 .212 L 1.298 .047 L .864 -.149 L .129 -.296 L -.514 -.18 L -.797 -.18 L -.571 .034 L -.457 -.098 L .068 -.379 L 1.03 -.382 L .065 -.249 L -.218 -.148 L -.166 -.331 L -.441 -.763 L -.511 -.266 L -.836 -.098 L -1.093 -.231 L -.801 -.116 L -1.288 -.165 L -.91 .186 L -.638 .101 L -1.297 -.181 L -.896 .019 L -.015 -.267 L -.564 -1.071 L .305 -.657 L .736 -.697 L .282 -.46 L -.134 -.221 L -1.092 -1.042 L -.949 -.514 L -.12 -.189 L .833 -.554 L 1.213 -.106 L .998 -.262 L .744 -.348 L .172 -.226 L .169 -.644 L -.13 -.663 L .23 .069 L .64 .051 L .466 .086 L .108 .471 L -.186 .54 L -.636 .608 L -.167 .554 L .14 .448 L .373 .274 L .485 .274 L 1.384 .134 L 1.574 .169 L 1.632 .083 L .819 .409 L .321 .017 L .799 -.036 L -.527 -.89 L -.521 -.274 L -1.893 -.1 L -.931 -.067 L -.576 -.154 L -.609 -.448 L .275 -.329 L 1.374 -.054 L .444 .172 L 1.145 .084 L .747 -.157 L -.09 -.728 L .408 -.088 L .84 -.105 L 1.278 -.02 L 1.067 .207 L 1.413 .379 L 1.088 .535 L 1.326 .343 L .547 .085 L 1.822 .014 L .727 -.174 L .138 .345 L -.781 .38 L -.696 .259 L -.248 .771 L -.129 .972 L .333 .136 L .68 -.785 L .387 -.292 L .285 .051 L .604 .528 L -.088 .749 L .743 -.205 L .681 -.273 L -.044 -.306 L -.191 -.119 L -.147 -.358 L -.748 -.821 L .188 -.223 L .686 -.759 L -.797 -.448 L -.772 -.258 L -.93 -.241 L -.257 -.382 L -.655 -.051 L -.979 -.242 L -1.34 -.207 L -.307 -.296 L .062 -.577 L -.096 -.386 L -.811 -.667 L .081 -.247 L .266 -.16 L .484 -.125 L 2.31 -.11 L 2.54 -.022 L 2.125 -.128 L 1.421 -.162 L .475 .317 L .382 .052 L .844 -.267 L 1.056 -.286 L 1.413 -.109 L .589 .194 L -.957 .338 L -.451 .407 L 1.737 -.233 L .521 -.107 L .955 -.374 L .27 -.284 L -.334 -.444 L -.326 -.177 L -.925 -.266 L -.365 -.303 L -.002 -.232 L .324 -.539 L 1.176 -.397 L .966 -.22 L 3.028 -.903 L .889 -.094 L .248 -.036 L .522 -.076 L 1.899 -.096 L 1.663 -.114 L 2.302 -.244 L 2.048 -.263 L 1.595 -.43 L .855 -.243 L 1.763 .034 L 1.065 -.002 L .383 .185 L -.351 .409 L 1.504 .108 L 1.018 -.039 L 1.261 -.188 L 1.345 -.225 L .95 -.039 L .982 .166 L .687 .073 L .693 -.206 L .12 -.335 L -.133 -.167 L .466 -.337 L .942 -.077 L .939 .036 L 1.243 -.377 L -.618 -.506 L .122 -.34 L 1.165 -.438 L 1.554 -.383 L 2.23 -.406 L 1.229 -.077 L .993 .056 L 1.486 -.003 L .86 .265 L .045 .266 L -1.528 .401 L -.66 .342 L .488 .15 L 1.83 -.117 L 1.588 .148 L 2.039 -.079 L .177 .113 L -.375 .283 L -1.187 .453 L -.296 .3 L 1.971 -.004 L .833 -.02 L .234 .093 L 1.052 -.545 L 1.366 -.002 L 1.771 -.097 L .631 .13 L 1.35 -.021 L 1.954 .165 L 1.4 .259 L 1.181 .427 L .52 .445 L .726 -.001 L .854 -.076 L .422 .5 L -1.354 .832 L .241 .128 L .896 .365 L -2.329 .859 L -1.035 .235 L -1.166 .11 L -3.404 1.061 L -3.018 .965 L -.793 .285 L -2.388 .375 L -2.35 .586 L -2.065 1.126 L .715 .017 L 1.081 -.247 L .922 -.458 L 1.663 -.161 L 1.231 -.02 L 2.101 -.268 L 1.879 -.286 L .879 -.107 L 1.004 -.284 L -.094 -.389 L -.492 -.123 L -.034 -.071 L .281 -.249 L .581 -.214 L .873 .211 L .603 .389 L .621 .052 L .593 .193 L .737 .052 L .853 -.055 L 1.155 -.268 L .499 .07 L .192 .3 L .009 .512 L .522 .404 L 1.422 -.778 L 1.66 -.021 L 1.506 -.145 L 2.354 .014 L 1.919 .155 L .854 .034 L 1.204 .033 L -.271 .74 L .354 .333 L 2.043 .154 L .848 .121 L .698 .069 L 1.035 .103 L 2.49 -.145 L 1.209 -.02 L 1.42 .348 L 1.405 -.932 L -.161 -.352 L -.038 -.229 L -.034 -.105 L 1.806 -.48 L .521 -.019 L .802 .104 L 1.148 .298 L .851 .281 L 1.711 .032 L 1.354 -.073 L 1.384 .033 L 1.323 .431 L .409 .181 L .058 .386 L -.52 .088 L -.268 .036 L -1.905 .406 L -2.438 .737 L -.233 .227 L .253 .069 L 1.033 .067 L .957 .016 L .659 .155 L .659 .293 L 1.014 .396 L .583 .172 L .78 .481 L 1.27 .805 L 1.814 .801 L 1.351 .305 L .612 -.018 L .795 -.394 L .843 -.72 L 1.093 -1.051 L .601 -.329 L .29 .017 L .236 .465 L .772 .308 L 1.346 .29 L 1.105 .135 L .848 -.087 L 1.973 -.468 L .778 -.07 L .813 .067 L 1.196 .239 L 1.921 .734 L .315 -.052 L .186 -.069 L .491 -.258 L .221 -.258 L -.137 -.051 L .013 -.189 L .726 -.312 L .509 -.018 L .5 .257 L .575 .188 L 1.302 .032 L .181 -.5 L -.194 -.466 L .15 -.363 L .093 -.521 L -1.131 .159 L -.643 .001 L -.179 -.104 L .442 -.296 L .318 -.087 L .986 -.089 L 1.021 -.02 L .832 -.141 L 1.566 -.648 L .254 0 L 1.76 .241 L 1.561 .137 L 2.036 .188 L .997 .068 L .654 .103 L 2.307 .065 L -1.732 .628 L .865 .051 L 1.011 -.089 L .335 .138 L -.305 .381 L -.926 .192 L -.846 .261 L -.177 .293 L .664 .033 L .52 -.122 L .916 -.14 L .978 -.33 L 1.62 -.799 L 2.766 .012 L 1.196 .067 L .903 .172 L .946 .137 L .205 .19 L .221 .104 L -2.247 .59 L .559 .137 L 1.674 .289 L 2.174 .202 L .946 .204 L .801 .375 L .367 .427 L .564 .357 L .522 .152 L 1.459 -.037 L 1.364 -.105 L 1.138 -.139 L 2.518 -.329 L 2.208 -.107 L 3.008 .131 L 1.515 .134 L .734 .118 L 1.168 .424 L .655 .169 L .525 .338 L .361 .39 L -.123 .491 L -.286 .521 L .509 .25 L .764 .065 L .835 .015 L .643 .083 L -.017 .685 L .419 .416 L .686 -.168 L .545 -.435 L 1.211 -.387 L .348 -.067 L .35 .049 L 1.696 -.02 L 1.521 -.288 L .736 .032 L .588 .434 L .707 .116 L 1.541 .014 L 2.176 .062 L .869 -.118 L 1.378 -.504 L .406 .2 L .93 .533 L .396 .216 L 1.095 .265 L .875 .332 L .282 .398 L .612 .148 L 1.556 -.136 L 1.653 -.319 L .16 -.25 L -.248 -.333 L -.805 -.833 L -.833 -.115 L .4 -.336 L .479 -.571 L 1.89 .098 L 1.214 .082 L 1.135 .065 L 1.221 .166 L .222 .318 L 1.396 -.153 L 2.084 -.054 L 2.304 .013 L 1.292 .148 L .786 .199 L 1.185 .199 L 1.391 .098 L .751 .182 L 1.302 .332 L .747 .065 L .703 .182 L 1.145 .505 L 0 2.126 L 0 2.222 L 0 2.222 L 0 1.292 L 0 .157 L 0 .576 L 0 .219 L -1.083 .371 L -.651 .03 L -.645 .37 L -.56 .065 L -1.044 .065 L -.355 -.079 L -.928 -.052 L -.118 -.343 L -.271 -.211 L -.501 .027 L .241 -.185 L -.938 .324 L -.846 .02 L -.337 -.211 L -.478 -.079 L .424 .501 L -.569 .29 L .32 .103 L .942 .205 L .634 -.36 L .395 .041 L .335 .079 L 0 .477 L .248 .206 L .76 .269 L 1.059 -.228 L -.439 .322 L .741 -.243 L .065 .336 L .247 .206 L .187 .363 L .068 .189 L -.722 .522 L .593 -.064 L .349 .172 L .473 .503 L .501 .157 L .145 .251 L -.162 .456 L .792 -.111 L -.125 .393 L .023 .25 L -.43 .299 L -.691 .205 L -.635 -.046 L -.448 -.14 L -1.243 -.154 L -.889 -.077 L -.347 -.14 L .123 -.267 L -.493 -.046 L -.304 .032 L -.559 .55 L -.069 .11 L -3.06 .913 L -1.155 .174 L -.245 0 L -.43 .203 L -.219 .188 L -.719 .22 L -.991 .033 L -.308 .11 L -.48 .405 L -.462 .203 L -.946 .033 L -.854 .622 L -.24 .279 L -1.67 .452 L -.392 .449 L -1.229 .25 L -.406 .14 L -.151 .293 L .01 .292 L -.473 .292 L -.406 .016 L -.586 -.306 L -.183 -.262 L -.169 -.37 L -.67 -.308 L -1.074 -.044 L -1.021 .048 L -1.159 .172 L -1.301 .188 L -.523 .217 L -1.333 .756 L -.536 .277 L -.184 -.138 L .575 -1.293 L -.55 .094 L -.392 -.097 L -.811 .531 L -.67 .186 L -.401 .155 L -.114 .506 L -.66 .154 L -.317 -.168 L -.253 -.49 L -.483 -.261 L -1.024 .636 L .261 -.204 L -.557 .062 L -.283 .092 L -.628 .522 L -.141 .261 L .126 .229 L .344 .152 L -.932 .521 L -.182 .199 L .342 .167 L -.647 .352 L -.88 .55 L -.626 .503 L -.298 .35 L -.01 .531 L .421 .317 L .477 .09 L 1.382 -.048 L .562 .166 L .11 .167 L -.436 .394 L -.752 .455 L -.181 .302 L .224 .512 L .292 .452 L .786 .089 L .165 .391 L -.014 .616 L -.349 .361 L -.528 .061 L -.481 -.209 L -.017 -.21 L .388 -.527 L -.444 -.014 L -.454 .242 L -1.014 .843 L -.56 .675 L -.237 .599 L .321 .672 L .647 .311 L .154 .237 L -.294 .387 L -.688 .313 L -.956 .031 L -.664 -.088 L -.344 .001 L -.619 .179 L -.837 .476 L -.214 .149 L -.525 .504 L -.137 .341 L .111 .281 L .492 .398 L .038 .221 L -.056 .133 L -.679 .238 L -.604 .016 L 753.44 82.4 l -.727 .296 L -.065 .251 L .067 .28 L -.161 .854 L -.293 .412 L -.8 .78 L -1.53 .971 L -.854 .5 L -.285 .103 L -.295 -.614 L -.198 -.821 L -.25 -.69 L -.064 -.794 L -.351 -.75 L -.305 -.383 L -.214 -.915 L -.514 -1.36 L -.008 -.578 L -.154 -.563 L -.017 -.327 L -.105 -.193 L -.262 -.817 L -.026 -.792 L .116 -.808 L .271 -1.396 L .167 -.226 L 1.185 -.86 L .716 -.424 L .57 -.695 L .14 -.227 L -.085 -.318 L -.139 -.166 L 1.632 -.367 L 1.001 -.305 L .811 -.32 L 1.729 -.884 L .641 -.412 L .431 -.428 L .14 -.335 L 1.784 -.889 L .872 -.445 L 1.535 -.861 L .368 -.293 L .26 -.433 L 1.252 -.435 L 2.106 -.514 L .257 -.434 L .773 -.528 L .086 -.233 L -.568 -.216 L .814 -.904 L -.036 -.483 L .183 -.391 L .598 -.204 L 1.729 -.082 L .513 -.063 L -.485 -.328 L -2.065 -.215 L -.71 .095 L -1.062 .174 L -.777 .189 L .042 .328 L -.664 .923 L .125 .202 L -.04 .14 L -.662 .11 L -.479 .11 L -1.555 .718 L -1.979 1.042 L -1.169 .342 L -.249 -.062 L .156 -.325 L .352 -.465 L -.933 -.076 L -.16 -.263 L .252 -.451 L .442 -.467 L .207 -.328 L -.069 -.202 L -.339 -.031 L -1.136 .454 L -.496 .032 L -.277 -.358 L -.589 -.17 L -1.606 .144 L -1.312 .111 L -.956 .08 L -.606 .157 L -.894 .359 L -.093 .436 L .082 .186 L -1.262 .53 L -.408 .233 L .149 .495 L -1.294 .357 L -1.019 .434 L -.84 .479 L -.496 .461 L -.332 .46 L .004 .383 L .527 .213 L 1.269 .043 L .278 .275 L .062 .122 L -1.152 .139 L -1.028 .262 L -1.045 -.059 L -.698 -.136 L -.382 .031 L -.311 .107 L -.721 .398 L -.695 -.35 L -1.112 .383 L -.747 .139 L -.487 -.09 L -.284 -.137 L .108 -.29 L .748 -.124 L .868 -.124 L .164 -.046 L -.741 -.64 L 736.444 68 l -1.06 .017 L -.854 .155 L -.353 -.061 L -.868 -.458 L -.775 -.029 L -.745 .047 L -.704 .246 L .042 .398 L -.26 .229 L -.477 .215 L -.695 -.243 L -.408 -.122 L -1.26 .063 L -.784 .093 L -.651 -.075 L -.887 -.136 L -.563 .078 L -.067 .122 L -.147 .474 L -.677 .017 L -.311 -.137 L -.038 -.382 L -.203 -.259 L -1.241 .094 L -1.014 -.059 L -1.257 .033 L -1.158 .063 L -.836 -.029 L -.18 .016 L -1.085 .292 L -.964 .444 L -.74 .474 L -.536 .504 L -.789 .245 L -.904 .336 L -.194 .152 L -1.047 1.17 L -1.634 .684 L -.949 .471 L -1.157 .711 L -1.653 1.253 L -.828 .572 L -1.573 .873 L -.893 .376 L -1.889 .871 L -.632 .388 L -.203 .298 L .018 .357 L .428 .281 L .485 .043 L .918 .013 L 1.046 -.15 L .656 .043 L -.329 1.261 L .016 .415 L .303 .103 L .63 -.09 L .601 -.371 L .761 .117 L -.127 .148 L 705.293 81 l -.112 .222 L .373 .073 L 1.645 -.018 L .566 -.238 L .39 -.519 L .017 -.638 L .763 .014 L .647 -.001 L .726 .014 L .951 .265 L .658 .354 L .486 .591 L .847 .575 L .426 .176 L .506 .324 L -.07 .148 L -.581 .355 L .453 .221 L .13 .309 L -.336 .723 L .491 .117 L .215 .235 L -.291 .515 L -.348 .397 L -.532 .559 L -.724 1.364 L -.181 .688 L .057 .219 L .24 .701 L -.188 .917 L -.098 .741 L -.403 1.408 L -.146 .493 L -1.928 1.538 L -.371 .435 L -.217 .65 L -.587 .42 L -.741 .579 L -.241 .361 L -.574 .981 L -.587 .606 L -.941 .778 L -1.784 1.512 L -.464 .474 L -.235 .458 L -.323 .33 L -.758 .388 L -.618 .416 L -.574 .702 L -.431 .458 L -.875 .673 L -.955 .487 L -1.838 .475 L -.798 .244 L -.278 -.427 L -.519 -.085 L -.243 .043 L -.337 -.185 L -.337 -.513 L -.663 .272 L -.464 .101 L .424 -.586 L -.624 .173 L -.506 .486 L -.649 .543 L -1.326 1.001 L -.072 .049 L -.167 -.393 L -.298 -.439 L .111 -.058 L 1.252 -.462 L .511 -.43 L .156 -.329 L -.112 -.299 L .097 -.128 L .025 -.385 L .006 -.613 L -.062 -.656 L -.332 -.897 L .048 -.557 L 1.664 -.982 L .396 .041 L .685 .24 L .679 .225 L .547 .098 L .47 -.347 L .551 -.69 L .329 -.432 L .627 -1.08 L .538 -1.066 L .278 -.893 L .291 -.707 L .66 -.393 L .566 -.407 L -.017 -.504 L -.116 -.389 L -.064 -.259 L -.246 -.114 L -.902 .034 L -1.181 .208 L -1.357 .31 L -.953 .308 L -.604 .22 L -1.657 .052 L -.649 .018 L -.68 .033 L -.261 -.446 L -.44 -1.283 L -.297 -.866 L -.205 -.144 L -2.659 -.839 L -1.523 -.253 L -1.247 -.341 L -.507 -.2 L -.436 -.389 L -.927 -1.903 L -.94 -1.588 L -1.087 -2.384 L -.742 -.952 L -.763 -.467 L -.539 -.026 L -1.386 .125 L -.683 -.188 L -1.037 -.481 L -1.148 -.215 L -.917 .049 L -1.203 .109 L -.836 .123 L -1.854 .143 L -.602 .136 L -.478 .165 L -1.193 .787 L -.375 .282 L -.119 .25 L .822 -.078 L .558 .026 L .465 .306 L .107 .249 L -.167 .794 L -1.371 .608 L -.599 .545 L -.667 .779 L -.416 .543 L -.422 .426 L -.103 .249 L .062 .146 L .35 .348 L .056 .306 L -.123 .233 L -.779 .339 L -2.44 .752 L -.438 .089 L -.343 .016 L -1.126 -.574 L -.452 -.172 L -.046 -.018 L -.431 -.168 L -.622 .018 L -1.228 .297 L -.86 -.169 L -.34 -.129 L -.751 -.506 L -.74 -.156 L -.609 .047 L -.333 .002 L -1.165 .487 L -.755 .498 L -.447 .394 L -.604 .264 L -.526 .163 L -1.147 .136 L -.867 .106 L -.532 .075 L -1.018 .063 L -1.602 .11 L -.739 -.039 L -.984 -.082 L -.905 -.241 L -1.318 -.254 L -.812 -.373 L -1.132 -.313 L -.623 -.331 L -1.333 -.75 L -.769 -.229 L -1.423 -.022 L -1.172 -.037 L -.796 .077 L -2.48 .538 L -.673 -.113 L -1.643 -.531 L -.421 -.333 L -.408 -.451 L -.182 -.481 L -.004 -.541 L -.145 -.204 L -.767 -.143 L -.989 -.317 L -.702 -.231 L -1.748 -.328 L -1.036 -.185 L -1.028 -.098 L -.84 -.201 L -1.269 .96 L -.905 .839 L -.098 .293 L .409 .86 L .396 .304 L .116 .204 L -.163 .526 L -.744 .572 L -.31 .162 L -.755 .28 L -.562 .018 L -.576 -.186 L -.312 -.114 L -.875 -.068 L -.85 .004 L -.719 -.083 L -1.458 .008 L -.699 -.113 L -.393 -.406 L -.694 -.755 L -.831 -.083 L -1.842 -.122 L -.932 -.156 L -.953 -.097 L -.84 .18 L -1.512 .476 L -1.143 .341 L -.787 .398 L -.971 .692 L -.017 .012 L -.727 .381 L -.603 .148 L -1.387 .08 L -.599 .207 L -.799 .425 L -.154 .044 L -.244 .074 L -.569 .003 L -.228 .014 L -.064 -.145 L -.589 0 L -.294 -.478 L -.441 -.331 L .073 -.331 L -.625 .184 L -.478 .368 L -.993 -.074 L -.882 -.073 L -.662 -.699 L -.588 -.552 L -.956 -.147 L -.331 -.625 L -.772 -.588 L -.698 -.441 L -.993 .037 L -.771 .221 L -.993 .221 L -.992 0 L -.589 0 L -.184 -.184 L -.258 -.257 L -.478 0 L 0 -.368 L -.367 -.331 L -.92 0 L -.367 .515 L -.331 .257 L -.515 .257 L -1.104 -1.434 L -.846 -.882 L -1.69 -2.133 L -1.066 -1.029 L -1.287 -.772 L -.809 -.294 L -1.104 -.588 L .11 -.368 L .515 -.11 L 0 -.441 L -.809 .074 L -.515 .22 L -.772 .221 L -.956 .515 L -1.103 .257 L -.772 .441 L -.294 .294 L -.552 -.184 L -.441 -.037 L -.771 .073 L -.441 .11 L -.331 -.184 L .331 -.441 L .441 -.184 L .146 -.294 L -.367 0 L -.441 .221 L -.478 -.11 L -.405 -.294 L -.478 -.037 L -.184 .147 L -.147 .147 L -.367 -.221 L -.295 -.368 L -.294 -.11 L -.331 .221 L -.367 -.074 L -.368 .147 L -.44 -.11 L -.295 .147 L -.478 -.074 L -.184 -.257 L .33 -.037 L -.073 -.331 L .147 -.257 L .11 -.331 L -.515 -.22 L -.147 -.221 L .037 -.331 L -.368 -.404 L -.882 .037 L -.625 .11 L -.772 -.257 L -.515 -.11 L -.919 -.147 L -.735 .037 L -.11 .221 L -.589 .184 L -.515 .037 L 0 .294 L -.367 .368 L -.625 .074 L -1.876 .073 L -2.021 .405 L -1.177 .037 L -.625 .331 L -.221 .331 L -.331 -.073 L -.588 .073 L -1.545 .11 L -.735 .11 L -1.029 .037 L -1.396 .405 L -.368 .184 L -.772 0 L -.515 0 L 537.304 80 l -.33 .074 L -.185 .515 L .074 .441 L .294 .221 L -.294 .074 L 0 .331 L 1.065 .11 L .956 .294 L -.11 .257 L -.515 .073 L -1.103 -.147 L -.698 .184 L -.662 .515 L .146 .257 L .441 .478 L -.331 .294 L -.588 .147 L -.735 .368 L -.467 .067 L .164 .274 L .239 0 L .377 .137 L -.068 .171 L .377 .137 L .651 .069 L .274 .308 L 1.165 .171 L .24 .24 L -.138 .686 L -.137 .309 L -1.577 .411 L -.959 -.034 L -.343 -.343 L -.24 0 L -.171 .309 L -.651 .343 L -.411 -.171 L -.754 -.137 L -.926 -.309 L -.274 -.548 L -.754 -.103 L -1.062 .103 L -.137 .412 L -.617 .068 L -.651 -.411 L -.65 -.035 L -.823 -.068 L -.514 .377 L -.377 .343 L -.274 .274 L -.686 .171 L -.411 -.24 L -.686 -.137 L -.582 -.548 L -.72 -.068 L .034 .24 L .205 .48 L -.239 .274 L -.274 -.137 L -.068 -.583 L -.411 -.274 L -.789 -.343 L -.582 -.206 L 0 -.343 L -.96 -.171 L -.617 .069 L -.788 -.035 L -.411 -.514 L -.411 -.069 L -.617 .24 L -.273 .137 L -.651 .137 L -.309 -.274 L -.479 0 L -.651 -.069 L -.515 .309 L -.548 .343 L -.788 .377 L -.549 .068 L -.514 .171 L -.309 .309 L -.172 .24 L 509.58 87.5 l -.479 .206 L .068 .445 L .171 .411 L -.068 .446 L -.411 .24 L -.651 0 L -.514 -.411 L -.48 -.548 L -.514 -.24 L -.411 .069 L -.103 .308 L -.343 .549 L -.823 .137 L -.205 1.303 L .343 .171 L .239 .274 L -.239 .206 L -.446 .274 L -.65 1.165 L 1.37 .343 L .138 .377 L -.068 .309 L .514 .514 L .103 -.343 L .583 .206 L .343 -.034 L .514 .034 L .515 .445 L .479 .206 L .343 .514 L .96 1.131 L -.138 .103 L -.445 -.103 L -.309 -.103 L -.343 .103 L .068 .308 L .857 .377 L .616 .19 L -.167 .2 L -.399 .28 L -.38 .12 L -.12 0 L 0 .14 L 0 .22 L -.14 .08 L -.3 -.2 L -.34 .2 L -.399 .26 L -.64 .12 L -.319 .08 L -.26 -.08 L -.181 -.08 L -.1 .04 L -.06 .16 L .12 .26 L -.221 .2 L -.18 .3 L -.18 .319 L -.319 .42 L -.18 .28 L -.32 .16 L -.34 .24 L -.14 .32 L .08 .2 L .34 .2 L .319 .04 L .18 .3 L .24 .04 L .239 .34 L .28 .419 L -.06 .38 L -.101 .2 L .061 .16 L .1 -.2 L .1 -.34 L .12 -.22 L .16 -.02 L -.141 .439 L -.22 .36 L .061 .4 L .12 .1 L -.16 .2 L -.04 .4 L .38 .24 L .119 .1 L .12 .52 L .28 .06 L .359 .42 L .2 .28 L .439 .419 L .18 .36 L .359 .06 L .047 .146 L -.292 .449 L -.496 .284 L -.283 .094 L -.308 .331 L -.165 .213 L -.379 .047 L -.449 -.142 L -.591 -.094 L 0 -.308 L -.283 -.284 L -.118 0 L -.095 -.118 L -.473 -.284 L -.142 -.189 L 504.5 H -.213 .047 L 504.264 107 l -.229 .023 L -.126 -.189 L -.236 -.071 L -.236 .023 L -.284 -.047 L -.26 -.094 L -.284 -.166 L -.354 -.284 L .118 -.307 L .118 -.189 L -.118 -.142 L -.354 -.024 L -.378 0 L -.213 -.166 L -.189 -.118 L -.212 0 L -.143 -.094 L -.236 -.118 L -.118 0 L -.095 .071 L -.142 .166 L -.188 -.142 L -.261 -.071 L -.354 0 L -.213 .071 L -.094 .095 L -.166 .166 L -.283 0 L -.261 .118 L -.212 -.071 L -.261 -.118 L .048 -.118 L .142 -.118 L -.308 -.119 L -.236 -.118 L -.354 -.071 L -.52 -.118 L -.284 -.213 L -.095 -.142 L -.354 -.166 L -.283 .047 L -.189 0 L -.401 -.166 L -.544 0 L -.426 .095 L -.307 0 L -.355 -.047 L -.307 -.071 L -.261 -.095 L -.212 -.166 L -.213 0 L -.331 0 L -.189 -.047 L -.188 -.094 L -.284 -.142 L -.283 -.095 L -.449 -.023 L -.402 -.023 L -.07 -.047 L -.284 -.047 L -.26 .166 L -.112 .309 L -1.421 -1.012 L -1.188 -.842 L -.817 -.385 L -.62 -.084 L -.373 -.157 L -.509 -.5 L -.236 -.057 L -.338 .159 L -.329 -.042 L -.347 -.515 L -.795 -.674 L .595 -.188 L .519 -.001 L .445 -.073 L .1 -.519 L .359 -.476 L 485 97.85 l .526 -.03 L .516 -.131 L -.432 -.532 L -.654 -.273 L -.474 -.36 L .243 -.116 L .367 -.03 L .82 -.117 L .715 -.348 L 1.244 -.436 L -.196 -.375 L -.076 -.058 L -.799 .088 L -1.312 .175 L .012 -.126 L .021 -.112 L 0 -.224 L .09 -.514 L .224 -.089 L .357 -.022 L .38 -.134 L .223 -.179 L .022 -.179 L .269 0 L .736 -.045 L .805 .157 L .335 -.134 L 0 -.156 L .156 -.291 L .156 -.491 L -.066 -.067 L -.09 -.201 L -.045 -.179 L -.044 -.134 L -.179 -.067 L -.156 -.067 L .044 -.224 L .045 -.179 L .246 0 L .312 0 L .134 -.156 L -.29 -.044 L -.269 -.089 L -.223 -.246 L .312 -.044 L .357 -.201 L .156 -.067 L .201 -.089 L .045 -.224 L -.09 -.179 L -.111 -.089 L .022 -.179 L .089 -.111 L -.156 -.089 L -.201 .089 L -.134 .044 L -.269 0 L -.357 -.156 L -.111 -.224 L -.469 -.022 L -.291 -.089 L -.201 -.179 L -.357 .067 L -.268 -.112 L -.469 -.112 L -.425 -.067 L -.29 -.268 L -.224 .067 L -.045 .157 L -.29 .134 L -.224 -.112 L -.179 -.179 L -.402 -.044 L -.022 -.134 L -.201 -.179 L 0 -.134 L -.268 -.179 L -.111 -.156 L -.357 .067 L -.536 .134 L -.269 0 L -.312 .112 L -.425 .112 L -.179 -.156 L -.179 -.022 L -.201 .067 L -.469 -.291 L -.268 -.067 L -.47 .067 L -.268 .179 L -.291 -.29 L -.179 -.089 L -.089 -.224 L .089 -.179 L -.089 -.246 L -.224 -.268 L 0 -.357 L -.402 0 L 0 -.312 L -.38 -.022 L -.514 .067 L -.156 -.112 L -.647 0 L -.269 -.29 L -.111 -.357 L -.134 -.291 L .312 -.134 L .312 .022 L 0 -.268 L -.312 -.156 L -.246 -.156 L -.134 -.201 L -.246 -.335 L -.312 -.134 L -.201 -.268 L -.514 .134 L -.692 -.112 L -.67 .223 L -.536 .022 L -.536 -.246 L -.134 .268 L -.179 .291 L -.313 .156 L -.469 -.022 L -.357 -.089 L h 527.156 37.071 m -.59 -.14 L -.955 -.21 L -1.128 -.139 L -.739 .054 L -.959 .037 L -.732 .143 L -.411 -.105 L -1.025 -.476 L .737 -.303 L 1.21 -.429 L .654 -.09 L 1.549 -.002 L .135 -.357 L -.728 -.338 L .351 -.269 L .419 -.144 L .676 -.02 L .852 -.181 L -.25 -.161 L -.526 -.233 L 1.539 -.895 L .513 -.129 L .226 .073 L .892 .017 L .981 -.535 L .863 -.333 L 1.02 -.261 L .975 -.15 L 1.305 -.113 L 1.274 .053 L .738 -.15 L .786 -.615 L .273 .018 L .873 -.132 L 1.722 .276 L .471 -.038 L 1.93 -.321 L .958 -.039 L 2.184 -.247 L 1.864 -.116 L .771 -.564 L .376 -.152 L 2.511 -.137 L 1.965 -.079 L .471 .131 L .442 .225 L .154 .357 L -.812 .47 L -.541 .169 L -1.346 .319 L -2.609 .433 L -4.329 .49 L -2.187 .281 L -2.122 .299 L -1.842 .316 L -2.102 .242 L -.941 .203 L -.288 .274 L .644 .216 L -.422 .217 L -.943 .361 L -.527 .037 L -2.047 -.068 L -.432 .18 L -.119 .233 L .621 .249 L -.331 .233 L -1.206 .448 L -.402 -.142 L -.752 -.087 L -.592 .304 L .877 .283 L .052 .319 L -1.094 .657 L -.822 .284 L h 517.491 38.443 m 1.041 -.37 L .512 -.299 L .428 -.212 L 1.426 -.021 L 1.316 -.249 L .987 -.02 L 1.412 -.091 L .551 .069 L .988 .227 L -.063 .176 L -.463 .528 L -.302 .158 L -.697 .071 L -.443 .228 L -.233 .385 L .006 .818 L .445 1.039 L .957 .826 L .505 .308 L .775 .307 L 1.162 .392 L -.028 .282 L -2.62 -.089 L -.844 .053 L -.917 .326 L -.596 .086 L -.676 -.494 L -.382 -.034 L -1.091 .088 L -.673 -.102 L -.031 -.359 L 1.347 -.362 L .073 -.24 L -.102 -.017 L -.944 -.273 L -1.442 -.411 L -1.519 -.17 L -.33 .156 L -.624 .122 L -.681 -.033 L -.625 -.396 L -.114 -.415 L .229 -.312 L .39 -.209 L .344 -.036 L .318 .104 L .65 .016 L .518 -.192 L 1.121 -.768 L .243 -.35 L -.322 0 L -.981 -.243 L h .125 56.089 m 0 -.562 L 0 -.576 L 0 -.157 L 0 -1.292 L 51.28 V 0 -2.222 L 0 -2.12 L 2.917 .61 L 1.693 .598 L .933 .181 L 3.819 .99 L 1.059 .395 L .204 .149 L .074 .214 L .445 .429 L .406 .789 L -.209 .428 L 1.034 .8 L .982 .26 L -.02 -.18 L .297 -.148 L -.051 -.196 L -.638 -.392 L .016 -.542 L .077 -.296 L 1.026 -.183 L .984 .278 L .573 .098 L .767 .064 L 1.003 -.117 L .933 .13 L .93 .425 L .694 .359 L 1.676 .684 L .32 .081 L .584 .179 L .43 .211 L .09 .13 L -.343 .033 L -1.026 -.096 L -.364 .034 L -.808 .798 L -1.539 -.468 L .138 .178 L .438 .227 L .465 .324 L -1.177 -.111 L -1.008 .05 L -1.202 -.387 L -.708 -.096 L .135 .129 L .289 .259 L .084 0 L .561 .259 L .205 .307 L .131 .453 L -.056 .339 L -.814 .05 L -.805 .065 L -.189 .161 L .5 .865 L -.115 .272 L -1.04 -.078 L -.397 .081 L -1.193 -.174 L -.264 -.352 L -1.795 -.51 L -.253 .273 L 9.85 55.79 l -.276 -.161 L -.265 -.403 L .174 -.178 L -.321 -.42 L -.87 -.339 L -.565 -.063 L -.762 .034 L -.858 .229 L -1.343 .084 L 3.57 54.443 l .059 -.325 L -.155 -.325 L -.618 -.487 L 1.958 53.43 l -.45 .409 L -.655 1.228 L -.166 .715 L -.562 .307 L +449.401 22.792 N -1.596 -.014 L -2.019 -.016 L -1.739 .063 L -.764 .061 L -1.972 -.316 L .812 -.456 L .826 -.172 L .735 -.453 L 1.148 -.588 L 1.354 .691 L .998 .105 L 1.116 -.088 L .9 .084 L .704 .341 L .865 -.323 L .53 -.454 L .868 -.306 L -.311 .823 L .086 .32 L .851 -.001 L .991 -.495 L 1.061 -.261 L .803 .128 L .559 .472 L .705 .041 L 2.007 -.111 L 1.543 .189 L .551 .376 L -.507 .201 L -2.004 .622 L -1.623 .38 L -1.069 .062 L -.976 .14 L -1.324 .366 L -6.271 -.097 L -.033 -.377 L 1.492 -.26 L .702 -.677 L h 430.027 22.752 m .068 .697 L .252 .119 L 1.694 .155 L .221 -.377 L .13 -.418 L .573 -.141 L .523 -.041 L .949 .477 L 1.192 .771 L .798 .235 L .568 -.218 L -.222 -.296 L -.46 -.356 L -.327 -.477 L -.04 -.22 L .91 -.407 L 1.001 .103 L .485 .18 L 1.278 .018 L .586 .179 L -.08 .419 L -.169 .298 L .104 .159 L .549 .118 L .743 -.338 L .44 -.1 L .662 .396 L .678 .335 L .785 .156 L .948 .117 L 1.672 .429 L .498 .234 L -1.305 .277 L -1.981 .218 L -.696 .293 L -.731 1.144 L -.885 .885 L -1.243 .117 L -.766 .535 L -.455 .589 L -.029 .378 L -.786 .209 L -.556 -.018 L -1.593 -.355 L -1.883 -.507 L -1.365 -.568 L .651 -.364 L 1.565 -.041 L 1.788 -.137 L .944 -.386 L -.652 -.249 L -1.822 .139 L -1.566 .118 L -1.694 .042 L -.502 -.519 L .959 -.06 L 1.371 -.215 L 2.149 -.314 L 1.547 -.45 L -2.525 -.405 L -.881 -.292 L -.589 .138 L -1.036 .646 L -1.069 .293 L -.562 .059 L -1.236 -.172 L -.338 -.174 L -1.05 -.368 L -.807 -.233 L -.698 -.41 L 1.698 -.396 L -.817 -.571 L -1.359 .319 L -.467 -.078 L -.924 -.751 L .812 -.36 L .516 -.021 L 1.075 -.122 L 1.017 .038 L .577 -.061 L 1.188 -.042 L h 425.42 68.82 m -.148 -.21 L -.629 .132 L -.134 -.026 L -.249 -.237 L -.239 -.343 L .188 -.158 L -.143 -.291 L -.361 .185 L -.062 .29 L .113 .237 L -.147 .105 L -.339 .316 L -.086 .185 L -.521 .105 L -.533 -.131 L -.781 .342 L .057 .131 L -.502 .289 L -.498 .263 L -1.658 .813 L 418.697 71 l -.274 .052 L -.271 0 L -2.111 .209 L -.188 -.236 L -.33 -.131 L -.183 .209 L 414.976 71 l .384 -.184 L -.935 -.236 L -.794 -.341 L -.574 -.052 L -.479 -.578 L .292 -.368 L -.126 -.21 L .34 .026 L .085 .316 L .284 -.21 L .667 .263 L -.244 -.197 L .127 -.145 L .5 -.092 L -.479 .026 L -.245 .105 L -.263 -.184 L -.111 -.132 L .579 -.276 L .455 -.185 L -.482 .066 L -.317 -.132 L .441 -.237 L .083 -.237 L -.661 .475 L -.036 -.264 L -.265 -.171 L .005 .211 L .076 .171 L -.419 .158 L -.41 0 L .014 -.277 L -.15 .264 L -.235 -.079 L -.2 -.448 L .658 -.449 L .08 .436 L .068 -.317 L .438 .158 L .211 -.092 L -.166 -.106 L .674 -.079 L .479 -.251 L -.611 .159 L -.48 0 L -.335 -.159 L .196 -.132 L .387 -.146 L .196 -.471 L -.821 -.014 L -.546 .094 L -.406 -.309 L .368 -.14 L .643 -.404 L -.212 -.186 L -.445 .063 L -.399 -.062 L -.211 -.217 L .284 -.482 L .619 -.265 L -.595 -.248 L -.225 -.374 L .272 -.188 L -.089 -.687 L .106 -.094 L .594 -.063 L .392 -.045 L .455 .044 L .082 -.11 L -.255 -.134 L -.425 -.118 L -.228 -.17 L .098 -.188 L .211 -.125 L .575 -.064 L .511 -.346 L .567 .109 L .498 -.111 L .179 -.55 L .835 .093 L .668 .125 L .571 -.252 L -.989 -.234 L -.266 -.314 L .236 -.143 L 1.151 .014 L .851 -.08 L .538 .219 L .06 -.473 L .477 -.27 L .297 -.333 L .78 -.175 L .438 .189 L .138 .079 L .5 -.476 L .869 -.413 L .084 -.429 L .437 -.398 L 1.497 -.735 L .335 -.192 L .235 -.048 L .481 .175 L .335 -.001 L .319 -.224 L -.225 -.223 L .141 -.128 L .488 -.224 L .457 -.305 L .481 -.483 L .245 .064 L .676 -.017 L -.067 -.612 L -.471 -.112 L .434 -.405 L .511 -.648 L .841 .063 L .047 -.341 L .096 -.228 L .954 -.116 L -.396 -.357 L -.327 -.097 L -.193 -.146 L .164 -.245 L .313 -.246 L .464 .048 L .888 -.067 L -.543 -.522 L .249 -.082 L .435 -.034 L .707 -.263 L .592 -.067 L .308 -.208 L -.358 -.064 L -.105 -.187 L .289 -.1 L .616 -.33 L .557 .032 L .351 .098 L .434 -.264 L .369 -.031 L .035 -.176 L -.421 -.321 L .627 -.232 L .146 -.275 L .336 .01 L .359 .297 L .397 .082 L .526 -.381 L -.281 -.656 L .438 .065 L .698 -.058 L .207 -.174 L -.604 -.315 L .411 -.224 L .816 -.251 L .093 -.257 L .261 -.194 L .73 -.135 L .074 .067 L .274 -.051 L .102 -.067 L .492 -.67 L .521 .25 L .96 -.153 L .411 .133 L .265 .1 L .646 .065 L .536 -.419 L .747 -.84 L .286 -.085 L .16 .168 L -.178 .286 L -.182 .587 L .791 -.454 L .403 -.572 L .819 -.085 L .688 -.439 L .437 .117 L .665 .353 L .567 -.643 L .318 -.272 L .976 .1 L 1.019 .506 L .197 -.152 L .479 -.595 L .709 -.444 L .283 -.052 L .562 .067 L .338 -.308 L .469 -.291 L .619 -.189 L 1.2 -.173 L .984 .015 L -1.337 .755 L -.24 .273 L -.107 .646 L .42 .084 L .691 -.579 L 1.53 -.941 L .764 -.275 L .028 .257 L -.004 .905 L .704 -.172 L .438 -.239 L .855 -.874 L .959 -.104 L .586 -.001 L .216 .154 L -.383 .257 L -.335 .257 L .074 .239 L -.319 .41 L .921 .118 L .221 -.443 L .902 -.651 L .421 .017 L 1.682 .561 L .667 .135 L .935 .015 L .649 .237 L .1 .272 L -1.216 .393 L -1.148 .036 L -2.233 -.047 L .193 .084 L .585 .304 L 1.058 .284 L .383 .302 L .728 -.052 L .679 -.102 L .831 .032 L .708 .25 L -.404 .288 L -.514 .204 L -.824 .021 L -.77 .121 L -1.023 .49 L -1.013 .672 L -.689 .303 L -.001 -.2 L .096 -.367 L .874 -.923 L -.044 -.268 L -.88 -.348 L -.672 -.114 L -1.125 -.431 L -.556 .003 L -.555 .07 L -2.004 .095 L -.865 .374 L -.567 .422 L -.26 .437 L -.079 .501 L -.188 .5 L -1.25 .472 L -.582 .368 L -.31 -.148 L -1.288 -.492 L -1.657 .225 L -1.411 -.042 L -.536 -.13 L -.861 -.595 L -.994 -.612 L -.486 -.082 L -.355 .103 L -1.012 .656 L -.114 -.063 L -.41 -.031 L -.865 .038 L -.281 1.066 L -.164 .449 L -.271 .25 L -.323 -.015 L -.67 -.129 L -.972 -.144 L -1.731 -.389 L -.168 .183 L -.021 .663 L -.083 .199 L -.318 .299 L -.695 .004 L -.871 -.095 L -.279 -.015 L -.465 .167 L -1.484 1.176 L .05 .213 L .171 .507 L -.188 .345 L -.615 .346 L -1.325 .919 L -.687 .442 L -.981 .021 L -.121 .244 L -.06 .971 L -.32 .598 L -.383 .469 L -.574 .499 L -.495 .545 L .339 .125 L .381 .269 L .252 .587 L -.17 .176 L -.44 .177 L -.733 .036 L -.932 -.027 L -.618 .114 L -.613 .257 L -.617 .479 L -.389 .492 L -.077 .664 L -.349 1.093 L .65 .729 L -.335 1.171 L .582 .39 L .715 .186 L .297 .243 L -.432 .67 L -.941 .16 L .571 .735 L .26 .427 L -.249 .346 L -.029 .532 L -.769 .384 L -.414 .013 L -.117 .423 L -.506 .224 L .22 .831 L -.324 .737 L -.41 .013 L -.15 -.342 L -.293 -.132 L +464.349 47.431 N -.024 .283 L -.258 .465 L .116 .529 L .563 .212 L .872 .194 L .964 .506 L .543 .392 L -.421 .364 L -1.303 .777 L -.328 .296 L 1.402 1.394 L .772 1.195 L -.196 .356 L -.44 .535 L -.187 .403 L -.029 .37 L .37 .509 L 1.286 1.395 L .151 .253 L -.057 .254 L -.542 .415 L -.327 .191 L .439 .33 L 1.357 .499 L .703 .265 L .436 .392 L .161 .346 L -.105 .409 L -.43 .536 L -.591 .536 L -1.385 .758 L -1.983 1.195 L -1.946 1.145 L -.174 .285 L -.935 .206 L -1.195 .188 L -.149 .181 L -.506 -.217 L -.518 .146 L -.052 .134 L -.688 -.07 L -.193 -.108 L .057 -.387 L -.241 .527 L -.268 .14 L -.633 .047 L -.328 .03 L -.1 .267 L -.589 -.326 L -.29 .275 L -.676 .064 L -.34 .178 L -.052 -.127 L -.504 .108 L -.504 .108 L -.211 .266 L -.311 -.152 L -.672 .126 L -.04 -.114 L -.658 .215 L -.547 .013 L -.482 .025 L -.487 -.253 L -.223 -.274 L .273 -.34 L -.846 .017 L -.517 .177 L .065 -.382 L -.446 .076 L -.644 -.271 L -.409 -.061 L -.415 -.231 L -.26 -.403 L -.036 -.714 L .158 -.374 L .05 -.436 L .09 -.234 L -.347 -.483 L -.431 -.375 L .3 -.658 L -.02 -.392 L -.305 -.204 L -.37 -.093 L .062 -.299 L .295 -.331 L .637 -.285 L .144 -.189 L -.113 -.331 L .382 -.143 L .633 .125 L .274 .063 L .483 -.222 L .303 -.427 L .104 -.459 L .207 -.27 L .301 .316 L .27 0 L 1.678 -1.114 L 1.142 -.654 L .835 -.576 L 1.026 -.401 L .874 .03 L .06 -.304 L -.13 -.144 L -.357 -.16 L .119 -.371 L .146 -.387 L -.329 -.274 L -1.139 -.095 L -.836 -.451 L -.594 -.024 L -.113 -.234 L -.327 -.307 L -.208 -.535 L .5 -.8 L -.028 -.392 L -.405 -.685 L -.507 -.637 L .004 -.526 L .062 -.413 L -.77 -.558 L -.508 -.229 L -1.583 -.207 L -1.085 -.292 L -1.286 -.658 L -.616 -.463 L -.146 -.033 L 1.012 -.656 L .355 -.103 L .486 .082 L .994 .612 L .861 .595 L .536 .13 L 1.411 .042 L 1.657 -.225 L 1.288 .492 L .31 .148 L .582 -.368 L 1.25 -.472 L .188 -.5 L .079 -.501 L .26 -.437 L .567 -.422 L .865 -.374 L 2.004 -.095 L .555 -.07 L .556 -.003 L 1.125 .431 L .672 .114 L .88 .348 L .044 .268 L -.874 .923 L -.096 .367 L .001 .2 L +453.795 53.873 N -.23 -.004 L -.975 .164 L -.447 .098 L -.902 -.387 L -.339 -.178 L -.347 .114 L -.641 .374 L -.542 .599 L -.309 .146 L -.658 .018 L -.545 .355 L .325 .241 L .146 .192 L -.355 .273 L -.907 .401 L .317 .271 L .385 .159 L .33 .302 L -.749 .367 L -.405 .43 L -.368 .461 L -1.591 .669 L -.699 .286 L -.456 -.205 L -.326 .08 L -.538 .539 L -.646 .144 L -.663 .348 L -.217 .284 L -.191 .142 L -.746 .033 L -.221 -.031 L .151 .535 L -.484 .425 L 439 61.33 l .216 .533 L .243 .25 L -.244 .955 L -.498 .063 L -.217 .204 L .189 .757 L -.009 .544 L .381 .444 L -.287 .175 L .926 .082 L .225 .187 L .499 -.082 L .652 .594 L .428 .314 L .86 .163 L .198 .406 L .32 .139 L .014 .335 L -.391 0 L -.508 .323 L -.861 .3 L -.492 .162 L -.521 -.012 L -.146 -.115 L -.805 -.115 L -.66 -.173 L -.634 -.069 L -.137 .104 L -.446 -.115 L -.257 .3 L .819 -.069 L .497 .265 L .591 .046 L .205 .208 L .481 .069 L .021 -.127 L .616 .069 L .258 -.196 L .297 .011 L .481 -.104 L .226 .081 L .026 -.15 L .164 0 L .214 .15 L -.029 .081 L -.722 .023 L .219 .288 L -.792 .265 L -.168 .288 L -.386 .08 L -.089 -.092 L .042 -.161 L -.014 -.276 L -.258 .023 L -.091 .46 L -.501 .333 L -.248 .058 L -.36 -.069 L -.005 .218 L -1.418 .035 L .156 .458 L .513 .258 L .066 .609 L -.109 .33 L -.281 .051 L -.308 -.064 L .038 .429 L .29 .081 L -.126 .268 L .24 .228 L -.365 .364 L -.222 .455 L -.041 .56 L -.766 1.043 L -.58 .71 L -.165 -.062 L -.442 -.236 L -.614 .193 L -1.262 -.089 L -.106 .311 L -.252 -.083 L -.518 .264 L -.295 .517 L .356 .336 L -.376 .374 L -.48 -.129 L -.173 -.037 L -1.158 .269 L -1.11 -.116 L -.001 -.142 L .19 -.078 L -.062 -.181 L .281 -.297 L -.638 -.53 L -.413 -.479 L -.22 -.272 L .529 -.116 L -.082 -.312 L .421 .077 L .147 -.245 L -.19 -.234 L -.285 .013 L -.292 -.377 L -.527 -.221 L -.63 -.99 L -.286 0 L .011 -.408 L -.256 -.364 L -.348 -.298 L .221 -.484 L .206 -.341 L -.418 -.154 L -.405 .102 L -.055 -.288 L -.412 .051 L -.18 -1.207 L -.225 -.131 L .311 -.355 L .293 .132 L .15 .342 L .41 -.013 L .324 -.737 L -.22 -.831 L .506 -.224 L .117 -.423 L .414 -.013 L .769 -.384 L .029 -.532 L .249 -.346 L -.26 -.427 L -.571 -.735 L .941 -.16 L .432 -.67 L -.297 -.243 L -.715 -.186 L -.582 -.39 L .335 -1.171 L -.65 -.729 L .349 -1.093 L .077 -.664 L .389 -.492 L .617 -.479 L .613 -.257 L .618 -.114 L .932 .027 L .733 -.036 L .44 -.177 L .17 -.176 L -.252 -.587 L -.381 -.269 L -.339 -.125 L .495 -.545 L .574 -.499 L .383 -.469 L .32 -.598 L .06 -.971 L .121 -.244 L .981 -.021 L .687 -.442 L 1.325 -.919 L .615 -.346 L .188 -.345 L -.171 -.507 L -.05 -.213 L 1.484 -1.176 L .465 -.167 L .279 .015 L .871 .095 L .695 -.004 L .318 -.299 L .083 -.199 L .021 -.663 L .168 -.183 L 1.731 .389 L .972 .144 L .67 .129 L .323 .015 L .271 -.25 L .164 -.449 L .281 -1.066 L .865 -.038 L .41 .031 L .114 .063 L .146 .033 L .616 .463 L 1.286 .658 L 1.085 .292 L 1.583 .207 L .508 .229 L .77 .558 L -.062 .413 L -.004 .526 L .507 .637 L .405 .685 L .028 .392 L -.5 .8 L .208 .535 L .327 .307 L .113 .234 L +238.107 361.753 N .515 -.688 L .859 0 L 1.202 -.515 L -.171 -.858 L -3.091 .344 L -2.061 .515 L -1.545 -.344 L -.515 -.858 L 1.374 -.515 L 1.202 -.172 L 3.091 -.172 L 1.374 -.515 L -.172 -1.03 L .859 -.516 L 0 -1.374 L -1.326 -1.054 L .982 -.491 L 1.202 -.344 L 1.545 -.172 L .858 .344 L .858 .858 L 1.03 1.374 L 1.374 1.202 L 1.03 1.373 L -.515 2.061 L -1.545 .516 L -1.545 .858 L -3.434 .172 L -3.435 0 L h 172.686 360.379 m 3.091 -.687 L 3.262 0 L 5.495 0 L 2.919 1.202 L -2.748 .687 L -3.759 -.337 L -5.169 -.35 L -3.091 -.516 L h 65.13 371.085 m 1.194 -.265 L 1.393 .133 L .796 .464 L -1.99 0 L -1.393 -.332 L h 277.944 379.954 m .515 -1.202 L 2.404 -1.03 L 2.748 -.172 L 2.061 -.171 L 1.545 -.859 L .343 -1.545 L 1.374 -.687 L 3.091 -.688 L 4.464 0 L 2.404 0 L 3.434 .688 L .687 1.889 L 0 1.202 L -2.061 1.201 L -11.848 1.03 L -11.161 .344 L h 36.004 376.434 m 1.202 -.858 L 2.061 -.343 L 4.121 .515 L 4.293 1.374 L -.887 .482 L -2.719 .204 L -4.293 -.515 L -3.777 -.859 L h 777.843 385.46 m 3.823 .391 L .899 .029 L .322 .234 L 1.202 .294 L 2.329 .088 L 2.126 -.003 L 5.218 .329 L 3.046 .348 L 1.144 -.059 L .762 .029 L 1.411 .37 L 0 2.175 L 0 2.223 L 0 2.222 L 0 2.223 L 0 2.222 L 0 1.551 L -.041 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.182 0 L -.041 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.223 0 L -2.182 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.223 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L -2.222 0 L 9.014 H 6.792 H 4.569 H 2.347 H .125 H 0 -1.544 L 0 -2.222 L 0 -2.223 L 0 -2.222 L 0 -2.223 L 0 -2.223 L 3.941 .297 L 10.131 0 L 7.898 .516 L 6.868 .172 L 8.586 .858 L 6.353 .515 L 8.757 .172 L 4.808 -.172 L 6.525 -.172 L 2.404 .344 L 3.606 -.858 L 16.312 .344 L 4.638 -.013 L 1.143 -.467 L -14.366 -.551 L -9.616 -.688 L -2.232 0 L -3.091 -.172 L -.858 -.171 L -1.545 -.344 L -.498 -.455 L .155 -1.434 L .687 -.858 L 1.889 -.688 L -3.263 -.687 L -2.232 -.344 L -.953 -.503 L 1.589 -.521 L -2.891 -.6 L -3.074 -.208 L -.104 -.261 L 2.857 -.312 L 2.748 0 L 6.525 .343 L 3.434 0 L 2.576 .344 L 4.636 -1.202 L 2.404 -.687 L -2.748 -1.03 L -3.778 -.858 L -4.391 -.405 L -2.649 -.625 L -3.262 -.172 L -2.919 0 L -2.919 -.858 L 2.576 -.516 L 1.28 -.342 L -1.28 -.517 L -2.919 .516 L 52.66 H -1.717 -.344 L 49.054 373 l .343 -1.202 L 1.956 -.07 L 1.65 -.273 L 4.98 0 L 4.626 .493 L 3.272 .709 L 1.374 .172 L 4.465 -.858 L 4.089 .243 L 0 -.729 L .066 -.597 L -2.255 -.73 L -2.93 -.075 L -2.576 -.344 L 2.404 -.687 L 4.121 .171 L 1.717 -.343 L 3.091 -.516 L 3.09 -.343 L 5.667 -.688 L 4.465 -.343 L 3.949 -.516 L 4.464 -.515 L 2.748 .343 L 5.667 0 L 4.464 .258 L 4.121 -.515 L 7.898 .343 L 7.555 -.687 L 3.091 .172 L 1.545 -.688 L 1.545 .516 L 5.323 -.172 L .121 -.87 L 1.758 -.293 L 1.433 .325 L .586 .554 L -.423 .813 L 2.364 .329 L 1.38 -.264 L -.006 -.938 L 1.438 -.267 L 1.48 .267 L .212 1.036 L -1.009 .423 L .521 .781 L 3.024 -.351 L 1.889 .343 L 3.434 .172 L 2.576 -.687 L 3.778 .086 L 4.868 .33 L 2.344 .013 L 1.449 .109 L .693 -.53 L -.611 -.285 L -2.202 -.122 L 1.305 -.285 L .041 -.408 L -.367 -.245 L -1.386 .123 L -.693 .04 L -.856 -.979 L -2.178 -.337 L -.676 -.193 L -.182 -.665 L 4.056 .462 L 3.874 -.245 L -1.224 -.489 L -6.035 -.163 L -.774 -.082 L -.653 -.489 L 0 -.815 L 2.301 .105 L .839 .67 L 5.301 -.204 L 7.253 .736 L 2.404 -.172 L 3.262 -.172 L 4.464 .172 L 3.263 .172 L 2.061 -.516 L .687 -.687 L 1.202 0 L .344 1.03 L 2.576 .343 L 2.404 -.343 L .858 .515 L 3.435 .688 L 3.777 .343 L 2.061 .172 L 1.03 -.515 L .687 -1.202 L 2.747 -.172 L 1.03 .515 L 1.717 .688 L 3.091 -.172 L 3.434 .258 L 4.121 -.344 L 4.979 -.516 L 5.495 -.858 L 3.091 -.515 L 1.202 -.688 L 0 -1.373 L -1.374 -1.202 L -.859 -1.545 L -1.202 -.688 L -.344 -1.03 L 1.202 -1.03 L 1.717 -.343 L .858 -1.202 L -.343 -.858 L -.172 -1.03 L -1.202 -.516 L .344 -1.545 L 1.889 -.172 L 2.404 -1.374 L 1.545 -.515 L .859 -.859 L 1.03 -.687 L 2.919 -1.202 L 3.606 -.515 L 2.404 -1.202 L 2.404 -.172 L 2.232 -1.03 L 1.545 -.343 L .343 1.03 L -1.374 .515 L -1.03 .344 L -1.202 .515 L -.858 0 L -1.202 0 L -2.919 1.202 L -1.03 .687 L -1.717 1.374 L -.172 1.202 L -.687 .687 L -1.374 -.344 L -1.03 0 L -1.202 .516 L -1.202 .687 L -1.03 .688 L -.687 1.201 L .515 .688 L .687 .687 L 1.374 .344 L 1.545 0 L .858 .515 L .687 1.202 L 1.545 1.546 L .687 .858 L 1.03 .687 L .687 1.374 L .858 1.373 L .344 1.546 L -.344 .858 L -.858 1.717 L -2.919 1.889 L -1.202 .172 L -1.03 .858 L -1.717 1.03 L -3.263 .344 L -4.979 .858 L -2.404 .344 L -2.919 .687 L -7.377 -.141 L -4.556 -.316 L -.773 -.401 L -1.717 -.344 L -1.717 -.343 L -1.374 0 L -.859 .515 L .515 .858 L 2.061 .688 L 4.121 1.202 L 4.995 .04 L 1.202 .759 L -3.278 .574 L -5.667 -.343 L -4.979 -.516 L -3.097 -.285 L -2.151 .253 L .823 .696 L 1.164 .538 L 3.262 .172 L 2.232 0 L 1.374 .343 L -.249 .402 L -.782 .113 L -2.232 .515 L -5.151 -.171 L -1.374 -.172 L -2.232 -1.202 L -2.404 0 L .128 .917 L 2.62 1.144 L 1.03 .172 L 1.202 -.172 L 1.374 .344 L 2.404 0 L 4.98 -.516 L 3.09 .687 L .385 .431 L -.041 .6 L -2.061 .172 L -3.263 .172 L -2.608 -.185 L 3.811 .871 L 3.656 -.238 L 1.324 .41 L 2.576 .687 L 6.869 .859 L 8.585 .858 L 10.646 1.373 L 6.525 .516 L 2.061 .858 L .687 1.03 L 3.091 -.344 L 5.323 -1.545 L 6.525 -.687 L 2.455 -.066 L 6.474 -.105 L 9.788 -.344 L 1.889 .344 L 2.576 -1.202 L 8.414 -1.03 L 11.333 -.172 L 8.929 -.858 L 1.202 -.858 L -1.202 -.516 L -.271 -1.07 L -1.184 -.338 L -5.071 .035 L -2.232 .172 L -4.808 -.344 L -3.091 0 L 0 -1.202 L 3.263 -1.545 L 3.949 -1.202 L 2.404 -.172 L 4.121 -1.03 L 9.444 -1.202 L 5.323 -.858 L 6.525 0 L 4.979 -.516 L 2.747 -2.061 L 6.039 -1.541 L -1.23 -.52 L -2.576 .516 L -2.061 -.344 L 1.545 -1.03 L 1.545 -.343 L 2.48 -.249 L .696 -.742 L 3.85 -.742 L 1.577 -.418 L .603 -.557 L -1.716 -.881 L -.093 -.604 L 1.252 -.231 L .464 .742 L 1.017 -.097 L 2.061 -.858 L 1.03 -.343 L .858 .171 L 1.203 1.544 L 2.403 -.342 L .242 -.91 L .96 -.807 L 1.889 -.516 L 1.374 .516 L -1.162 .574 L -.139 .604 L 3.189 -.319 L 4.808 .258 L 3.263 -.172 L 1.03 .858 L 1.545 -.344 L 1.717 -.515 L 5.839 -.858 L 7.212 -1.03 L 4.292 -.858 L 2.061 0 L 2.061 1.373 L 1.718 .344 L 1.889 -.344 L 1.545 -.858 L 7.556 -.344 L 3.434 -.171 L 4.293 .171 L 6.697 .945 L 2.575 0 L 4.293 -.516 L 6.01 -.687 L 5.151 -.688 L 2.404 -.515 L 2.231 -.344 L .615 -.959 L 1.148 -.835 L 1.671 -.095 L .938 .965 L 1.294 .409 L 1.732 1.052 L 1.009 .139 L 1.009 -.661 L 1.322 -.174 L .209 .522 L -.835 .312 L .661 .244 L .8 .278 L .383 -.383 L .313 -.383 L .312 .209 L -.174 .348 L 0 .521 L .592 -.174 L 1.913 -.557 L .418 -1.704 L 5.102 -1.137 L 1.374 -.687 L 3.605 -.172 L 1.363 -.646 L 2.758 -.126 L .21 -.27 L -.165 -.297 L .692 -.23 L 1.221 .165 L .197 .593 L .66 .231 L 2.165 -.536 L 1.265 -.223 L -.726 -.297 L -.561 -.264 L .099 -.362 L 1.451 -.1 L 1.562 .215 L .647 .28 L .692 -.132 L -.066 -.33 L -.527 -.33 L 0 -.561 L .297 -.23 L .846 -.242 L 4.292 -.858 L 2.92 -.172 L 3.058 .115 L 2.296 1.076 L 1.316 .023 L .741 .144 L .023 .383 L -.908 .096 L -.168 .454 L 1.723 .216 L 4.892 .646 L 5.571 .453 L 1.546 .172 L 1.717 -.172 L 7.556 .688 L 5.323 0 L .687 .687 L .2 1.075 L -.73 1.232 L -.672 .439 L -.425 1.113 L -.73 .319 L -.905 -.402 L -.83 .402 L -.73 .959 L 1.507 .457 L .594 .045 L .959 -.593 L .411 .365 L -.867 1.05 L -1.215 .062 L -1.717 1.374 L 0 .858 L 1.889 .688 L 2.919 0 L 1.718 -.859 L 1.889 -1.545 L 1.717 -1.717 L 1.374 -.688 L 4.121 -1.03 L 2.231 -.687 L 3.263 -.344 L 2.061 -1.03 L 1.03 -1.03 L 3.435 -1.03 L 2.403 -.687 L 2.061 -.687 L 2.061 -.172 L 6.182 -.687 L 3.778 .171 L 1.204 -.542 L .169 -.659 L .54 -.759 L .49 -.101 L .471 .776 L .305 .775 L 4.892 -.35 L 5.838 0 L 4.979 -.172 L 3.091 .344 L 2.112 -.214 L 1.328 .085 L 1.018 .594 L 1.188 -.764 L 2.714 -1.046 L 1.866 -.226 L .664 -.028 L .594 -.028 L .777 -.057 L 1.512 .311 L 1.166 -.172 L 3.606 .687 L 3.777 .344 L 1.03 0 L 1.064 .573 L .745 .088 L 2.149 -.088 L 1.271 -.263 L 1.315 -.438 L -.192 -.216 L .28 -.53 L 1.447 -.131 L .921 -.088 L .786 .062 L 2.195 -.501 L 2.097 .501 L .688 .687 L .373 .435 L 1.842 -.131 L .921 -.044 L .985 .255 L 1.889 .688 L 2.919 .515 L 2.919 -.343 L 4.121 -.258 L 2.232 -.344 L 2.404 0 L 3.521 .315 L .702 -.755 L 2.158 -.162 L .863 1.133 L 4.909 .323 L .917 -1.133 L 1.889 -.593 L 5.988 .013 L .756 -.283 L 1.996 .108 L -.432 -1.403 L .054 -.809 L 1.232 -.36 L .872 1.277 L -.647 1.079 L .805 .219 L 2.81 .482 L 5.262 .376 L 5.494 .344 L 2.278 .583 L 1.283 .14 L 1.396 -.167 L 2.204 .446 L 1.961 -.167 L .719 .278 L -.435 .431 L -.151 .351 L .293 .123 L 2.081 .331 L 1.078 .484 L 2.706 -.134 L .377 .595 L 1.038 .227 L 4.808 .515 L -.123 .536 L .567 .236 L 2.695 -.095 L 3.214 .181 L -.329 -.984 L .71 -.095 L .804 .426 L .331 .709 L 1.135 .284 L 2.672 .519 L 2.576 -.343 L 4.017 .999 L 1.626 .495 L 1.672 .871 L 1.626 .023 L .504 .187 L .532 -.021 L .754 -.047 L .777 .047 L .896 .589 L .541 .118 L .542 .07 L .142 -.259 L .471 0 L 1.484 -.048 L 1.416 .237 L 5.951 .535 L .729 .516 L 1.733 .323 L 2.979 .944 L .43 -.335 L .551 .191 L .454 .67 L -.741 .215 L -1.124 .167 L -.216 .359 L .168 .263 L .55 -.048 L -.024 .67 L -.43 -.048 L -.096 .287 L -.312 .071 L -.598 .622 L -.526 .12 L -.55 .287 L -.168 .669 L -1.603 .096 L -1.339 -.239 L -1.794 .359 L -2.153 .425 L -2.629 .764 L 1.271 1.103 L -1.907 .212 L -1.23 -.255 L -.763 .212 L -.043 .637 L -2.374 .169 L .136 .514 L .924 .632 L -.127 .763 L -.382 .085 L -.466 .467 L .551 .466 L .085 .764 L -.764 .424 L .637 .254 L .763 0 L .764 .255 L .339 .509 L .17 .721 L 1.284 -.187 L .836 .907 L 2.035 .297 L .339 .339 L 2.672 .552 L -4.113 0 L -2.799 .138 L -2.332 .541 L -1.823 -.085 L -.806 .212 L -1.611 .339 L -1.326 -.32 L -.546 .426 L 1.116 .529 L -.503 .447 L -.669 .195 L -1.117 .753 L -2.623 .642 L .475 .391 L 2.205 -.111 L .53 0 L .809 .307 L .168 .363 L .499 .18 L .422 .183 L .111 .894 L .209 .502 L 3.195 .279 L 2.874 .948 L 3.662 .801 L 5.151 1.202 L 1.456 .062 L 1.015 .17 L -.146 .234 L -1.67 .264 L -.47 .264 L 1.173 .088 L 2.198 -.293 L 1.988 .166 L + +/target get (out.png) write-to-png pop +pop diff --git a/libs/cairo-1.16.0/util/cairo-script/examples/zrusin.cs b/libs/cairo-1.16.0/util/cairo-script/examples/zrusin.cs new file mode 100644 index 0000000..8efc24b --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-script/examples/zrusin.cs @@ -0,0 +1,1333 @@ +% The data in this file was created by Zack Rusin and downloaded from: +% +% http://ktown.kde.org/~zrusin/examples/cairorender.tar.bz2 +% +% It is included in the cairo performance test suite by his +% permission, (given in email to Carl Worth on 2006-10-23) + +dict + /width 415 set + /height 116 set + surface context + +107.893088734820 103.841923410053 l +106.908713734820 104.920048410053 l +106.605078419636 105.201721390261 l +102.286079757931 107.612435141518 l +95.848592904540 109.855345077872 l +95.820873452616 109.863161445001 l +90.517184462013 111.170008329713 l +87.125000000000 111.625000000000 l +82.393245921775 111.316572641568 l +77.855183975790 110.402282596173 l +73.577390672683 108.898617908665 l +69.626442523093 106.822066623894 l +69.373711344187 106.641023992165 l +57.717461344187 97.141023992165 l +60.861283165549 97.153157587308 l +52.861026127481 102.679312400770 l +43.297199733607 107.707604120505 l +38.061787185467 109.824994465236 l +32.824736230810 111.354170438973 l +27.636335844151 112.281599723349 l +22.546875000000 112.593750000000 l +19.478437557032 111.949288129016 l +16.158848619890 110.212087077375 l +13.224557514711 107.109984243309 l +12.401022392395 105.215121771751 l +12.109375000000 103.234375000000 l +12.857968117079 98.340329228563 l +15.050447208669 93.495802782054 l +18.606861885297 88.792446786896 l +23.447261757492 84.321912369510 l +23.462751811761 84.309735859104 l +29.835792474114 80.170241641945 l +36.826339837257 77.183700966953 l +44.355342734713 75.374150023260 l +52.343750000000 74.765625000000 l +54.172214431835 74.493658379815 l +55.005326273741 73.240819884599 l +54.891695624471 73.637732784350 l +55.835419478567 69.288398667240 l +56.941029555972 65.553969608663 l +57.993585771605 68.524034756036 l +53.681468264740 66.410473849442 l +48.062136369578 64.586219029579 l +42.258612309644 63.317877950046 l +37.437500000000 62.906250000000 l +32.573685233275 63.044800246717 l +26.989159126193 63.632907811096 l +20.752015377001 64.279295952574 l +16.562500000000 64.484375000000 l +16.408072340842 64.479600861137 l +11.611197340842 64.182725861137 l +11.453516511116 64.167941148499 l +6.725716011250 62.845442977500 l +4.607850691978 60.769517471259 l +3.781250000000 57.859375000000 l +4.373461857036 55.042556375256 l +5.951936001924 52.702230099626 l +6.143541831166 52.540844514692 l +9.884650718045 51.301737345381 l +10.233131146503 51.254965794601 l +14.936256146503 50.958090794601 l +15.093750000000 50.953125000000 l +19.896489079886 51.056672881330 l +25.533897731570 51.448761318515 l +25.296875000000 51.437500000000 l +30.909892241200 52.067729129895 l +30.484375000000 52.031250000000 l +39.960841830525 52.410121686268 l +48.752300459876 53.538988916016 l +48.757228534847 53.539874692156 l +54.123571896675 54.731960341587 l +58.970980406852 56.270657465230 l +63.248918806945 58.141504425356 l +66.906851838519 60.330039584234 l +66.896289983187 60.322652661852 l +70.654761046586 63.581911162241 l +73.423041490057 67.400928399521 l +75.133561184297 71.670457102504 l +75.718750000000 76.281250000000 l +74.721151272876 79.892293861068 l +72.068677652167 83.513297493231 l +70.325052633091 85.868624092784 l +69.828125000000 88.250000000000 l +70.186304443223 90.552747673203 l +71.326302526678 92.735137555366 l +73.346308881046 94.894011912335 l +76.344513137007 97.126213009954 l +79.989627194854 99.164217236556 l +83.789048154438 100.596188457783 l +87.811323321056 101.441306202608 l +92.125000000000 101.718750000000 l +97.462586180660 101.070932456387 l +97.557831952069 101.055648080491 l +103.015964519671 99.851433056816 l +103.984375000000 99.656250000000 l +106.046875000000 99.656250000000 l +107.893088734820 103.841923410053 l +106.046875000000 104.656250000000 l +103.984375000000 104.656250000000 l +104.952785480329 104.461066943184 l +98.254668047931 106.006851919509 l +98.349913819340 105.991567543613 l +92.125000000000 106.718750000000 l +87.170121991444 106.371193797392 l +82.386733095562 105.341311542217 l +77.843380617646 103.648282763444 l +73.608611862993 101.311286990046 l +69.914433306454 98.422394337665 l +67.154166223322 95.217987444634 l +65.426000244277 91.794908576797 l +64.828125000000 88.250000000000 l +65.079958470471 86.099459712769 l +65.803853616909 83.955594657216 l +68.478197347833 80.033577506769 l +70.243692477124 77.869424888932 l +70.718750000000 76.281250000000 l +70.335188815703 72.767042897496 l +69.139458509943 69.692821600479 l +67.063988953414 66.949338837759 l +64.041210016813 64.427347338148 l +64.030648161481 64.419960415766 l +57.122769593148 60.885592534770 l +47.867771465153 58.460125307844 l +47.872699540124 58.461011083984 l +39.531345669475 57.386753313732 l +30.484375000000 57.031250000000 l +30.058857758800 56.994770870105 l +25.296875000000 56.437500000000 l +25.059852268430 56.426238681485 l +19.697260920114 56.052702118670 l +15.093750000000 55.953125000000 l +15.251243853497 55.948159205399 l +10.548118853497 56.245034205399 l +10.896599281955 56.198262654619 l +9.168958168834 56.521655485308 l +9.360563998076 56.360269900374 l +8.781250000000 57.859375000000 l +8.758601803360 58.189255218076 l +8.735899308021 58.292982528741 l +8.961783988750 58.373307022500 l +12.077733488884 59.207058851501 l +11.920052659158 59.192274138863 l +16.716927659158 59.489149138863 l +16.562500000000 59.484375000000 l +20.310484622999 59.298829047426 l +26.432715873807 58.663967188904 l +32.129439766725 58.064574753283 l +37.437500000000 57.906250000000 l +42.956231440356 58.377434549954 l +49.359738630422 59.757530970421 l +55.603687985260 61.808276150558 l +60.600164228395 64.257215243964 l +61.652720444028 67.227280391337 l +60.695830521433 70.461601332760 l +59.795804375529 74.612267215650 l +59.682173726259 75.009180115401 l +58.534870256371 76.967235761415 l +56.827785568165 78.467279120185 l +54.713289027441 79.427384197713 l +52.343750000000 79.765625000000 l +45.078251015287 80.284053101740 l +38.408035162743 81.855361533047 l +32.254051275886 84.503586483055 l +26.537248188239 88.252764140896 l +26.552738242508 88.240587630490 l +22.301341239703 92.064975088104 l +19.363615291331 95.777634717946 l +17.659610007921 99.470217646437 l +17.109375000000 103.234375000000 l +17.462942485289 104.745484506691 l +18.934901380110 106.053537922625 l +21.052812442968 107.257743120984 l +22.546875000000 107.593750000000 l +27.127336030849 107.323869026651 l +31.729951269190 106.505204561027 l +36.405009689533 105.124224284764 l +41.202800266393 103.167395879495 l +50.256161372519 98.422250099230 l +57.732466834451 93.253092412692 l +60.876288655813 93.265226007835 l +72.532538655813 102.765226007835 l +72.279807476907 102.584183376106 l +75.647218702317 104.376772716335 l +79.199503524210 105.636779903827 l +83.003238453225 106.380692983432 l +87.125000000000 106.625000000000 l +94.491626547384 105.043088554999 l +94.463907095460 105.050904922128 l +100.135795242069 103.121939858482 l +103.519921580364 101.267028609739 l +103.216286265180 101.548701589947 l +104.200661265180 100.470576589947 l +106.046875000000 104.656250000000 l +107.893088734820 103.841923410053 l +55.872490683787 89.763134548637 l +54.997490683787 85.841259548637 l +55.036476188094 85.993355189713 l +52.343750000000 85.750000000000 l +46.702141892082 86.180801752650 l +41.285068752391 87.490050907175 l +36.021375201732 89.703013308437 l +30.839905860908 92.844954801298 l +30.840393168266 92.844613599752 l +24.841774707763 97.553563991314 l +23.093750000000 100.109375000000 l +23.668337709691 101.518994849695 l +23.371174656526 101.224323797050 l +23.620948599883 101.397798979282 l +24.023420115060 101.552272092059 l +25.484375000000 101.718750000000 l +29.298199671143 101.348354407082 l +33.545396502623 100.218839979757 l +38.283160693967 98.302715245167 l +43.568687444697 95.572488730454 l +43.462444284634 95.635929361188 l +56.978069284634 87.104679361188 l +55.872490683787 89.763134548637 l +107.893088734820 103.841923410053 l +59.646930715366 91.332820638812 l +46.131305715366 99.864070638812 l +46.025062555303 99.927511269546 l +40.294964306033 102.857441004833 l +34.923353497377 104.984285020243 l +29.967425328857 106.280551842918 l +25.484375000000 106.718750000000 l +22.429704884940 106.291477907941 l +20.160075343474 105.056926202950 l +19.862912290309 104.762255150305 l +18.581942192719 102.559691058502 l +18.093750000000 100.109375000000 l +18.781885833597 97.630167914546 l +20.751975292237 94.868311008686 l +27.972106831734 88.749136400248 l +27.972594139092 88.748795198702 l +33.744249798268 85.287221066563 l +39.777431247609 82.783386592825 l +46.000983107918 81.262557622350 l +52.343750000000 80.750000000000 l +54.881053553302 80.995299290410 l +57.121823397686 81.724997675285 l +58.847249996203 82.929795925088 l +59.838523811906 84.600394810287 l +59.877509316213 84.752490451363 l +60.752509316213 88.674365451363 l +59.646930715366 91.332820638812 l +107.893088734820 103.841923410053 l +155.484375000000 101.859375000000 l +154.564834615754 105.515207938449 l +152.115670325806 108.366761454651 l +148.955163295626 109.891294781728 l +145.437500000000 110.437500000000 l +142.960397099416 109.918703000637 l +140.390467597390 108.438024620128 l +137.806753458193 106.109033784838 l +135.288296646094 103.045299421136 l +135.165845369106 102.859481271949 l +127.322095369106 89.718856271949 l +127.315939322101 89.708486304067 l +123.037165252408 83.240466071649 l +119.422893480005 79.457711309224 l +123.333764624626 78.181432151290 l +119.923748586047 88.267600564284 l +116.288451493331 96.371224650234 l +116.310270123205 96.328970526240 l +111.013619195867 105.085481651574 l +104.498474377631 112.833853093888 l +102.718750000000 113.578125000000 l +98.109375000000 113.578125000000 l +95.790533815800 112.012456612681 l +92.715536961613 101.759617602767 l +90.624767168816 88.808240839597 l +90.625938562396 88.818553777181 l +88.018863793847 68.357428789163 l +88.022375537533 68.374401202625 l +86.904794319936 64.234191072834 l +85.466909526601 60.964474099786 l +83.670654326939 58.467433589062 l +81.477961890361 56.645252846242 l +80.463845731714 53.674615230649 l +82.823220731714 47.205865230649 l +82.883587418943 47.055653464335 l +83.966380643129 44.754922491868 l +85.291281927099 42.535861182972 l +88.514402164445 41.595109434025 l +91.785870247761 43.817111177877 l +94.599270325866 47.029404143594 l +96.906293571887 51.130222797294 l +98.658631158949 56.017801605095 l +98.664492355983 56.039251079522 l +100.006630671722 63.228131068770 l +101.762541190731 76.272848032637 l +101.765778670251 76.300425005941 l +103.467098832178 87.353480411923 l +105.697048617918 94.795754781373 l +102.319980907406 93.545204629259 l +104.354680083199 92.248641487426 l +106.296883956259 90.334282557687 l +110.081726403105 84.371439341729 l +110.069085073875 84.396782220394 l +112.413266990492 78.560599894318 l +114.080111889746 71.934817013191 l +115.075734612596 64.464258680566 l +115.406250000000 56.093750000000 l +117.906250000000 53.593750000000 l +122.515625000000 53.593750000000 l +124.596624760838 54.708311442938 l +155.065374760838 100.473936442938 l +155.484375000000 101.859375000000 l +107.893088734820 103.841923410053 l +150.903375239162 103.244813557062 l +120.434625239162 57.479188557062 l +122.515625000000 58.593750000000 l +117.906250000000 58.593750000000 l +120.406250000000 56.093750000000 l +120.037546637404 64.922460069434 l +118.935513110254 72.987057986809 l +117.106264259508 80.232368855682 l +114.555914926125 86.603217779606 l +114.543273596895 86.628560658271 l +112.308927321184 90.508291033149 l +109.859366043741 93.751654942313 l +107.239069916801 96.288467887574 l +104.492519092594 98.048545370741 l +101.115451382082 96.797995218627 l +98.626651167822 88.552769588077 l +96.796721329749 76.855824994059 l +96.799958809269 76.883401967363 l +95.087119328278 64.107806431230 l +93.835507644017 57.335748920478 l +93.841368841051 57.357198394905 l +92.427690803113 53.221339702706 l +90.736667174134 50.033095856406 l +88.719989127239 47.690701322123 l +86.329347835555 46.092390565975 l +89.552468072901 45.151638817028 l +88.346119356871 47.166952508132 l +87.460162581057 49.069346535665 l +87.520529268286 48.919134769351 l +85.161154268286 55.387884769351 l +84.147038109639 52.417247153758 l +87.106689423061 54.909519535937 l +89.579965473399 58.293338400214 l +91.528799430064 62.470887052166 l +92.915124462467 67.344348797375 l +92.918636206153 67.361321210837 l +95.592811437604 88.243946222819 l +95.593982831184 88.254259160403 l +97.565713038387 100.591944897233 l +100.428216184200 110.143793387319 l +98.109375000000 108.578125000000 l +102.718750000000 108.578125000000 l +100.939025622369 109.322396906112 l +106.962943304133 102.180143348427 l +111.845979876795 94.077279473760 l +111.867798506669 94.035025349766 l +115.287188913953 86.412086935716 l +118.541235375374 76.756067848710 l +122.452106519995 75.479788690776 l +126.837834747592 80.025158928351 l +131.621560677899 87.166513695933 l +131.615404630894 87.156143728051 l +139.459154630894 100.296768728051 l +139.336703353906 100.110950578864 l +142.906407402610 104.257287879872 l +145.437500000000 105.437500000000 l +147.478430454374 105.175111468272 l +149.243704674194 104.273863545349 l +150.251571634246 103.277760811551 l +150.484375000000 101.859375000000 l +150.903375239162 103.244813557062 l +107.893088734820 103.841923410053 l +231.343750000000 91.875000000000 l +230.760913847107 95.964970754466 l +229.068047862611 99.735912943733 l +226.348615757792 103.075786207286 l +222.686081243924 105.872550184609 l +222.648873373705 105.894655312846 l +215.093162016193 109.098726800095 l +205.138412990776 111.389009633945 l +205.099511514392 111.395066324151 l +196.531910121565 112.292873746127 l +187.093750000000 112.593750000000 l +180.736641615184 112.156201510495 l +174.578395035074 110.855968371846 l +168.685194057574 108.711669078852 l +163.123222480588 105.741922126310 l +163.102786019362 105.728945017668 l +158.065383006950 101.833715472335 l +154.350564084671 97.489870440862 l +152.052565874896 92.798170193375 l +151.265625000000 87.859375000000 l +151.531470468770 85.013668760581 l +152.287360086651 82.060400295498 l +152.321821893194 81.964698849566 l +155.704155919825 73.828381186220 l +158.270837388345 69.249451319292 l +158.258242073026 69.265568807584 l +162.161895999987 65.281962610977 l +167.278829839386 61.794937132641 l +173.532669176810 58.834467171163 l +180.847039597849 56.430527525129 l +179.144548452656 58.005986305326 l +180.222673452656 54.974736305326 l +180.222279555972 54.975844608663 l +182.650011718926 50.400876966176 l +185.678714551395 49.466466465483 l +192.833058049629 52.996232862321 l +201.831199616962 58.692914409530 l +211.602112156950 65.789874557518 l +220.243790039283 73.085988470431 l +220.250361498213 73.092084369790 l +227.553434625305 81.089470457139 l +229.783449199558 84.667905408782 l +230.987849850362 87.897461316292 l +231.037603485703 88.222391630780 l +231.334478485703 91.659891630780 l +231.343750000000 91.875000000000 l +107.893088734820 103.841923410053 l +226.353021514297 92.090108369220 l +226.056146514297 88.652608369220 l +226.105900149638 88.977538683708 l +225.181394550443 86.544985216218 l +223.368440374695 83.730842042861 l +216.843388501787 76.751665630210 l +216.849959960717 76.757761529569 l +208.538512843050 69.741375442482 l +199.012550383038 62.822710590470 l +190.370066950371 57.347517137679 l +183.790035448605 54.096033534517 l +186.818738281074 53.161623033824 l +184.933970444028 56.649155391337 l +184.933576547344 56.650263694674 l +183.855451547344 59.681513694674 l +182.152960402151 61.256972474871 l +175.418502698190 63.429204703837 l +169.900857660614 65.978500367359 l +165.523650875013 68.934834264023 l +162.210507926974 72.328181192416 l +162.197912611655 72.344298680708 l +160.116156580175 76.155993813780 l +156.990678106806 83.754051150434 l +157.025139913349 83.658349704502 l +156.265625000000 87.859375000000 l +156.814621625104 91.570970431625 l +158.524435915329 95.017942059138 l +161.489304493050 98.301050152665 l +165.803463980638 101.521054982332 l +165.783027519412 101.508077873690 l +170.773790317426 104.198487171148 l +175.945042464926 106.097156628154 l +181.362967759816 107.222704739505 l +187.093750000000 107.593750000000 l +196.179027378435 107.308688753873 l +204.369238485608 106.448683675849 l +204.330337009224 106.454740366055 l +213.484962983807 104.385648199905 l +220.132376626295 101.574094687154 l +220.095168756076 101.596199815391 l +222.954118617208 99.523823167714 l +224.892889637389 97.287524556267 l +225.994945527893 94.775263620534 l +226.343750000000 91.875000000000 l +226.353021514297 92.090108369220 l +107.893088734820 103.841923410053 l +219.781250000000 95.890625000000 l +219.378166433508 93.853798730227 l +218.111752188172 91.489941446073 l +212.645950385807 85.475693519170 l +212.685981945341 85.511936058310 l +206.545320157918 80.643069684901 l +198.180220478697 74.962876659750 l +198.191932106006 74.970352872652 l +191.582535336704 71.037624006410 l +191.504903114611 70.993386859602 l +190.358726480976 70.329891393482 l +194.093750000000 68.156250000000 l +193.486799914207 72.326466575586 l +191.750022838432 75.648693620488 l +191.727672642897 75.674671879974 l +189.796209835616 77.308949639626 l +187.307360975056 78.497446987452 l +184.374093537693 79.223076311545 l +181.109375000000 79.468750000000 l +178.539517280969 79.274893727068 l +176.586499975916 78.676142180991 l +173.086052480141 74.877460550577 l +176.026873378540 75.790765650642 l +173.637934677835 76.966105971818 l +171.454775584042 78.628861257931 l +167.479150931130 83.659399177979 l +167.492959438562 83.636441477986 l +164.707555748674 89.579684053440 l +164.890625000000 88.640625000000 l +165.429801946489 91.718738201013 l +167.140367049889 94.413281660069 l +170.161871706101 96.828214751252 l +174.633867311024 99.067496848641 l +174.595883286589 99.052025896332 l +183.311717611230 101.570655775842 l +188.036065935963 102.270678900324 l +192.781250000000 102.500000000000 l +204.722829878151 102.082467436594 l +212.458857303872 100.833616072622 l +214.905535432122 99.897801735668 l +216.940228691241 98.604487224303 l +220.087216056537 94.692203098109 l +219.781250000000 95.890625000000 l +107.893088734820 103.841923410053 l +224.475283943463 97.089046901891 l +222.495392805158 99.992428606532 l +220.012896308759 102.426762775697 l +217.106183317878 104.328760764332 l +213.853642696128 105.635133927378 l +205.324045121849 107.034720063406 l +192.781250000000 107.500000000000 l +187.549871564037 107.241039849676 l +182.344532388770 106.476219224158 l +172.747866713411 103.697974103668 l +172.709882688976 103.682503151359 l +167.310784543899 100.802644623748 l +163.281507950111 97.266405839931 l +160.761604303511 93.177746173987 l +160.111277146626 90.958745814619 l +159.890625000000 88.640625000000 l +160.073694251326 87.701565946560 l +163.194540561438 81.082308522014 l +163.208349068870 81.059350822021 l +165.573405849355 77.703241627766 l +168.240536915958 74.886763742069 l +171.153080947165 72.670612778182 l +174.254376621460 71.115484349358 l +177.195197519859 72.028789449423 l +178.991625024084 74.292607819009 l +181.109375000000 74.468750000000 l +185.450451524944 73.971303012548 l +187.959827357103 72.387828120026 l +187.937477161568 72.413806379512 l +188.825700085793 70.736033424413 l +189.093750000000 68.156250000000 l +192.828773519024 65.982608606518 l +194.057596885389 66.694113140398 l +193.979964663296 66.649875993590 l +200.870567893994 70.748397127348 l +200.882279521303 70.755873340250 l +209.532804842082 76.638180315099 l +216.001518054659 81.769313941690 l +216.041549614192 81.805556480830 l +219.736550554799 85.597619431325 l +222.481997811828 89.260058553927 l +224.192146066492 92.716513769773 l +224.781250000000 95.890625000000 l +224.475283943463 97.089046901891 l +107.893088734820 103.841923410053 l +274.375000000000 74.921875000000 l +274.375000000000 76.000000000000 l +273.941340954992 77.877573018672 l +272.878932097861 79.515803527315 l +273.201644884750 79.109789854043 l +272.240878131027 80.634530144823 l +272.178064435979 80.731878545843 l +270.366672394243 82.164949472839 l +268.046875000000 82.703125000000 l +266.183148747233 82.484226579792 l +265.676843902484 82.347511014208 l +261.919943241226 81.056638412991 l +261.845529920936 81.035610157726 l +257.771892015055 80.000491652766 l +254.812500000000 79.671875000000 l +253.064641952966 80.017766952966 l +253.029646790629 80.052082662255 l +253.183319188544 79.921363850038 l +253.251518993920 79.984611568497 l +253.185946392942 81.106825858762 l +253.000000000000 86.578125000000 l +253.496255380785 102.128843883245 l +253.498940253820 102.192840332413 l +254.068093288267 110.651263719025 l +251.578125000000 113.375000000000 l +246.875000000000 113.375000000000 l +246.340326851360 113.317155732979 l +244.239667843345 112.409341061474 l +241.449240399376 110.489665586259 l +233.966932708158 103.861287459859 l +233.964253154933 103.858697290509 l +230.739570245917 99.429986748935 l +227.863465886694 92.900734302334 l +227.865566738278 92.906614054351 l +224.904456445713 83.297192679644 l +223.890625000000 76.390625000000 l +224.718172891760 73.652424627265 l +226.991950628026 71.671512863124 l +230.398659300280 70.468125917422 l +234.625000000000 70.062500000000 l +239.436000436064 69.828681464349 l +240.453125000000 69.140625000000 l +239.621272369169 63.470278877568 l +237.983036171748 55.833595299706 l +237.978023315197 55.813489579321 l +235.265625000000 42.968750000000 l +235.414374888933 43.818233911095 l +223.164374888933 9.911983911095 l +223.454623060848 7.647483743269 l +225.610873060848 4.506858743269 l +225.803351703291 4.260965402925 l +227.719534150475 2.932735689909 l +230.078782966130 2.347671229322 l +230.218750000000 2.343750000000 l +231.580832848366 2.789728316683 l +232.871346377781 3.980786060276 l +235.131457239225 7.716876589460 l +240.051188613236 19.745668022304 l +244.970104457946 33.805503176211 l +247.762510801176 44.143184476801 l +247.777764624530 44.225329525617 l +252.184014624530 70.381579525617 l +251.352799675865 68.904817480577 l +254.575226795957 69.673348314939 l +260.406250000000 70.359375000000 l +270.523910039912 70.690857394210 l +273.186407177161 72.174765791999 l +274.049624252688 73.457293811137 l +274.375000000000 74.921875000000 l +107.893088734820 103.841923410053 l +269.375000000000 74.921875000000 l +269.694839960088 75.621642605790 l +260.406250000000 75.359375000000 l +253.596648204043 74.576651685061 l +250.197596782742 73.718304003256 l +248.084700324135 72.688932519423 l +247.253485375470 71.212170474383 l +242.847235375470 45.055920474383 l +242.862489198824 45.138065523199 l +240.182239292054 35.233559323790 l +235.370686386764 21.504331977696 l +230.614636510775 9.861248410540 l +229.674552059719 7.679370189724 l +229.774391761009 7.390935745817 l +230.218750000000 7.343750000000 l +230.358717033870 7.339828770678 l +229.540398296709 7.582784597075 l +229.732876939152 7.336891256731 l +227.576626939152 10.477516256731 l +227.866875111067 8.213016088905 l +240.116875111067 42.119266088905 l +240.265625000000 42.968750000000 l +242.834476684803 54.624010420679 l +242.829463828252 54.603904700294 l +244.534977630831 62.545346122432 l +245.453125000000 69.140625000000 l +244.611402180226 71.735213821357 l +242.306187063936 73.585381035651 l +238.867409665678 74.693638982119 l +234.625000000000 75.062500000000 l +229.906486871974 75.367549636876 l +229.092373983240 75.779215997735 l +228.934535185216 76.058687905577 l +228.890625000000 76.390625000000 l +229.790856054287 82.319994820356 l +232.571933261722 91.218385945649 l +232.574034113306 91.224265697666 l +234.986992254083 96.851263251065 l +237.441996845067 100.266302709491 l +237.439317291842 100.263712540141 l +244.074197100624 106.275959413741 l +247.409673148640 108.432844267021 l +246.875000000000 108.375000000000 l +251.578125000000 108.375000000000 l +249.088156711733 111.098736280975 l +248.501059746180 102.338409667587 l +248.503744619215 102.402406116755 l +248.000000000000 86.578125000000 l +248.204678607058 80.674424141238 l +248.635199756080 78.226325931503 l +249.564103209371 76.447917337745 l +249.529108047034 76.482233047034 l +251.855421271850 75.142541341903 l +254.812500000000 74.671875000000 l +258.571857984945 75.077633347234 l +263.279470079064 76.245639842274 l +263.205056758774 76.224611587009 l +267.479406097516 77.683738985792 l +266.973101252767 77.547023420208 l +268.046875000000 77.703125000000 l +268.247054721136 77.733964370993 l +268.227077605757 77.803800527161 l +268.040685564021 77.924371454157 l +267.977871868973 78.021719855177 l +268.985855115250 76.421460145957 l +269.308567902139 76.015446472685 l +269.418034045008 75.973989481328 l +269.375000000000 76.000000000000 l +269.375000000000 74.921875000000 l +107.893088734820 103.841923410053 l +243.911209450369 105.662056821622 l +240.832004992147 102.845101845416 l +236.815516984936 97.742848726260 l +236.813922800164 97.740633958664 l +232.773597278734 91.287437871638 l +230.710552894044 85.924483215760 l +230.745327869205 86.067653416413 l +229.840275149638 82.415038683708 l +229.855893749637 82.481339062591 l +229.093750000000 78.546875000000 l +229.510257350732 77.264688549054 l +230.557731326090 76.286764971873 l +233.333290689663 75.138571514324 l +238.843750000000 74.468750000000 l +241.980836948934 74.687319511759 l +245.189547085049 75.561169162745 l +247.167986856352 77.549353232692 l +248.217702574415 80.638507879225 l +248.687500000000 88.140625000000 l +248.194671228610 98.736670034806 l +248.200295344311 98.650162873539 l +247.698246960594 103.850772804200 l +243.911209450369 105.662056821622 l +107.893088734820 103.841923410053 l +242.739253039406 103.211727195800 l +243.205954655689 98.412337126461 l +243.211578771390 98.325829965194 l +243.687500000000 88.140625000000 l +243.282297425585 81.439617120775 l +243.185452914951 80.141955837255 l +241.300413051066 79.640805488241 l +238.843750000000 79.468750000000 l +234.557334310337 79.986428485676 l +234.323615830224 80.043375869145 l +234.139295619945 80.082650511165 l +233.899908001681 80.106538837663 l +233.805549923910 79.924172528127 l +234.093750000000 78.546875000000 l +234.706606250363 81.268660937409 l +234.722224850362 81.334961316292 l +235.567172130795 84.744846583587 l +235.601947105956 84.888016784240 l +237.273277721266 89.165687128362 l +240.873577199836 94.821866041336 l +240.871983015064 94.819651273740 l +244.355495007853 99.326773154584 l +246.526290549631 101.400443178378 l +242.739253039406 103.211727195800 l +107.893088734820 103.841923410053 l +304.579027849556 115.887559254375 l +299.647333003501 118.498603127587 l +299.601234810263 118.526555579345 l +296.960609810263 120.089055579345 l +295.687500000000 120.437500000000 l +292.434178516679 119.763451801101 l +289.591538470777 117.850158805700 l +287.263626957927 114.860898415742 l +285.554491073762 110.958948033170 l +285.546168760441 110.932189402305 l +283.409425227272 100.413450166388 l +283.408069329655 100.405281467271 l +280.968147929764 87.644193704042 l +284.218299056292 87.914012723915 l +279.519746335556 93.766171451312 l +279.798545332977 93.224824860858 l +274.937093489612 105.343910553875 l +272.454127837569 109.762553039486 l +269.772550129691 112.314814767144 l +266.294988321147 110.999865652887 l +264.699764075525 105.167535274279 l +264.676753039406 105.022647804200 l +264.221109604112 100.702343060691 l +264.171875000000 98.828125000000 l +263.607902205199 91.869081828698 l +263.613915250645 91.062865437610 l +263.781250000000 89.718750000000 l +263.644962649638 88.985351183708 l +262.873500431741 86.703985451358 l +262.739182179139 86.219942105230 l +260.786057179139 74.844942105230 l +260.786249814804 74.846062487964 l +256.958124814804 52.611687487964 l +256.955473276820 52.595988114755 l +254.892973276820 40.142863114755 l +254.909488793847 40.232428789163 l +254.331363793847 37.388678789163 l +254.339079247810 37.425229542768 l +253.651579247810 34.284604542768 l +253.593750000000 33.750000000000 l +254.239654341050 30.319069019177 l +254.154681406546 30.589185956325 l +256.319133024351 26.771372253672 l +258.818704827809 25.924919245868 l +261.217531024880 26.988383072536 l +263.253153025566 28.888095452080 l +264.856582863559 31.480336604342 l +265.958832572550 34.621386749163 l +266.013105788729 34.918097636045 l +267.200714432551 44.731495841479 l +267.198350954149 44.712535224402 l +269.443623734153 61.037071609407 l +269.421396014347 60.906344576785 l +270.652021489737 67.736566992690 l +271.992261513603 76.440263813345 l +271.992747064473 76.443809223415 l +273.038636247453 85.686082548185 l +273.390625000000 92.953125000000 l +273.238407027301 96.898129287691 l +272.771685367998 99.590064317759 l +267.989237947004 98.132898258783 l +271.223612947004 86.961023258783 l +271.391159168632 86.533772766328 l +274.526090303798 81.379570646076 l +274.584318175231 81.310286998919 l +276.982682022500 78.600716011250 l +277.142029400154 78.326905342657 l +279.265919333198 75.301911531816 l +279.298622345235 75.258362091268 l +281.876153531632 73.009942282517 l +284.906250000000 72.125000000000 l +287.318073492888 72.767987310135 l +289.339116026344 74.544184270464 l +290.903803647217 77.224443425871 l +291.946562402359 80.579617321243 l +291.963278527291 80.666832095730 l +293.477578855570 88.491377103079 l +294.532438780850 92.026218792971 l +294.690170210143 92.371639700252 l +298.832669585147 102.687317191341 l +298.821447919079 102.663322107333 l +301.483679194839 107.248880594573 l +302.541048238599 108.202972500861 l +303.515625000000 108.484375000000 l +306.015625000000 110.984375000000 l +306.015625000000 113.625000000000 l +304.579027849556 115.887559254375 l +107.893088734820 103.841923410053 l +301.015625000000 113.625000000000 l +301.015625000000 110.984375000000 l +303.515625000000 113.484375000000 l +300.984342386401 112.859527499139 l +298.555383305161 111.094869405427 l +296.303526841571 108.355227332168 l +294.303552080921 104.805427892667 l +294.292330414853 104.781432808659 l +289.997329789857 94.097110299748 l +290.155061219150 94.442531207029 l +288.709921144430 89.953935396921 l +287.036721472709 81.520667904270 l +287.053437597641 81.607882678757 l +286.004633973656 77.940190729536 l +284.906250000000 77.125000000000 l +284.500063101353 77.160595459408 l +284.155096468369 77.318182717483 l +283.263877654765 78.304137908732 l +283.296580666802 78.260588468184 l +281.295470599846 81.110594657343 l +281.454817977500 80.836783988750 l +278.353181824769 84.595963001081 l +278.411409696202 84.526679353924 l +275.858840831368 88.778727233672 l +276.026387052996 88.351476741217 l +272.792012052996 99.523351741217 l +268.009564632002 98.066185682241 l +268.390625000000 92.953125000000 l +268.055113752547 86.056104951815 l +267.038502935527 77.118690776585 l +267.038988486397 77.122236186655 l +265.722978510263 68.575933007310 l +264.516103985653 61.874905423215 l +264.493876265847 61.744178390593 l +262.239149045851 45.349964775598 l +262.236785567449 45.331004158521 l +261.049394211271 35.519402363955 l +261.103667427450 35.816113250837 l +259.699971974434 32.150967047920 l +257.681295172191 30.793830754132 l +260.180866975649 29.947377746328 l +259.001568593454 31.817064043675 l +258.916595658950 32.087180980823 l +258.593750000000 33.750000000000 l +258.535920752190 33.215395457232 l +259.223420752190 36.356020457232 l +259.231136206153 36.392571210837 l +259.809261206153 39.236321210837 l +259.825776723180 39.325886885245 l +261.888276723180 51.779011885245 l +261.885625185196 51.763312512036 l +265.713750185196 73.997687512036 l +265.713942820861 73.998807894770 l +267.667067820861 85.373807894770 l +267.532749568259 84.889764548642 l +268.526912350362 87.905273816292 l +268.781250000000 89.718750000000 l +268.542334749355 91.905884562390 l +268.548347794801 91.099668171302 l +269.171875000000 98.828125000000 l +269.216390395888 100.485156939309 l +269.635746960594 104.383602195800 l +269.612735924475 104.238714725721 l +270.955011678853 109.187634347113 l +267.477449870309 107.872685232856 l +268.686497162431 106.569478210514 l +270.375406510388 103.296714446125 l +275.107704667023 91.493925139142 l +275.386503664444 90.952578548688 l +278.700840527029 86.470174071108 l +281.281700943708 83.867237276085 l +284.531852070236 84.137056295958 l +285.408419686884 85.805066273498 l +286.324716189650 88.997159604327 l +288.341930670345 99.594718532729 l +288.340574772728 99.586549833612 l +290.328831239559 109.474060597695 l +290.320508926238 109.447301966830 l +291.419966792073 112.312929709258 l +292.611586529223 114.157653694300 l +293.999415233321 115.144751323899 l +295.687500000000 115.437500000000 l +294.414390189737 115.785944420655 l +297.055015189737 114.223444420655 l +297.008916996499 114.251396872413 l +302.452222150444 111.362440745625 l +301.015625000000 113.625000000000 l +107.893088734820 103.841923410053 l +374.437500000000 106.765625000000 l +373.775309600600 109.463093710969 l +372.064906958700 112.117295697199 l +372.041004786215 112.144602045402 l +368.522704503395 114.706400007155 l +366.442611342446 115.399541345014 l +364.281250000000 115.640625000000 l +355.911205219123 114.726652651698 l +341.052591424867 111.966274658224 l +341.038040421249 111.963294783992 l +326.905309277070 108.757693347762 l +319.727026481732 106.439595965247 l +319.807037817648 106.479160754059 l +310.484453831953 101.696158824691 l +304.482826587959 97.721718623918 l +304.310358047034 97.564641952966 l +302.095819571999 95.254869206705 l +298.220153609739 90.667578419636 l +300.367638895226 91.618501549714 l +296.258263895226 91.915376549714 l +296.078125000000 91.921875000000 l +293.025957236218 91.709450913344 l +290.151865257421 91.083888117023 l +285.254658796565 88.663603177256 l +285.219422230119 88.636374171395 l +281.529900243089 84.536170132203 l +280.513144708967 82.282593311151 l +280.156250000000 80.015625000000 l +280.896516775664 77.119922391977 l +282.806537684315 74.726645730656 l +285.448073147177 73.263018105533 l +288.686079158715 72.443690273534 l +290.750793112766 73.122099563886 l +293.797668112766 76.059599563886 l +293.736465601749 76.002539206463 l +295.798965601749 77.861914206463 l +294.222063773555 77.220634985862 l +301.862688773555 77.517509985862 l +299.265625000000 80.015625000000 l +299.934685624955 74.754308742711 l +301.898213943218 69.792099871114 l +305.090729619888 65.230982029954 l +309.446752320064 61.172938863978 l +309.482902906976 61.145713152252 l +318.065904047846 56.213131631660 l +329.455658353400 51.953267244508 l +329.496351456999 51.941186017188 l +336.615241964605 50.572965088062 l +336.666137267666 50.568817238037 l +342.150512267666 50.178192238037 l +342.328125000000 50.171875000000 l +347.088673798588 50.461178987176 l +351.635436696472 51.319590054257 l +355.904450990616 52.732856859568 l +359.831753977986 54.686728061438 l +363.292951645549 57.250115143707 l +365.880587968213 60.272932122861 l +367.501493801268 63.647371305944 l +368.062500000000 67.265625000000 l +367.659428864193 69.524372763002 l +366.507997055207 71.901249483478 l +362.306741008310 76.690232523947 l +362.309449580203 76.687848273793 l +355.067416613929 81.592460070084 l +345.579434368324 85.619156329617 l +345.543296906352 85.631025936969 l +338.856518222681 87.434049611292 l +331.674077585810 88.726763309129 l +324.032609882622 89.505258086643 l +315.968750000000 89.765625000000 l +315.697255981477 89.750839477245 l +313.837880981477 89.547714477245 l +314.109375000000 89.562500000000 l +315.203325765838 88.142787621838 l +315.234375000000 87.750000000000 l +315.261368553241 87.459370280378 l +315.416652198286 87.453346686481 l +316.557907675735 88.522399326740 l +316.429841220906 88.403882310796 l +319.273591220906 90.857007310796 l +318.935343465338 90.611377991437 l +331.091593465338 97.970752991437 l +330.612118984109 97.746034726917 l +334.956642245028 98.975789357391 l +339.851927078584 99.850564497063 l +351.453125000000 100.546875000000 l +354.203872313810 100.381670729150 l +355.159915151904 99.886038066767 l +355.055436157189 100.055596900919 l +357.900435727416 97.290434866877 l +362.379803562479 95.425955323112 l +363.015625000000 95.343750000000 l +366.828125000000 95.343750000000 l +368.997562855593 96.601357392681 l +374.106937855593 105.523232392681 l +374.437500000000 106.765625000000 l +107.893088734820 103.841923410053 l +369.768062144407 108.008017607319 l +364.658687144407 99.086142607319 l +366.828125000000 100.343750000000 l +363.015625000000 100.343750000000 l +363.651446437521 100.261544676888 l +360.724564272584 101.303315133123 l +359.413313842811 102.506903099081 l +359.308834848096 102.676461933233 l +358.021570604282 103.932262067178 l +356.186752686190 104.829266770850 l +351.453125000000 105.546875000000 l +345.006190631125 105.353277680068 l +339.085572921416 104.774435502937 l +333.730857754972 103.813273142609 l +328.981631015891 102.472715273083 l +328.502156534662 102.247997008563 l +316.345906534662 94.888622008563 l +316.007658779094 94.642992689204 l +313.163908779094 92.189867689204 l +313.035842324265 92.071350673260 l +311.083347801714 89.820090813519 l +310.234375000000 87.750000000000 l +310.265424234162 87.357212378162 l +310.780311953087 86.191927459145 l +311.752715552710 85.312201869144 l +314.109375000000 84.562500000000 l +314.380869018523 84.577285522755 l +316.240244018523 84.780410522755 l +315.968750000000 84.765625000000 l +323.705671367377 84.524038788357 l +330.935297414190 83.796674190871 l +337.694263027319 82.579622263708 l +344.019203093648 80.868974063031 l +343.983065631676 80.880843670383 l +352.635708386071 77.251289929916 l +359.003050419797 72.937151726207 l +359.005758991690 72.934767476053 l +362.163877944793 69.637813016522 l +363.062500000000 67.265625000000 l +362.747529636232 64.880949006556 l +361.740505781787 62.777849127139 l +359.948259291951 60.848517668793 l +357.277621022014 58.985146938562 l +353.920744321884 57.295463452932 l +350.352844553528 56.106191195743 l +346.509959013911 55.403078825324 l +342.328125000000 55.171875000000 l +342.505737732334 55.165557761963 l +337.021362732334 55.556182761963 l +337.072258035395 55.552034911938 l +330.878648543001 56.746313982812 l +330.919341646600 56.734232755492 l +320.246595952154 60.693118368340 l +312.454597093024 65.166786847748 l +312.490747679936 65.139561136022 l +308.794036005112 68.485814845046 l +306.234598556782 72.012587628886 l +304.746955000045 75.821863132289 l +304.265625000000 80.015625000000 l +301.668561226445 82.513740014138 l +294.027936226445 82.216865014138 l +292.451034398251 81.575585793537 l +290.388534398251 79.716210793537 l +290.327331887234 79.659150436114 l +287.280456887234 76.721650436114 l +289.345170841285 77.400059726466 l +287.321458102823 77.850263144467 l +285.927837315685 78.632729269344 l +285.271451974336 79.274608858023 l +285.175338636761 79.581613557521 l +285.156250000000 80.015625000000 l +285.837287256911 82.245079867797 l +288.311827769881 84.707375828605 l +288.276591203435 84.680146822744 l +291.660634742579 86.384861882977 l +296.078125000000 86.921875000000 l +295.897986104774 86.928373450286 l +300.007361104774 86.631498450286 l +302.154846390261 87.582421580364 l +305.732305428001 91.823255793295 l +307.845891952966 94.029108047034 l +307.673423412041 93.872031376082 l +313.085858668047 97.436653675309 l +321.942962182352 101.958339245941 l +322.022973518268 101.997904034753 l +328.415003222930 104.000119152238 l +342.055709578751 107.067955216008 l +342.041158575133 107.064975341776 l +356.698169780877 109.788972348302 l +364.281250000000 110.640625000000 l +366.516357996605 110.246724992845 l +368.302745213785 108.824147954598 l +368.278843041300 108.851454302801 l +369.437500000000 106.765625000000 l +369.768062144407 108.008017607319 l +107.893088734820 103.841923410053 l +359.034454681034 69.861443602839 l +357.173548986071 72.638610976591 l +353.435826646756 75.215386191513 l +347.992418306797 77.582163291606 l +341.014454609897 79.729336320871 l +326.426284670840 82.761098429090 l +319.640717587115 83.525315463381 l +313.234375000000 83.781250000000 l +312.706760041223 83.724940335389 l +311.331760041223 83.428065335389 l +311.389194323030 83.439762979730 l +309.920444323030 83.158512979730 l +310.390625000000 83.203125000000 l +309.032298883605 83.610801187634 l +305.860259182280 80.222501196670 l +308.487654632717 75.272571710106 l +311.451975717975 70.927537861140 l +314.718319876723 67.239682598354 l +318.251784547635 64.261288870324 l +318.235984828743 64.272646821685 l +322.460311501394 61.735717754517 l +327.134482463160 59.899177687483 l +332.183220900533 58.782772982128 l +337.531250000000 58.406250000000 l +345.475041381297 58.786142249068 l +351.020038715603 59.929523334009 l +351.130689531816 59.972424607386 l +353.699762084814 61.379594420291 l +355.915109055748 63.288105475323 l +357.703808635445 65.619192847673 l +358.992939014732 68.294091612533 l +359.034454681034 69.861443602839 l +107.893088734820 103.841923410053 l +354.288310985268 69.987158387467 l +352.366140944252 66.657207024677 l +349.213060468184 64.590075392614 l +349.323711284397 64.632976665991 l +344.735896118703 63.713857750932 l +337.531250000000 63.406250000000 l +332.857794724467 63.703555142872 l +328.623330036840 64.608634812517 l +324.752579123606 66.141235370483 l +321.170265171257 68.321103178315 l +321.154465452365 68.332461129676 l +318.096133248277 70.895083026646 l +315.305836782025 74.049024638860 l +312.748673492282 77.846568914895 l +310.389740817720 82.339998803330 l +307.217701116395 78.951698812366 l +310.390625000000 78.203125000000 l +310.860805676970 78.247737020270 l +312.329555676970 78.528987020270 l +312.386989958777 78.540684664611 l +313.761989958777 78.837559664611 l +313.234375000000 78.781250000000 l +319.326079287885 78.541090786619 l +325.753402829160 77.817026570910 l +339.735545390103 74.895663679129 l +350.446985853244 71.354926308487 l +353.125279138929 69.816467148409 l +354.246795318966 68.419806397161 l +354.288310985268 69.987158387467 l +107.893088734820 103.841923410053 l +412.906150029990 61.293260146951 l +409.761470127352 62.134684085464 l +407.280172710472 63.259435125605 l +407.285792255081 63.256184676520 l +404.793374271599 64.364965077547 l +402.406250000000 64.781250000000 l +400.799037804796 64.455489160260 l +399.281565012266 63.565560595750 l +396.896451926356 60.617324020679 l +395.843750000000 59.187500000000 l +394.132759007664 59.586356110398 l +392.227223295325 60.862510968959 l +387.514233459670 66.524236094764 l +387.523930329881 66.510005317299 l +384.972470502350 70.813073903396 l +383.182220364063 75.072391356081 l +382.127155126215 79.356608210051 l +381.781250000000 83.734375000000 l +382.036891605602 86.926476407739 l +382.837535469594 90.232985146136 l +382.953125000000 90.984375000000 l +382.953125000000 110.781250000000 l +380.453125000000 113.281250000000 l +374.875000000000 113.281250000000 l +372.797350977108 112.469290573921 l +370.771127450416 110.197059087430 l +366.940746762890 102.253660683699 l +366.931766441279 102.229357657717 l +364.988344509233 95.969248633492 l +363.592635453443 89.400212341223 l +362.750737781251 82.563409292771 l +362.468750000000 75.500000000000 l +362.469585639102 75.564633561058 l +362.375835639102 71.939633561058 l +362.376194806642 71.952282634846 l +362.282444806642 68.921032634846 l +362.281250000000 68.843750000000 l +362.557974048920 65.558176179264 l +363.371209408870 62.925233614273 l +365.078767647837 60.585701488502 l +367.830147985199 58.062445160283 l +369.390625000000 57.515625000000 l +372.609375000000 57.515625000000 l +375.044088155839 59.448023159988 l +375.637838155839 61.994898159988 l +375.701153736333 62.463240580013 l +375.794903736333 64.822615580013 l +375.796875000000 64.921875000000 l +375.796875000000 66.390625000000 l +375.727843254951 66.974057381188 l +375.364882971473 68.609156073692 l +375.377354243352 68.535253718305 l +374.986729243352 71.082128718305 l +375.015625000000 70.703125000000 l +375.946084438562 73.051058522014 l +371.472688855144 73.407169646001 l +374.338903268299 66.961197216653 l +377.510670879106 61.308691210684 l +380.962283852915 56.499192859154 l +384.668034355078 52.582243393122 l +384.668120639869 52.582165462116 l +388.032154904598 50.002880989291 l +391.626628158728 48.110057708285 l +395.367786243461 46.944465688666 l +399.171875000000 46.546875000000 l +400.072873198005 46.714879663986 l +404.885373198005 48.574254663986 l +404.871260445955 48.568850974212 l +412.883679720929 50.905386234424 l +414.906250000000 53.359375000000 l +414.906250000000 58.843750000000 l +412.906150029990 61.293260146951 l +107.893088734820 103.841923410053 l +409.906250000000 58.843750000000 l +409.906250000000 53.359375000000 l +411.928820279071 55.813363765576 l +403.097489554045 53.243649025788 l +403.083376801995 53.238245336014 l +398.270876801995 51.378870336014 l +399.171875000000 51.546875000000 l +396.227916881538 51.823112436334 l +393.443684341272 52.679004791715 l +390.735423220402 54.155322135709 l +388.019379360131 56.292834537884 l +388.019465644922 56.292756606878 l +384.707638022085 59.784010265846 l +381.637766620894 64.074121289316 l +378.784143606701 69.212630908347 l +376.121061144856 75.249080353999 l +371.647665561438 75.605191477986 l +370.464152438185 73.063686657060 l +370.015625000000 70.703125000000 l +370.044520756648 70.324121281695 l +370.435145756648 67.777246281695 l +370.447617028527 67.703343926308 l +370.865906745049 65.807192618812 l +370.796875000000 66.390625000000 l +370.796875000000 64.921875000000 l +370.798846263667 65.021134419987 l +370.705096263667 62.661759419987 l +370.768411844161 63.130101840012 l +370.174661844161 60.583226840012 l +372.609375000000 62.515625000000 l +369.390625000000 62.515625000000 l +370.951102014801 61.968804839717 l +367.847540591130 65.152891385727 l +367.281250000000 68.843750000000 l +367.280055193358 68.766467365154 l +367.373805193358 71.797717365154 l +367.374164360898 71.810366438942 l +367.467914360898 75.435366438942 l +367.468750000000 75.500000000000 l +367.725824718749 82.182684457229 l +368.501114546557 88.552912658777 l +369.800717990767 94.651845116508 l +371.630733558721 100.520642342283 l +371.621753237110 100.496339316301 l +374.875000000000 108.281250000000 l +380.453125000000 108.281250000000 l +377.953125000000 110.781250000000 l +377.953125000000 90.984375000000 l +378.068714530406 91.735764853864 l +377.111545894398 87.698523592261 l +376.781250000000 83.734375000000 l +377.206829248785 78.659016789949 l +378.466217135937 73.583858643919 l +380.533388872650 68.577551096604 l +383.382319670119 63.708744682701 l +383.392016540330 63.694513905236 l +386.493443824758 59.714265008269 l +389.655589204675 56.723426531041 l +392.798881617336 54.841378264602 l +395.843750000000 54.187500000000 l +397.450962195204 54.513260839740 l +398.968434987734 55.403189404250 l +401.353548073644 58.351425979321 l +402.406250000000 59.781250000000 l +404.776707744919 58.931315323480 l +404.782327289528 58.928064874395 l +408.035404872648 57.459065914536 l +411.906349970010 56.394239853049 l +409.906250000000 58.843750000000 l +107.893088734820 103.841923410053 l +.0 .0 .8 set-source-rgb fill + +/target get (out.png) write-to-png pop +pop diff --git a/libs/cairo-1.16.0/util/cairo-sphinx/Makefile.am b/libs/cairo-1.16.0/util/cairo-sphinx/Makefile.am new file mode 100644 index 0000000..3c11263 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-sphinx/Makefile.am @@ -0,0 +1,43 @@ +cairolibdir = $(libdir)/cairo + +cairolib_LTLIBRARIES = cairo-sphinx.la +bin_PROGRAMS = cairo-sphinx + +AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_builddir)/src \ + -I$(top_srcdir)/boilerplate \ + -I$(top_srcdir)/util/cairo-script + +cairo_sphinx_la_SOURCES = fdr.c +cairo_sphinx_la_CPPFLAGS = $(AM_CPPFLAGS) +cairo_sphinx_la_CFLAGS = $(CAIRO_CFLAGS) +cairo_sphinx_la_LDFLAGS = -module -no-undefined -avoid-version +if CAIRO_HAS_DL +cairo_sphinx_la_LIBADD = -ldl +endif + +cairo_sphinx_SOURCES = sphinx.c +cairo_sphinx_CPPFLAGS = $(AM_CPPFLAGS) -DLIBDIR="\"$(cairolibdir)\"" +cairo_sphinx_CFLAGS = $(CAIRO_CFLAGS) $(real_pthread_CFLAGS) $(glib_CFLAGS) +cairo_sphinx_LDADD = \ + $(real_pthread_LIBS) \ + $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \ + $(top_builddir)/boilerplate/libcairoboilerplate.la \ + $(top_builddir)/src/libcairo.la \ + $(glib_LIBS) \ + $(CAIRO_LDADD) \ + $(shm_LIBS) +cairo_sphinx_DEPENDENCIES = \ + $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \ + $(top_builddir)/boilerplate/libcairoboilerplate.la \ + $(top_builddir)/src/libcairo.la + +# Install rules to rebuild the libraries and add explicit dependencies +$(top_builddir)/boilerplate/libcairoboilerplate.la: $(top_builddir)/src/libcairo.la + cd $(top_builddir)/boilerplate && $(MAKE) $(AM_MAKEFLAGS) libcairoboilerplate.la + +$(top_builddir)/src/libcairo.la: + cd $(top_builddir)/src && $(MAKE) $(AM_MAKEFLAGS) libcairo.la + +$(top_builddir)/util/cairo-script/libcairo-script-interpreter.la: $(top_builddir)/src/libcairo.la + cd $(top_builddir)/util/cairo-script && $(MAKE) $(AM_MAKEFLAGS) libcairo-script-interpreter.la diff --git a/libs/cairo-1.16.0/util/cairo-sphinx/Makefile.in b/libs/cairo-1.16.0/util/cairo-sphinx/Makefile.in new file mode 100644 index 0000000..bcd45d2 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-sphinx/Makefile.in @@ -0,0 +1,886 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = cairo-sphinx$(EXEEXT) +subdir = util/cairo-sphinx +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \ + $(top_srcdir)/build/aclocal.compare.m4 \ + $(top_srcdir)/build/aclocal.enable.m4 \ + $(top_srcdir)/build/aclocal.float.m4 \ + $(top_srcdir)/build/aclocal.makefile.m4 \ + $(top_srcdir)/build/aclocal.pkg.m4 \ + $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \ + $(top_srcdir)/build/ltoptions.m4 \ + $(top_srcdir)/build/ltsugar.m4 \ + $(top_srcdir)/build/ltversion.m4 \ + $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/cairo-version.h \ + $(top_srcdir)/build/configure.ac.version \ + $(top_srcdir)/build/configure.ac.tools \ + $(top_srcdir)/build/configure.ac.features \ + $(top_srcdir)/build/configure.ac.warnings \ + $(top_srcdir)/build/configure.ac.system \ + $(top_srcdir)/build/configure.ac.analysis \ + $(top_srcdir)/build/configure.ac.noversion \ + $(top_srcdir)/build/configure.ac.pthread \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(cairolibdir)" "$(DESTDIR)$(bindir)" +LTLIBRARIES = $(cairolib_LTLIBRARIES) +cairo_sphinx_la_DEPENDENCIES = +am_cairo_sphinx_la_OBJECTS = cairo_sphinx_la-fdr.lo +cairo_sphinx_la_OBJECTS = $(am_cairo_sphinx_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +cairo_sphinx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(cairo_sphinx_la_CFLAGS) $(CFLAGS) $(cairo_sphinx_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +PROGRAMS = $(bin_PROGRAMS) +am_cairo_sphinx_OBJECTS = cairo_sphinx-sphinx.$(OBJEXT) +cairo_sphinx_OBJECTS = $(am_cairo_sphinx_OBJECTS) +am__DEPENDENCIES_1 = +cairo_sphinx_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(cairo_sphinx_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(cairo_sphinx_la_SOURCES) $(cairo_sphinx_SOURCES) +DIST_SOURCES = $(cairo_sphinx_la_SOURCES) $(cairo_sphinx_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/build/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BFD_LIBS = @BFD_LIBS@ +CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_LDFLAGS = @CAIRO_LDFLAGS@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@ +CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@ +CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@ +CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@ +CAIRO_REQUIRES = @CAIRO_REQUIRES@ +CAIRO_TEST_MODE = @CAIRO_TEST_MODE@ +CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@ +CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@ +CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@ +CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@ +CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIND = @FIND@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ +GOBJECT_LIBS = @GOBJECT_LIBS@ +GREP = @GREP@ +GS = @GS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +LIBRSVG_LIBS = @LIBRSVG_LIBS@ +LIBS = @LIBS@ +LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@ +LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LTP = @LTP@ +LTP_GENHTML = @LTP_GENHTML@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@ +PKG_CONFIG = @PKG_CONFIG@ +POPPLER_CFLAGS = @POPPLER_CFLAGS@ +POPPLER_LIBS = @POPPLER_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHLIB_EXT = @SHLIB_EXT@ +SHM_LIBS = @SHM_LIBS@ +SHTOOL = @SHTOOL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +XARGS = @XARGS@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cogl_CFLAGS = @cogl_CFLAGS@ +cogl_LIBS = @cogl_LIBS@ +datadir = @datadir@ +datarootdir = @datarootdir@ +directfb_CFLAGS = @directfb_CFLAGS@ +directfb_LIBS = @directfb_LIBS@ +docdir = @docdir@ +drm_CFLAGS = @drm_CFLAGS@ +drm_LIBS = @drm_LIBS@ +dvidir = @dvidir@ +egl_CFLAGS = @egl_CFLAGS@ +egl_LIBS = @egl_LIBS@ +exec_prefix = @exec_prefix@ +gallium_DIR = @gallium_DIR@ +gl_CFLAGS = @gl_CFLAGS@ +gl_LIBS = @gl_LIBS@ +glesv2_CFLAGS = @glesv2_CFLAGS@ +glesv2_LIBS = @glesv2_LIBS@ +glesv3_CFLAGS = @glesv3_CFLAGS@ +glesv3_LIBS = @glesv3_LIBS@ +glib_CFLAGS = @glib_CFLAGS@ +glib_LIBS = @glib_LIBS@ +gtk_CFLAGS = @gtk_CFLAGS@ +gtk_LIBS = @gtk_LIBS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lzo_LIBS = @lzo_LIBS@ +mandir = @mandir@ +mesa_DIR = @mesa_DIR@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pixman_CFLAGS = @pixman_CFLAGS@ +pixman_LIBS = @pixman_LIBS@ +png_CFLAGS = @png_CFLAGS@ +png_LIBS = @png_LIBS@ +png_REQUIRES = @png_REQUIRES@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pthread_CFLAGS = @pthread_CFLAGS@ +pthread_LIBS = @pthread_LIBS@ +qt_CFLAGS = @qt_CFLAGS@ +qt_LIBS = @qt_LIBS@ +real_pthread_CFLAGS = @real_pthread_CFLAGS@ +real_pthread_LIBS = @real_pthread_LIBS@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +shm_LIBS = @shm_LIBS@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xcb_CFLAGS = @xcb_CFLAGS@ +xcb_LIBS = @xcb_LIBS@ +xcb_shm_CFLAGS = @xcb_shm_CFLAGS@ +xcb_shm_LIBS = @xcb_shm_LIBS@ +xlib_CFLAGS = @xlib_CFLAGS@ +xlib_LIBS = @xlib_LIBS@ +xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@ +xlib_xcb_LIBS = @xlib_xcb_LIBS@ +xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@ +xlib_xrender_LIBS = @xlib_xrender_LIBS@ +cairolibdir = $(libdir)/cairo +cairolib_LTLIBRARIES = cairo-sphinx.la +AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_builddir)/src \ + -I$(top_srcdir)/boilerplate \ + -I$(top_srcdir)/util/cairo-script + +cairo_sphinx_la_SOURCES = fdr.c +cairo_sphinx_la_CPPFLAGS = $(AM_CPPFLAGS) +cairo_sphinx_la_CFLAGS = $(CAIRO_CFLAGS) +cairo_sphinx_la_LDFLAGS = -module -no-undefined -avoid-version +@CAIRO_HAS_DL_TRUE@cairo_sphinx_la_LIBADD = -ldl +cairo_sphinx_SOURCES = sphinx.c +cairo_sphinx_CPPFLAGS = $(AM_CPPFLAGS) -DLIBDIR="\"$(cairolibdir)\"" +cairo_sphinx_CFLAGS = $(CAIRO_CFLAGS) $(real_pthread_CFLAGS) $(glib_CFLAGS) +cairo_sphinx_LDADD = \ + $(real_pthread_LIBS) \ + $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \ + $(top_builddir)/boilerplate/libcairoboilerplate.la \ + $(top_builddir)/src/libcairo.la \ + $(glib_LIBS) \ + $(CAIRO_LDADD) \ + $(shm_LIBS) + +cairo_sphinx_DEPENDENCIES = \ + $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \ + $(top_builddir)/boilerplate/libcairoboilerplate.la \ + $(top_builddir)/src/libcairo.la + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/cairo-sphinx/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign util/cairo-sphinx/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-cairolibLTLIBRARIES: $(cairolib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(cairolib_LTLIBRARIES)'; test -n "$(cairolibdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(cairolibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(cairolibdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(cairolibdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(cairolibdir)"; \ + } + +uninstall-cairolibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(cairolib_LTLIBRARIES)'; test -n "$(cairolibdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(cairolibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(cairolibdir)/$$f"; \ + done + +clean-cairolibLTLIBRARIES: + -test -z "$(cairolib_LTLIBRARIES)" || rm -f $(cairolib_LTLIBRARIES) + @list='$(cairolib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +cairo-sphinx.la: $(cairo_sphinx_la_OBJECTS) $(cairo_sphinx_la_DEPENDENCIES) $(EXTRA_cairo_sphinx_la_DEPENDENCIES) + $(AM_V_CCLD)$(cairo_sphinx_la_LINK) -rpath $(cairolibdir) $(cairo_sphinx_la_OBJECTS) $(cairo_sphinx_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +cairo-sphinx$(EXEEXT): $(cairo_sphinx_OBJECTS) $(cairo_sphinx_DEPENDENCIES) $(EXTRA_cairo_sphinx_DEPENDENCIES) + @rm -f cairo-sphinx$(EXEEXT) + $(AM_V_CCLD)$(cairo_sphinx_LINK) $(cairo_sphinx_OBJECTS) $(cairo_sphinx_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_sphinx-sphinx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_sphinx_la-fdr.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +cairo_sphinx_la-fdr.lo: fdr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cairo_sphinx_la_CPPFLAGS) $(CPPFLAGS) $(cairo_sphinx_la_CFLAGS) $(CFLAGS) -MT cairo_sphinx_la-fdr.lo -MD -MP -MF $(DEPDIR)/cairo_sphinx_la-fdr.Tpo -c -o cairo_sphinx_la-fdr.lo `test -f 'fdr.c' || echo '$(srcdir)/'`fdr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_sphinx_la-fdr.Tpo $(DEPDIR)/cairo_sphinx_la-fdr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fdr.c' object='cairo_sphinx_la-fdr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cairo_sphinx_la_CPPFLAGS) $(CPPFLAGS) $(cairo_sphinx_la_CFLAGS) $(CFLAGS) -c -o cairo_sphinx_la-fdr.lo `test -f 'fdr.c' || echo '$(srcdir)/'`fdr.c + +cairo_sphinx-sphinx.o: sphinx.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cairo_sphinx_CPPFLAGS) $(CPPFLAGS) $(cairo_sphinx_CFLAGS) $(CFLAGS) -MT cairo_sphinx-sphinx.o -MD -MP -MF $(DEPDIR)/cairo_sphinx-sphinx.Tpo -c -o cairo_sphinx-sphinx.o `test -f 'sphinx.c' || echo '$(srcdir)/'`sphinx.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_sphinx-sphinx.Tpo $(DEPDIR)/cairo_sphinx-sphinx.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sphinx.c' object='cairo_sphinx-sphinx.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cairo_sphinx_CPPFLAGS) $(CPPFLAGS) $(cairo_sphinx_CFLAGS) $(CFLAGS) -c -o cairo_sphinx-sphinx.o `test -f 'sphinx.c' || echo '$(srcdir)/'`sphinx.c + +cairo_sphinx-sphinx.obj: sphinx.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cairo_sphinx_CPPFLAGS) $(CPPFLAGS) $(cairo_sphinx_CFLAGS) $(CFLAGS) -MT cairo_sphinx-sphinx.obj -MD -MP -MF $(DEPDIR)/cairo_sphinx-sphinx.Tpo -c -o cairo_sphinx-sphinx.obj `if test -f 'sphinx.c'; then $(CYGPATH_W) 'sphinx.c'; else $(CYGPATH_W) '$(srcdir)/sphinx.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_sphinx-sphinx.Tpo $(DEPDIR)/cairo_sphinx-sphinx.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sphinx.c' object='cairo_sphinx-sphinx.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cairo_sphinx_CPPFLAGS) $(CPPFLAGS) $(cairo_sphinx_CFLAGS) $(CFLAGS) -c -o cairo_sphinx-sphinx.obj `if test -f 'sphinx.c'; then $(CYGPATH_W) 'sphinx.c'; else $(CYGPATH_W) '$(srcdir)/sphinx.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(cairolibdir)" "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-cairolibLTLIBRARIES clean-generic \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-cairolibLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-cairolibLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-cairolibLTLIBRARIES clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS \ + install-cairolibLTLIBRARIES install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS \ + uninstall-cairolibLTLIBRARIES + +.PRECIOUS: Makefile + + +# Install rules to rebuild the libraries and add explicit dependencies +$(top_builddir)/boilerplate/libcairoboilerplate.la: $(top_builddir)/src/libcairo.la + cd $(top_builddir)/boilerplate && $(MAKE) $(AM_MAKEFLAGS) libcairoboilerplate.la + +$(top_builddir)/src/libcairo.la: + cd $(top_builddir)/src && $(MAKE) $(AM_MAKEFLAGS) libcairo.la + +$(top_builddir)/util/cairo-script/libcairo-script-interpreter.la: $(top_builddir)/src/libcairo.la + cd $(top_builddir)/util/cairo-script && $(MAKE) $(AM_MAKEFLAGS) libcairo-script-interpreter.la + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libs/cairo-1.16.0/util/cairo-sphinx/fdr.c b/libs/cairo-1.16.0/util/cairo-sphinx/fdr.c new file mode 100644 index 0000000..aeda89b --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-sphinx/fdr.c @@ -0,0 +1,261 @@ +/* cairo-fdr - a 'flight data recorder', a black box, for cairo + * + * Copyright © 2009 Chris Wilson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#define _GNU_SOURCE + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <cairo.h> +#include <cairo-script.h> +#include <cairo-tee.h> +#include <stdlib.h> +#include <stdint.h> +#include <assert.h> +#include <unistd.h> +#include <errno.h> + +#include <dlfcn.h> + +static void *_dlhandle = RTLD_NEXT; +#define DLCALL(name, args...) ({ \ + static typeof (&name) name##_real; \ + if (name##_real == NULL) { \ + name##_real = dlsym (_dlhandle, #name); \ + if (name##_real == NULL && _dlhandle == RTLD_NEXT) { \ + _dlhandle = dlopen ("libcairo.so", RTLD_LAZY); \ + name##_real = dlsym (_dlhandle, #name); \ + assert (name##_real != NULL); \ + } \ + } \ + (*name##_real) (args); \ +}) + +static cairo_device_t *fdr_context; +static const cairo_user_data_key_t fdr_key; + +static void +fdr_get_extents (cairo_surface_t *surface, + cairo_rectangle_t *extents) +{ + cairo_t *cr; + + cr = DLCALL (cairo_create, surface); + DLCALL (cairo_clip_extents, cr, + &extents->x, &extents->y, &extents->width, &extents->height); + DLCALL (cairo_destroy, cr); + + extents->width -= extents->x; + extents->height -= extents->y; +} + +static void +fdr_surface_destroy (void *surface) +{ + DLCALL (cairo_surface_destroy, surface); +} + +static void +fdr_surface_reference (void *surface) +{ + DLCALL (cairo_surface_reference, surface); +} + +static cairo_surface_t * +fdr_surface_get_tee (cairo_surface_t *surface) +{ + return DLCALL (cairo_surface_get_user_data, surface, &fdr_key); +} + +static cairo_surface_t * +fdr_tee_surface_index (cairo_surface_t *surface, int index) +{ + return DLCALL (cairo_tee_surface_index, surface, index); +} + +static cairo_status_t +fdr_write (void *closure, const unsigned char *data, unsigned int len) +{ + int fd = (int) (intptr_t) closure; + while (len) { + int ret = write (fd, data, len); + if (ret < 0) { + switch (errno) { + case EAGAIN: + case EINTR: + continue; + default: + return CAIRO_STATUS_WRITE_ERROR; + } + } else if (ret == 0) { + return CAIRO_STATUS_WRITE_ERROR; + } else { + data += ret; + len -= ret; + } + } + return CAIRO_STATUS_SUCCESS; +} + +cairo_t * +cairo_create (cairo_surface_t *surface) +{ + cairo_surface_t *tee; + + tee = fdr_surface_get_tee (surface); + if (tee == NULL) { + cairo_surface_t *script; + cairo_rectangle_t extents; + cairo_content_t content; + + if (fdr_context == NULL) { + const char *env = getenv ("CAIRO_SPHINX_FD"); + int fd = env ? atoi (env) : 1; + fdr_context = DLCALL (cairo_script_create_for_stream, + fdr_write, (void *) (intptr_t) fd); + } + + fdr_get_extents (surface, &extents); + content = DLCALL (cairo_surface_get_content, surface); + + tee = DLCALL (cairo_tee_surface_create, surface); + script = DLCALL (cairo_script_surface_create, + fdr_context, content, extents.width, extents.height); + DLCALL (cairo_tee_surface_add, tee, script); + + DLCALL (cairo_surface_set_user_data, surface, + &fdr_key, tee, fdr_surface_destroy); + } + + return DLCALL (cairo_create, tee); +} + +static void +fdr_remove_tee (cairo_surface_t *surface) +{ + fdr_surface_reference (surface); + DLCALL (cairo_surface_set_user_data, surface, &fdr_key, NULL, NULL); + fdr_surface_destroy (surface); +} + +void +cairo_destroy (cairo_t *cr) +{ + cairo_surface_t *tee; + + tee = DLCALL (cairo_get_target, cr); + DLCALL (cairo_destroy, cr); + + if (DLCALL (cairo_surface_get_reference_count, tee) == 1) + fdr_remove_tee (fdr_tee_surface_index (tee, 0)); +} + +void +cairo_pattern_destroy (cairo_pattern_t *pattern) +{ + if (DLCALL (cairo_pattern_get_type, pattern) == CAIRO_PATTERN_TYPE_SURFACE) { + cairo_surface_t *surface; + + if (DLCALL (cairo_pattern_get_surface, pattern, &surface) == CAIRO_STATUS_SUCCESS && + DLCALL (cairo_surface_get_type, surface) == CAIRO_SURFACE_TYPE_TEE && + DLCALL (cairo_surface_get_reference_count, surface) == 2) + { + fdr_remove_tee (fdr_tee_surface_index (surface, 0)); + } + } + + DLCALL (cairo_pattern_destroy, pattern); +} + +cairo_surface_t * +cairo_get_target (cairo_t *cr) +{ + cairo_surface_t *tee; + + tee = DLCALL (cairo_get_target, cr); + return fdr_tee_surface_index (tee, 0); +} + +cairo_surface_t * +cairo_get_group_target (cairo_t *cr) +{ + cairo_surface_t *tee; + + tee = DLCALL (cairo_get_group_target, cr); + return fdr_tee_surface_index (tee, 0); +} + +cairo_pattern_t * +cairo_pattern_create_for_surface (cairo_surface_t *surface) +{ + cairo_surface_t *tee; + + tee = fdr_surface_get_tee (surface); + if (tee != NULL) + surface = tee; + + return DLCALL (cairo_pattern_create_for_surface, surface); +} + +cairo_status_t +cairo_pattern_get_surface (cairo_pattern_t *pattern, + cairo_surface_t **surface) +{ + cairo_status_t status; + cairo_surface_t *tee; + + status = DLCALL (cairo_pattern_get_surface, pattern, surface); + if (status != CAIRO_STATUS_SUCCESS) + return status; + + tee = fdr_surface_get_tee (*surface); + if (tee != NULL) + *surface = tee; + + return CAIRO_STATUS_SUCCESS; +} + +void +cairo_set_source_surface (cairo_t *cr, + cairo_surface_t *surface, + double x, double y) +{ + cairo_surface_t *tee; + + tee = fdr_surface_get_tee (surface); + if (tee != NULL) + surface = tee; + + DLCALL (cairo_set_source_surface, cr, surface, x, y); +} + +cairo_surface_t * +cairo_surface_create_similar (cairo_surface_t *surface, + cairo_content_t content, + int width, int height) +{ + cairo_surface_t *tee; + + tee = fdr_surface_get_tee (surface); + if (tee != NULL) + surface = tee; + + return DLCALL (cairo_surface_create_similar, + surface, content, width, height); +} diff --git a/libs/cairo-1.16.0/util/cairo-sphinx/sphinx.c b/libs/cairo-1.16.0/util/cairo-sphinx/sphinx.c new file mode 100644 index 0000000..238d400 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-sphinx/sphinx.c @@ -0,0 +1,1545 @@ +/* + * The intention for sphinx is for detection of rendering errors inside + * applications by simultaneously rendering on to the target device and on + * an image surface and comparing the two. If it found a discrepancy, it + * would then dump the trace that reproduces the error. (Then apply + * delta-debugging to reduce that down to a minimal trace.) + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <sys/stat.h> +#include <sys/mman.h> +#include <sys/socket.h> +#include <sys/poll.h> +#include <sys/un.h> +#include <unistd.h> +#include <fcntl.h> +#include <signal.h> +#include <errno.h> +#include <assert.h> +#include <pthread.h> + +#include <cairo.h> +#include <cairo-script.h> +#include <cairo-script-interpreter.h> +#include <cairo-boilerplate.h> + +#include <glib.h> /* for checksumming */ + +#ifndef CAIRO_HAS_REAL_PTHREAD +# error "cairo-sphinx needs real pthreads" +#endif + +#ifndef MAP_NORESERVE +#define MAP_NORESERVE 0 +#endif + +#define DATA_SIZE (256 << 20) +#define SHM_PATH_XXX "/shmem-cairo-sphinx" + +struct client { + int sk; + const cairo_boilerplate_target_t *target; + cairo_surface_t *surface; + void *base; + + cairo_script_interpreter_t *csi; + struct context_closure { + struct context_closure *next; + unsigned long id; + cairo_t *context; + cairo_surface_t *surface; + cairo_surface_t *original; + } *contexts; + + unsigned long context_id; +}; + +struct surface_tag { + long width, height; +}; +static const cairo_user_data_key_t surface_tag; + +static int +client_socket (const char *socket_path); + +static int +writen (int fd, const void *ptr, int len) +{ +#if 1 + const uint8_t *data = ptr; + while (len) { + int ret = write (fd, data, len); + if (ret < 0) { + switch (errno) { + case EAGAIN: + case EINTR: + continue; + default: + return FALSE; + } + } else if (ret == 0) { + return FALSE; + } else { + data += ret; + len -= ret; + } + } + return TRUE; +#else + int ret = send (fd, ptr, len, 0); + return ret == len; +#endif +} + +static int +readn (int fd, void *ptr, int len) +{ +#if 0 + uint8_t *data = ptr; + while (len) { + int ret = read (fd, data, len); + if (ret < 0) { + switch (errno) { + case EAGAIN: + case EINTR: + continue; + default: + return FALSE; + } + } else if (ret == 0) { + return FALSE; + } else { + data += ret; + len -= ret; + } + } + return TRUE; +#else + int ret = recv (fd, ptr, len, MSG_WAITALL); + return ret == len; +#endif +} +static int +open_devnull_to_fd (int want_fd, int flags) +{ + int error; + int got_fd; + + close (want_fd); + + got_fd = open("/dev/null", flags | O_CREAT, 0700); + if (got_fd == -1) + return -1; + + error = dup2 (got_fd, want_fd); + close (got_fd); + + return error; +} + +static int +daemonize (void) +{ + void (*oldhup) (int); + + /* Let the parent go. */ + switch (fork ()) { + case -1: return -1; + case 0: break; + default: _exit (0); + } + + /* Become session leader. */ + if (setsid () == -1) + return -1; + + /* Refork to yield session leadership. */ + oldhup = signal (SIGHUP, SIG_IGN); + switch (fork ()) { + case -1: return -1; + case 0: break; + default: _exit (0); + } + signal (SIGHUP, oldhup); + + /* Establish stdio. */ + if (open_devnull_to_fd (0, O_RDONLY) == -1) + return -1; + if (open_devnull_to_fd (1, O_WRONLY | O_APPEND) == -1) + return -1; + if (dup2 (1, 2) == -1) + return -1; + + return 0; +} + +static int +server_socket (const char *socket_path) +{ + long flags; + struct sockaddr_un addr; + int sk; + + unlink (socket_path); + + sk = socket (PF_UNIX, SOCK_STREAM, 0); + if (sk == -1) + return -1; + + memset (&addr, 0, sizeof (addr)); + addr.sun_family = AF_UNIX; + strcpy (addr.sun_path, socket_path); + if (bind (sk, (struct sockaddr *) &addr, sizeof (addr)) == -1) { + close (sk); + return -1; + } + + flags = fcntl (sk, F_GETFL); + if (flags == -1 || fcntl (sk, F_SETFL, flags | O_NONBLOCK) == -1) { + close (sk); + return -1; + } + + if (listen (sk, 5) == -1) { + close (sk); + return -1; + } + + return sk; +} + +static int +readline (int fd, char *line, int max) +{ + int len = 0; + do { + int ret = read (fd, &line[len], 1); + if (ret <= 0) + return -1; + } while (line[len] != '\n' && ++len < max); + line[len] = '\0'; + return len; +} + +struct clients { + int count, size; + int complete; + + cairo_surface_t *recording; + unsigned long serial; + + struct client_info { + int sk; + int trace; + unsigned long image_serial; + cairo_surface_t *image; + char *name; + char *target; + char *reference; + + uint8_t *out_buf; + int out_len; + int out_size; + } *clients; + const char *shm_path; + unsigned long offset; + uint8_t *base; +}; + +static void * +clients_shm (const char *shm_path) +{ + void *base; + int fd; + + shm_unlink (shm_path); + fd = shm_open (shm_path, O_RDWR | O_EXCL | O_CREAT, 0777); + if (fd == -1) + return MAP_FAILED; + + if (ftruncate (fd, DATA_SIZE) == -1) { + close (fd); + return MAP_FAILED; + } + + base = mmap (NULL, DATA_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + close (fd); + + return base; +} + +static int +clients_init (struct clients *clients) +{ + clients->count = 0; + clients->complete = 0; + clients->size = 4; + clients->clients = xmalloc (clients->size * sizeof (struct client_info)); + + clients->shm_path = SHM_PATH_XXX; + clients->base = clients_shm (clients->shm_path); + if (clients->base == MAP_FAILED) + return -1; + clients->offset = 0; + + clients->recording = NULL; + clients->serial = 0; + + return 0; +} + +static void +clients_add_command (struct clients *clients, int fd, char *info) +{ + struct client_info *c; + char buf[1024]; + int len; + char *str; + + if (clients->count == clients->size) { + clients->size *= 2; + clients->clients = xrealloc (clients->clients, + clients->size * sizeof (struct client_info)); + } + + c = &clients->clients[clients->count++]; + c->sk = fd; + c->trace = -1; + c->image_serial = 0; + c->image = NULL; + c->name = c->target = c->reference = NULL; + + c->out_size = 8192; + c->out_buf = xmalloc (c->out_size); + c->out_len = 0; + + str = strstr (info, "name="); + if (str != NULL) { + char *sp = strchr (str + 5, ' '); + int len; + if (sp) + len = sp - str - 5; + else + len = strlen (str + 5); + c->name = xmalloc (len + 1); + memcpy (c->name, str + 5, len); + c->name[len] = '\0'; + } + + str = strstr (info, "target="); + if (str != NULL) { + char *sp = strchr (str + 7, ' '); + int len; + if (sp) + len = sp - str - 7; + else + len = strlen (str + 7); + c->target = xmalloc (len + 1); + memcpy (c->target, str + 7, len); + c->target[len] = '\0'; + } + + str = strstr (info, "reference="); + if (str != NULL) { + char *sp = strchr (str + 10, ' '); + int len; + if (sp) + len = sp - str - 10; + else + len = strlen (str + 10); + c->reference = xmalloc (len + 1); + memcpy (c->reference, str + 10, len); + c->reference[len] = '\0'; + } + + len = sprintf (buf, "%s\n", clients->shm_path); + writen (fd, buf, len); +} + +static void +clients_add_trace (struct clients *clients, int fd, char *info) +{ + char *str, *sp; + char *name; + int i; + + str = strstr (info, "name="); + assert (str != NULL); + sp = strchr (str + 5, ' '); + if (sp) + i = sp - str - 5; + else + i = strlen (str + 5); + + name = xmalloc (i + 1); + memcpy (name, str + 5, i); + name[i] = '\0'; + + for (i = 0; i < clients->count; i++) { + struct client_info *c = &clients->clients[i]; + if (strcmp (name, c->name) == 0) { + c->trace = fd; + break; + } + } + + free (name); +} + +static int +clients_image (struct clients *clients, int fd, char *info) +{ + struct client_info *c = NULL; + int format, width, height, stride, size; + int i; + + for (i = 0; i < clients->count; i++) { + if (clients->clients[i].sk == fd) { + c = &clients->clients[i]; + break; + } + } + + if (c == NULL) + return 0; + + if (sscanf (info, "%lu %d %d %d %d", + &c->image_serial, &format, &width, &height, &stride) != 5) + { + return 0; + } + + size = height * stride; + size = (size + 4095) & -4096; + assert (clients->offset + size <= DATA_SIZE); + + c->image = + cairo_image_surface_create_for_data (clients->base + clients->offset, + format, width, height, stride); + + if (! writen (fd, &clients->offset, sizeof (clients->offset))) + return 0; + + clients->offset += size; + + return 1; +} + +static int +u8_cmp (const void *A, const void *B) +{ + const uint8_t *a = A, *b = B; + return (int) *a - (int) *b; +} + +static uint8_t +median (uint8_t *values, int count) +{ + /* XXX could use a fast median here if we cared */ + qsort (values, count, 1, u8_cmp); + return values[count/2]; +} + +static uint32_t +get_pixel32 (int x, int y, const uint8_t *data, int stride) +{ + return ((uint32_t *)(data + y * stride))[x]; +} + +static uint8_t +get_median_32 (int x, int y, int channel, + const uint8_t *data, int width, int height, int stride) +{ + uint8_t neighbourhood[25]; + int cnt = 0; + int xx, yy; + + for (yy = y - 2; yy <= y + 2; yy++) { + if (yy < 0) + continue; + if (yy >= height) + continue; + + for (xx = x - 2; xx <= x + 2; xx++) { + if (xx < 0) + continue; + if (xx >= width) + continue; + + neighbourhood[cnt++] = (get_pixel32 (xx, yy, data, stride) >> (channel*8)) & 0xff; + } + } + + return median (neighbourhood, cnt); +} + +static uint8_t +get_pixel8 (int x, int y, const uint8_t *data, int stride) +{ + return data[y * stride + x]; +} + +static uint8_t +get_median_8 (int x, int y, const uint8_t *data, int width, int height, int stride) +{ + uint8_t neighbourhood[25]; + int cnt = 0; + int xx, yy; + + for (yy = y - 2; yy <= y + 2; yy++) { + if (yy < 0) + continue; + if (yy >= height) + continue; + + for (xx = x - 2; xx <= x + 2; xx++) { + if (xx < 0) + continue; + if (xx >= width) + continue; + + neighbourhood[cnt++] = get_pixel8 (xx, yy, data, stride); + } + } + + return median (neighbourhood, cnt); +} + +static cairo_bool_t +compare_images (cairo_surface_t *a, + cairo_surface_t *b) +{ + int width, height, stride; + const uint8_t *aa, *bb; + int x, y; + + if (cairo_surface_status (a) || cairo_surface_status (b)) + return FALSE; + + if (cairo_surface_get_type (a) != cairo_surface_get_type (b)) + return FALSE; + + if (cairo_image_surface_get_format (a) != cairo_image_surface_get_format (b)) + return FALSE; + + if (cairo_image_surface_get_width (a) != cairo_image_surface_get_width (b)) + return FALSE; + + if (cairo_image_surface_get_height (a) != cairo_image_surface_get_height (b)) + return FALSE; + + if (cairo_image_surface_get_stride (a) != cairo_image_surface_get_stride (b)) + return FALSE; + + + width = cairo_image_surface_get_width (a); + height = cairo_image_surface_get_height (a); + stride = cairo_image_surface_get_stride (a); + + aa = cairo_image_surface_get_data (a); + bb = cairo_image_surface_get_data (b); + switch (cairo_image_surface_get_format (a)) { + case CAIRO_FORMAT_ARGB32: + for (y = 0; y < height; y++) { + const uint32_t *ua = (uint32_t *) aa; + const uint32_t *ub = (uint32_t *) bb; + for (x = 0; x < width; x++) { + if (ua[x] != ub[x]) { + int channel; + + for (channel = 0; channel < 4; channel++) { + unsigned va, vb, diff; + + va = (ua[x] >> (channel*8)) & 0xff; + vb = (ub[x] >> (channel*8)) & 0xff; + diff = abs (va - vb); + if (diff > 1) { + va = get_median_32 (x, y, channel, aa, width, height, stride); + vb = get_median_32 (x, y, channel, bb, width, height, stride); + diff = abs (va - vb); + if (diff > 1) + return FALSE; + } + } + } + } + aa += stride; + bb += stride; + } + break; + + case CAIRO_FORMAT_RGB24: + for (y = 0; y < height; y++) { + const uint32_t *ua = (uint32_t *) aa; + const uint32_t *ub = (uint32_t *) bb; + for (x = 0; x < width; x++) { + if ((ua[x] & 0x00ffffff) != (ub[x] & 0x00ffffff)) { + int channel; + + for (channel = 0; channel < 3; channel++) { + unsigned va, vb, diff; + + va = (ua[x] >> (channel*8)) & 0xff; + vb = (ub[x] >> (channel*8)) & 0xff; + diff = abs (va - vb); + if (diff > 1) { + va = get_median_32 (x, y, channel, aa, width, height, stride); + vb = get_median_32 (x, y, channel, bb, width, height, stride); + diff = abs (va - vb); + if (diff > 1) + return FALSE; + } + } + } + } + aa += stride; + bb += stride; + } + break; + + case CAIRO_FORMAT_A8: + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + if (aa[x] != bb[x]) { + unsigned diff = abs (aa[x] - bb[x]); + if (diff > 1) { + uint8_t va, vb; + + va = get_median_8 (x, y, aa, width, height, stride); + vb = get_median_8 (x, y, bb, width, height, stride); + diff = abs (va - vb); + if (diff > 1) + return FALSE; + } + + } + } + aa += stride; + bb += stride; + } + break; + + case CAIRO_FORMAT_A1: + width /= 8; + for (y = 0; y < height; y++) { + if (memcmp (aa, bb, width)) + return FALSE; + aa += stride; + bb += stride; + } + break; + + case CAIRO_FORMAT_INVALID: + case CAIRO_FORMAT_RGB16_565: /* XXX */ + break; + } + + return TRUE; +} + +static int +check_images (struct clients *clients) +{ + int i, j; + + for (i = 0; i < clients->count; i++) { + struct client_info *c = &clients->clients[i]; + + if (c->reference == NULL) + continue; + + for (j = 0; j < clients->count; j++) { + struct client_info *ref = &clients->clients[j]; + + if (strcmp (c->reference, ref->name)) + continue; + + if (! compare_images (c->image, ref->image)) + return 0; + } + } + + return 1; +} + +static gchar * +checksum (const char *filename) +{ + gchar *str = NULL; + gchar *data; + gsize len; + + if (g_file_get_contents (filename, &data, &len, NULL)) { + str = g_compute_checksum_for_data (G_CHECKSUM_SHA1, (guchar *) data, len); + g_free (data); + } + + return str; +} + +static void +write_trace (struct clients *clients) +{ + cairo_device_t *ctx; + gchar *csum; + char buf[4096]; + int i; + + mkdir ("output", 0777); + + ctx = cairo_script_create ("output/cairo-sphinx.trace"); + cairo_script_from_recording_surface (ctx, clients->recording); + cairo_device_destroy (ctx); + + csum = checksum ("output/cairo-sphinx.trace"); + + sprintf (buf, "output/%s.trace", csum); + if (! g_file_test (buf, G_FILE_TEST_EXISTS)) { + rename ("output/cairo-sphinx.trace", buf); + + sprintf (buf, "output/%s.recording.png", csum); + cairo_surface_write_to_png (clients->recording, buf); + + for (i = 0; i < clients->count; i++) { + struct client_info *c = &clients->clients[i]; + if (c->image != NULL) { + sprintf (buf, "output/%s.%s.png", csum, c->name); + cairo_surface_write_to_png (c->image, buf); + } + } + } +} + +static void +clients_complete (struct clients *clients, int fd) +{ + int i; + + for (i = 0; i < clients->count; i++) { + if (clients->clients[i].sk == fd) { + break; + } + } + if (i == clients->count) + return; + + if (++clients->complete != clients->count) + return; + + clients->offset = 0; + clients->complete = 0; + + if (! check_images (clients)) + write_trace (clients); + + /* ack */ + for (i = 0; i < clients->count; i++) { + struct client_info *c = &clients->clients[i]; + + cairo_surface_destroy (c->image); + c->image = NULL; + + if (! writen (c->sk, &clients->serial, sizeof (clients->serial))) + continue; + + c->image_serial = 0; + } + + clients->recording = NULL; + clients->serial = 0; +} + +static void +clients_recording (struct clients *clients, int fd, char *info) +{ + sscanf (info, "%p %lu", &clients->recording, &clients->serial); + clients_complete (clients, fd); +} + +static void +clients_remove (struct clients *clients, int fd) +{ + int i, j; + + for (i = 0; i < clients->count; i++) { + struct client_info *c = &clients->clients[i]; + if (c->sk == fd) { + free (c->out_buf); + break; + } + } + + for (j = i++; i < clients->count; i++) + clients->clients[j] = clients->clients[i]; + + clients->count = j; +} + +static void +clients_send_trace (struct clients *clients, + const char * const line, const int len) +{ + int i; + + for (i = 0; i < clients->count; i++) { + struct client_info *c = &clients->clients[i]; + int ret, rem = len; + + if (c->trace == -1) + continue; + + if (c->out_len) { + ret = write (c->trace, c->out_buf, c->out_len); + if (ret > 0) { + c->out_len -= ret; + if (c->out_len) + memmove (c->out_buf, c->out_buf + ret, c->out_len); + } + } + + if (! c->out_len) { + ret = write (c->trace, line, rem); + if (ret > 0) + rem -= ret; + } + + if (rem) { + if (c->out_len + rem > c->out_size) { + c->out_size *= 2; + c->out_buf = xrealloc (c->out_buf, c->out_size); + } + + memcpy (c->out_buf + c->out_len, line, rem); + c->out_len += rem; + } + } +} + +static void +clients_fini (struct clients *clients) +{ + shm_unlink (clients->shm_path); + munmap (clients->base, DATA_SIZE); + free (clients->clients); +} + +static int +nonblocking (int fd) +{ + long flags; + + flags = fcntl (fd, F_GETFL); + if (flags == -1) + return -1; + + return fcntl (fd, F_SETFL, flags | O_NONBLOCK); +} + +static void * +request_image (struct client *c, + struct context_closure *closure, + cairo_format_t format, + int width, int height, int stride) +{ + char buf[1024]; + unsigned long offset = -1; + int len; + + assert (format != CAIRO_FORMAT_INVALID); + + len = sprintf (buf, ".image %lu %d %d %d %d\n", + closure->id, format, width, height, stride); + writen (c->sk, buf, len); + + readn (c->sk, &offset, sizeof (offset)); + if (offset == (unsigned long) -1) + return NULL; + + return (uint8_t *) c->base + offset; +} + +static cairo_format_t +format_for_content (cairo_content_t content) +{ + switch (content) { + case CAIRO_CONTENT_ALPHA: + return CAIRO_FORMAT_A8; + case CAIRO_CONTENT_COLOR: + return CAIRO_FORMAT_RGB24; + default: + case CAIRO_CONTENT_COLOR_ALPHA: + return CAIRO_FORMAT_ARGB32; + } +} + +static void +get_surface_size (cairo_surface_t *surface, + int *width, int *height, + cairo_format_t *format) +{ + if (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE) { + *width = cairo_image_surface_get_width (surface); + *height = cairo_image_surface_get_height (surface); + *format = cairo_image_surface_get_format (surface); + } else { + struct surface_tag *tag; + + tag = cairo_surface_get_user_data (surface, &surface_tag); + if (tag != NULL) { + *width = tag->width; + *height = tag->height; + } else { + double x0, x1, y0, y1; + cairo_t *cr; + + /* presumably created using cairo_surface_create_similar() */ + cr = cairo_create (surface); + cairo_clip_extents (cr, &x0, &y0, &x1, &y1); + cairo_destroy (cr); + + tag = xmalloc (sizeof (*tag)); + *width = tag->width = ceil (x1 - x0); + *height = tag->height = ceil (y1 - y0); + + if (cairo_surface_set_user_data (surface, &surface_tag, tag, free)) + exit (-1); + } + } +} + + +static void +send_surface (struct client *c, + struct context_closure *closure) +{ + cairo_surface_t *source = closure->surface; + cairo_surface_t *image; + cairo_format_t format = CAIRO_FORMAT_INVALID; + cairo_t *cr; + int width, height, stride; + void *data; + unsigned long serial; + + get_surface_size (source, &width, &height, &format); + if (format == CAIRO_FORMAT_INVALID) + format = format_for_content (cairo_surface_get_content (source)); + + stride = cairo_format_stride_for_width (format, width); + + data = request_image (c, closure, format, width, height, stride); + if (data == NULL) + exit (-1); + + image = cairo_image_surface_create_for_data (data, + format, + width, height, + stride); + cr = cairo_create (image); + cairo_surface_destroy (image); + + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + cairo_set_source_surface (cr, source, 0, 0); + cairo_paint (cr); + cairo_destroy (cr); + + /* signal completion */ + writen (c->sk, ".complete\n", strlen (".complete\n")); + + /* wait for image check */ + serial = 0; + readn (c->sk, &serial, sizeof (serial)); + if (serial != closure->id) + exit (-1); +} + +static void +send_recording (struct client *c, + struct context_closure *closure) +{ + cairo_surface_t *source = closure->surface; + char buf[1024]; + int len; + unsigned long serial; + + assert (cairo_surface_get_type (source) == CAIRO_SURFACE_TYPE_RECORDING); + len = sprintf (buf, ".recording %p %lu\n", source, closure->id); + writen (c->sk, buf, len); + + /* wait for image check */ + + serial = 0; + readn (c->sk, &serial, sizeof (serial)); + if (serial != closure->id) + exit (-1); +} + +static cairo_surface_t * +_surface_create (void *closure, + cairo_content_t content, + double width, double height, + long uid) +{ + struct client *c = closure; + cairo_surface_t *surface; + + surface = cairo_surface_create_similar (c->surface, + content, width, height); + if (cairo_surface_get_type (surface) != CAIRO_SURFACE_TYPE_IMAGE) { + struct surface_tag *tag; + + tag = xmalloc (sizeof (*tag)); + tag->width = width; + tag->height = height; + if (cairo_surface_set_user_data (surface, &surface_tag, tag, free)) + exit (-1); + } + + return surface; +} + +static cairo_t * +_context_create (void *closure, cairo_surface_t *surface) +{ + struct client *c = closure; + struct context_closure *l; + cairo_bool_t foreign = FALSE; + + l = xmalloc (sizeof (*l)); + l->next = c->contexts; + l->surface = surface; + l->original = cairo_surface_reference (surface); + l->id = ++c->context_id; + if (l->id == 0) + l->id = ++c->context_id; + c->contexts = l; + + /* record everything, including writes to images */ + if (c->target == NULL) { + if (cairo_surface_get_type (surface) != CAIRO_SURFACE_TYPE_RECORDING) { + cairo_format_t format; + int width, height; + + get_surface_size (surface, &width, &height, &format); + l->surface = cairo_surface_create_similar (c->surface, + cairo_surface_get_content (surface), + width, height); + foreign = TRUE; + } + } + + l->context = cairo_create (l->surface); + if (foreign) { + cairo_set_source_surface (l->context, surface, 0, 0); + cairo_paint (l->context); + } + + return l->context; +} + +static void +_context_destroy (void *closure, void *ptr) +{ + struct client *c = closure; + struct context_closure *l, **prev = &c->contexts; + + while ((l = *prev) != NULL) { + if (l->context == ptr) { + if (cairo_surface_status (l->surface) == CAIRO_STATUS_SUCCESS) { + if (c->target == NULL) + send_recording (c, l); + else + send_surface (c, l); + } else { + exit (-1); + } + + cairo_surface_destroy (l->original); + *prev = l->next; + free (l); + return; + } + prev = &l->next; + } +} + +static void * +recorder (void *arg) +{ + struct client client; + const cairo_script_interpreter_hooks_t hooks = { + .closure = &client, + .surface_create = _surface_create, + .context_create = _context_create, + .context_destroy = _context_destroy, + }; + char *buf; + int buf_size; + int len = 0, ret; + struct pollfd pfd; + + client.target = NULL; + client.sk = client_socket ("/tmp/cairo-sphinx"); + if (client.sk < 0) + return NULL; + + buf_size = 65536; + buf = xmalloc (buf_size); + + len = sprintf (buf, "client-command target=recording name=.recorder\n"); + if (! writen (client.sk, buf, len)) + return NULL; + + /* drain the shm_path */ + len = readline (client.sk, buf, buf_size); + + pfd.fd = client_socket ("/tmp/cairo-sphinx"); + if (pfd.fd < 0) + return NULL; + + len = sprintf (buf, "client-trace name=.recorder\n"); + if (! writen (pfd.fd, buf, len)) + return NULL; + + client.surface = cairo_recording_surface_create (CAIRO_CONTENT_COLOR_ALPHA, + NULL); + + client.context_id = 0; + client.csi = cairo_script_interpreter_create (); + cairo_script_interpreter_install_hooks (client.csi, &hooks); + + nonblocking (pfd.fd); + pfd.events = POLLIN; + len = 0; + while (poll (&pfd, 1, -1) > 0) { + while ((ret = read (pfd.fd, buf + len, buf_size - len)) > 0) { + int end; + + if (ret == buf_size - len) { + buf_size *= 2; + buf = xrealloc (buf, buf_size); + } + len += ret; + + for (end = len; end > 0 && buf[--end] != '\n'; ) + ; + if (end > 0) { + buf[end] = '\0'; + cairo_script_interpreter_feed_string (client.csi, buf, end); + + len -= end + 1; + if (len) + memmove (buf, buf + end + 1, len); + } + } + if (ret == 0) + break; + if (! (errno == EAGAIN || errno == EINTR)) + break; + } + + cairo_script_interpreter_finish (client.csi); + cairo_script_interpreter_destroy (client.csi); + + cairo_surface_destroy (client.surface); + return NULL; +} + +static int +do_server (const char *path) +{ + pthread_t thread; + struct clients clients; + char line[4096]; + struct pollfd *pfd; + int num_pfd, size_pfd; + int n, cnt, ret = 1; + int sk, source = -1; + int waiter = -1, waiter_count = 0; + int len; + + signal (SIGPIPE, SIG_IGN); + + if (clients_init (&clients) < 0) { + fprintf (stderr, "Failed to initialise clients structure\n"); + return -1; + } + + sk = server_socket (path); + if (sk < 0) { + fprintf (stderr, "Failed to create server socket\n"); + return 1; + } + + if (daemonize () < 0) + return 1; + + if (pthread_create (&thread, NULL, recorder, NULL) < 0) { + fprintf (stderr, "Failed to create spawn recording thread\n"); + return 1; + } + + size_pfd = 4; + pfd = xmalloc (sizeof (*pfd) * size_pfd); + pfd[0].fd = sk; + pfd[0].events = POLLIN; + num_pfd = 1; + + while ((cnt = poll (pfd, num_pfd, -1)) > 0) { + int have_source; + + if (pfd[0].revents) { + while ((sk = accept (pfd[0].fd, NULL, NULL)) != -1) { + len = readline (sk, line, sizeof (line)); + if (strcmp (line, "source") == 0) { + + if (source != -1) + exit (1); + + source = sk; + if (nonblocking (sk) < 0) { + close (sk); + continue; + } + } else if (strncmp (line, "client-command", 14) == 0) { + if (source == -1) + clients_add_command (&clients, sk, line); + } else if (strncmp (line, "client-trace", 12) == 0) { + if (source == -1) { + clients_add_trace (&clients, sk, line); + if (nonblocking (sk) < 0) { + close (sk); + continue; + } + + if (clients.count == waiter_count) { + for (n = 1; n < num_pfd; n++) { + if (pfd[n].fd == waiter) { + pfd[n].fd = -1; + break; + } + } + close (waiter); + waiter_count = -1; + } + } + } else if (strncmp (line, "wait", 4) == 0) { + int count = atoi (line + 5) + 1; + if (clients.count == count) { + close (sk); + continue; + } else { + waiter = sk; + waiter_count = count; + } + } + + if (num_pfd == size_pfd) { + size_pfd *= 2; + pfd = xrealloc (pfd, sizeof (*pfd) * size_pfd); + } + + pfd[num_pfd].fd = sk; + pfd[num_pfd].events = POLLIN; + pfd[num_pfd].revents = 0; + num_pfd++; + } + cnt--; + } + + have_source = 0; + for (n = 1; cnt && n < num_pfd; n++) { + if (! pfd[n].revents) + continue; + cnt--; + + if (pfd[n].fd == -1) + continue; + + if (source == pfd[n].fd) { + have_source = n; + } else { + len = readline (pfd[n].fd, line, sizeof (line)); + if (len < 0) { + clients_remove (&clients, pfd[n].fd); + close (pfd[n].fd); + pfd[n].fd = -1; + continue; + } + + if (strncmp (line, ".image", 6) == 0) { + if (! clients_image (&clients, pfd[n].fd, line + 7)) { + clients_remove (&clients, pfd[n].fd); + close (pfd[n].fd); + pfd[n].fd = -1; + continue; + } + } else if (strncmp (line, ".complete", 9) == 0) { + clients_complete (&clients, pfd[n].fd); + } else if (strncmp (line, ".recording", 10) == 0) { + clients_recording (&clients, pfd[n].fd, line + 6); + } else { + printf ("do_command (%s)\n", line); + } + } + } + + if (have_source) { + do { + len = read (source, line, sizeof (line)); + if (len > 0) { + clients_send_trace (&clients, line, len); + } else if (len == 0) { + close (source); + pfd[have_source].fd = source = -1; + goto done; + } else + break; + } while (1); + } + + for (n = cnt = 1; n < num_pfd; n++) { + if (pfd[n].fd != -1) { + if (cnt != n) + pfd[cnt] = pfd[n]; + cnt++; + } + } + num_pfd = cnt; + } + +done: + ret = 0; + for (n = 0; n < num_pfd; n++) { + if (pfd[n].fd != -1) + close (pfd[n].fd); + } + free (pfd); + clients_fini (&clients); + + return ret; +} + +static void * +client_shm (const char *shm_path) +{ + void *base; + int fd; + + fd = shm_open (shm_path, O_RDWR, 0); + if (fd == -1) + return MAP_FAILED; + + base = mmap (NULL, DATA_SIZE, + PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_NORESERVE, + fd, 0); + close (fd); + + return base; +} + +static int +client_socket (const char *socket_path) +{ + struct sockaddr_un addr; + int sk; + + sk = socket (PF_UNIX, SOCK_STREAM, 0); + if (sk == -1) + return -1; + + memset (&addr, 0, sizeof (addr)); + addr.sun_family = AF_UNIX; + strcpy (addr.sun_path, socket_path); + + if (connect (sk, (struct sockaddr *) &addr, sizeof (addr)) == -1) + return -1; + + return sk; +} + +static int +do_client (int fd, + const char *target, + const char *name, + const char *reference, + cairo_content_t content) +{ + struct client client; + const cairo_script_interpreter_hooks_t hooks = { + .closure = &client, + .surface_create = _surface_create, + .context_create = _context_create, + .context_destroy = _context_destroy, + }; + void *closure; + char *buf; + int buf_size; + int len = 0, ret; + struct pollfd pfd; + + client.sk = fd; + client.target = cairo_boilerplate_get_target_by_name (target, content); + client.context_id = 0; + + client.surface = client.target->create_surface (NULL, content, 1, 1, 1, 1, + CAIRO_BOILERPLATE_MODE_TEST, + &closure); + if (client.surface == NULL) { + fprintf (stderr, "Failed to create target surface: %s.\n", + client.target->name); + return 1; + } + + buf_size = 65536; + buf = xmalloc (buf_size); + + if (reference != NULL) { + len = sprintf (buf, + "client-command name=%s target=%s reference=%s\n", + name, target, reference); + } else { + len = sprintf (buf, + "client-command name=%s target=%s\n", + name, target); + } + if (! writen (fd, buf, len)) + return 1; + + len = readline (fd, buf, buf_size); + client.base = client_shm (buf); + if (client.base == MAP_FAILED) { + fprintf (stderr, "Failed to map shared memory segment '%s'.\n", buf); + return 1; + } + + if (daemonize () < 0) + return 1; + + pfd.fd = client_socket ("/tmp/cairo-sphinx"); + if (pfd.fd < 0) + return 1; + + len = sprintf (buf, "client-trace name=%s\n", name); + if (! writen (pfd.fd, buf, len)) + return 1; + + client.csi = cairo_script_interpreter_create (); + cairo_script_interpreter_install_hooks (client.csi, &hooks); + + nonblocking (pfd.fd); + pfd.events = POLLIN; + len = 0; + while (poll (&pfd, 1, -1) > 0) { + while ((ret = read (pfd.fd, buf + len, buf_size - len)) > 0) { + int end; + + if (ret == buf_size - len) { + buf_size *= 2; + buf = xrealloc (buf, buf_size); + } + len += ret; + + for (end = len; end > 0 && buf[--end] != '\n'; ) + ; + if (end > 0) { + buf[end] = '\0'; + cairo_script_interpreter_feed_string (client.csi, buf, end); + + len -= end + 1; + if (len) + memmove (buf, buf + end + 1, len); + } + } + if (ret == 0) + break; + if (! (errno == EAGAIN || errno == EINTR)) + break; + } + + cairo_script_interpreter_finish (client.csi); + cairo_script_interpreter_destroy (client.csi); + + cairo_surface_destroy (client.surface); + close (fd); + + return 0; +} + +static int +do_exec (int fd, char **argv) +{ + char buf[4096]; + + if (*argv == NULL) + return 0; + + snprintf (buf, sizeof (buf), "%s/cairo-trace.so", LIBDIR); + setenv ("LD_PRELOAD", buf, 1); + + snprintf (buf, sizeof (buf), "0"); + setenv ("CAIRO_TRACE_LINE_INFO", buf, 1); + + snprintf (buf, sizeof (buf), "%d", fd); + setenv ("CAIRO_TRACE_FD", buf, 1); + putenv (buf); + + return execvp (argv[0], argv); +} + +static int +do_wait (int fd) +{ + char buf; + int ret = read (fd, &buf, 1); + return ret != 0; +} + +int +main (int argc, char **argv) +{ + char buf[4096]; + int len; + int fd; + + if (argc == 1) + return do_server ("/tmp/cairo-sphinx"); + + fd = client_socket ("/tmp/cairo-sphinx"); + if (fd < 0) + return 1; + + if (strcmp (argv[1], "client") == 0) { + return do_client (fd, argv[2], argv[3], argv[4], + CAIRO_CONTENT_COLOR_ALPHA); + } + + if (strcmp (argv[1], "wait") == 0) { + len = snprintf (buf, sizeof (buf), "wait %s\n", argv[2]); + if (! writen (fd, buf, len)) + return 1; + + return do_wait (fd); + } + + if (strcmp (argv[1], "exec") == 0) { + len = snprintf (buf, sizeof (buf), "source\n"); + if (! writen (fd, buf, len)) + return 1; + + return do_exec (fd, argv+2); + } + + if (strcmp (argv[1], "replay") == 0) { + len = snprintf (buf, sizeof (buf), "replay %s\n", argv[2]); + return ! writen (fd, buf, len); + } + + return 0; +} diff --git a/libs/cairo-1.16.0/util/cairo-trace/COPYING b/libs/cairo-1.16.0/util/cairo-trace/COPYING new file mode 100644 index 0000000..37aeee0 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-trace/COPYING @@ -0,0 +1,5 @@ +Cairo is free software. + +cairo-trace is released under the terms of the GNU General Public License +(GPL) version 3. Please see COPYING-GPL-3 for the precise terms and +conditions. diff --git a/libs/cairo-1.16.0/util/cairo-trace/COPYING-GPL-3 b/libs/cairo-1.16.0/util/cairo-trace/COPYING-GPL-3 new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-trace/COPYING-GPL-3 @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/libs/cairo-1.16.0/util/cairo-trace/Makefile.am b/libs/cairo-1.16.0/util/cairo-trace/Makefile.am new file mode 100644 index 0000000..a0091f8 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-trace/Makefile.am @@ -0,0 +1,40 @@ +cairolibdir = $(libdir)/cairo +cairooutdir = $(localstatedir)/lib/cairo-trace + +bin_SCRIPTS = cairo-trace +cairolib_LTLIBRARIES = libcairo-trace.la + +AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_builddir)/src + +libcairo_trace_la_SOURCES = trace.c +libcairo_trace_la_CPPFLAGS = -DCAIRO_TRACE_OUTDIR="\"$(cairooutdir)\"" \ + $(AM_CPPFLAGS) +libcairo_trace_la_CFLAGS = $(CAIRO_CFLAGS) $(real_pthread_CFLAGS) +libcairo_trace_la_LDFLAGS = -module -no-undefined -avoid-version + +libcairo_trace_la_LIBADD = $(real_pthread_LIBS) -lz +if CAIRO_HAS_DL +libcairo_trace_la_LIBADD += -ldl +endif + +if CAIRO_HAS_SYMBOL_LOOKUP +libcairo_trace_la_SOURCES += \ + lookup-symbol.c \ + lookup-symbol.h +libcairo_trace_la_LIBADD += $(BFD_LIBS) +endif + + +system-install: install + -mkdir -p $(cairooutdir) + -chmod 01777 $(cairooutdir) + grep -sq $(cairolibdir)/libcairo-trace.so /etc/ld.so.preload || echo $(cairolibdir)/libcairo-trace.so >> /etc/ld.so.preload + +system-uninstall: uninstall + sed -e '/libcairo-trace.so/d' < /etc/ld.so.preload > /tmp/ld.so.preload && mv /tmp/ld.so.preload /etc/ld.so.preload; + +EXTRA_DIST = \ + COPYING \ + COPYING-GPL-3 \ + cairo-trace.in diff --git a/libs/cairo-1.16.0/util/cairo-trace/Makefile.in b/libs/cairo-1.16.0/util/cairo-trace/Makefile.in new file mode 100644 index 0000000..40643c1 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-trace/Makefile.in @@ -0,0 +1,859 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@CAIRO_HAS_DL_TRUE@am__append_1 = -ldl +@CAIRO_HAS_SYMBOL_LOOKUP_TRUE@am__append_2 = \ +@CAIRO_HAS_SYMBOL_LOOKUP_TRUE@ lookup-symbol.c \ +@CAIRO_HAS_SYMBOL_LOOKUP_TRUE@ lookup-symbol.h + +@CAIRO_HAS_SYMBOL_LOOKUP_TRUE@am__append_3 = $(BFD_LIBS) +subdir = util/cairo-trace +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \ + $(top_srcdir)/build/aclocal.compare.m4 \ + $(top_srcdir)/build/aclocal.enable.m4 \ + $(top_srcdir)/build/aclocal.float.m4 \ + $(top_srcdir)/build/aclocal.makefile.m4 \ + $(top_srcdir)/build/aclocal.pkg.m4 \ + $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \ + $(top_srcdir)/build/ltoptions.m4 \ + $(top_srcdir)/build/ltsugar.m4 \ + $(top_srcdir)/build/ltversion.m4 \ + $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/cairo-version.h \ + $(top_srcdir)/build/configure.ac.version \ + $(top_srcdir)/build/configure.ac.tools \ + $(top_srcdir)/build/configure.ac.features \ + $(top_srcdir)/build/configure.ac.warnings \ + $(top_srcdir)/build/configure.ac.system \ + $(top_srcdir)/build/configure.ac.analysis \ + $(top_srcdir)/build/configure.ac.noversion \ + $(top_srcdir)/build/configure.ac.pthread \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = cairo-trace +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(cairolibdir)" "$(DESTDIR)$(bindir)" +LTLIBRARIES = $(cairolib_LTLIBRARIES) +am__DEPENDENCIES_1 = +@CAIRO_HAS_SYMBOL_LOOKUP_TRUE@am__DEPENDENCIES_2 = \ +@CAIRO_HAS_SYMBOL_LOOKUP_TRUE@ $(am__DEPENDENCIES_1) +libcairo_trace_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) +am__libcairo_trace_la_SOURCES_DIST = trace.c lookup-symbol.c \ + lookup-symbol.h +@CAIRO_HAS_SYMBOL_LOOKUP_TRUE@am__objects_1 = libcairo_trace_la-lookup-symbol.lo +am_libcairo_trace_la_OBJECTS = libcairo_trace_la-trace.lo \ + $(am__objects_1) +libcairo_trace_la_OBJECTS = $(am_libcairo_trace_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libcairo_trace_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libcairo_trace_la_CFLAGS) $(CFLAGS) \ + $(libcairo_trace_la_LDFLAGS) $(LDFLAGS) -o $@ +SCRIPTS = $(bin_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libcairo_trace_la_SOURCES) +DIST_SOURCES = $(am__libcairo_trace_la_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/cairo-trace.in \ + $(top_srcdir)/build/depcomp COPYING +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BFD_LIBS = @BFD_LIBS@ +CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_LDFLAGS = @CAIRO_LDFLAGS@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@ +CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@ +CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@ +CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@ +CAIRO_REQUIRES = @CAIRO_REQUIRES@ +CAIRO_TEST_MODE = @CAIRO_TEST_MODE@ +CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@ +CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@ +CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@ +CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@ +CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIND = @FIND@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ +GOBJECT_LIBS = @GOBJECT_LIBS@ +GREP = @GREP@ +GS = @GS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +LIBRSVG_LIBS = @LIBRSVG_LIBS@ +LIBS = @LIBS@ +LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@ +LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LTP = @LTP@ +LTP_GENHTML = @LTP_GENHTML@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@ +PKG_CONFIG = @PKG_CONFIG@ +POPPLER_CFLAGS = @POPPLER_CFLAGS@ +POPPLER_LIBS = @POPPLER_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHLIB_EXT = @SHLIB_EXT@ +SHM_LIBS = @SHM_LIBS@ +SHTOOL = @SHTOOL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +XARGS = @XARGS@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cogl_CFLAGS = @cogl_CFLAGS@ +cogl_LIBS = @cogl_LIBS@ +datadir = @datadir@ +datarootdir = @datarootdir@ +directfb_CFLAGS = @directfb_CFLAGS@ +directfb_LIBS = @directfb_LIBS@ +docdir = @docdir@ +drm_CFLAGS = @drm_CFLAGS@ +drm_LIBS = @drm_LIBS@ +dvidir = @dvidir@ +egl_CFLAGS = @egl_CFLAGS@ +egl_LIBS = @egl_LIBS@ +exec_prefix = @exec_prefix@ +gallium_DIR = @gallium_DIR@ +gl_CFLAGS = @gl_CFLAGS@ +gl_LIBS = @gl_LIBS@ +glesv2_CFLAGS = @glesv2_CFLAGS@ +glesv2_LIBS = @glesv2_LIBS@ +glesv3_CFLAGS = @glesv3_CFLAGS@ +glesv3_LIBS = @glesv3_LIBS@ +glib_CFLAGS = @glib_CFLAGS@ +glib_LIBS = @glib_LIBS@ +gtk_CFLAGS = @gtk_CFLAGS@ +gtk_LIBS = @gtk_LIBS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lzo_LIBS = @lzo_LIBS@ +mandir = @mandir@ +mesa_DIR = @mesa_DIR@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pixman_CFLAGS = @pixman_CFLAGS@ +pixman_LIBS = @pixman_LIBS@ +png_CFLAGS = @png_CFLAGS@ +png_LIBS = @png_LIBS@ +png_REQUIRES = @png_REQUIRES@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pthread_CFLAGS = @pthread_CFLAGS@ +pthread_LIBS = @pthread_LIBS@ +qt_CFLAGS = @qt_CFLAGS@ +qt_LIBS = @qt_LIBS@ +real_pthread_CFLAGS = @real_pthread_CFLAGS@ +real_pthread_LIBS = @real_pthread_LIBS@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +shm_LIBS = @shm_LIBS@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xcb_CFLAGS = @xcb_CFLAGS@ +xcb_LIBS = @xcb_LIBS@ +xcb_shm_CFLAGS = @xcb_shm_CFLAGS@ +xcb_shm_LIBS = @xcb_shm_LIBS@ +xlib_CFLAGS = @xlib_CFLAGS@ +xlib_LIBS = @xlib_LIBS@ +xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@ +xlib_xcb_LIBS = @xlib_xcb_LIBS@ +xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@ +xlib_xrender_LIBS = @xlib_xrender_LIBS@ +cairolibdir = $(libdir)/cairo +cairooutdir = $(localstatedir)/lib/cairo-trace +bin_SCRIPTS = cairo-trace +cairolib_LTLIBRARIES = libcairo-trace.la +AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_builddir)/src + +libcairo_trace_la_SOURCES = trace.c $(am__append_2) +libcairo_trace_la_CPPFLAGS = -DCAIRO_TRACE_OUTDIR="\"$(cairooutdir)\"" \ + $(AM_CPPFLAGS) + +libcairo_trace_la_CFLAGS = $(CAIRO_CFLAGS) $(real_pthread_CFLAGS) +libcairo_trace_la_LDFLAGS = -module -no-undefined -avoid-version +libcairo_trace_la_LIBADD = $(real_pthread_LIBS) -lz $(am__append_1) \ + $(am__append_3) +EXTRA_DIST = \ + COPYING \ + COPYING-GPL-3 \ + cairo-trace.in + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/cairo-trace/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign util/cairo-trace/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +cairo-trace: $(top_builddir)/config.status $(srcdir)/cairo-trace.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +install-cairolibLTLIBRARIES: $(cairolib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(cairolib_LTLIBRARIES)'; test -n "$(cairolibdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(cairolibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(cairolibdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(cairolibdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(cairolibdir)"; \ + } + +uninstall-cairolibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(cairolib_LTLIBRARIES)'; test -n "$(cairolibdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(cairolibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(cairolibdir)/$$f"; \ + done + +clean-cairolibLTLIBRARIES: + -test -z "$(cairolib_LTLIBRARIES)" || rm -f $(cairolib_LTLIBRARIES) + @list='$(cairolib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libcairo-trace.la: $(libcairo_trace_la_OBJECTS) $(libcairo_trace_la_DEPENDENCIES) $(EXTRA_libcairo_trace_la_DEPENDENCIES) + $(AM_V_CCLD)$(libcairo_trace_la_LINK) -rpath $(cairolibdir) $(libcairo_trace_la_OBJECTS) $(libcairo_trace_la_LIBADD) $(LIBS) +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_trace_la-lookup-symbol.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcairo_trace_la-trace.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libcairo_trace_la-trace.lo: trace.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcairo_trace_la_CPPFLAGS) $(CPPFLAGS) $(libcairo_trace_la_CFLAGS) $(CFLAGS) -MT libcairo_trace_la-trace.lo -MD -MP -MF $(DEPDIR)/libcairo_trace_la-trace.Tpo -c -o libcairo_trace_la-trace.lo `test -f 'trace.c' || echo '$(srcdir)/'`trace.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_trace_la-trace.Tpo $(DEPDIR)/libcairo_trace_la-trace.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='trace.c' object='libcairo_trace_la-trace.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcairo_trace_la_CPPFLAGS) $(CPPFLAGS) $(libcairo_trace_la_CFLAGS) $(CFLAGS) -c -o libcairo_trace_la-trace.lo `test -f 'trace.c' || echo '$(srcdir)/'`trace.c + +libcairo_trace_la-lookup-symbol.lo: lookup-symbol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcairo_trace_la_CPPFLAGS) $(CPPFLAGS) $(libcairo_trace_la_CFLAGS) $(CFLAGS) -MT libcairo_trace_la-lookup-symbol.lo -MD -MP -MF $(DEPDIR)/libcairo_trace_la-lookup-symbol.Tpo -c -o libcairo_trace_la-lookup-symbol.lo `test -f 'lookup-symbol.c' || echo '$(srcdir)/'`lookup-symbol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcairo_trace_la-lookup-symbol.Tpo $(DEPDIR)/libcairo_trace_la-lookup-symbol.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lookup-symbol.c' object='libcairo_trace_la-lookup-symbol.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcairo_trace_la_CPPFLAGS) $(CPPFLAGS) $(libcairo_trace_la_CFLAGS) $(CFLAGS) -c -o libcairo_trace_la-lookup-symbol.lo `test -f 'lookup-symbol.c' || echo '$(srcdir)/'`lookup-symbol.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(cairolibdir)" "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-cairolibLTLIBRARIES clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-cairolibLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binSCRIPTS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binSCRIPTS uninstall-cairolibLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-cairolibLTLIBRARIES clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binSCRIPTS install-cairolibLTLIBRARIES install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binSCRIPTS \ + uninstall-cairolibLTLIBRARIES + +.PRECIOUS: Makefile + + +system-install: install + -mkdir -p $(cairooutdir) + -chmod 01777 $(cairooutdir) + grep -sq $(cairolibdir)/libcairo-trace.so /etc/ld.so.preload || echo $(cairolibdir)/libcairo-trace.so >> /etc/ld.so.preload + +system-uninstall: uninstall + sed -e '/libcairo-trace.so/d' < /etc/ld.so.preload > /tmp/ld.so.preload && mv /tmp/ld.so.preload /etc/ld.so.preload; + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libs/cairo-1.16.0/util/cairo-trace/cairo-trace.in b/libs/cairo-1.16.0/util/cairo-trace/cairo-trace.in new file mode 100644 index 0000000..ece90d3 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-trace/cairo-trace.in @@ -0,0 +1,136 @@ +#!/bin/sh + +prefix=@prefix@ +exec_prefix=@exec_prefix@ + +nofile= +flush= +nocallers= +nomarkdirty= +compress= + +usage() { +cat << EOF +usage: cairo-trace [--no-file] command +cairo-trace will generate a log of all calls made by command to +cairo. This log will be stored in a file in the local directory +called command.pid.trace. +Whatever else happens is driven by its argument: + --flush - Flush the output trace after every call. + --no-file - Disable the creation of an output file. Outputs to the + terminal instead. + --no-callers - Do not lookup the caller address/symbol/line whilst tracing. + --mark-dirty - Record image data for cairo_mark_dirty() [default] + --no-mark-dirty - Do not record image data for cairo_mark_dirty() + --compress - Compress the output with LZMA + --profile - Combine --no-callers and --no-mark-dirty and --compress + +Environment variables understood by cairo-trace: + CAIRO_TRACE_FLUSH - flush the output after every function call. + CAIRO_TRACE_LINE_INFO - emit line information for most function calls. +EOF +exit +} + +skip=1 +while test $skip -eq 1; do + skip=0 + case $1 in + --flush) + skip=1 + flush=1 + ;; + --no-file) + skip=1 + nofile=1 + ;; + --no-callers) + skip=1 + nocallers=1 + ;; + --mark-dirty) + skip=1 + nomarkdirty= + ;; + --no-mark-dirty) + skip=1 + nomarkdirty=1 + ;; + --compress) + skip=1 + compress=1 + nofile=1 + ;; + --profile) + skip=1 + compress=1 + nomarkdirty=1 + nocallers=1 + nofile=1 + ;; + --version) + echo "cairo-trace, version @CAIRO_VERSION_MAJOR@.@CAIRO_VERSION_MINOR@.@CAIRO_VERSION_MICRO@." + exit + ;; + --help) + usage + ;; + esac + if test $skip -eq 1; then + shift + fi +done + +if test $# -eq 0; then + usage +fi + +CAIRO_TRACE_PROG_NAME="$1" +export CAIRO_TRACE_PROG_NAME + +if test "x$CAIRO_TRACE_SO" = "x"; then + CAIRO_TRACE_SO="" + for lib in @libdir@/cairo/libcairo-trace.@SHLIB_EXT@ @libdir@/cairo/libcairo-trace.@SHLIB_EXT@* @libdir@/cairo/libcairo-trace.*.@SHLIB_EXT@ ; do + if test -h "$lib" -o -f "$lib"; then + CAIRO_TRACE_SO="$lib" + break + fi + done +fi +if test "x$CAIRO_TRACE_SO" = "x"; then + echo "Could not find the cairo-trace shared library in @libdir@/cairo/." >&2 + echo "Set the CAIRO_TRACE_SO environment variable to the full path of the library." >&2 + exit 15 +fi + +LD_PRELOAD="$CAIRO_TRACE_SO" +DYLD_INSERT_LIBRARIES="$CAIRO_TRACE_SO" +DYLD_FORCE_FLAT_NAMESPACE=1 +export LD_PRELOAD +export DYLD_INSERT_LIBRARIES +export DYLD_FORCE_FLAT_NAMESPACE + +if test -n "$nocallers"; then + CAIRO_TRACE_LINE_INFO=0 + export CAIRO_TRACE_LINE_INFO +fi + +if test -n "$nomarkdirty"; then + CAIRO_TRACE_MARK_DIRTY=0 + export CAIRO_TRACE_MARK_DIRTY +fi + +if test -n "$flush"; then + CAIRO_TRACE_FLUSH=1 + export CAIRO_TRACE_FLUSH +fi + +if test -z "$nofile"; then + CAIRO_TRACE_OUTDIR=`pwd` "$@" +elif test -n "$compress"; then + name=`basename $1` + echo Generating compressed trace file $name.$$.lzma + CAIRO_TRACE_FD=3 "$@" 3>&1 >/dev/null | lzma -cz9 > $name.$$.lzma +else + CAIRO_TRACE_FD=3 "$@" 3>&1 >/dev/null +fi diff --git a/libs/cairo-1.16.0/util/cairo-trace/lookup-symbol.c b/libs/cairo-1.16.0/util/cairo-trace/lookup-symbol.c new file mode 100644 index 0000000..f9665b3 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-trace/lookup-symbol.c @@ -0,0 +1,331 @@ +/* cairo-trace - a utility to record and replay calls to the Cairo library. + * + * Copyright © 2008 Chris Wilson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* + * A less hacky utility to lookup the debug strings for a particular + * .text address. + * Derived from backtrace-symbols.c in cairo by Chris Wilson. + */ + +/* + A hacky replacement for backtrace_symbols in glibc + + backtrace_symbols in glibc looks up symbols using dladdr which is limited + in the symbols that it sees. libbacktracesymbols opens the executable and + shared libraries using libbfd and will look up backtrace information using + the symbol table and the dwarf line information. + + It may make more sense for this program to use libelf instead of libbfd. + However, I have not investigated that yet. + + Derived from addr2line.c from GNU Binutils by Jeff Muizelaar + + Copyright 2007 Jeff Muizelaar + */ + +/* addr2line.c -- convert addresses to line number and function name + Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Contributed by Ulrich Lauther <Ulrich.Lauther@mchp.siemens.de> + + This file was part of GNU Binutils. + */ + +#define _GNU_SOURCE + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define true 1 +#define false 0 + +#include "lookup-symbol.h" + +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <link.h> +#include <string.h> +#include <pthread.h> + +#if HAVE_BFD +#include <bfd.h> +#include <libiberty.h> + +struct symtab { + bfd *bfd; + asymbol **syms; +}; + +struct symbol { + int found; + bfd_vma pc; + struct symtab *symtab; + const char *filename; + const char *functionname; + unsigned int line; +}; + + +static void +_symtab_fini (struct symtab *symtab) +{ + free (symtab->syms); + if (symtab->bfd != NULL) + bfd_close (symtab->bfd); +} + +/* Read in the symbol table. */ +static int +_symtab_init (struct symtab *symtab, const char *filename) +{ + char **matching; + long symcount; + unsigned int size; + + symtab->bfd = NULL; + symtab->syms = NULL; + + symtab->bfd = bfd_openr (filename, NULL); + if (symtab->bfd == NULL) + goto BAIL; + + if (bfd_check_format (symtab->bfd, bfd_archive)) + goto BAIL; + + if (! bfd_check_format_matches (symtab->bfd, bfd_object, &matching)) + goto BAIL; + + symcount = bfd_read_minisymbols (symtab->bfd, false, (PTR) &symtab->syms, &size); + if (symcount == 0) { + symcount = bfd_read_minisymbols (symtab->bfd, true /* dynamic */ , + (PTR) &symtab->syms, &size); + } + if (symcount < 0) + goto BAIL; + + if ((bfd_get_file_flags (symtab->bfd) & HAS_SYMS) == 0) + goto BAIL; + + return 1; + +BAIL: + _symtab_fini (symtab); + return 0; +} + +/* Look for an address in a section. + * This is called via bfd_map_over_sections. + */ +static void +find_address_in_section (bfd *abfd, + asection *section, + void *data) +{ + bfd_vma vma; + bfd_size_type size; + struct symbol *symbol = data; + struct symtab *symtab = symbol->symtab; + + if (symbol->found) + return; + + if ((bfd_get_section_flags (symtab->bfd, section) & SEC_ALLOC) == 0) + return; + + vma = bfd_get_section_vma (symtab->bfd, section); + if (symbol->pc < vma) + return; + + size = bfd_section_size (symtab->bfd, section); + if (symbol->pc >= vma + size) + return; + + symbol->found = bfd_find_nearest_line (symtab->bfd, section, + symtab->syms, + symbol->pc - vma, + &symbol->filename, + &symbol->functionname, + &symbol->line); +} + +static void +_symbol_fini (struct symbol *symbol) +{ +} + +static void +_symbol_init (struct symbol *symbol, struct symtab *symtab, bfd_vma addr) +{ + symbol->found = false; + symbol->symtab = symtab; + symbol->pc = addr; +} + +static void +_symbol_print (struct symbol *symbol, char *buf, int buflen, const char *filename) +{ + const char *name, *h; + char path[1024]; + + if (! symbol->found) + return; + + name = symbol->functionname; + if (name == NULL || *name == '\0') + name = "??"; + + if (symbol->filename != NULL) + filename = symbol->filename; + if (strcmp (filename, "/proc/self/exe") == 0) { + int len = readlink ("/proc/self/exe", path, sizeof (path) - 1); + if (len != -1) { + path[len] = '\0'; + filename = path; + } + } + h = strrchr (filename, '/'); + if (h != NULL) + filename = h + 1; + + if (symbol->line) { + snprintf (buf, buflen, "%s() [%s:%u]", + name, filename, symbol->line); + } else { + snprintf (buf, buflen, "%s() [%s]", name, filename); + } +} +#endif + +struct file_match { + const char *file; + ElfW(Addr) address; + ElfW(Addr) base; + void *hdr; +}; + +static int +find_matching_file (struct dl_phdr_info *info, size_t size, void *data) +{ + struct file_match *match = data; + /* This code is modeled from Gfind_proc_info-lsb.c:callback() from libunwind */ + long n; + const ElfW(Phdr) *phdr; + ElfW(Addr) load_base = info->dlpi_addr; + + phdr = info->dlpi_phdr; + for (n = info->dlpi_phnum; --n >= 0; phdr++) { + if (phdr->p_type == PT_LOAD) { + ElfW(Addr) vaddr = phdr->p_vaddr + load_base; + if (match->address >= vaddr && + match->address < vaddr + phdr->p_memsz) + { + /* we found a match */ + match->file = info->dlpi_name; + match->base = info->dlpi_addr; + return 1; + } + } + } + + return 0; +} + +struct symbol_cache_entry { + const void *ptr; + struct symbol_cache_entry *hash_prev, *hash_next; + char name[0]; +}; + +static struct symbol_cache_entry *symbol_cache_hash[13477]; +static pthread_mutex_t symbol_cache_mutex = PTHREAD_MUTEX_INITIALIZER; + +char * +lookup_symbol (char *buf, int buflen, const void *ptr) +{ + struct file_match match; +#if HAVE_BFD + struct symtab symtab; + struct symbol symbol; +#endif + struct symbol_cache_entry *cache; + int bucket; + int len; + + bucket = (unsigned long) ptr % (sizeof (symbol_cache_hash) / sizeof (symbol_cache_hash[0])); + pthread_mutex_lock (&symbol_cache_mutex); + for (cache = symbol_cache_hash[bucket]; + cache != NULL; + cache = cache->hash_next) + { + if (cache->ptr == ptr) { + if (cache->hash_prev != NULL) { + cache->hash_prev->hash_next = cache->hash_next; + if (cache->hash_next != NULL) + cache->hash_next->hash_prev = cache->hash_prev; + cache->hash_prev = NULL; + cache->hash_next = symbol_cache_hash[bucket]; + symbol_cache_hash[bucket]->hash_prev = cache; + symbol_cache_hash[bucket] = cache; + } + + pthread_mutex_unlock (&symbol_cache_mutex); + return cache->name; + } + } + pthread_mutex_unlock (&symbol_cache_mutex); + + match.file = NULL; + match.address = (ElfW(Addr)) ptr; + dl_iterate_phdr (find_matching_file, &match); + + snprintf (buf, buflen, "0x%llx", + (long long unsigned int) match.address); + + if (match.file == NULL || *match.file == '\0') + match.file = "/proc/self/exe"; + +#if HAVE_BFD + if (_symtab_init (&symtab, match.file)) { + _symbol_init (&symbol, &symtab, match.address - match.base); + bfd_map_over_sections (symtab.bfd, find_address_in_section, &symbol); + if (symbol.found) + _symbol_print (&symbol, buf, buflen, match.file); + _symbol_fini (&symbol); + + _symtab_fini (&symtab); + } +#endif + + len = strlen (buf); + cache = malloc (sizeof (struct symbol_cache_entry) + len + 1); + if (cache != NULL) { + cache->ptr = ptr; + memcpy (cache->name, buf, len + 1); + + pthread_mutex_lock (&symbol_cache_mutex); + cache->hash_prev = NULL; + cache->hash_next = symbol_cache_hash[bucket]; + if (symbol_cache_hash[bucket] != NULL) + symbol_cache_hash[bucket]->hash_prev = cache; + symbol_cache_hash[bucket] = cache; + pthread_mutex_unlock (&symbol_cache_mutex); + } + + return buf; +} diff --git a/libs/cairo-1.16.0/util/cairo-trace/lookup-symbol.h b/libs/cairo-1.16.0/util/cairo-trace/lookup-symbol.h new file mode 100644 index 0000000..83817ed --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-trace/lookup-symbol.h @@ -0,0 +1,24 @@ +/* cairo-trace - a utility to record and replay calls to the Cairo library. + * + * Copyright © 2008 Chris Wilson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef LOOKUP_SYMBOLS_H + +char * +lookup_symbol (char *buf, int len, const void *ptr); + +#endif /*LOOKUP_SYMBOLS_H */ diff --git a/libs/cairo-1.16.0/util/cairo-trace/trace.c b/libs/cairo-1.16.0/util/cairo-trace/trace.c new file mode 100644 index 0000000..1fe130b --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-trace/trace.c @@ -0,0 +1,5587 @@ +/* cairo-trace - a utility to record and replay calls to the Cairo library. + * + * Copyright © 2008 Chris Wilson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#define _GNU_SOURCE + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* The autoconf on OpenBSD 4.5 produces the malformed constant name + * SIZEOF_VOID__ rather than SIZEOF_VOID_P. Work around that here. */ +#if !defined(SIZEOF_VOID_P) && defined(SIZEOF_VOID__) +# define SIZEOF_VOID_P SIZEOF_VOID__ +#endif + +#include <dlfcn.h> +#include <stdint.h> +#include <stdbool.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <unistd.h> +#include <errno.h> +#include <pthread.h> +#include <zlib.h> +#include <math.h> +#include <locale.h> /* for locale independent %f printing */ +#include <ctype.h> +#include <assert.h> +#include <stdlib.h> +#include <limits.h> +#include <stdarg.h> + +#include <cairo.h> +#if CAIRO_HAS_FT_FONT +# include <cairo-ft.h> +#endif + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#ifndef CAIRO_TRACE_OUTDIR +#define CAIRO_TRACE_OUTDIR "." +#endif + +#define DEBUG_STACK 0 + +#if HAVE_BYTESWAP_H +# include <byteswap.h> +#endif +#ifndef bswap_16 +# define bswap_16(p) \ + (((((uint16_t)(p)) & 0x00ff) << 8) | \ + (((uint16_t)(p)) >> 8)) +#endif +#ifndef bswap_32 +# define bswap_32(p) \ + (((((uint32_t)(p)) & 0x000000ff) << 24) | \ + ((((uint32_t)(p)) & 0x0000ff00) << 8) | \ + ((((uint32_t)(p)) & 0x00ff0000) >> 8) | \ + ((((uint32_t)(p))) >> 24)) +#endif + +#if WORDS_BIGENDIAN +#define le16(x) bswap_16 (x) +#define le32(x) bswap_32 (x) +#define be16(x) x +#define be32(x) x +#define to_be32(x) x +#else +#define le16(x) x +#define le32(x) x +#define be16(x) bswap_16 (x) +#define be32(x) bswap_32 (x) +#define to_be32(x) bswap_32 (x) +#endif + +#if CAIRO_HAS_SYMBOL_LOOKUP +#include "lookup-symbol.h" +#endif + +/* Reverse the bits in a byte with 7 operations (no 64-bit): + * Devised by Sean Anderson, July 13, 2001. + * Source: http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits + */ +#define CAIRO_BITSWAP8(c) ((((c) * 0x0802LU & 0x22110LU) | ((c) * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16) + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) +#define CAIRO_PRINTF_FORMAT(fmt_index, va_index) \ + __attribute__((__format__(__printf__, fmt_index, va_index))) +#else +#define CAIRO_PRINTF_FORMAT(fmt_index, va_index) +#endif + +/* XXX implement manual vprintf so that the user can control precision of + * printed numbers. + */ + +static void *_dlhandle = RTLD_NEXT; +#define DLCALL(name, args...) ({ \ + static typeof (&name) name##_real; \ + if (name##_real == NULL) { \ + name##_real = (typeof (&name))(dlsym (_dlhandle, #name)); \ + if (name##_real == NULL && _dlhandle == RTLD_NEXT) { \ + _dlhandle = dlopen ("libcairo." SHARED_LIB_EXT, RTLD_LAZY); \ + name##_real = (typeof (&name))(dlsym (_dlhandle, #name)); \ + assert (name##_real != NULL); \ + } \ + } \ + (*name##_real) (args); \ +}) + +#ifndef ARRAY_LENGTH +#define ARRAY_LENGTH(__array) ((int) (sizeof (__array) / sizeof (__array[0]))) +#endif + +#if SIZEOF_VOID_P == 4 +#define PTR_SHIFT 2 +#elif SIZEOF_VOID_P == 8 +#define PTR_SHIFT 3 +#else +#error Unexpected pointer size +#endif +#define BUCKET(b, ptr) (((unsigned long) (ptr) >> PTR_SHIFT) % ARRAY_LENGTH (b)) + +#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) +#define _BOOLEAN_EXPR(expr) \ + __extension__ ({ \ + int _boolean_var_; \ + if (expr) \ + _boolean_var_ = 1; \ + else \ + _boolean_var_ = 0; \ + _boolean_var_; \ +}) +#define LIKELY(expr) (__builtin_expect (_BOOLEAN_EXPR(expr), 1)) +#define UNLIKELY(expr) (__builtin_expect (_BOOLEAN_EXPR(expr), 0)) +#else +#define LIKELY(expr) (expr) +#define UNLIKELY(expr) (expr) +#endif + +typedef struct _object Object; +typedef struct _type Type; + +struct _object { + const void *addr; + Type *type; + unsigned long int token; + int width, height; + cairo_bool_t foreign; + cairo_bool_t defined; + cairo_bool_t unknown; + int operand; + void *data; + void (*destroy)(void *); + Object *next, *prev; +}; + +struct _type { + const char *name; + + enum operand_type { + NONE, + SURFACE, + CONTEXT, + FONT_FACE, + PATTERN, + SCALED_FONT, + _N_OP_TYPES + } op_type; + const char *op_code; + + pthread_mutex_t mutex; + struct _bitmap { + unsigned long int min; + unsigned long int count; + unsigned int map[64]; + struct _bitmap *next; + } map; + Object *objects[607]; + Type *next; +}; + +static struct _type_table { + pthread_mutex_t mutex; + Type *op_types[_N_OP_TYPES]; +} Types; + +static FILE *logfile; +static cairo_bool_t _flush; +static cairo_bool_t _error; +static cairo_bool_t _line_info; +static cairo_bool_t _mark_dirty; +static const cairo_user_data_key_t destroy_key; +static pthread_once_t once_control = PTHREAD_ONCE_INIT; +static pthread_key_t counter_key; + +static void _init_trace (void); + +#define INIT_TRACE_ONCE() pthread_once (&once_control, _init_trace) + +#if __GNUC__ >= 3 && defined(__ELF__) && !defined(__sun) +# define _enter_trace() INIT_TRACE_ONCE () +# define _exit_trace() do { } while (0) +# define _should_trace() 1 +# define USE_ENTER_EXIT 0 +#else +static void _enter_trace (void); +static void _exit_trace (void); +static cairo_bool_t _should_trace (void); +# define USE_ENTER_EXIT 1 +#endif + +#if HAVE_BUILTIN_RETURN_ADDRESS && CAIRO_HAS_SYMBOL_LOOKUP +#define _emit_line_info() do { \ + if (_line_info && _write_lock ()) { \ + void *addr = __builtin_return_address(0); \ + char caller[1024]; \ + _trace_printf ("%% %s() called by %s\n", __FUNCTION__, \ + lookup_symbol (caller, sizeof (caller), addr)); \ + _write_unlock (); \ + } \ +} while (0) +#else +#define _emit_line_info() +#endif + +static void +_type_release_token (Type *t, unsigned long int token) +{ + struct _bitmap *b, **prev = NULL; + + b = &t->map; + while (b != NULL) { + if (token < b->min + sizeof (b->map) * CHAR_BIT) { + unsigned int bit, elem; + + token -= b->min; + elem = token / (sizeof (b->map[0]) * CHAR_BIT); + bit = token % (sizeof (b->map[0]) * CHAR_BIT); + b->map[elem] &= ~(1 << bit); + if (! --b->count && prev) { + *prev = b->next; + free (b); + } + return; + } + prev = &b->next; + b = b->next; + } +} + +static unsigned long int +_type_next_token (Type *t) +{ + struct _bitmap *b, *bb, **prev = NULL; + unsigned long int min = 0; + + b = &t->map; + while (b != NULL) { + if (b->min != min) + break; + + if (b->count < sizeof (b->map) * CHAR_BIT) { + unsigned int n, m, bit; + for (n = 0; n < ARRAY_LENGTH (b->map); n++) { + if (b->map[n] == (unsigned int) -1) + continue; + + for (m=0, bit=1; m<sizeof (b->map[0])*CHAR_BIT; m++, bit<<=1) { + if ((b->map[n] & bit) == 0) { + b->map[n] |= bit; + b->count++; + return n * sizeof (b->map[0])*CHAR_BIT + m + b->min; + } + } + } + } + min += sizeof (b->map) * CHAR_BIT; + + prev = &b->next; + b = b->next; + } + assert (prev != NULL); + + bb = malloc (sizeof (struct _bitmap)); + + *prev = bb; + bb->next = b; + bb->min = min; + bb->count = 1; + bb->map[0] = 0x1; + memset (bb->map + 1, 0, sizeof (bb->map) - sizeof (bb->map[0])); + + return min; +} + +static void +_object_destroy (Object *obj) +{ + int bucket; + + pthread_mutex_lock (&obj->type->mutex); + bucket = BUCKET (obj->type->objects, obj->addr); + _type_release_token (obj->type, obj->token); + + if (obj->prev != NULL) + obj->prev->next = obj->next; + else + obj->type->objects[bucket] = obj->next; + + if (obj->next != NULL) + obj->next->prev = obj->prev; + pthread_mutex_unlock (&obj->type->mutex); + + if (obj->data != NULL && obj->destroy != NULL) + obj->destroy (obj->data); + + free (obj); +} + +static void +_type_create (const char *typename, + enum operand_type op_type, + const char *op_code) +{ + Type *t; + + pthread_mutex_lock (&Types.mutex); + + t = malloc (sizeof (Type)); + t->name = typename; + t->op_type = op_type; + t->op_code = op_code; + + pthread_mutex_init (&t->mutex, NULL); + + t->map.min = 0; + t->map.count = 0; + memset (t->map.map, 0, sizeof (t->map.map)); + t->map.next = NULL; + + memset (t->objects, 0, sizeof (t->objects)); + + t->next = NULL; + + Types.op_types[op_type] = t; + pthread_mutex_unlock (&Types.mutex); +} + +static Type * +_get_type (enum operand_type type) +{ + return Types.op_types[type]; +} + +static void +_type_destroy (Type *t) +{ + int n; + struct _bitmap *b; + + for (n = 0; n < ARRAY_LENGTH (t->objects); n++) { + Object *obj = t->objects[n]; + while (obj != NULL) { + Object *next = obj->next; + _object_destroy (obj); + obj = next; + } + } + + b = t->map.next; + while (b != NULL) { + struct _bitmap *next = b->next; + free (b); + b = next; + } + + pthread_mutex_destroy (&t->mutex); + free (t); +} + +static Object * +_type_get_object (Type *type, const void *ptr) +{ + Object *obj; + int bucket = BUCKET (type->objects, ptr); + + for (obj = type->objects[bucket]; obj != NULL; obj = obj->next) { + if (obj->addr == ptr) { + if (obj->prev != NULL) { /* mru */ + obj->prev->next = obj->next; + if (obj->next != NULL) + obj->next->prev = obj->prev; + obj->prev = NULL; + type->objects[bucket]->prev = obj; + obj->next = type->objects[bucket]; + type->objects[bucket] = obj; + } + return obj; + } + } + + return NULL; +} + +static Object * +_object_create (Type *type, const void *ptr) +{ + Object *obj; + int bucket = BUCKET (type->objects, ptr); + + obj = malloc (sizeof (Object)); + obj->unknown = TRUE; + obj->defined = FALSE; + obj->foreign = FALSE; + obj->operand = -1; + obj->type = type; + obj->addr = ptr; + obj->token = _type_next_token (type); + obj->data = NULL; + obj->destroy = NULL; + obj->prev = NULL; + obj->next = type->objects[bucket]; + if (type->objects[bucket] != NULL) + type->objects[bucket]->prev = obj; + type->objects[bucket] = obj; + + return obj; +} + +#if USE_ENTER_EXIT +static int * +_get_counter (void) +{ + int *counter = pthread_getspecific (counter_key); + if (counter == NULL) { + counter = calloc(1, sizeof(int)); + pthread_setspecific (counter_key, counter); + } + return counter; +} + +static void +_enter_trace (void) +{ + INIT_TRACE_ONCE (); + _get_counter ()[0]++; +} + +static void +_exit_trace (void) +{ + _get_counter ()[0]--; +} + +static cairo_bool_t +_should_trace (void) +{ + return _get_counter ()[0] <= 1; +} +#endif /* USE_ENTER_EXIT */ + +static void +_init_trace (void) +{ + pthread_mutex_init (&Types.mutex, NULL); + pthread_key_create (&counter_key, free); + + _type_create ("unclassed", NONE, ""); + _type_create ("cairo_t", CONTEXT, "c"); + _type_create ("cairo_font_face_t", FONT_FACE, "f"); + _type_create ("cairo_pattern_t", PATTERN, "p"); + _type_create ("cairo_scaled_font_t", SCALED_FONT, "sf"); + _type_create ("cairo_surface_t", SURFACE, "s"); +} + +static void +_close_trace (void) +{ + if (logfile != NULL) { + fclose (logfile); + logfile = NULL; + } +} + +static void __attribute__ ((destructor)) +_fini_trace (void) +{ + int n; + + _close_trace (); + + for (n = 0; n < ARRAY_LENGTH (Types.op_types); n++) { + if (Types.op_types[n]) { + _type_destroy (Types.op_types[n]); + Types.op_types[n] = NULL; + } + } + + pthread_mutex_destroy (&Types.mutex); +} + +/* Format a double in a locale independent way and trim trailing + * zeros. Based on code from Alex Larson <alexl@redhat.com>. + * https://mail.gnome.org/archives/gtk-devel-list/2001-October/msg00087.html + * + * The code in the patch is copyright Red Hat, Inc under the LGPL. + */ +#define SIGNIFICANT_DIGITS_AFTER_DECIMAL 6 +static void +_trace_dtostr (char *buffer, size_t size, double d) +{ + struct lconv *locale_data; + const char *decimal_point; + int decimal_point_len; + char *p; + int decimal_len; + int num_zeros, decimal_digits; + + /* Omit the minus sign from negative zero. */ + if (d == 0.0) + d = 0.0; + + locale_data = localeconv (); + decimal_point = locale_data->decimal_point; + decimal_point_len = strlen (decimal_point); + + /* Using "%f" to print numbers less than 0.1 will result in + * reduced precision due to the default 6 digits after the + * decimal point. + * + * For numbers is < 0.1, we print with maximum precision and count + * the number of zeros between the decimal point and the first + * significant digit. We then print the number again with the + * number of decimal places that gives us the required number of + * significant digits. This ensures the number is correctly + * rounded. + */ + if (fabs (d) >= 0.1) { + snprintf (buffer, size, "%f", d); + } else { + snprintf (buffer, size, "%.18f", d); + p = buffer; + + if (*p == '+' || *p == '-') + p++; + + while (isdigit (*p)) + p++; + + if (strncmp (p, decimal_point, decimal_point_len) == 0) + p += decimal_point_len; + + num_zeros = 0; + while (*p++ == '0') + num_zeros++; + + decimal_digits = num_zeros + SIGNIFICANT_DIGITS_AFTER_DECIMAL; + + if (decimal_digits < 18) + snprintf (buffer, size, "%.*f", decimal_digits, d); + } + p = buffer; + + if (*p == '+' || *p == '-') + p++; + + while (isdigit (*p)) + p++; + + if (strncmp (p, decimal_point, decimal_point_len) == 0) { + *p = '.'; + decimal_len = strlen (p + decimal_point_len); + memmove (p + 1, p + decimal_point_len, decimal_len); + p[1 + decimal_len] = 0; + + /* Remove trailing zeros and decimal point if possible. */ + for (p = p + decimal_len; *p == '0'; p--) + *p = 0; + + if (*p == '.') { + *p = 0; + p--; + } + } +} + +enum { + LENGTH_MODIFIER_LONG = 0x100 +}; + +/* Here's a limited reimplementation of printf. The reason for doing + * this is primarily to special case handling of doubles. We want + * locale independent formatting of doubles and we want to trim + * trailing zeros. This is handled by dtostr() above, and the code + * below handles everything else by calling snprintf() to do the + * formatting. This functionality is only for internal use and we + * only implement the formats we actually use. + */ +static void CAIRO_PRINTF_FORMAT(1, 0) +_trace_vprintf (const char *fmt, va_list ap) +{ +#define SINGLE_FMT_BUFFER_SIZE 32 + char buffer[512], single_fmt[SINGLE_FMT_BUFFER_SIZE]; + int single_fmt_length; + char *p; + const char *f, *start; + int length_modifier, width; + cairo_bool_t var_width; + int ret_ignored; + + assert (_should_trace ()); + + f = fmt; + p = buffer; + while (*f != '\0') { + if (*f != '%') { + *p++ = *f++; + continue; + } + + start = f; + f++; + + if (*f == '0') + f++; + + var_width = 0; + if (*f == '*') { + var_width = 1; + f++; + } + + while (isdigit (*f)) + f++; + + length_modifier = 0; + if (*f == 'l') { + length_modifier = LENGTH_MODIFIER_LONG; + f++; + } + + /* The only format strings exist in the cairo implementation + * itself. So there's an internal consistency problem if any + * of them is larger than our format buffer size. */ + single_fmt_length = f - start + 1; + + /* Reuse the format string for this conversion. */ + memcpy (single_fmt, start, single_fmt_length); + single_fmt[single_fmt_length] = '\0'; + + /* Flush contents of buffer before snprintf()'ing into it. */ + ret_ignored = fwrite (buffer, 1, p-buffer, logfile); + + /* We group signed and unsigned together in this switch, the + * only thing that matters here is the size of the arguments, + * since we're just passing the data through to sprintf(). */ + switch (*f | length_modifier) { + case '%': + buffer[0] = *f; + buffer[1] = 0; + break; + case 'd': + case 'u': + case 'o': + case 'x': + case 'X': + if (var_width) { + width = va_arg (ap, int); + snprintf (buffer, sizeof buffer, + single_fmt, width, va_arg (ap, int)); + } else { + snprintf (buffer, sizeof buffer, single_fmt, va_arg (ap, int)); + } + break; + case 'd' | LENGTH_MODIFIER_LONG: + case 'u' | LENGTH_MODIFIER_LONG: + case 'o' | LENGTH_MODIFIER_LONG: + case 'x' | LENGTH_MODIFIER_LONG: + case 'X' | LENGTH_MODIFIER_LONG: + if (var_width) { + width = va_arg (ap, int); + snprintf (buffer, sizeof buffer, + single_fmt, width, va_arg (ap, long int)); + } else { + snprintf (buffer, sizeof buffer, + single_fmt, va_arg (ap, long int)); + } + break; + case 's': + snprintf (buffer, sizeof buffer, + single_fmt, va_arg (ap, const char *)); + break; + case 'f': + case 'g': + _trace_dtostr (buffer, sizeof buffer, va_arg (ap, double)); + break; + case 'c': + buffer[0] = va_arg (ap, int); + buffer[1] = 0; + break; + default: + break; + } + p = buffer + strlen (buffer); + f++; + } + + ret_ignored = fwrite (buffer, 1, p-buffer, logfile); + (void)ret_ignored; +} + +static void CAIRO_PRINTF_FORMAT(1, 2) +_trace_printf (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + _trace_vprintf (fmt, ap); + va_end (ap); +} + +static void +get_prog_name (char *buf, int length) +{ + char *slash; + FILE *file; + + memset (buf, 0, length); + if (length == 0) + return; + + file = fopen ("/proc/self/cmdline", "rb"); + if (file != NULL) { + slash = fgets (buf, length, file); + fclose (file); + + if (slash == NULL) + return; + } else { + char const *name = getenv ("CAIRO_TRACE_PROG_NAME"); + if (name != NULL) { + strncpy (buf, name, length-1); + } + } + + slash = strrchr (buf, '/'); + if (slash != NULL) { + size_t len = strlen (slash+1); + memmove (buf, slash+1, len+1); + } +} + +static void +_emit_header (void) +{ + char name[4096] = ""; + + get_prog_name (name, sizeof (name)); + + _trace_printf ("%%!CairoScript - %s\n", name); +} + +static cairo_bool_t +_init_logfile (void) +{ + static cairo_bool_t initialized; + char buf[4096]; + const char *filename; + const char *env; + + if (initialized) + return logfile != NULL; + + initialized = TRUE; + + env = getenv ("CAIRO_TRACE_FLUSH"); + if (env != NULL) + _flush = atoi (env); + + _line_info = TRUE; + env = getenv ("CAIRO_TRACE_LINE_INFO"); + if (env != NULL) + _line_info = atoi (env); + + _mark_dirty = TRUE; + env = getenv ("CAIRO_TRACE_MARK_DIRTY"); + if (env != NULL) + _mark_dirty = atoi (env); + + filename = getenv ("CAIRO_TRACE_FD"); + if (filename != NULL) { + int fd = atoi (filename); + if (fd == -1) + return FALSE; + + logfile = fdopen (fd, "w"); + if (logfile == NULL) { + fprintf (stderr, "Failed to open trace file descriptor '%s': %s\n", + filename, strerror (errno)); + return FALSE; + } + + setenv ("CAIRO_TRACE_FD", "-1", 1); + goto done; + } + + filename = getenv ("CAIRO_TRACE_OUTFILE_EXACT"); + if (filename == NULL) { + char name[4096] = ""; + + filename = getenv ("CAIRO_TRACE_OUTDIR"); + if (filename == NULL) + filename = CAIRO_TRACE_OUTDIR; + + get_prog_name (name, sizeof (name)); + if (*name == '\0') + strcpy (name, "cairo-trace.dat"); + + snprintf (buf, sizeof (buf), "%s/%s.%d.trace", + filename, name, getpid()); + + filename = buf; + } else { + setenv ("CAIRO_TRACE_FD", "-1", 1); + } + + logfile = fopen (filename, "wb"); + if (logfile == NULL) { + fprintf (stderr, "Failed to open trace file '%s': %s\n", + filename, strerror (errno)); + return FALSE; + } + + fprintf (stderr, "cairo-trace: Recording cairo trace data to %s\n", + filename); + +done: + atexit (_close_trace); + _emit_header (); + return TRUE; +} + +static cairo_bool_t +_write_lock (void) +{ + if (_error) + return FALSE; + + if (! _should_trace ()) + return FALSE; + + if (! _init_logfile ()) + return FALSE; + +#if HAVE_FLOCKFILE && HAVE_FUNLOCKFILE + flockfile (logfile); +#endif + return TRUE; +} + +static void +_write_unlock (void) +{ + if (logfile == NULL) + return; + +#if HAVE_FLOCKFILE && HAVE_FUNLOCKFILE + funlockfile (logfile); +#endif + + if (_flush) + fflush (logfile); +} + + +static Object * +_type_object_create (enum operand_type op_type, const void *ptr) +{ + Type *type; + Object *obj; + + type = _get_type (op_type); + + pthread_mutex_lock (&type->mutex); + obj = _object_create (type, ptr); + pthread_mutex_unlock (&type->mutex); + + return obj; +} + +static Object * +_get_object (enum operand_type op_type, const void *ptr) +{ + Type *type; + Object *obj; + + type = _get_type (op_type); + pthread_mutex_lock (&type->mutex); + obj = _type_get_object (type, ptr); + pthread_mutex_unlock (&type->mutex); + + return obj; +} + +static Object *current_object[2048]; /* XXX limit operand stack */ +static int current_stack_depth; + +static void +dump_stack(const char *func) +{ +#if DEBUG_STACK + int n; + + _trace_printf ("%% %s: stack[%d] = [", func, current_stack_depth); + fflush (logfile); + for (n = 0; n < current_stack_depth; n++) { + Object *obj = current_object[n]; + assert(obj && obj->type); + _trace_printf (" %s%s%ld", + obj->defined ? "" : "*", + obj->type->op_code, obj->token); + fflush (logfile); + } + _trace_printf (" ]\n"); + fflush (logfile); +#endif +} + +static void +ensure_operands (int num_operands) +{ + if (current_stack_depth < num_operands) { + int n; + + fprintf (stderr, "Operand stack underflow!\n"); + for (n = 0; n < current_stack_depth; n++) { + Object *obj = current_object[n]; + + fprintf (stderr, " [%3d] = %s%ld\n", + n, obj->type->op_code, obj->token); + } + + abort (); + } +} + +static void +_consume_operand (bool discard) +{ + Object *obj; + + ensure_operands (1); + obj = current_object[--current_stack_depth]; + if (!discard && ! obj->defined) { + _trace_printf ("dup /%s%ld exch def\n", + obj->type->op_code, + obj->token); + obj->defined = TRUE; + } + obj->operand = -1; +} + +static void +_exch_operands (void) +{ + Object *tmp; + + ensure_operands (2); + tmp = current_object[current_stack_depth-1]; + tmp->operand--; + current_object[current_stack_depth-1] = current_object[current_stack_depth-2]; + current_object[current_stack_depth-2] = tmp; + tmp = current_object[current_stack_depth-1]; + tmp->operand++; +} + +static cairo_bool_t +_pop_operands_to_depth (int depth) +{ + if (depth < 0) + return FALSE; + + assert(current_stack_depth >= depth); + if (current_stack_depth == depth) + return TRUE; + + while (current_stack_depth > depth + 1) { + Object *c_obj; + + ensure_operands (1); + c_obj = current_object[--current_stack_depth]; + + assert(c_obj); + assert(c_obj->type); + + if (! c_obj->defined) { + current_stack_depth++; + return FALSE; + } + + _trace_printf ("pop %% %s%ld\n", + c_obj->type->op_code, c_obj->token); + c_obj->operand = -1; + } + + _exch_operands (); + _trace_printf ("exch\n"); + + dump_stack(__func__); + return TRUE; +} + +static cairo_bool_t +_pop_operands_to_object (Object *obj) +{ + if (!obj) + return FALSE; + + if (obj->operand == -1) + return FALSE; + + if (obj->operand == current_stack_depth - 1) + return TRUE; + + if (obj->operand == current_stack_depth - 2) { + _exch_operands (); + _trace_printf ("exch "); + return TRUE; + } + + return _pop_operands_to_depth (obj->operand + 1); +} + +static cairo_bool_t +_pop_operands_to (enum operand_type t, const void *ptr) +{ + return _pop_operands_to_object (_get_object (t, ptr)); +} + +static cairo_bool_t +_is_current_object (Object *obj, int depth) +{ + if (current_stack_depth <= depth) + return FALSE; + return current_object[current_stack_depth-depth-1] == obj; +} + +static cairo_bool_t +_is_current (enum operand_type type, const void *ptr, int depth) +{ + return _is_current_object (_get_object (type, ptr), depth); +} + +static void +_push_object(Object *obj) +{ + assert(obj->operand == -1); + + if (current_stack_depth == ARRAY_LENGTH (current_object)) { + int n; + + fprintf (stderr, "Operand stack overflow!\n"); + for (n = 0; n < current_stack_depth; n++) { + obj = current_object[n]; + + fprintf (stderr, " [%3d] = %s%ld\n", + n, obj->type->op_code, obj->token); + } + + abort (); + } + + obj->operand = current_stack_depth; + current_object[current_stack_depth++] = obj; +} + +static void +_push_operand (enum operand_type t, const void *ptr) +{ + _push_object(_get_object(t, ptr)); +} + +static void +_object_remove (Object *obj) +{ + if (obj->operand != -1) { + ensure_operands (1); + if (obj->operand == current_stack_depth - 1) { + _trace_printf ("pop %% %s%ld destroyed\n", + obj->type->op_code, obj->token); + } else if (obj->operand == current_stack_depth - 2) { + _exch_operands (); + _trace_printf ("exch pop %% %s%ld destroyed\n", + obj->type->op_code, obj->token); + } else { + int n; + + _trace_printf ("%d -1 roll pop %% %s%ld destroyed\n", + current_stack_depth - obj->operand, + obj->type->op_code, obj->token); + + for (n = obj->operand; n < current_stack_depth - 1; n++) { + current_object[n] = current_object[n+1]; + current_object[n]->operand = n; + } + } + obj->operand = -1; + + current_stack_depth--; + dump_stack(__func__); + } +} + +static void +_object_undef (void *ptr) +{ + Object *obj = ptr; + + if (_write_lock ()) { + _object_remove (obj); + + if (obj->defined) { + _trace_printf ("/%s%ld undef\n", + obj->type->op_code, obj->token); + } + + _write_unlock (); + } + + _object_destroy (obj); +} + +static long +_create_context_id (cairo_t *cr) +{ + Object *obj; + + obj = _get_object (CONTEXT, cr); + if (obj == NULL) { + obj = _type_object_create (CONTEXT, cr); + DLCALL (cairo_set_user_data, + cr, &destroy_key, obj, _object_undef); + } + + return obj->token; +} + +static long +_get_id (enum operand_type op_type, const void *ptr) +{ + Object *obj; + + obj = _get_object (op_type, ptr); + if (obj == NULL) { + if (logfile != NULL) { + _trace_printf ("%% Unknown object of type %s, trace is incomplete.", + _get_type (op_type)->name); + } + _error = TRUE; + return -1; + } + + return obj->token; +} + +static cairo_bool_t +_has_id (enum operand_type op_type, const void *ptr) +{ + return _get_object (op_type, ptr) != NULL; +} + +static long +_create_font_face_id (cairo_font_face_t *font_face) +{ + Object *obj; + + obj = _get_object (FONT_FACE, font_face); + if (obj == NULL) { + obj = _type_object_create (FONT_FACE, font_face); + DLCALL (cairo_font_face_set_user_data, + font_face, &destroy_key, obj, _object_undef); + } + + return obj->token; +} + +static long +_get_font_face_id (cairo_font_face_t *font_face) +{ + return _get_id (FONT_FACE, font_face); +} + +static void +_emit_font_face_id (cairo_font_face_t *font_face) +{ + Object *obj = _get_object (FONT_FACE, font_face); + if (obj == NULL) { + _trace_printf ("null "); + } else { + if (obj->defined) { + _trace_printf ("f%ld ", obj->token); + } else { + _trace_printf ("%d index ", current_stack_depth - obj->operand - 1); + } + } +} + +static cairo_bool_t +_has_pattern_id (cairo_pattern_t *pattern) +{ + return _has_id (PATTERN, pattern); +} + +static long +_create_pattern_id (cairo_pattern_t *pattern) +{ + Object *obj; + + obj = _get_object (PATTERN, pattern); + if (obj == NULL) { + obj = _type_object_create (PATTERN, pattern); + DLCALL (cairo_pattern_set_user_data, + pattern, &destroy_key, obj, _object_undef); + } + + return obj->token; +} + +static void +_emit_pattern_id (cairo_pattern_t *pattern) +{ + Object *obj = _get_object (PATTERN, pattern); + if (obj == NULL) { + _trace_printf ("null "); + } else { + if (obj->defined) { + _trace_printf ("p%ld ", obj->token); + } else { + _trace_printf ("%d index ", + current_stack_depth - obj->operand - 1); + } + } +} + +static void +_emit_scaled_font_id (const cairo_scaled_font_t *scaled_font) +{ + Object *obj = _get_object (SCALED_FONT, scaled_font); + if (obj == NULL) { + _trace_printf ("null "); + } else { + if (obj->defined) { + _trace_printf ("sf%ld ", obj->token); + } else { + _trace_printf ("%d index ", + current_stack_depth - obj->operand - 1); + } + } +} + +static long +_create_scaled_font_id (cairo_scaled_font_t *font) +{ + Object *obj; + + assert(_get_object (SCALED_FONT, font) == NULL); + obj = _type_object_create (SCALED_FONT, font); + DLCALL (cairo_scaled_font_set_user_data, + font, &destroy_key, obj, _object_undef); + + return obj->token; +} + +static cairo_bool_t +_has_scaled_font_id (const cairo_scaled_font_t *font) +{ + return _has_id (SCALED_FONT, font); +} + +static Object * +_create_surface (cairo_surface_t *surface) +{ + Object *obj; + + obj = _get_object (SURFACE, surface); + if (obj == NULL) { + obj = _type_object_create (SURFACE, surface); + DLCALL (cairo_surface_set_user_data, + surface, &destroy_key, obj, _object_undef); + } + + return obj; +} + +static long +_get_surface_id (cairo_surface_t *surface) +{ + return _get_id (SURFACE, surface); +} + +static cairo_bool_t +_matrix_is_identity (const cairo_matrix_t *m) +{ + return m->xx == 1. && m->yx == 0. && + m->xy == 0. && m->yy == 1. && + m->x0 == 0. && m->y0 == 0.; +} + +#define BUFFER_SIZE 16384 +struct _data_stream { + z_stream zlib_stream; + unsigned char zin_buf[BUFFER_SIZE]; + unsigned char zout_buf[BUFFER_SIZE]; + unsigned char four_tuple[4]; + int base85_pending; +}; + +static void +_write_zlib_data_start (struct _data_stream *stream) +{ + stream->zlib_stream.zalloc = Z_NULL; + stream->zlib_stream.zfree = Z_NULL; + stream->zlib_stream.opaque = Z_NULL; + + deflateInit (&stream->zlib_stream, Z_DEFAULT_COMPRESSION); + + stream->zlib_stream.next_in = stream->zin_buf; + stream->zlib_stream.avail_in = 0; + stream->zlib_stream.next_out = stream->zout_buf; + stream->zlib_stream.avail_out = BUFFER_SIZE; +} + +static void +_write_base85_data_start (struct _data_stream *stream) +{ + stream->base85_pending = 0; +} + +static cairo_bool_t +_expand_four_tuple_to_five (unsigned char four_tuple[4], + unsigned char five_tuple[5]) +{ + uint32_t value; + int digit, i; + cairo_bool_t all_zero = TRUE; + + value = four_tuple[0] << 24 | + four_tuple[1] << 16 | + four_tuple[2] << 8 | + four_tuple[3] << 0; + for (i = 0; i < 5; i++) { + digit = value % 85; + if (digit != 0 && all_zero) + all_zero = FALSE; + five_tuple[4-i] = digit + 33; + value = value / 85; + } + + return all_zero; +} + +static void +_write_base85_data (struct _data_stream *stream, + const unsigned char *data, + unsigned long length) +{ + unsigned char five_tuple[5]; + int ret; + + assert (_should_trace ()); + + while (length--) { + stream->four_tuple[stream->base85_pending++] = *data++; + if (stream->base85_pending == 4) { + if (_expand_four_tuple_to_five (stream->four_tuple, five_tuple)) + ret = fwrite ("z", 1, 1, logfile); + else + ret = fwrite (five_tuple, 5, 1, logfile); + (void)ret; + stream->base85_pending = 0; + } + } +} + +static void +_write_zlib_data (struct _data_stream *stream, cairo_bool_t flush) +{ + cairo_bool_t finished; + + do { + int ret = deflate (&stream->zlib_stream, flush ? Z_FINISH : Z_NO_FLUSH); + if (flush || stream->zlib_stream.avail_out == 0) { + _write_base85_data (stream, + stream->zout_buf, + BUFFER_SIZE - stream->zlib_stream.avail_out); + stream->zlib_stream.next_out = stream->zout_buf; + stream->zlib_stream.avail_out = BUFFER_SIZE; + } + + finished = TRUE; + if (stream->zlib_stream.avail_in != 0) + finished = FALSE; + if (flush && ret != Z_STREAM_END) + finished = FALSE; + } while (! finished); + + stream->zlib_stream.next_in = stream->zin_buf; +} + +static void +_write_data_start (struct _data_stream *stream, uint32_t len) +{ + _write_zlib_data_start (stream); + _write_base85_data_start (stream); + + _trace_printf ("<|"); + len = to_be32 (len); + _write_base85_data (stream, (unsigned char *) &len, sizeof (len)); +} + +static void +_write_data (struct _data_stream *stream, + const void *data, + unsigned int length) +{ + unsigned int count; + const unsigned char *p = data; + + while (length) { + count = length; + if (count > BUFFER_SIZE - stream->zlib_stream.avail_in) + count = BUFFER_SIZE - stream->zlib_stream.avail_in; + memcpy (stream->zin_buf + stream->zlib_stream.avail_in, p, count); + p += count; + stream->zlib_stream.avail_in += count; + length -= count; + + if (stream->zlib_stream.avail_in == BUFFER_SIZE) + _write_zlib_data (stream, FALSE); + } +} + +static void +_write_zlib_data_end (struct _data_stream *stream) +{ + _write_zlib_data (stream, TRUE); + deflateEnd (&stream->zlib_stream); + +} + +static void +_write_base85_data_end (struct _data_stream *stream) +{ + unsigned char five_tuple[5]; + int ret; + + assert (_should_trace ()); + + if (stream->base85_pending) { + memset (stream->four_tuple + stream->base85_pending, + 0, 4 - stream->base85_pending); + _expand_four_tuple_to_five (stream->four_tuple, five_tuple); + ret = fwrite (five_tuple, stream->base85_pending+1, 1, logfile); + (void) ret; + } +} + +static void +_write_data_end (struct _data_stream *stream) +{ + _write_zlib_data_end (stream); + _write_base85_data_end (stream); + + _trace_printf ("~>"); +} + +static void +_emit_data (const void *data, unsigned int length) +{ + struct _data_stream stream; + + _write_data_start (&stream, length); + _write_data (&stream, data, length); + _write_data_end (&stream); +} + +static const char * +_format_to_string (cairo_format_t format) +{ +#define f(name) case CAIRO_FORMAT_ ## name: return #name + switch (format) { + f(INVALID); + f(ARGB32); + f(RGB30); + f(RGB24); + f(RGB16_565); + f(A8); + f(A1); + } +#undef f + return "UNKNOWN_FORMAT"; +} + +static const char * +_format_to_content_string (cairo_format_t format) +{ + switch (format) { + case CAIRO_FORMAT_INVALID: + return "INVALID"; + case CAIRO_FORMAT_ARGB32: + return "COLOR_ALPHA"; + case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_RGB24: + case CAIRO_FORMAT_RGB16_565: + return "COLOR"; + case CAIRO_FORMAT_A8: + case CAIRO_FORMAT_A1: + return "ALPHA"; + } + return "UNKNOWN"; +} + +static const char * +_status_to_string (cairo_status_t status) +{ +#define f(name) case CAIRO_STATUS_ ## name: return "STATUS_" #name + switch (status) { + f(SUCCESS); + f(NO_MEMORY); + f(INVALID_RESTORE); + f(INVALID_POP_GROUP); + f(NO_CURRENT_POINT); + f(INVALID_MATRIX); + f(INVALID_STATUS); + f(NULL_POINTER); + f(INVALID_STRING); + f(INVALID_PATH_DATA); + f(READ_ERROR); + f(WRITE_ERROR); + f(SURFACE_FINISHED); + f(SURFACE_TYPE_MISMATCH); + f(PATTERN_TYPE_MISMATCH); + f(INVALID_CONTENT); + f(INVALID_FORMAT); + f(INVALID_VISUAL); + f(FILE_NOT_FOUND); + f(INVALID_DASH); + f(INVALID_DSC_COMMENT); + f(INVALID_INDEX); + f(CLIP_NOT_REPRESENTABLE); + f(TEMP_FILE_ERROR); + f(INVALID_STRIDE); + f(FONT_TYPE_MISMATCH); + f(USER_FONT_IMMUTABLE); + f(USER_FONT_ERROR); + f(NEGATIVE_COUNT); + f(INVALID_CLUSTERS); + f(INVALID_SLANT); + f(INVALID_WEIGHT); + f(INVALID_SIZE); + f(USER_FONT_NOT_IMPLEMENTED); + f(DEVICE_TYPE_MISMATCH); + f(DEVICE_ERROR); + f(INVALID_MESH_CONSTRUCTION); + f(DEVICE_FINISHED); + f(JBIG2_GLOBAL_MISSING); + f(PNG_ERROR); + f(FREETYPE_ERROR); + f(WIN32_GDI_ERROR); + f(TAG_ERROR); + case CAIRO_STATUS_LAST_STATUS: + break; + } + return "UNKNOWN_STATUS"; +#undef f +} + +static void CAIRO_PRINTF_FORMAT(2, 3) +_emit_image (cairo_surface_t *image, + const char *info, + ...) +{ + int stride, row, width, height; + uint32_t len; + cairo_format_t format; + uint8_t row_stack[BUFFER_SIZE]; + uint8_t *rowdata; + uint8_t *data; + struct _data_stream stream; + cairo_status_t status; + + status = DLCALL (cairo_surface_status, image); + if (status) { + _trace_printf ("<< /status //%s >> image", + _status_to_string (status)); + return; + } + + width = DLCALL (cairo_image_surface_get_width, image); + height = DLCALL (cairo_image_surface_get_height, image); + stride = DLCALL (cairo_image_surface_get_stride, image); + format = DLCALL (cairo_image_surface_get_format, image); + data = DLCALL (cairo_image_surface_get_data, image); + + _trace_printf ("dict\n" + " /width %d set\n" + " /height %d set\n" + " /format //%s set\n", + width, height, + _format_to_string (format)); + if (info != NULL) { + va_list ap; + + va_start (ap, info); + _trace_vprintf (info, ap); + va_end (ap); + } + + if (DLCALL (cairo_version) >= CAIRO_VERSION_ENCODE (1, 9, 0)) { + const char *mime_types[] = { + CAIRO_MIME_TYPE_JPEG, + CAIRO_MIME_TYPE_JP2, + CAIRO_MIME_TYPE_PNG, + NULL + }, **mime_type; + + for (mime_type = mime_types; *mime_type; mime_type++) { + const unsigned char *mime_data; + unsigned long mime_length; + + DLCALL (cairo_surface_get_mime_data, + image, *mime_type, &mime_data, &mime_length); + if (mime_data != NULL) { + _trace_printf (" /mime-type (%s) set\n" + " /source <~", + *mime_type); + _write_base85_data_start (&stream); + _write_base85_data (&stream, mime_data, mime_length); + _write_base85_data_end (&stream); + _trace_printf ("~> set\n" + " image"); + return; + } + } + } + + switch (format) { + case CAIRO_FORMAT_A1: len = (width + 7)/8; break; + case CAIRO_FORMAT_A8: len = width; break; + case CAIRO_FORMAT_RGB16_565: len = 2*width; break; + case CAIRO_FORMAT_RGB24: len = 3*width; break; + default: + case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_INVALID: + case CAIRO_FORMAT_ARGB32: len = 4*width; break; + } + + _trace_printf (" /source "); + _write_data_start (&stream, len * height); + +#ifdef WORDS_BIGENDIAN + switch (format) { + case CAIRO_FORMAT_A1: + for (row = height; row--; ) { + _write_data (&stream, data, (width+7)/8); + data += stride; + } + break; + case CAIRO_FORMAT_A8: + for (row = height; row--; ) { + _write_data (&stream, data, width); + data += stride; + } + break; + case CAIRO_FORMAT_RGB16_565: + for (row = height; row--; ) { + _write_data (&stream, data, 2*width); + data += stride; + } + break; + case CAIRO_FORMAT_RGB24: + for (row = height; row--; ) { + int col; + rowdata = data; + for (col = width; col--; ) { + _write_data (&stream, rowdata, 3); + rowdata+=4; + } + data += stride; + } + break; + case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_ARGB32: + for (row = height; row--; ) { + _write_data (&stream, data, 4*width); + data += stride; + } + break; + case CAIRO_FORMAT_INVALID: + default: + break; + } +#else + if (stride > ARRAY_LENGTH (row_stack)) { + rowdata = malloc (stride); + if (rowdata == NULL) + goto BAIL; + } else + rowdata = row_stack; + + switch (format) { + case CAIRO_FORMAT_A1: + for (row = height; row--; ) { + int col; + for (col = 0; col < (width + 7)/8; col++) + rowdata[col] = CAIRO_BITSWAP8 (data[col]); + _write_data (&stream, rowdata, (width+7)/8); + data += stride; + } + break; + case CAIRO_FORMAT_A8: + for (row = height; row--; ) { + _write_data (&stream, rowdata, width); + data += stride; + } + break; + case CAIRO_FORMAT_RGB16_565: /* XXX endianness */ + for (row = height; row--; ) { + uint16_t *src = (uint16_t *) data; + uint16_t *dst = (uint16_t *)rowdata; + int col; + for (col = 0; col < width; col++) + dst[col] = bswap_16 (src[col]); + _write_data (&stream, rowdata, 2*width); + data += stride; + } + break; + case CAIRO_FORMAT_RGB24: + for (row = height; row--; ) { + uint8_t *src = data; + int col; + for (col = 0; col < width; col++) { + rowdata[3*col+2] = *src++; + rowdata[3*col+1] = *src++; + rowdata[3*col+0] = *src++; + src++; + } + _write_data (&stream, rowdata, 3*width); + data += stride; + } + break; + case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_ARGB32: + for (row = height; row--; ) { + uint32_t *src = (uint32_t *) data; + uint32_t *dst = (uint32_t *) rowdata; + int col; + for (col = 0; col < width; col++) + dst[col] = bswap_32 (src[col]); + _write_data (&stream, rowdata, 4*width); + data += stride; + } + break; + case CAIRO_FORMAT_INVALID: + default: + break; + } + if (rowdata != row_stack) + free (rowdata); + +BAIL: + _write_data_end (&stream); +#endif + _trace_printf (" set\n image"); +} + +static void +_encode_string_literal (char *out, int max, + const char *utf8, int len) +{ + char c; + const char *end; + + *out++ = '('; + max--; + + if (utf8 == NULL) + goto DONE; + + if (len < 0) + len = strlen (utf8); + end = utf8 + len; + + while (utf8 < end) { + if (max < 5) + break; + + switch ((c = *utf8++)) { + case '\n': + *out++ = '\\'; + *out++ = 'n'; + max -= 2; + break; + case '\r': + *out++ = '\\'; + *out++ = 'r'; + max -= 2; + case '\t': + *out++ = '\\'; + *out++ = 't'; + max -= 2; + break; + case '\b': + *out++ = '\\'; + *out++ = 'b'; + max -= 2; + break; + case '\f': + *out++ = '\\'; + *out++ = 'f'; + max -= 2; + break; + case '\\': + case '(': + case ')': + *out++ = '\\'; + *out++ = c; + max -= 2; + break; + default: + if (isprint (c) || isspace (c)) { + *out++ = c; + } else { + int octal = 0; + while (c) { + octal *= 10; + octal += c&7; + c /= 8; + } + octal = snprintf (out, max, "\\%03d", octal); + out += octal; + max -= octal; + } + break; + } + } +DONE: + *out++ = ')'; + *out = '\0'; +} + +static void +to_octal (int value, char *buf, size_t size) +{ + do { + buf[--size] = '0' + (value & 7); + value >>= 3; + } while (size); +} + +static void +_emit_string_literal (const char *utf8, int len) +{ + char c; + const char *end; + + if (utf8 == NULL) { + _trace_printf ("()"); + return; + } + + if (len < 0) + len = strlen (utf8); + end = utf8 + len; + + _trace_printf ("("); + while (utf8 < end) { + switch ((c = *utf8++)) { + case '\n': + c = 'n'; + goto ESCAPED_CHAR; + case '\r': + c = 'r'; + goto ESCAPED_CHAR; + case '\t': + c = 't'; + goto ESCAPED_CHAR; + case '\b': + c = 'b'; + goto ESCAPED_CHAR; + case '\f': + c = 'f'; + goto ESCAPED_CHAR; + case '\\': + case '(': + case ')': +ESCAPED_CHAR: + _trace_printf ("\\%c", c); + break; + default: + if (isprint (c) || isspace (c)) { + _trace_printf ("%c", c); + } else { + char buf[4] = { '\\' }; + int ret_ignored; + + to_octal (c, buf+1, 3); + ret_ignored = fwrite (buf, 4, 1, logfile); + (void)ret_ignored; + } + break; + } + } + _trace_printf (")"); +} + +static void +_emit_current (Object *obj) +{ + if (obj != NULL && ! _pop_operands_to_object (obj)) { + if (obj->operand != -1) { + int n; + + _trace_printf ("%d -1 roll %% %s%ld\n", + current_stack_depth - obj->operand, + obj->type->op_code, obj->token); + + for (n = obj->operand; n < current_stack_depth - 1; n++) { + current_object[n] = current_object[n+1]; + current_object[n]->operand = n; + } + obj->operand = -1; + current_stack_depth--; + } else { + assert(obj->defined); + _trace_printf ("%s%ld\n", obj->type->op_code, obj->token); + } + + _push_object (obj); + dump_stack(__func__); + } +} + +static void +_emit_context (cairo_t *cr) +{ + _emit_current (_get_object (CONTEXT, cr)); +} + +static void +_emit_pattern (cairo_pattern_t *pattern) +{ + _emit_current (_get_object (PATTERN, pattern)); +} + +static void +_emit_surface (cairo_surface_t *surface) +{ + _emit_current (_get_object (SURFACE, surface)); +} + +static void CAIRO_PRINTF_FORMAT(2, 3) +_emit_cairo_op (cairo_t *cr, const char *fmt, ...) +{ + va_list ap; + + if (cr == NULL || ! _write_lock ()) + return; + + _emit_context (cr); + + va_start (ap, fmt); + _trace_vprintf ( fmt, ap); + va_end (ap); + + _write_unlock (); +} + +cairo_t * +cairo_create (cairo_surface_t *target) +{ + cairo_t *ret; + long surface_id; + long context_id; + + _enter_trace (); + + ret = DLCALL (cairo_create, target); + context_id = _create_context_id (ret); + + _emit_line_info (); + if (target != NULL && _write_lock ()) { + surface_id = _get_surface_id (target); + if (surface_id != -1) { + _get_object (SURFACE, target)->foreign = FALSE; + + /* we presume that we will continue to use the context */ + if (_pop_operands_to (SURFACE, target)){ + _consume_operand (false); + } else { + _trace_printf ("s%ld ", surface_id); + } + _trace_printf ("context %% c%ld\n", context_id); + _push_operand (CONTEXT, ret); + dump_stack(__func__); + } + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +void +cairo_save (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "save\n"); + DLCALL (cairo_save, cr); + _exit_trace (); +} + +void +cairo_restore (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "restore\n"); + DLCALL (cairo_restore, cr); + _exit_trace (); +} + +void +cairo_push_group (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "//COLOR_ALPHA push-group\n"); + DLCALL (cairo_push_group, cr); + _exit_trace (); +} + +static const char * +_content_to_string (cairo_content_t content) +{ + switch (content) { + case CAIRO_CONTENT_ALPHA: return "ALPHA"; + case CAIRO_CONTENT_COLOR: return "COLOR"; + default: + case CAIRO_CONTENT_COLOR_ALPHA: return "COLOR_ALPHA"; + } +} + +void +cairo_push_group_with_content (cairo_t *cr, cairo_content_t content) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "//%s push-group\n", _content_to_string (content)); + DLCALL (cairo_push_group_with_content, cr, content); + _exit_trace (); +} + +cairo_pattern_t * +cairo_pop_group (cairo_t *cr) +{ + cairo_pattern_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_pop_group, cr); + + _emit_line_info (); + _emit_cairo_op (cr, "pop-group %% p%ld\n", _create_pattern_id (ret)); + _push_operand (PATTERN, ret); + dump_stack(__func__); + + _exit_trace (); + return ret; +} + +void +cairo_pop_group_to_source (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "pop-group set-source\n"); + DLCALL (cairo_pop_group_to_source, cr); + _exit_trace (); +} + +static const char * +_operator_to_string (cairo_operator_t op) +{ +#define f(name) case CAIRO_OPERATOR_ ## name: return #name + switch (op) { + f(OVER); + f(SOURCE); + f(CLEAR); + f(IN); + f(OUT); + f(ATOP); + f(DEST); + f(DEST_OVER); + f(DEST_IN); + f(DEST_OUT); + f(DEST_ATOP); + f(XOR); + f(ADD); + f(SATURATE); + f(MULTIPLY); + f(SCREEN); + f(OVERLAY); + f(DARKEN); + f(LIGHTEN); + case CAIRO_OPERATOR_COLOR_DODGE: return "DODGE"; + case CAIRO_OPERATOR_COLOR_BURN: return "BURN"; + f(HARD_LIGHT); + f(SOFT_LIGHT); + f(DIFFERENCE); + f(EXCLUSION); + f(HSL_HUE); + f(HSL_SATURATION); + f(HSL_COLOR); + f(HSL_LUMINOSITY); + } +#undef f + return "UNKNOWN_OPERATOR"; +} + +void +cairo_set_operator (cairo_t *cr, cairo_operator_t op) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "//%s set-operator\n", _operator_to_string (op)); + DLCALL (cairo_set_operator, cr, op); + _exit_trace (); +} + +void +cairo_set_source_rgb (cairo_t *cr, double red, double green, double blue) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g %g %g set-source-rgb\n", red, green, blue); + DLCALL (cairo_set_source_rgb, cr, red, green, blue); + _exit_trace (); +} + +void +cairo_set_source_rgba (cairo_t *cr, double red, double green, double blue, double alpha) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g %g %g %g set-source-rgba\n", + red, green, blue, alpha); + DLCALL (cairo_set_source_rgba, cr, red, green, blue, alpha); + _exit_trace (); +} + +static void +_emit_source_image (cairo_surface_t *surface) +{ + Object *obj; + cairo_surface_t *image; + cairo_t *cr; + + obj = _get_object (SURFACE, surface); + if (obj == NULL) + return; + + image = DLCALL (cairo_image_surface_create, + CAIRO_FORMAT_ARGB32, + obj->width, + obj->height); + cr = DLCALL (cairo_create, image); + DLCALL (cairo_set_source_surface, cr, surface, 0, 0); + DLCALL (cairo_paint, cr); + DLCALL (cairo_destroy, cr); + + _emit_image (image, NULL); + _trace_printf (" set-source-image "); + DLCALL (cairo_surface_destroy, image); + + obj->foreign = FALSE; +} + +static void +_emit_source_image_rectangle (cairo_surface_t *surface, + int x, int y, + int width, int height) +{ + Object *obj; + cairo_surface_t *image; + cairo_t *cr; + + obj = _get_object (SURFACE, surface); + if (obj == NULL) + return; + + if (obj->foreign) { + _emit_source_image (surface); + return; + } + + image = DLCALL (cairo_image_surface_create, + CAIRO_FORMAT_ARGB32, + width, + height); + cr = DLCALL (cairo_create, image); + DLCALL (cairo_set_source_surface, cr, surface, x, y); + DLCALL (cairo_paint, cr); + DLCALL (cairo_destroy, cr); + + _emit_image (image, NULL); + _trace_printf (" %d %d set-device-offset set-source-image ", + x, y); + DLCALL (cairo_surface_destroy, image); +} + +void +cairo_set_source_surface (cairo_t *cr, cairo_surface_t *surface, double x, double y) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && surface != NULL && _write_lock ()) { + Object *obj = _get_object (SURFACE, surface); + + if (_is_current (SURFACE, surface, 0) && + _is_current (CONTEXT, cr, 1)) + { + _consume_operand (false); + } + else if (_is_current (SURFACE, surface, 1) && + _is_current (CONTEXT, cr, 0) && + obj->defined) + { + _trace_printf ("exch "); + _exch_operands (); + _consume_operand (false); + } else if (obj->defined) { + _emit_context (cr); + _trace_printf ("s%ld ", obj->token); + } else { + _emit_context (cr); + _trace_printf ("%d index ", + current_stack_depth - obj->operand - 1); + } + + if (obj->foreign) + _emit_source_image (surface); + + _trace_printf ("pattern"); + if (x != 0. || y != 0.) + _trace_printf (" %g %g translate", -x, -y); + + _trace_printf (" set-source\n"); + _write_unlock (); + } + + DLCALL (cairo_set_source_surface, cr, surface, x, y); + _exit_trace (); +} + +void +cairo_set_source (cairo_t *cr, cairo_pattern_t *source) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && source != NULL && _write_lock ()) { + Object *obj = _get_object (PATTERN, source); + cairo_bool_t need_context_and_pattern = TRUE; + + if (_is_current (PATTERN, source, 0) && + _is_current (CONTEXT, cr, 1)) + { + if (obj->defined) { + _consume_operand (false); + } else { + _trace_printf ("exch 1 index "); + _exch_operands (); + } + need_context_and_pattern = FALSE; + } + else if (_is_current (PATTERN, source, 1) && + _is_current (CONTEXT, cr, 0)) + { + if (obj->defined) { + _trace_printf ("exch "); + _exch_operands (); + _consume_operand (false); + need_context_and_pattern = FALSE; + } + } + + if (need_context_and_pattern) { + _emit_context (cr); + _emit_pattern_id (source); + } + + _trace_printf ("set-source %% p%ld\n", obj->token); + _write_unlock (); + } + + DLCALL (cairo_set_source, cr, source); + _exit_trace (); +} + +cairo_pattern_t * +cairo_get_source (cairo_t *cr) +{ + cairo_pattern_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_get_source, cr); + + if (! _has_pattern_id (ret)) { + _emit_cairo_op (cr, "/source get /p%ld exch def\n", + _create_pattern_id (ret)); + _get_object (PATTERN, ret)->defined = TRUE; + } + + _exit_trace (); + return ret; +} + +void +cairo_set_tolerance (cairo_t *cr, double tolerance) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g set-tolerance\n", tolerance); + DLCALL (cairo_set_tolerance, cr, tolerance); + _exit_trace (); +} + +static const char * +_antialias_to_string (cairo_antialias_t antialias) +{ +#define f(name) case CAIRO_ANTIALIAS_ ## name: return "ANTIALIAS_" #name + switch (antialias) { + f(DEFAULT); + + f(NONE); + f(GRAY); + f(SUBPIXEL); + + f(FAST); + f(GOOD); + f(BEST); + }; +#undef f + return "UNKNOWN_ANTIALIAS"; +} + +void +cairo_set_antialias (cairo_t *cr, cairo_antialias_t antialias) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, + "//%s set-antialias\n", _antialias_to_string (antialias)); + DLCALL (cairo_set_antialias, cr, antialias); + _exit_trace (); +} + +static const char * +_fill_rule_to_string (cairo_fill_rule_t rule) +{ +#define f(name) case CAIRO_FILL_RULE_ ## name: return #name + switch (rule) { + f(WINDING); + f(EVEN_ODD); + }; +#undef f + return "UNKNOWN_FILL_RULE"; +} + +void +cairo_set_fill_rule (cairo_t *cr, cairo_fill_rule_t fill_rule) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, + "//%s set-fill-rule\n", _fill_rule_to_string (fill_rule)); + DLCALL (cairo_set_fill_rule, cr, fill_rule); + _exit_trace (); +} + +void +cairo_set_line_width (cairo_t *cr, double width) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g set-line-width\n", width); + DLCALL (cairo_set_line_width, cr, width); + _exit_trace (); +} + +static const char * +_line_cap_to_string (cairo_line_cap_t line_cap) +{ +#define f(name) case CAIRO_LINE_CAP_ ## name: return "LINE_CAP_" #name + switch (line_cap) { + f(BUTT); + f(ROUND); + f(SQUARE); + }; +#undef f + return "UNKNOWN_LINE_CAP"; +} + +void +cairo_set_line_cap (cairo_t *cr, cairo_line_cap_t line_cap) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "//%s set-line-cap\n", _line_cap_to_string (line_cap)); + DLCALL (cairo_set_line_cap, cr, line_cap); + _exit_trace (); +} + +static const char * +_line_join_to_string (cairo_line_join_t line_join) +{ +#define f(name) case CAIRO_LINE_JOIN_ ## name: return "LINE_JOIN_" #name + switch (line_join) { + f(MITER); + f(ROUND); + f(BEVEL); + }; +#undef f + return "UNKNOWN_LINE_JOIN"; +} + +void +cairo_set_line_join (cairo_t *cr, cairo_line_join_t line_join) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, + "//%s set-line-join\n", _line_join_to_string (line_join)); + DLCALL (cairo_set_line_join, cr, line_join); + _exit_trace (); +} + +void +cairo_set_dash (cairo_t *cr, const double *dashes, int num_dashes, double offset) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && _write_lock ()) { + int n; + + _emit_context (cr); + + _trace_printf ("["); + for (n = 0; n < num_dashes; n++) { + if (n != 0) + _trace_printf (" "); + _trace_printf ("%g", dashes[n]); + } + _trace_printf ("] %g set-dash\n", offset); + + _write_unlock (); + } + + DLCALL (cairo_set_dash, cr, dashes, num_dashes, offset); + _exit_trace (); +} + +void +cairo_set_miter_limit (cairo_t *cr, double limit) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g set-miter-limit\n", limit); + DLCALL (cairo_set_miter_limit, cr, limit); + _exit_trace (); +} + +void +cairo_translate (cairo_t *cr, double tx, double ty) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g %g translate\n", tx, ty); + DLCALL (cairo_translate, cr, tx, ty); + _exit_trace (); +} + +void +cairo_scale (cairo_t *cr, double sx, double sy) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g %g scale\n", sx, sy); + DLCALL (cairo_scale, cr, sx, sy); + _exit_trace (); +} + +void +cairo_rotate (cairo_t *cr, double angle) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g rotate\n", angle); + DLCALL (cairo_rotate, cr, angle); + _exit_trace (); +} + +void +cairo_transform (cairo_t *cr, const cairo_matrix_t *matrix) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g %g %g %g %g %g matrix transform\n", + matrix->xx, matrix->yx, + matrix->xy, matrix->yy, + matrix->x0, matrix->y0); + DLCALL (cairo_transform, cr, matrix); + _exit_trace (); +} + +void +cairo_set_matrix (cairo_t *cr, const cairo_matrix_t *matrix) +{ + _enter_trace (); + _emit_line_info (); + if (_matrix_is_identity (matrix)) { + _emit_cairo_op (cr, "identity set-matrix\n"); + } else { + _emit_cairo_op (cr, "%g %g %g %g %g %g matrix set-matrix\n", + matrix->xx, matrix->yx, + matrix->xy, matrix->yy, + matrix->x0, matrix->y0); + } + DLCALL (cairo_set_matrix, cr, matrix); + _exit_trace (); +} + +cairo_surface_t * +cairo_get_target (cairo_t *cr) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_get_target, cr); + if (cr != NULL) { + Object *obj = _create_surface (ret); + + if (! obj->defined) { + _emit_cairo_op (cr, + "/target get /s%ld exch def\n", + obj->token); + obj->defined = TRUE; + } + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_get_group_target (cairo_t *cr) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_get_group_target, cr); + if (cr != NULL) { + Object *obj = _create_surface (ret); + + if (! obj->defined) { + _emit_cairo_op (cr, + "/group-target get /s%ld exch def\n", + obj->token); + obj->defined = TRUE; + } + } + + _exit_trace (); + return ret; +} + +void +cairo_identity_matrix (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "identity set-matrix\n"); + DLCALL (cairo_identity_matrix, cr); + _exit_trace (); +} + +void +cairo_new_path (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "n "); + DLCALL (cairo_new_path, cr); + _exit_trace (); +} + +void +cairo_move_to (cairo_t *cr, double x, double y) +{ + _enter_trace (); + _emit_cairo_op (cr, "%g %g m ", x, y); + DLCALL (cairo_move_to, cr, x, y); + _exit_trace (); +} + +void +cairo_new_sub_path (cairo_t *cr) +{ + _enter_trace (); + _emit_cairo_op (cr, "N "); + DLCALL (cairo_new_sub_path, cr); + _exit_trace (); +} + +void +cairo_line_to (cairo_t *cr, double x, double y) +{ + _enter_trace (); + _emit_cairo_op (cr, "%g %g l ", x, y); + DLCALL (cairo_line_to, cr, x, y); + _exit_trace (); +} + +void +cairo_curve_to (cairo_t *cr, double x1, double y1, double x2, double y2, double x3, double y3) +{ + _enter_trace (); + _emit_cairo_op (cr, "%g %g %g %g %g %g c ", x1, y1, x2, y2, x3, y3); + DLCALL (cairo_curve_to, cr, x1, y1, x2, y2, x3, y3); + _exit_trace (); +} + +void +cairo_arc (cairo_t *cr, double xc, double yc, double radius, double angle1, double angle2) +{ + _enter_trace (); + _emit_cairo_op (cr, "%g %g %g %g %g arc\n", xc, yc, radius, angle1, angle2); + DLCALL (cairo_arc, cr, xc, yc, radius, angle1, angle2); + _exit_trace (); +} + +void +cairo_arc_negative (cairo_t *cr, double xc, double yc, double radius, double angle1, double angle2) +{ + _enter_trace (); + _emit_cairo_op (cr, "%g %g %g %g %g arc-\n", + xc, yc, radius, angle1, angle2); + DLCALL (cairo_arc_negative, cr, xc, yc, radius, angle1, angle2); + _exit_trace (); +} + +void +cairo_rel_move_to (cairo_t *cr, double dx, double dy) +{ + _enter_trace (); + _emit_cairo_op (cr, "%g %g M ", dx, dy); + DLCALL (cairo_rel_move_to, cr, dx, dy); + _exit_trace (); +} + +void +cairo_rel_line_to (cairo_t *cr, double dx, double dy) +{ + _enter_trace (); + _emit_cairo_op (cr, "%g %g L ", dx, dy); + DLCALL (cairo_rel_line_to, cr, dx, dy); + _exit_trace (); +} + +void +cairo_rel_curve_to (cairo_t *cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3) +{ + _enter_trace (); + _emit_cairo_op (cr, "%g %g %g %g %g %g C ", + dx1, dy1, dx2, dy2, dx3, dy3); + DLCALL (cairo_rel_curve_to, cr, dx1, dy1, dx2, dy2, dx3, dy3); + _exit_trace (); +} + +void +cairo_rectangle (cairo_t *cr, double x, double y, double width, double height) +{ + _enter_trace (); + _emit_cairo_op (cr, "%g %g %g %g rectangle\n", x, y, width, height); + DLCALL (cairo_rectangle, cr, x, y, width, height); + _exit_trace (); +} + +void +cairo_close_path (cairo_t *cr) +{ + _enter_trace (); + _emit_cairo_op (cr, "h\n"); + DLCALL (cairo_close_path, cr); + _exit_trace (); +} + +void +cairo_paint (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "paint\n"); + DLCALL (cairo_paint, cr); + _exit_trace (); +} + +void +cairo_paint_with_alpha (cairo_t *cr, double alpha) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g paint-with-alpha\n", alpha); + DLCALL (cairo_paint_with_alpha, cr, alpha); + _exit_trace (); +} + +void +cairo_mask (cairo_t *cr, cairo_pattern_t *pattern) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && pattern != NULL && _write_lock ()) { + Object *obj = _get_object (PATTERN, pattern); + cairo_bool_t need_context_and_pattern = TRUE; + + if (_is_current (PATTERN, pattern, 0) && + _is_current (CONTEXT, cr, 1)) + { + if (obj->defined) { + _consume_operand (false); + need_context_and_pattern = FALSE; + } + } + else if (_is_current (PATTERN, pattern, 1) && + _is_current (CONTEXT, cr, 0)) + { + if (obj->defined) { + _trace_printf ("exch "); + _exch_operands (); + _consume_operand (false); + need_context_and_pattern = FALSE; + } + } + + if (need_context_and_pattern) { + _emit_context (cr); + _emit_pattern_id (pattern); + } + + _trace_printf (" mask\n"); + _write_unlock (); + } + DLCALL (cairo_mask, cr, pattern); + _exit_trace (); +} + +void +cairo_mask_surface (cairo_t *cr, cairo_surface_t *surface, double x, double y) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && surface != NULL && _write_lock ()) { + Object *obj = _get_object (SURFACE, surface); + if (_is_current (SURFACE, surface, 0) && + _is_current (CONTEXT, cr, 1)) + { + _consume_operand (false); + } + else if (_is_current (SURFACE, surface, 1) && + _is_current (CONTEXT, cr, 0)) + { + _trace_printf ("exch "); + _exch_operands (); + _consume_operand (false); + } else if (obj->defined){ + _emit_context (cr); + _trace_printf ("s%ld ", obj->token); + } else { + _emit_context (cr); + _trace_printf ("%d index ", + current_stack_depth - obj->operand - 1); + } + _trace_printf ("pattern"); + + if (x != 0. || y != 0.) + _trace_printf (" %g %g translate", -x, -y); + + _trace_printf (" mask\n"); + _write_unlock (); + } + + DLCALL (cairo_mask_surface, cr, surface, x, y); + _exit_trace (); +} + +void +cairo_stroke (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "stroke\n"); + DLCALL (cairo_stroke, cr); + _exit_trace (); +} + +void +cairo_stroke_preserve (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "stroke+\n"); + DLCALL (cairo_stroke_preserve, cr); + _exit_trace (); +} + +void +cairo_fill (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "fill\n"); + DLCALL (cairo_fill, cr); + _exit_trace (); +} + +void +cairo_fill_preserve (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "fill+\n"); + DLCALL (cairo_fill_preserve, cr); + _exit_trace (); +} + +void +cairo_copy_page (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "copy-page\n"); + DLCALL (cairo_copy_page, cr); + _exit_trace (); +} + +void +cairo_show_page (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "show-page\n"); + DLCALL (cairo_show_page, cr); + _exit_trace (); +} + +void +cairo_clip (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "clip\n"); + DLCALL (cairo_clip, cr); + _exit_trace (); +} + +void +cairo_clip_preserve (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "clip+\n"); + DLCALL (cairo_clip_preserve, cr); + _exit_trace (); +} + +void +cairo_reset_clip (cairo_t *cr) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "reset-clip\n"); + DLCALL (cairo_reset_clip, cr); + _exit_trace (); +} + + +static const char * +_slant_to_string (cairo_font_slant_t font_slant) +{ +#define f(name) case CAIRO_FONT_SLANT_ ## name: return "SLANT_" #name + switch (font_slant) { + f(NORMAL); + f(ITALIC); + f(OBLIQUE); + }; +#undef f + return "UNKNOWN_SLANT"; +} + +static const char * +_weight_to_string (cairo_font_weight_t font_weight) +{ +#define f(name) case CAIRO_FONT_WEIGHT_ ## name: return "WEIGHT_" #name + switch (font_weight) { + f(NORMAL); + f(BOLD); + }; +#undef f + return "UNKNOWN_WEIGHT"; +} + +void +cairo_select_font_face (cairo_t *cr, const char *family, cairo_font_slant_t slant, cairo_font_weight_t weight) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && _write_lock ()) { + _emit_context (cr); + _emit_string_literal (family, -1); + _trace_printf (" //%s //%s select-font-face\n", + _slant_to_string (slant), + _weight_to_string (weight)); + _write_unlock (); + } + DLCALL (cairo_select_font_face, cr, family, slant, weight); + _exit_trace (); +} + +cairo_font_face_t * +cairo_get_font_face (cairo_t *cr) +{ + cairo_font_face_t *ret; + long font_face_id; + + _enter_trace (); + + ret = DLCALL (cairo_get_font_face, cr); + font_face_id = _create_font_face_id (ret); + + _emit_cairo_op (cr, "/font-face get %% f%ld\n", font_face_id); + _push_operand (FONT_FACE, ret); + dump_stack(__func__); + + _exit_trace (); + return ret; +} + +void +cairo_set_font_face (cairo_t *cr, cairo_font_face_t *font_face) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && font_face != NULL && _write_lock ()) { + if (_is_current (FONT_FACE, font_face, 0) && + _is_current (CONTEXT, cr, 1)) + { + _consume_operand (false); + } + else if (_is_current (FONT_FACE, font_face, 1) && + _is_current (CONTEXT, cr, 0)) + { + _trace_printf ("exch "); + _exch_operands (); + _consume_operand (false); + } + else + { + _emit_context (cr); + _emit_font_face_id (font_face); + } + + _trace_printf ("set-font-face\n"); + _write_unlock (); + } + + DLCALL (cairo_set_font_face, cr, font_face); + _exit_trace (); +} + +void +cairo_set_font_size (cairo_t *cr, double size) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g set-font-size\n", size); + DLCALL (cairo_set_font_size, cr, size); + _exit_trace (); +} + +void +cairo_set_font_matrix (cairo_t *cr, const cairo_matrix_t *matrix) +{ + _enter_trace (); + _emit_line_info (); + _emit_cairo_op (cr, "%g %g %g %g %g %g matrix set-font-matrix\n", + matrix->xx, matrix->yx, + matrix->xy, matrix->yy, + matrix->x0, matrix->y0); + DLCALL (cairo_set_font_matrix, cr, matrix); + _exit_trace (); +} + +static const char * +_subpixel_order_to_string (cairo_subpixel_order_t subpixel_order) +{ +#define f(name) case CAIRO_SUBPIXEL_ORDER_ ## name: return "SUBPIXEL_ORDER_" #name + switch (subpixel_order) { + f(DEFAULT); + f(RGB); + f(BGR); + f(VRGB); + f(VBGR); + }; +#undef f + return "UNKNOWN_SUBPIXEL_ORDER"; +} + +static const char * +_hint_style_to_string (cairo_hint_style_t hint_style) +{ +#define f(name) case CAIRO_HINT_STYLE_ ## name: return "HINT_STYLE_" #name + switch (hint_style) { + f(DEFAULT); + f(NONE); + f(SLIGHT); + f(MEDIUM); + f(FULL); + }; +#undef f + return "UNKNOWN_HINT_STYLE"; +} + +static const char * +_hint_metrics_to_string (cairo_hint_metrics_t hint_metrics) +{ +#define f(name) case CAIRO_HINT_METRICS_ ## name: return "HINT_METRICS_" #name + switch (hint_metrics) { + f(DEFAULT); + f(OFF); + f(ON); + }; +#undef f + return "UNKNOWN_HINT_METRICS"; +} + +static void +_emit_font_options (const cairo_font_options_t *options) +{ + cairo_antialias_t antialias; + cairo_subpixel_order_t subpixel_order; + cairo_hint_style_t hint_style; + cairo_hint_metrics_t hint_metrics; + + _trace_printf ("<<"); + + antialias = DLCALL (cairo_font_options_get_antialias, options); + if (antialias != CAIRO_ANTIALIAS_DEFAULT) { + _trace_printf (" /antialias //%s", + _antialias_to_string (antialias)); + } + + subpixel_order = DLCALL (cairo_font_options_get_subpixel_order, options); + if (subpixel_order != CAIRO_SUBPIXEL_ORDER_DEFAULT) { + _trace_printf (" /subpixel-order //%s", + _subpixel_order_to_string (subpixel_order)); + } + + hint_style = DLCALL (cairo_font_options_get_hint_style, options); + if (hint_style != CAIRO_HINT_STYLE_DEFAULT) { + _trace_printf (" /hint-style //%s", + _hint_style_to_string (hint_style)); + } + + hint_metrics = DLCALL (cairo_font_options_get_hint_metrics, options); + if (hint_metrics != CAIRO_HINT_METRICS_DEFAULT) { + _trace_printf (" /hint-metrics //%s", + _hint_metrics_to_string (hint_metrics)); + } + + _trace_printf (" >>"); +} + +void +cairo_set_font_options (cairo_t *cr, const cairo_font_options_t *options) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && options != NULL && _write_lock ()) { + _emit_context (cr); + _emit_font_options (options); + _trace_printf (" set-font-options\n"); + _write_unlock (); + } + + DLCALL (cairo_set_font_options, cr, options); + _exit_trace (); +} + +cairo_scaled_font_t * +cairo_get_scaled_font (cairo_t *cr) +{ + cairo_scaled_font_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_get_scaled_font, cr); + + if (cr != NULL && ! _has_scaled_font_id (ret)) { + _emit_cairo_op (cr, "/scaled-font get /sf%ld exch def\n", + _create_scaled_font_id (ret)); + _get_object (SCALED_FONT, ret)->defined = TRUE; + } + + _exit_trace (); + return ret; +} + +void +cairo_set_scaled_font (cairo_t *cr, const cairo_scaled_font_t *scaled_font) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && scaled_font != NULL && _write_lock ()) { + Object *obj = _get_object (SCALED_FONT, scaled_font); + cairo_bool_t need_context_and_font = TRUE; + + if (_is_current (SCALED_FONT, scaled_font, 0) && + _is_current (CONTEXT, cr, 1)) + { + if (obj->defined) { + _consume_operand (false); + } else { + _trace_printf ("exch 1 index "); + _exch_operands (); + } + need_context_and_font = FALSE; + } + else if (_is_current (SCALED_FONT, scaled_font, 1) && + _is_current (CONTEXT, cr, 0)) + { + if (obj->defined) { + _trace_printf ("exch "); + _exch_operands (); + _consume_operand (false); + need_context_and_font = FALSE; + } + } + + if (need_context_and_font) { + _emit_context (cr); + _emit_scaled_font_id (scaled_font); + } + + _trace_printf ("set-scaled-font\n"); + + _write_unlock (); + } + DLCALL (cairo_set_scaled_font, cr, scaled_font); + _exit_trace (); +} + +static void +_emit_matrix (const cairo_matrix_t *m) +{ + if (_matrix_is_identity(m)) + { + _trace_printf ("identity"); + } + else + { + _trace_printf ("%g %g %g %g %g %g matrix", + m->xx, m->yx, + m->xy, m->yy, + m->x0, m->y0); + } +} + +cairo_scaled_font_t * +cairo_scaled_font_create (cairo_font_face_t *font_face, + const cairo_matrix_t *font_matrix, + const cairo_matrix_t *ctm, + const cairo_font_options_t *options) +{ + cairo_scaled_font_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_scaled_font_create, font_face, font_matrix, ctm, options); + if (_has_scaled_font_id (ret)) + goto out; + + _emit_line_info (); + if (font_face != NULL && + font_matrix != NULL && + ctm != NULL && + options != NULL + && _write_lock ()) + { + Object *obj; + + obj = _type_object_create (SCALED_FONT, ret); + DLCALL (cairo_scaled_font_set_user_data, + ret, &destroy_key, obj, _object_undef); + + if (_pop_operands_to (FONT_FACE, font_face)) + _consume_operand (false); + else + _trace_printf ("f%ld ", _get_font_face_id (font_face)); + + _emit_matrix (font_matrix); + _trace_printf (" "); + + _emit_matrix (ctm); + _trace_printf (" "); + + _emit_font_options (options); + + _trace_printf (" scaled-font /sf%ld exch def\n", + obj->token); + obj->defined = TRUE; + + _write_unlock (); + } + +out: + _exit_trace (); + return ret; +} + +void +cairo_show_text (cairo_t *cr, const char *utf8) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && _write_lock ()) { + _emit_context (cr); + _emit_string_literal (utf8, -1); + _trace_printf (" show-text\n"); + _write_unlock (); + } + DLCALL (cairo_show_text, cr, utf8); + _exit_trace (); +} + +static void +_glyph_advance (cairo_scaled_font_t *font, + const cairo_glyph_t *glyph, + double *x, double *y) +{ + cairo_text_extents_t extents; + + DLCALL (cairo_scaled_font_glyph_extents, font, glyph, 1, &extents); + *x += extents.x_advance; + *y += extents.y_advance; +} + +#define TOLERANCE 1e-5 +static void +_emit_glyphs (cairo_scaled_font_t *font, + const cairo_glyph_t *glyphs, + int num_glyphs) +{ + double x,y; + int n; + + if (num_glyphs == 0) { + _trace_printf ("[]"); + return; + } + + for (n = 0; n < num_glyphs; n++) { + if (glyphs[n].index > 255) + break; + } + + x = glyphs->x; + y = glyphs->y; + if (n < num_glyphs) { /* need full glyph range */ + cairo_bool_t first; + + _trace_printf ("[%g %g [", x, y); + first = TRUE; + while (num_glyphs--) { + if (fabs (glyphs->x - x) > TOLERANCE || + fabs (glyphs->y - y) > TOLERANCE) + { + x = glyphs->x; + y = glyphs->y; + _trace_printf ("] %g %g [", x, y); + first = TRUE; + } + + if (! first) + _trace_printf (" "); + _trace_printf ("%lu", glyphs->index); + first = FALSE; + + _glyph_advance (font, glyphs, &x, &y); + glyphs++; + } + _trace_printf ("]]"); + } else { + struct _data_stream stream; + + if (num_glyphs == 1) { + _trace_printf ("[%g %g <%02lx>]", x, y, glyphs->index); + } else { + _trace_printf ("[%g %g <~", x, y); + _write_base85_data_start (&stream); + while (num_glyphs--) { + unsigned char c; + + if (fabs (glyphs->x - x) > TOLERANCE || + fabs (glyphs->y - y) > TOLERANCE) + { + x = glyphs->x; + y = glyphs->y; + _write_base85_data_end (&stream); + _trace_printf ("~> %g %g <~", x, y); + _write_base85_data_start (&stream); + } + + c = glyphs->index; + _write_base85_data (&stream, &c, 1); + + _glyph_advance (font, glyphs, &x, &y); + glyphs++; + } + _write_base85_data_end (&stream); + _trace_printf ("~>]"); + } + } +} + +void +cairo_show_glyphs (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && glyphs != NULL && _write_lock ()) { + cairo_scaled_font_t *font; + + _emit_context (cr); + font = DLCALL (cairo_get_scaled_font, cr); + + _emit_glyphs (font, glyphs, num_glyphs); + _trace_printf (" show-glyphs\n"); + _write_unlock (); + } + + DLCALL (cairo_show_glyphs, cr, glyphs, num_glyphs); + _exit_trace (); +} + +static const char * +_direction_to_string (cairo_bool_t backward) +{ + const char *names[] = { + "FORWARD", + "BACKWARD" + }; + return names[!!backward]; +} + +void +cairo_show_text_glyphs (cairo_t *cr, + const char *utf8, + int utf8_len, + const cairo_glyph_t *glyphs, + int num_glyphs, + const cairo_text_cluster_t *clusters, + int num_clusters, + cairo_text_cluster_flags_t backward) +{ + cairo_scaled_font_t *font; + + _enter_trace (); + + font = DLCALL (cairo_get_scaled_font, cr); + + _emit_line_info (); + if (cr != NULL && glyphs != NULL && clusters != NULL && _write_lock ()) { + int n; + + _emit_context (cr); + + _emit_string_literal (utf8, utf8_len); + + _emit_glyphs (font, glyphs, num_glyphs); + _trace_printf (" ["); + for (n = 0; n < num_clusters; n++) { + _trace_printf (" %d %d", + clusters[n].num_bytes, + clusters[n].num_glyphs); + } + _trace_printf (" ] //%s show-text-glyphs\n", + _direction_to_string (backward)); + + _write_unlock (); + } + + DLCALL (cairo_show_text_glyphs, cr, + utf8, utf8_len, + glyphs, num_glyphs, + clusters, num_clusters, + backward); + _exit_trace (); +} + +void +cairo_text_path (cairo_t *cr, const char *utf8) +{ + _enter_trace (); + _emit_line_info (); + if (cr != NULL && _write_lock ()) { + _emit_context (cr); + _emit_string_literal (utf8, -1); + _trace_printf (" text-path\n"); + _write_unlock (); + } + DLCALL (cairo_text_path, cr, utf8); + _exit_trace (); +} + +void +cairo_glyph_path (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs) +{ + cairo_scaled_font_t *font; + + _enter_trace (); + + font = DLCALL (cairo_get_scaled_font, cr); + + _emit_line_info (); + if (cr != NULL && glyphs != NULL && _write_lock ()) { + _emit_context (cr); + _emit_glyphs (font, glyphs, num_glyphs); + _trace_printf (" glyph-path\n"); + + _write_unlock (); + } + + DLCALL (cairo_glyph_path, cr, glyphs, num_glyphs); + _exit_trace (); +} + +void +cairo_append_path (cairo_t *cr, const cairo_path_t *path) +{ + /* XXX no support for named paths, so manually reconstruct */ + int i; + cairo_path_data_t *p; + + _enter_trace (); + + _emit_line_info (); + if (cr == NULL || path == NULL) { + DLCALL (cairo_append_path, cr, path); + _exit_trace (); + return; + } + + for (i=0; i < path->num_data; i += path->data[i].header.length) { + p = &path->data[i]; + switch (p->header.type) { + case CAIRO_PATH_MOVE_TO: + if (p->header.length >= 2) + cairo_move_to (cr, p[1].point.x, p[1].point.y); + break; + case CAIRO_PATH_LINE_TO: + if (p->header.length >= 2) + cairo_line_to (cr, p[1].point.x, p[1].point.y); + break; + case CAIRO_PATH_CURVE_TO: + if (p->header.length >= 4) + cairo_curve_to (cr, + p[1].point.x, p[1].point.y, + p[2].point.x, p[2].point.y, + p[3].point.x, p[3].point.y); + break; + case CAIRO_PATH_CLOSE_PATH: + if (p->header.length >= 1) + cairo_close_path (cr); + break; + default: + break; + } + } + _exit_trace (); +} + +cairo_surface_t * +cairo_image_surface_create (cairo_format_t format, int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_image_surface_create, format, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + const char *format_str = _format_to_string (format); + const char *content_str = _format_to_content_string (format); + + _trace_printf ("dict\n" + " /width %d set\n" + " /height %d set\n" + " /format //%s set\n" + " /content //%s set\n" + " image dup /s%ld exch def\n", + width, height, format_str, content_str, obj->token); + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_image_surface_create_for_data (unsigned char *data, cairo_format_t format, int width, int height, int stride) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_image_surface_create_for_data, data, format, width, height, stride); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + /* cairo_image_surface_create_for_data() is both used to supply + * foreign pixel data to cairo and in order to read pixels back. + * Defer grabbing the pixel contents until we have to, but only for + * "large" images, for small images the overhead of embedding pixels + * is negligible. + * + * Choose 32x32 as that captures most icons which thanks to GdkPixbuf + * are frequently reloaded. + */ + if (width * height < 32*32) { + _emit_image (ret, NULL); + _trace_printf (" dup /s%ld exch def\n", + obj->token); + } else { + _trace_printf ("dict\n" + " /width %d set\n" + " /height %d set\n" + " /format //%s set\n" + " image dup /s%ld exch def\n", + width, height, + _format_to_string (format), + obj->token); + + obj->foreign = TRUE; + } + + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +unsigned char * +cairo_image_surface_get_data (cairo_surface_t *surface) +{ + unsigned char *ptr; + + /* Just leave some breadcrumbs */ + _enter_trace (); + _emit_line_info (); + if (surface != NULL && _write_lock ()) { + _trace_printf ("%% s%ld get-data\n", _get_surface_id (surface)); + _write_unlock (); + } + ptr = DLCALL (cairo_image_surface_get_data, surface); + _exit_trace (); + + return ptr; +} + +cairo_pattern_t * +cairo_pattern_create_raster_source (void *data, cairo_content_t content, int width, int height) +{ + cairo_pattern_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_pattern_create_raster_source, data, content, width, height); + + _emit_line_info (); + if (_write_lock ()) { + long pattern_id = _create_pattern_id (ret); + cairo_format_t format; + cairo_surface_t *image; + cairo_t *cr; + + /* Impossible to accurately record the interaction with this custom + * pattern so just suck all the data into an image upfront */ + switch (content) { + case CAIRO_CONTENT_ALPHA: format = CAIRO_FORMAT_A8; break; + case CAIRO_CONTENT_COLOR: format = CAIRO_FORMAT_RGB24; break; + default: + case CAIRO_CONTENT_COLOR_ALPHA: format = CAIRO_FORMAT_ARGB32; break; + } + + _trace_printf ("%% raster-source\n"); + + image = DLCALL (cairo_image_surface_create, format, width, height); + cr = DLCALL (cairo_create, image); + DLCALL (cairo_set_source, cr, ret); + DLCALL (cairo_paint, cr); + DLCALL (cairo_destroy, cr); + + _emit_image (image, NULL); + DLCALL (cairo_surface_destroy, image); + _trace_printf (" pattern dup /s%ld exch def\n", + pattern_id); + + _push_operand (PATTERN, ret); + _get_object (PATTERN, ret)->defined = TRUE; + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_surface_create_similar (cairo_surface_t *other, + cairo_content_t content, + int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_surface_create_similar, other, content, width, height); + + _emit_line_info (); + if (other != NULL && _write_lock ()) { + Object *other_obj = _get_object(SURFACE, other); + Object *new_obj = _create_surface (ret); + + if (other_obj->operand != -1) { + if (current_stack_depth == other_obj->operand + 1) + _trace_printf ("dup "); + else + _trace_printf ("%d index ", + current_stack_depth - other_obj->operand - 1); + } else { + assert(other_obj->defined); + _trace_printf ("s%ld ", other_obj->token); + } + + _trace_printf ("%d %d //%s similar dup /s%ld exch def\n", + width, height, + _content_to_string (content), + new_obj->token); + + new_obj->width = width; + new_obj->height = height; + new_obj->defined = TRUE; + + _push_object (new_obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_surface_create_similar_image (cairo_surface_t *other, + cairo_format_t format, + int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_surface_create_similar_image, + other, format, width, height); + + _emit_line_info (); + if (other != NULL && _write_lock ()) { + Object *other_obj = _get_object(SURFACE, other); + Object *new_obj = _create_surface (ret); + + if (other_obj->defined) + _trace_printf ("s%ld ", other_obj->token); + else if (current_stack_depth == other_obj->operand + 1) + _trace_printf ("dup "); + else + _trace_printf ("%d index ", + current_stack_depth - other_obj->operand - 1); + _trace_printf ("//%s %d %d similar-image %% s%ld\n", + _format_to_string (format), + width, height, + new_obj->token); + new_obj->width = width; + new_obj->height = height; + + _push_object (new_obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_surface_map_to_image (cairo_surface_t *surface, + const cairo_rectangle_int_t *extents) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_surface_map_to_image, surface, extents); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _emit_surface (surface); + if (extents) { + _trace_printf ("[%d %d %d %d] map-to-image %% s%ld\n", + extents->x, extents->y, + extents->width, extents->height, + obj->token); + obj->width = extents->width; + obj->height = extents->height; + } else { + _trace_printf ("[ ] map-to-image %% s%ld\n", obj->token); + } + + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +void +cairo_surface_unmap_image (cairo_surface_t *surface, + cairo_surface_t *image) +{ + _enter_trace (); + + _emit_line_info (); + if (_write_lock ()) { + Object *s = _get_object (SURFACE, surface); + Object *i = _get_object (SURFACE, image); + if (!(s->operand == current_stack_depth - 2 && + i->operand == current_stack_depth - 1)) { + if (i->operand != s->operand + 1 || ! _pop_operands_to_depth (i->operand + 1)) { + _emit_surface (surface); + _emit_surface (image); + } + } + _trace_printf ("unmap-image\n"); + _consume_operand (true); + _write_unlock (); + } + + DLCALL (cairo_surface_unmap_image, surface, image); + + _exit_trace (); +} + +cairo_surface_t * +cairo_surface_create_for_rectangle (cairo_surface_t *target, + double x, double y, + double width, double height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_surface_create_for_rectangle, target, x, y, width, height); + + _emit_line_info (); + if (target != NULL && _write_lock ()) { + Object *target_obj = _get_object (SURFACE, target); + Object *child_obj = _create_surface (ret); + + if (target_obj->defined) + _trace_printf ("s%ld ", target_obj->token); + else if (current_stack_depth == target_obj->operand + 1) + _trace_printf ("dup "); + else + _trace_printf ("%d index ", current_stack_depth - target_obj->operand - 1); + _trace_printf ("%f %f %f %f subsurface %% s%ld\n", + x, y, width, height, + child_obj->token); + + _push_object (child_obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +static void CAIRO_PRINTF_FORMAT(2, 3) +_emit_surface_op (cairo_surface_t *surface, const char *fmt, ...) +{ + va_list ap; + + if (surface == NULL || ! _write_lock ()) + return; + + _emit_surface (surface); + + va_start (ap, fmt); + _trace_vprintf ( fmt, ap); + va_end (ap); + + _write_unlock (); +} + +void +cairo_surface_finish (cairo_surface_t *surface) +{ + _enter_trace (); + _emit_line_info (); + DLCALL (cairo_surface_finish, surface); + _exit_trace (); +} + +void +cairo_surface_flush (cairo_surface_t *surface) +{ + _enter_trace (); + _emit_line_info (); + if (surface != NULL && _write_lock ()) { + _trace_printf ("%% s%ld flush\n", _get_surface_id (surface)); + _write_unlock (); + } + DLCALL (cairo_surface_flush, surface); + _exit_trace (); +} + +void +cairo_surface_mark_dirty (cairo_surface_t *surface) +{ + _enter_trace (); + _emit_line_info (); + + /* Call cairo before emitting the trace since _emit_surface() might cause + * snapshots to be creates while mark_dirty assert()s that there are none. + */ + DLCALL (cairo_surface_mark_dirty, surface); + + if (surface != NULL && _write_lock ()) { + if (_mark_dirty) { + _emit_surface (surface); + _trace_printf ("%% mark-dirty\n"); + _emit_source_image (surface); + } else + _trace_printf ("%% s%ld mark-dirty\n", _get_surface_id (surface)); + _write_unlock (); + } + _exit_trace (); +} + +void +cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface, + int x, int y, int width, int height) +{ + _enter_trace (); + + /* Call cairo before emitting the trace since _emit_surface() might cause + * snapshots to be creates while mark_dirty assert()s that there are none. + */ + DLCALL (cairo_surface_mark_dirty_rectangle, surface, x, y, width, height); + + _emit_line_info (); + if (surface != NULL && _write_lock ()) { + if (_mark_dirty) { + _emit_surface (surface); + _trace_printf ("%% %d %d %d %d mark-dirty-rectangle\n", + x, y, width, height); + _emit_source_image_rectangle (surface, x,y, width, height); + } else + _trace_printf ("%% s%ld %d %d %d %d mark-dirty-rectangle\n", + _get_surface_id (surface), x, y, width, height); + _write_unlock (); + } + _exit_trace (); +} + +void +cairo_surface_set_device_offset (cairo_surface_t *surface, double x_offset, double y_offset) +{ + _enter_trace (); + _emit_line_info (); + _emit_surface_op (surface, "%g %g set-device-offset\n", + x_offset, y_offset); + DLCALL (cairo_surface_set_device_offset, surface, x_offset, y_offset); + _exit_trace (); +} + +void +cairo_surface_set_device_scale (cairo_surface_t *surface, double x_offset, double y_offset) +{ + _enter_trace (); + _emit_line_info (); + _emit_surface_op (surface, "%g %g set-device-scale\n", + x_offset, y_offset); + DLCALL (cairo_surface_set_device_scale, surface, x_offset, y_offset); + _exit_trace (); +} + + +void +cairo_surface_set_fallback_resolution (cairo_surface_t *surface, double x_pixels_per_inch, double y_pixels_per_inch) +{ + _enter_trace (); + _emit_line_info (); + _emit_surface_op (surface, "%g %g set-fallback-resolution\n", + x_pixels_per_inch, y_pixels_per_inch); + DLCALL (cairo_surface_set_fallback_resolution, surface, x_pixels_per_inch, y_pixels_per_inch); + _exit_trace (); +} + +void +cairo_surface_copy_page (cairo_surface_t *surface) +{ + _enter_trace (); + _emit_line_info (); + _emit_surface_op (surface, "copy-page\n"); + DLCALL (cairo_surface_copy_page, surface); + _exit_trace (); +} + +void +cairo_surface_show_page (cairo_surface_t *surface) +{ + _enter_trace (); + _emit_line_info (); + _emit_surface_op (surface, "show-page\n"); + DLCALL (cairo_surface_show_page, surface); + _exit_trace (); +} + +cairo_status_t +cairo_surface_set_mime_data (cairo_surface_t *surface, + const char *mime_type, + const unsigned char *data, + unsigned long length, + cairo_destroy_func_t destroy, + void *closure) +{ + cairo_status_t ret; + _enter_trace (); + _emit_line_info (); + if (surface != NULL && _write_lock ()) { + _emit_surface (surface); + _emit_string_literal (mime_type, -1); + _trace_printf (" "); + _emit_data (data, length); + _trace_printf (" /deflate filter set-mime-data\n"); + + _write_unlock (); + } + + ret = DLCALL (cairo_surface_set_mime_data, + surface, + mime_type, + data, length, + destroy, + closure); + _exit_trace (); + return ret; +} + +#if CAIRO_HAS_PNG_FUNCTIONS +cairo_status_t +cairo_surface_write_to_png (cairo_surface_t *surface, const char *filename) +{ + cairo_status_t ret; + _enter_trace (); + _emit_line_info (); + if (surface != NULL && _write_lock ()) { + _trace_printf ("%% s%ld ", _get_surface_id (surface)); + _emit_string_literal (filename, -1); + _trace_printf (" write-to-png pop\n"); + _write_unlock (); + } + ret = DLCALL (cairo_surface_write_to_png, surface, filename); + _exit_trace (); + return ret; +} + +cairo_status_t +cairo_surface_write_to_png_stream (cairo_surface_t *surface, + cairo_write_func_t write_func, + void *data) +{ + cairo_status_t ret; + _enter_trace (); + _emit_line_info (); + if (surface != NULL && _write_lock ()) { + char symbol[1024]; + + _trace_printf ("%% s%ld ", _get_surface_id (surface)); +#if CAIRO_HAS_SYMBOL_LOOKUP + lookup_symbol (symbol, sizeof (symbol), write_func); +#else + symbol[0] = '\0'; +#endif + _emit_string_literal (symbol, -1); + _trace_printf (" write-to-png-stream pop\n"); + _write_unlock (); + } + ret = DLCALL (cairo_surface_write_to_png_stream, + surface, write_func, data); + _exit_trace (); + return ret; +} +#endif + +static void CAIRO_PRINTF_FORMAT(2, 3) +_emit_pattern_op (cairo_pattern_t *pattern, const char *fmt, ...) +{ + va_list ap; + + if (pattern == NULL || ! _write_lock ()) + return; + + _emit_pattern (pattern); + + va_start (ap, fmt); + _trace_vprintf (fmt, ap); + va_end (ap); + + _write_unlock (); +} + +cairo_pattern_t * +cairo_pattern_create_rgb (double red, double green, double blue) +{ + cairo_pattern_t *ret; + long pattern_id; + + _enter_trace (); + + ret = DLCALL (cairo_pattern_create_rgb, red, green, blue); + pattern_id = _create_pattern_id (ret); + + _emit_line_info (); + if (_write_lock ()) { + _trace_printf ("/p%ld %g %g %g rgb def\n", + pattern_id, red, green, blue); + _get_object (PATTERN, ret)->defined = TRUE; + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_pattern_t * +cairo_pattern_create_rgba (double red, double green, double blue, double alpha) +{ + cairo_pattern_t *ret; + long pattern_id; + + _enter_trace (); + + ret = DLCALL (cairo_pattern_create_rgba, red, green, blue, alpha); + pattern_id = _create_pattern_id (ret); + + _emit_line_info (); + if (_write_lock ()) { + _trace_printf ("/p%ld %g %g %g %g rgba def\n", + pattern_id, red, green, blue, alpha); + _get_object (PATTERN, ret)->defined = TRUE; + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_pattern_t * +cairo_pattern_create_for_surface (cairo_surface_t *surface) +{ + cairo_pattern_t *ret; + long pattern_id; + long surface_id; + + _enter_trace (); + + ret = DLCALL (cairo_pattern_create_for_surface, surface); + pattern_id = _create_pattern_id (ret); + + _emit_line_info (); + if (surface != NULL && _write_lock ()) { + surface_id = _get_surface_id (surface); + + if (_pop_operands_to (SURFACE, surface)) { + _consume_operand (false); + } else { + _trace_printf ("s%ld ", surface_id); + } + + if (_get_object (SURFACE, surface)->foreign) + _emit_source_image (surface); + + _trace_printf ("pattern %% p%ld\n", pattern_id); + _push_operand (PATTERN, ret); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_pattern_t * +cairo_pattern_create_linear (double x0, double y0, double x1, double y1) +{ + cairo_pattern_t *ret; + long pattern_id; + + _enter_trace (); + + ret = DLCALL (cairo_pattern_create_linear, x0, y0, x1, y1); + pattern_id = _create_pattern_id (ret); + + _emit_line_info (); + if (_write_lock ()) { + _trace_printf ("%g %g %g %g linear %% p%ld\n", + x0, y0, x1, y1, pattern_id); + _push_operand (PATTERN, ret); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_pattern_t * +cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1) +{ + cairo_pattern_t *ret; + long pattern_id; + + _enter_trace (); + + ret = DLCALL (cairo_pattern_create_radial, + cx0, cy0, radius0, + cx1, cy1, radius1); + pattern_id = _create_pattern_id (ret); + + _emit_line_info (); + if (_write_lock ()) { + _trace_printf ("%g %g %g %g %g %g radial %% p%ld\n", + cx0, cy0, radius0, cx1, cy1, radius1, + pattern_id); + _push_operand (PATTERN, ret); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +void +cairo_pattern_add_color_stop_rgb (cairo_pattern_t *pattern, double offset, double red, double green, double blue) +{ + _enter_trace (); + _emit_line_info (); + _emit_pattern_op (pattern, + "%g %g %g %g 1 add-color-stop\n", + offset, red, green, blue); + DLCALL (cairo_pattern_add_color_stop_rgb, pattern, offset, red, green, blue); + _exit_trace (); +} + +void +cairo_pattern_add_color_stop_rgba (cairo_pattern_t *pattern, double offset, double red, double green, double blue, double alpha) +{ + _enter_trace (); + _emit_line_info (); + _emit_pattern_op (pattern, + "%g %g %g %g %g add-color-stop\n", + offset, red, green, blue, alpha); + DLCALL (cairo_pattern_add_color_stop_rgba, pattern, offset, red, green, blue, alpha); + _exit_trace (); +} + +void +cairo_pattern_set_matrix (cairo_pattern_t *pattern, const cairo_matrix_t *matrix) +{ + _enter_trace (); + _emit_line_info (); + if (_matrix_is_identity (matrix)) { + _emit_pattern_op (pattern, "identity set-matrix\n"); + } else { + _emit_pattern_op (pattern, + "%g %g %g %g %g %g matrix set-matrix\n", + matrix->xx, matrix->yx, + matrix->xy, matrix->yy, + matrix->x0, matrix->y0); + } + DLCALL (cairo_pattern_set_matrix, pattern, matrix); + _exit_trace (); +} + +static const char * +_filter_to_string (cairo_filter_t filter) +{ +#define f(name) case CAIRO_FILTER_ ## name: return "FILTER_" #name + switch (filter) { + f(FAST); + f(GOOD); + f(BEST); + f(NEAREST); + f(BILINEAR); + f(GAUSSIAN); + }; +#undef f + return "UNKNOWN_FILTER"; +} + +void +cairo_pattern_set_filter (cairo_pattern_t *pattern, cairo_filter_t filter) +{ + _enter_trace (); + _emit_line_info (); + _emit_pattern_op (pattern, "//%s set-filter\n", _filter_to_string (filter)); + DLCALL (cairo_pattern_set_filter, pattern, filter); + _exit_trace (); +} + +static const char * +_extend_to_string (cairo_extend_t extend) +{ +#define f(name) case CAIRO_EXTEND_ ## name: return "EXTEND_" #name + switch (extend) { + f(NONE); + f(REPEAT); + f(REFLECT); + f(PAD); + }; +#undef f + return "UNKNOWN_EXTEND"; +} + +void +cairo_pattern_set_extend (cairo_pattern_t *pattern, cairo_extend_t extend) +{ + _enter_trace (); + _emit_line_info (); + _emit_pattern_op (pattern, "//%s set-extend\n", _extend_to_string (extend)); + DLCALL (cairo_pattern_set_extend, pattern, extend); + _exit_trace (); +} + +#if CAIRO_HAS_FT_FONT +#if CAIRO_HAS_FC_FONT +cairo_font_face_t * +cairo_ft_font_face_create_for_pattern (FcPattern *pattern) +{ + cairo_font_face_t *ret; + long font_face_id; + + _enter_trace (); + + ret = DLCALL (cairo_ft_font_face_create_for_pattern, pattern); + font_face_id = _create_font_face_id (ret); + + _emit_line_info (); + if (pattern != NULL && _write_lock ()) { + Object *obj; + + obj = _get_object (FONT_FACE, ret); + if (obj->unknown) { + FcPattern *copy; + FcChar8 *unparsed; + + copy = DLCALL (FcPatternDuplicate, pattern); + if (copy) + { + DLCALL (FcPatternDel, copy, FC_LANG); + DLCALL (FcPatternDel, copy, FC_CHARSET); + DLCALL (FcPatternDel, copy, FC_CAPABILITY); + } + else + copy = pattern; + + unparsed = DLCALL (FcNameUnparse, copy); + _trace_printf ("dict\n" + " /type 42 set\n" + " /pattern "); + _emit_string_literal ((char *) unparsed, -1); + _trace_printf (" set\n" + " font %% f%ld\n", + font_face_id); + obj->unknown = FALSE; + _push_operand (FONT_FACE, ret); + dump_stack(__func__); + + if (copy != pattern) + DLCALL (FcPatternDestroy, copy); + free (unparsed); + } + _write_unlock (); + } + + _exit_trace (); + return ret; +} +#endif /* CAIRO_HAS_FC_FONT*/ + +typedef struct _ft_face_data { + unsigned long index; + unsigned long size; + void *data; +} FtFaceData; + +static void +_ft_face_data_destroy (void *arg) +{ + FtFaceData *data = arg; + free (data->data); + free (data); +} + +cairo_font_face_t * +cairo_ft_font_face_create_for_ft_face (FT_Face face, int load_flags) +{ + cairo_font_face_t *ret; + Object *obj; + FtFaceData *data; + long font_face_id; + + _enter_trace (); + + ret = DLCALL (cairo_ft_font_face_create_for_ft_face, face, load_flags); + font_face_id = _create_font_face_id (ret); + + if (face == NULL) { + _exit_trace (); + return ret; + } + + obj = _get_object (NONE, face); + data = obj->data; + if (data == NULL) { + _exit_trace (); + return ret; + } + + _emit_line_info (); + if (_write_lock ()) { + obj = _get_object (FONT_FACE, ret); + if (obj->operand != -1) + _object_remove (obj); + + _trace_printf ("<< /type 42 /source "); + _emit_data (data->data, data->size); + _trace_printf (" /index %lu /flags %d >> font %% f%ld\n", + data->index, load_flags, font_face_id); + _push_operand (FONT_FACE, ret); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +static cairo_bool_t +_ft_read_file (FtFaceData *data, const char *path) +{ + char buf[8192]; + FILE *file; + + file = fopen (path, "rb"); + if (file != NULL) { + size_t ret; + unsigned long int allocated = sizeof (buf); + data->data = malloc (allocated); + do { + ret = fread (buf, 1, sizeof (buf), file); + if (ret == 0) + break; + memcpy ((char *) data->data + data->size, buf, ret); + data->size += ret; + if (ret != sizeof (buf)) + break; + + if (data->size == allocated) { + allocated *= 2; + data->data = realloc (data->data, allocated); + } + } while (TRUE); + fclose (file); + } + + return file != NULL; +} + +FT_Error +FT_New_Face (FT_Library library, const char *pathname, FT_Long index, FT_Face *face) +{ + FT_Error ret; + + _enter_trace (); + + ret = DLCALL (FT_New_Face, library, pathname, index, face); + if (ret == 0) { + Object *obj = _type_object_create (NONE, *face); + FtFaceData *data = malloc (sizeof (FtFaceData)); + data->index = index; + data->size = 0; + data->data = NULL; + _ft_read_file (data, pathname); + obj->data = data; + obj->destroy = _ft_face_data_destroy; + } + + _exit_trace (); + return ret; +} + +FT_Error +FT_New_Memory_Face (FT_Library library, const FT_Byte *mem, FT_Long size, FT_Long index, FT_Face *face) +{ + FT_Error ret; + + _enter_trace (); + + ret = DLCALL (FT_New_Memory_Face, library, mem, size, index, face); + if (ret == 0) { + Object *obj = _type_object_create (NONE, *face); + FtFaceData *data = malloc (sizeof (FtFaceData)); + data->index = index; + data->size = size; + data->data = malloc (size); + memcpy (data->data, mem, size); + obj->data = data; + obj->destroy = _ft_face_data_destroy; + } + + _exit_trace (); + return ret; +} + +/* XXX + * FT_New_Memory_Face() and FT_New_Face() appear to wrap FT_Open_Face() so we + * get a redundant call to FT_Open_Face() from those paths (no PLT hiding + * within FT, naughty library!) but we do not intercept a direct call to + * FT_Open_Face(). So far this has not caused any issues, but it will one + * day... + */ +FT_Error +FT_Open_Face (FT_Library library, const FT_Open_Args *args, FT_Long index, FT_Face *face) +{ + FT_Error ret; + + _enter_trace (); + + ret = DLCALL (FT_Open_Face, library, args, index, face); + if (ret == 0) { + Object *obj = _get_object (NONE, *face); + if (obj == NULL) { + FtFaceData *data; + + data = malloc (sizeof (FtFaceData)); + data->index = index; + if (args->flags & FT_OPEN_MEMORY) { + data->size = args->memory_size; + data->data = malloc (args->memory_size); + memcpy (data->data, args->memory_base, args->memory_size); + } else if (args->flags & FT_OPEN_STREAM) { + fprintf (stderr, "FT_Open_Face (stream, %ld) = %p\n", + index, *face); + abort (); + } else if (args->flags & FT_OPEN_PATHNAME) { + data->size = 0; + data->data = NULL; + _ft_read_file (data, args->pathname); + } + + obj = _type_object_create (NONE, *face); + obj->data = data; + obj->destroy = _ft_face_data_destroy; + } + } + + _exit_trace (); + return ret; +} + +FT_Error +FT_Done_Face (FT_Face face) +{ + FT_Error ret; + _enter_trace (); + + _object_destroy (_get_object (NONE, face)); + + ret = DLCALL (FT_Done_Face, face); + _exit_trace (); + return ret; +} +#endif + +static void +_surface_object_set_size (cairo_surface_t *surface, int width, int height) +{ + Object *obj; + + obj = _get_object (SURFACE, surface); + obj->width = width; + obj->height = height; +} + +static void +_surface_object_set_size_from_surface (cairo_surface_t *surface) +{ + _surface_object_set_size (surface, + DLCALL (cairo_image_surface_get_width, surface), + DLCALL (cairo_image_surface_get_height, surface)); +} + +#if CAIRO_HAS_PS_SURFACE +#include<cairo-ps.h> + +cairo_surface_t * +cairo_ps_surface_create (const char *filename, double width_in_points, double height_in_points) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_ps_surface_create, filename, width_in_points, height_in_points); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /PS set\n" + " /filename "); + _emit_string_literal (filename, -1); + _trace_printf (" set\n" + " /width %g set\n" + " /height %g set\n" + " surface %% s%ld\n", + width_in_points, + height_in_points, + obj->token); + obj->width = width_in_points; + obj->height = height_in_points; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_ps_surface_create_for_stream (cairo_write_func_t write_func, void *closure, double width_in_points, double height_in_points) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_ps_surface_create_for_stream, write_func, closure, width_in_points, height_in_points); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /PS set\n" + " /width %g set\n" + " /height %g set\n" + " surface %% s%ld\n", + width_in_points, + height_in_points, + obj->token); + obj->width = width_in_points; + obj->height = height_in_points; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +void +cairo_ps_surface_set_size (cairo_surface_t *surface, double width_in_points, double height_in_points) +{ + _enter_trace (); + _emit_line_info (); + DLCALL (cairo_ps_surface_set_size, surface, width_in_points, height_in_points); + _exit_trace (); +} + +#endif + +#if CAIRO_HAS_PDF_SURFACE +#include <cairo-pdf.h> + +cairo_surface_t * +cairo_pdf_surface_create (const char *filename, double width_in_points, double height_in_points) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_pdf_surface_create, filename, width_in_points, height_in_points); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /PDF set\n" + " /filename "); + _emit_string_literal (filename, -1); + _trace_printf (" set\n" + " /width %g set\n" + " /height %g set\n" + " surface %% s%ld\n", + width_in_points, + height_in_points, + obj->token); + obj->width = width_in_points; + obj->height = height_in_points; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_pdf_surface_create_for_stream (cairo_write_func_t write_func, void *closure, double width_in_points, double height_in_points) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_pdf_surface_create_for_stream, write_func, closure, width_in_points, height_in_points); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /PDF set\n" + " /width %g set\n" + " /height %g set\n" + " surface %% s%ld\n", + width_in_points, + height_in_points, + obj->token); + obj->width = width_in_points; + obj->height = height_in_points; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + _exit_trace (); + return ret; +} + +void +cairo_pdf_surface_set_size (cairo_surface_t *surface, double width_in_points, double height_in_points) +{ + _enter_trace (); + _emit_line_info (); + DLCALL (cairo_pdf_surface_set_size, surface, width_in_points, height_in_points); + _exit_trace (); +} +#endif + +#if CAIRO_HAS_SVG_SURFACE +#include <cairo-svg.h> + +cairo_surface_t * +cairo_svg_surface_create (const char *filename, double width, double height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_svg_surface_create, filename, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /SVG set\n" + " /filename "); + _emit_string_literal (filename, -1); + _trace_printf (" set\n" + " /width %g set\n" + " /height %g set\n" + " surface %% s%ld\n", + width, + height, + obj->token); + obj->width = width; + obj->height = height; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_svg_surface_create_for_stream (cairo_write_func_t write_func, void *closure, double width, double height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_svg_surface_create_for_stream, write_func, closure, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /SVG set\n" + " /width %g set\n" + " /height %g set\n" + " surface %% s%ld\n", + width, + height, + obj->token); + obj->width = width; + obj->height = height; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +#endif + +#if CAIRO_HAS_PNG_FUNCTIONS +cairo_surface_t * +cairo_image_surface_create_from_png (const char *filename) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_image_surface_create_from_png, filename); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + char filename_string[4096]; + + _encode_string_literal (filename_string, sizeof (filename_string), + filename, -1); + _emit_image (ret, " /filename %s set\n", filename_string); + _trace_printf (" dup /s%ld exch def\n", obj->token); + _surface_object_set_size_from_surface (ret); + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_image_surface_create_from_png_stream (cairo_read_func_t read_func, void *closure) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_image_surface_create_from_png_stream, read_func, closure); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _emit_image (ret, NULL); + _trace_printf (" dup /s%ld exch def\n", + obj->token); + + _surface_object_set_size_from_surface (ret); + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} +#endif + +static const char * +_content_from_surface (cairo_surface_t *surface) +{ + return _content_to_string (DLCALL (cairo_surface_get_content, surface)); +} + +#if CAIRO_HAS_TEE_SURFACE +#include <cairo-tee.h> + +cairo_surface_t * +cairo_tee_surface_create (cairo_surface_t *master) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_tee_surface_create, master); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /tee set\n" + " /master s%ld set\n" + " surface dup /s%ld exch def\n", + _get_object (SURFACE, master)->token, + obj->token); + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +#endif + +#if CAIRO_HAS_XLIB_SURFACE +#include <cairo-xlib.h> + +cairo_surface_t * +cairo_xlib_surface_create (Display *dpy, + Drawable drawable, + Visual *visual, + int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_xlib_surface_create, + dpy, drawable, visual, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /xlib set\n" + " /drawable 16!%lx set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + drawable, + _content_from_surface (ret), + width, height, + obj->token); + obj->defined = TRUE; + obj->width = width; + obj->height = height; + obj->foreign = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_xlib_surface_create_for_bitmap (Display *dpy, + Pixmap bitmap, + Screen *screen, + int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_xlib_surface_create_for_bitmap, + dpy, bitmap, screen, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /xlib set\n" + " /drawable 16!%lx set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " /depth 1 set\n" + " surface dup /s%ld exch def\n", + bitmap, + _content_from_surface (ret), + width, height, + obj->token); + obj->defined = TRUE; + obj->width = width; + obj->height = height; + obj->foreign = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +#if CAIRO_HAS_XLIB_XRENDER_SURFACE +#include <cairo-xlib-xrender.h> +cairo_surface_t * +cairo_xlib_surface_create_with_xrender_format (Display *dpy, + Drawable drawable, + Screen *screen, + XRenderPictFormat *format, + int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_xlib_surface_create_with_xrender_format, + dpy, drawable, screen, format, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /xrender set\n" + " /drawable 16!%lx set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " /depth %d set\n" + " surface dup /s%ld exch def\n", + drawable, + _content_from_surface (ret), + width, height, + format->depth, + obj->token); + obj->defined = TRUE; + obj->width = width; + obj->height = height; + obj->foreign = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} +#endif +#endif + +#if CAIRO_HAS_SCRIPT_SURFACE +#include <cairo-script.h> +cairo_surface_t * +cairo_script_surface_create (cairo_device_t *device, + cairo_content_t content, + double width, + double height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_script_surface_create, device, content, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /script set\n" + " /content %s set\n" + " /width %g set\n" + " /height %g set\n" + " surface dup /s%ld exch def\n", + _content_to_string (content), + width, height, + obj->token); + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_script_surface_create_for_target (cairo_device_t *device, + cairo_surface_t *target) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_script_surface_create_for_target, device, target); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /script set\n" + " surface dup /s%ld exch def\n", + obj->token); + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} +#endif + +#if CAIRO_HAS_TEST_SURFACES +#include <test-paginated-surface.h> +cairo_surface_t * +_cairo_test_paginated_surface_create (cairo_surface_t *surface) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (_cairo_test_paginated_surface_create, surface); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + /* XXX store initial data? */ + _trace_printf ("dict\n" + " /type /test-paginated set\n" + " /target s%ld set\n" + " surface dup /s%ld exch def\n", + _get_surface_id (surface), + obj->token); + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +#include <test-compositor-surface.h> + +cairo_surface_t * +_cairo_test_fallback_compositor_surface_create (cairo_content_t content, int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (_cairo_test_fallback_compositor_surface_create, content, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /test-fallback-compositor set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + _content_to_string (content), + width, height, + obj->token); + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +_cairo_test_mask_compositor_surface_create (cairo_content_t content, int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (_cairo_test_mask_compositor_surface_create, content, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /test-mask-compositor set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + _content_to_string (content), + width, height, + obj->token); + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +_cairo_test_spans_compositor_surface_create (cairo_content_t content, int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (_cairo_test_spans_compositor_surface_create, content, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /test-spans-compositor set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + _content_to_string (content), + width, height, + obj->token); + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +_cairo_test_traps_compositor_surface_create (cairo_content_t content, int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (_cairo_test_traps_compositor_surface_create, content, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /test-traps-compositor set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + _content_to_string (content), + width, height, + obj->token); + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +#endif + +cairo_surface_t * +cairo_recording_surface_create (cairo_content_t content, + const cairo_rectangle_t *extents) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_recording_surface_create, content, extents); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + if (extents) { + _trace_printf ("//%s [ %f %f %f %f ] record dup /s%ld exch def\n", + _content_to_string (content), + extents->x, extents->y, + extents->width, extents->height, + obj->token); + obj->width = extents->width; + obj->height = extents->height; + } else { + _trace_printf ("//%s [ ] record dup /s%ld exch def\n", + _content_to_string (content), + obj->token); + } + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +#if CAIRO_HAS_VG_SURFACE +#include <cairo-vg.h> +cairo_surface_t * +cairo_vg_surface_create (cairo_vg_context_t *context, + cairo_content_t content, + int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_vg_surface_create, context, content, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /vg set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + _content_to_string (content), + width, height, + obj->token); + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_vg_surface_create_for_image (cairo_vg_context_t *context, + VGImage image, + VGImageFormat format, + int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_vg_surface_create_for_image, + context, image, format, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + cairo_content_t content; + + content = DLCALL (cairo_surface_get_content, ret); + _trace_printf ("dict\n" + " /type /vg set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + _content_to_string (content), + width, height, + obj->token); + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} +#endif + +#if CAIRO_HAS_GL_SURFACE || CAIRO_HAS_GLESV2_SURFACE +#include <cairo-gl.h> +cairo_surface_t * +cairo_gl_surface_create (cairo_device_t *abstract_device, + cairo_content_t content, + int width, + int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_gl_surface_create, abstract_device, content, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /gl set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + _content_to_string (content), + width, height, + obj->token); + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +cairo_surface_t * +cairo_gl_surface_create_for_texture (cairo_device_t *abstract_device, + cairo_content_t content, + unsigned int tex, + int width, + int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_gl_surface_create_for_texture, abstract_device, content, tex, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /gl set\n" + " /content //%s set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + _content_to_string (content), + width, height, + obj->token); + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} + +#if CAIRO_HAS_GLX_FUNCTIONS +cairo_surface_t * +cairo_gl_surface_create_for_window (cairo_device_t *device, + Window win, + int width, int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_gl_surface_create_for_window, device, win, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /gl set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + width, height, + obj->token); + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} +#endif + +#if CAIRO_HAS_WGL_FUNCTIONS +cairo_surface_t * +cairo_gl_surface_create_for_dc (cairo_device_t *device, + HDC dc, + int width, + int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_gl_surface_create_for_dc, device, dc, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /gl set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + width, height, + obj->token); + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} +#endif + +#if CAIRO_HAS_EGL_FUNCTIONS +cairo_surface_t * +cairo_gl_surface_create_for_egl (cairo_device_t *device, + EGLSurface egl, + int width, + int height) +{ + cairo_surface_t *ret; + + _enter_trace (); + + ret = DLCALL (cairo_gl_surface_create_for_egl, device, egl, width, height); + + _emit_line_info (); + if (_write_lock ()) { + Object *obj = _create_surface (ret); + + _trace_printf ("dict\n" + " /type /gl set\n" + " /width %d set\n" + " /height %d set\n" + " surface dup /s%ld exch def\n", + width, height, + obj->token); + obj->width = width; + obj->height = height; + obj->defined = TRUE; + _push_object (obj); + dump_stack(__func__); + _write_unlock (); + } + + _exit_trace (); + return ret; +} +#endif +#endif diff --git a/libs/cairo-1.16.0/util/cairo-view b/libs/cairo-1.16.0/util/cairo-view new file mode 100755 index 0000000..2bbed69 --- /dev/null +++ b/libs/cairo-1.16.0/util/cairo-view @@ -0,0 +1,113 @@ +#!/usr/bin/python + +import sys +import cairo +import pygtk +pygtk.require('2.0') +import gtk +import gtk.gdk +import pango +import gobject + +class CairoView(gtk.Window): + def __init__(self, family="", slant=0, weight=0, size=18, text="The Quick Brown Fox Jumps Over The Lazy Dog!"): + gtk.Widget.__init__ (self) + + self.family = family + if slant == "italic": + self.slant = cairo.FONT_SLANT_ITALIC + elif slant == "oblique": + self.slant = cairo.FONT_SLANT_OBLIQUE + else: + self.slant = cairo.FONT_SLANT_NORMAL + if weight == "bold": + self.weight = cairo.FONT_WEIGHT_BOLD + else: + self.weight = cairo.FONT_WEIGHT_NORMAL + self.size = float (size) + self.text = text + + def do_realize(self): + self.set_flags(self.flags() | gtk.REALIZED) + + self.window = gtk.gdk.Window( + self.get_parent_window(), + width=self.allocation.width, + height=self.allocation.height, + window_type=gtk.gdk.WINDOW_CHILD, + wclass=gtk.gdk.INPUT_OUTPUT, + event_mask=self.get_events() | gtk.gdk.EXPOSURE_MASK) + + self.window.set_user_data(self) + + self.style.attach(self.window) + + self.style.set_background(self.window, gtk.STATE_NORMAL) + + self.width, self.height = self.draw () + self.window.move_resize(0, 0, self.width, self.height) + + def do_unrealize(self): + self.window.destroy() + + def do_expose_event(self, event): + self.draw (event) + + return False + + def draw(self, event = None): + + cr = self.window.cairo_create() + if event: + cr.rectangle(event.area.x, event.area.y, + event.area.width, event.area.height) + cr.clip() + + cr.set_source_rgb (1, 1, 1) + cr.paint () + + cr.select_font_face (self.family, self.slant, self.weight) + cr.set_font_size (self.size) + + PAD = 30 + + extents = cr.text_extents (self.text) + cr.translate (PAD-extents[0], PAD-extents[1]) + + font_extents = cr.font_extents () + cr.rectangle (0, -font_extents[0], extents[4], font_extents[2]) + cr.move_to (-PAD, 0) + cr.line_to (extents[2]+PAD, 0) + cr.set_source_rgba (1, 0, 0, .7) + cr.stroke () + + cr.rectangle (*extents[:4]) + cr.set_source_rgba (0, 1, 0, .7) + cr.stroke () + + cr.move_to (0, 0) + cr.set_source_rgb (0, 0, 0) + cr.show_text (self.text) + + return int (extents[2]) + 2 * PAD, int (extents[3]) + 2 * PAD + + def run(self): + + self.props.allow_shrink = True + self.connect("destroy", gtk.main_quit) + self.show() + + gtk.main() + +gobject.type_register(CairoView) + +def main(args): + + if len (args) == 1: + print "usage: cairo-view family [slant [weight [size [text]]]]" + sys.exit (1) + cv= CairoView (*args[1:]) + cv.run() + +if __name__ == "__main__": + main(sys.argv) diff --git a/libs/cairo-1.16.0/util/font-view.c b/libs/cairo-1.16.0/util/font-view.c new file mode 100644 index 0000000..6a3322a --- /dev/null +++ b/libs/cairo-1.16.0/util/font-view.c @@ -0,0 +1,186 @@ +/* + * Copyright © 2008 Behdad Esfahbod + * Copyright © 2009 Chris Wilson + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of + * Chris Wilson not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Chris Wilson makes no representations about the + * suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * CHRIS WILSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL CHRIS WILSON BE LIABLE FOR ANY SPECIAL, + * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR + * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Author: Chris Wilson <chris@chris-wilson.co.uk> + */ + +#include <stdlib.h> +#include <string.h> +#include <gtk/gtk.h> +#include <cairo.h> + +struct options { + const char *text; + const char *family; + cairo_font_weight_t weight; + cairo_font_slant_t slant; + double size; + int PAD; + const char *png; +}; + +static void +draw (cairo_t *cr, struct options *options) +{ + cairo_text_extents_t extents; + cairo_font_extents_t font_extents; + + cairo_select_font_face (cr, + options->family, options->slant, options->weight); + cairo_set_font_size (cr, options->size); + + cairo_text_extents (cr, options->text, &extents); + cairo_translate (cr, + options->PAD - extents.x_bearing, + options->PAD - extents.y_bearing); + + cairo_font_extents (cr, &font_extents); + cairo_rectangle (cr, 0, -font_extents.ascent, + extents.x_advance, font_extents.height); + cairo_move_to (cr, -options->PAD, 0); + cairo_line_to (cr, extents.width + options->PAD, 0); + cairo_set_source_rgba (cr, 1, 0, 0, .7); + cairo_stroke (cr); + + cairo_rectangle (cr, + extents.x_bearing, extents.y_bearing, + extents.width, extents.height); + cairo_set_source_rgba (cr, 0, 1, 0, .7); + cairo_stroke (cr); + + cairo_move_to (cr, 0, 0); + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_show_text (cr, options->text); + cairo_fill (cr); +} + +static gboolean +expose_event (GtkWidget *w, GdkEventExpose *ev, struct options *options) +{ + cairo_t *cr; + + cr = gdk_cairo_create (w->window); + + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + draw (cr, options); + + cairo_destroy (cr); + + if (options->png) { + cairo_surface_t *image; + + image = cairo_image_surface_create (CAIRO_FORMAT_RGB24, + w->allocation.width, + w->allocation.height); + cr = cairo_create (image); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + draw (cr, options); + + cairo_destroy (cr); + cairo_surface_write_to_png (image, options->png); + cairo_surface_destroy (image); + } + + return TRUE; +} + +static void +size_request (GtkWidget *w, GtkRequisition *req , struct options *options) +{ + cairo_surface_t *dummy; + cairo_t *cr; + cairo_text_extents_t extents; + + dummy = cairo_image_surface_create (CAIRO_FORMAT_RGB24, 0, 0); + cr = cairo_create (dummy); + cairo_surface_destroy (dummy); + + cairo_select_font_face (cr, + options->family, options->slant, options->weight); + cairo_set_font_size (cr, options->size); + + cairo_text_extents (cr, options->text, &extents); + cairo_destroy (cr); + + req->width = extents.width + 2 * options->PAD; + req->height = extents.height + 2 * options->PAD; +} + +int +main (int argc, char **argv) +{ + GtkWidget *window; + struct options options = { + "The Quick Brown Fox Jumps Over The Lazy Dog!", + "@cairo:small-caps", + CAIRO_FONT_WEIGHT_NORMAL, + CAIRO_FONT_SLANT_NORMAL, + 48, + 30, + "font-view.png" + }; + + gtk_init (&argc, &argv); + + /* rudimentary argument processing */ + if (argc >= 2) { + options.family = argv[1]; + } + if (argc >= 3) { + if (strcmp (argv[2], "italic") == 0) + options.slant = CAIRO_FONT_SLANT_ITALIC; + else if (strcmp (argv[2], "oblique") == 0) + options.slant = CAIRO_FONT_SLANT_OBLIQUE; + else + options.slant = atoi (argv[2]); + } + if (argc >= 4) { + if (strcmp (argv[3], "bold") == 0) + options.weight = CAIRO_FONT_WEIGHT_BOLD; + else + options.weight = atoi (argv[3]); + } + if (argc >= 5) { + options.size = atof (argv[4]); + } + if (argc >= 6) { + options.text = argv[5]; + } + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + g_signal_connect (window, "size-request", + G_CALLBACK (size_request), &options); + g_signal_connect (window, "expose-event", + G_CALLBACK (expose_event), &options); + g_signal_connect (window, "delete-event", + G_CALLBACK (gtk_main_quit), NULL); + + gtk_window_present (GTK_WINDOW (window)); + gtk_main (); + + return 0; +} diff --git a/libs/cairo-1.16.0/util/malloc-stats.c b/libs/cairo-1.16.0/util/malloc-stats.c new file mode 100644 index 0000000..55ed51c --- /dev/null +++ b/libs/cairo-1.16.0/util/malloc-stats.c @@ -0,0 +1,368 @@ +/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */ +/* + * Copyright © 2007 Red Hat, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of + * Red Hat, Inc. not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Red Hat, Inc. makes no representations about the + * suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL, + * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR + * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Author: Behdad Esfahbod <behdad@behdad.org> + */ + +/* A simple malloc wrapper that prints out statistics on termination */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> + +/* caller-logging */ + +#include <string.h> + +struct alloc_stat_t { + unsigned int num; + unsigned long long size; +}; + +struct alloc_stats_t { + struct alloc_stat_t malloc, realloc, total; +}; + +struct func_stat_t { + struct func_stat_t *next; + + const void *addr; + const char *name; + + struct alloc_stats_t stat; +}; + +static struct alloc_stats_t total_allocations; +static struct func_stat_t *func_stats[31627]; +static int func_stats_num; + +#ifndef ARRAY_LENGTH +#define ARRAY_LENGTH(__array) ((int) (sizeof (__array) / sizeof (__array[0]))) +#endif +static void +alloc_stats_add (struct alloc_stats_t *stats, int is_realloc, size_t size) +{ + struct alloc_stat_t *stat = is_realloc ? &stats->realloc : &stats->malloc; + + stats->total.num++; + stats->total.size += size; + + stat->num++; + stat->size += size; +} + +#include <execinfo.h> + +static void * +_perm_alloc (size_t size) +{ + static uint8_t *ptr; + static size_t rem; + + void *ret; + +#define SUPERBLOCK_SIZE (1<<23) +#define align(x, y) (((x) + ((y)-1)) & ~((y)-1)) + + size = align (size, 2 * sizeof (void *)); + if (size > rem || rem == 0) { + ptr = malloc (SUPERBLOCK_SIZE); + if (ptr == NULL) + exit (1); + rem = SUPERBLOCK_SIZE; + } + +#undef SUPERBLOCK_SIZE +#undef align + + ret = ptr; + rem -= size; + ptr += size; + + return ret; +} + +static void +resolve_addrs (struct func_stat_t *func_stats, int num) +{ + int i; + void **addrs; + char **strings; + + addrs = malloc (num * sizeof (void *)); + for (i = 0; i < num; i++) + addrs[i] = (void *) func_stats[i].addr; + + strings = backtrace_symbols (addrs, num); + + for (i = 0; i < num; i++) { + char *p; + char *name; + int len; + + p = strchr (strings[i], '\t'); + if (p) + p++; + else + p = strings[i]; + + len = strlen (p) + 1; + name = _perm_alloc (len); + memcpy (name, p, len); + func_stats[i].name = name; + } + + free (strings); + free (addrs); +} + +static void +func_stats_add (const void *caller, int is_realloc, size_t size) +{ + int i; + struct func_stat_t *elt; + + alloc_stats_add (&total_allocations, is_realloc, size); + + i = ((uintptr_t) caller ^ 1215497) % ARRAY_LENGTH (func_stats); + for (elt = func_stats[i]; elt != NULL; elt = elt->next) { + if (elt->addr == caller) + break; + } + + if (elt == NULL) { + func_stats_num++; + + elt = _perm_alloc (sizeof (struct func_stat_t)); + elt->next = func_stats[i]; + func_stats[i] = elt; + elt->addr = caller; + elt->name = NULL; + memset (&elt->stat, 0, sizeof (struct alloc_stats_t)); + } + + alloc_stats_add (&elt->stat, is_realloc, size); +} + +/* wrapper stuff */ + +#include <malloc.h> + +static void *(*old_malloc)(size_t, const void *); +static void *(*old_realloc)(void *, size_t, const void *); + +static void *my_malloc(size_t, const void *); +static void *my_realloc(void *, size_t, const void *); + +static void +save_hooks (void) +{ + old_malloc = __malloc_hook; + old_realloc = __realloc_hook; +} + +static void +old_hooks (void) +{ + __malloc_hook = old_malloc; + __realloc_hook = old_realloc; +} + +static void +my_hooks (void) +{ + /* should always save the current value */ + save_hooks (); + + __malloc_hook = my_malloc; + __realloc_hook = my_realloc; +} + +static void * +my_malloc(size_t size, const void *caller) +{ + void *ret; + + old_hooks (); + + func_stats_add (caller, 0, size); + + ret = malloc (size); + my_hooks (); + + return ret; +} + +static void * +my_realloc(void *ptr, size_t size, const void *caller) +{ + void *ret; + + old_hooks (); + + func_stats_add (caller, 1, size); + + ret = realloc (ptr, size); + my_hooks (); + + return ret; +} + +static void +my_init_hook(void) { + my_hooks (); +} + +void (*__volatile __malloc_initialize_hook) (void) = my_init_hook; + + +/* reporting */ + +#include <locale.h> + +static void +add_alloc_stats (struct alloc_stats_t *a, struct alloc_stats_t *b) +{ + a->total.num += b->total.num; + a->total.size += b->total.size; + a->malloc.num += b->malloc.num; + a->malloc.size += b->malloc.size; + a->realloc.num += b->realloc.num; + a->realloc.size += b->realloc.size; +} + +static void +dump_alloc_stats (struct alloc_stats_t *stats, const char *name) +{ + printf ("%8u %'11llu %8u %'11llu %8u %'11llu %s\n", + stats->total.num, stats->total.size, + stats->malloc.num, stats->malloc.size, + stats->realloc.num, stats->realloc.size, + name); +} + +static int +compare_func_stats_name (const void *pa, const void *pb) +{ + const struct func_stat_t *a = pa, *b = pb; + int i; + + i = strcmp (a->name, b->name); + if (i) + return i; + + return ((char *) a->addr - (char *) b->addr); +} + +static int +compare_func_stats (const void *pa, const void *pb) +{ + const struct func_stat_t *a = pa, *b = pb; + + if (a->stat.total.num != b->stat.total.num) + return (a->stat.total.num - b->stat.total.num); + + if (a->stat.total.size != b->stat.total.size) + return (a->stat.total.size - b->stat.total.size); + + return compare_func_stats_name (pa, pb); +} + +static int +merge_similar_entries (struct func_stat_t *func_stats, int num) +{ + int i, j; + + j = 0; + for (i = 1; i < num; i++) { + if (i != j && 0 == strcmp (func_stats[i].name, func_stats[j].name)) { + add_alloc_stats (&func_stats[j].stat, &func_stats[i].stat); + } else { + j++; + if (i != j) + func_stats[j] = func_stats[i]; + } + } + j++; + + return j; +} + +__attribute__ ((destructor)) +void +malloc_stats (void) +{ + unsigned int i, j; + struct func_stat_t *sorted_func_stats; + + old_hooks (); + + if (! func_stats_num) + return; + + sorted_func_stats = malloc (sizeof (struct func_stat_t) * (func_stats_num + 1)); + if (sorted_func_stats == NULL) + return; + + j = 0; + for (i = 0; i < ARRAY_LENGTH (func_stats); i++) { + struct func_stat_t *elt; + for (elt = func_stats[i]; elt != NULL; elt = elt->next) + sorted_func_stats[j++] = *elt; + } + + resolve_addrs (sorted_func_stats, j); + + /* merge entries with same name */ + qsort (sorted_func_stats, j, + sizeof (struct func_stat_t), compare_func_stats_name); + j = merge_similar_entries (sorted_func_stats, j); + + qsort (sorted_func_stats, j, + sizeof (struct func_stat_t), compare_func_stats); + + /* add total */ + sorted_func_stats[j].next = NULL; + sorted_func_stats[j].addr = (void *) -1; + sorted_func_stats[j].name = "(total)"; + sorted_func_stats[j].stat = total_allocations; + j++; + + setlocale (LC_ALL, ""); + + printf (" TOTAL MALLOC REALLOC\n"); + printf (" num size num size num size\n"); + + for (i = 0; i < j; i++) { + dump_alloc_stats (&sorted_func_stats[i].stat, + sorted_func_stats[i].name); + } + + /* XXX free other stuff? */ + + free (sorted_func_stats); +} diff --git a/libs/cairo-1.16.0/util/show-contour.c b/libs/cairo-1.16.0/util/show-contour.c new file mode 100644 index 0000000..f3fa1ba --- /dev/null +++ b/libs/cairo-1.16.0/util/show-contour.c @@ -0,0 +1,667 @@ +#define _GNU_SOURCE +#include <gtk/gtk.h> +#include <stdlib.h> +#include <stdio.h> +#include <gdk/gdkkeysyms.h> +#include <math.h> + +typedef struct _point { + gdouble x, y; +} point_t; +typedef struct _box { + point_t p1, p2; +} box_t; + +typedef struct _contour { + struct _contour *next, *prev; + int direction; + int num_points; + int size; + point_t points[0]; +} contour_t; + +typedef struct _TrapView { + GtkWidget widget; + + cairo_surface_t *pixmap; + int pixmap_width, pixmap_height; + + box_t extents; + contour_t *contours; + + double px, py; + + gint mag_x, mag_y; + gint mag_size; + gdouble mag_zoom; + gboolean in_mag_drag; + gint mag_drag_x, mag_drag_y; +} TrapView; + +typedef struct _TrapViewClass { + GtkWidgetClass parent_class; +} TrapViewClass; + +G_DEFINE_TYPE (TrapView, trap_view, GTK_TYPE_WIDGET) + +static cairo_surface_t * +pixmap_create (TrapView *self, cairo_surface_t *target) +{ + cairo_surface_t *surface = + cairo_surface_create_similar (target, CAIRO_CONTENT_COLOR, + self->widget.allocation.width, + self->widget.allocation.height); + cairo_t *cr = cairo_create (surface); + contour_t *contour; + gdouble sf_x, sf_y, sf; + gdouble mid, dim; + gdouble x0, y0; + int n; + box_t extents; + + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + if (self->contours == NULL) { + cairo_destroy(cr); + return surface; + } + + extents = self->extents; + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = (extents.p2.x - extents.p1.x) / 2. * 1.25; + sf_x = self->widget.allocation.width / dim / 2; + + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = (extents.p2.y - extents.p1.y) / 2. * 1.25; + sf_y = self->widget.allocation.height / dim / 2; + + sf = MIN (sf_x, sf_y); + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = sf_x / sf * (extents.p2.x - extents.p1.x) / 2. * 1.25; + x0 = mid - dim; + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = sf_y / sf * (extents.p2.y - extents.p1.y) / 2. * 1.25; + y0 = mid - dim; + + for (contour = self->contours; contour; contour = contour->next) { + if (contour->num_points == 0) + continue; + + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + switch (contour->direction) { + case -1: + cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); + break; + case 0: + cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); + break; + case 1: + cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); + break; + } + { + const point_t *p = &contour->points[0]; + cairo_arc (cr, p->x, p->y, 4/sf, 0, 2 * M_PI); + cairo_save (cr); + cairo_identity_matrix (cr); + cairo_stroke (cr); + cairo_restore (cr); + } + for (n = 0; n < contour->num_points; n++) { + const point_t *p = &contour->points[n]; + cairo_arc (cr, p->x, p->y, 2/sf, 0, 2 * M_PI); + cairo_fill (cr); + } + for (n = 0; n < contour->num_points; n++) { + const point_t *p = &contour->points[n]; + cairo_line_to (cr, p->x, p->y); + } + } cairo_restore (cr); + + switch (contour->direction) { + case -1: + cairo_set_source_rgb (cr, 0.3, 0.3, 0.9); + break; + case 0: + cairo_set_source_rgb (cr, 0.3, 0.9, 0.3); + break; + case 1: + cairo_set_source_rgb (cr, 0.9, 0.3, 0.3); + break; + } + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + } + + cairo_destroy (cr); + return surface; +} + +static void +trap_view_draw (TrapView *self, cairo_t *cr) +{ + contour_t *contour; + gdouble sf_x, sf_y, sf; + gdouble mid, dim; + gdouble x0, y0; + int n; + box_t extents; + + extents = self->extents; + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = (extents.p2.x - extents.p1.x) / 2. * 1.25; + sf_x = self->widget.allocation.width / dim / 2; + + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = (extents.p2.y - extents.p1.y) / 2. * 1.25; + sf_y = self->widget.allocation.height / dim / 2; + + sf = MIN (sf_x, sf_y); + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = sf_x / sf * (extents.p2.x - extents.p1.x) / 2. * 1.25; + x0 = mid - dim; + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = sf_y / sf * (extents.p2.y - extents.p1.y) / 2. * 1.25; + y0 = mid - dim; + + if (self->pixmap_width != self->widget.allocation.width || + self->pixmap_height != self->widget.allocation.height) + { + cairo_surface_destroy (self->pixmap); + self->pixmap = pixmap_create (self, cairo_get_target (cr)); + self->pixmap_width = self->widget.allocation.width; + self->pixmap_height = self->widget.allocation.height; + } + + cairo_set_source_surface (cr, self->pixmap, 0, 0); + cairo_paint (cr); + + if (self->contours == NULL) + return; + + /* draw a zoom view of the area around the mouse */ + if (1) { + double zoom = self->mag_zoom; + int size = self->mag_size; + int mag_x = self->mag_x; + int mag_y = self->mag_y; + + if (1) { + if (self->px + size < self->widget.allocation.width/2) + mag_x = self->px + size/4; + else + mag_x = self->px - size/4 - size; + mag_y = self->py - size/2; + if (mag_y < 0) + mag_y = 0; + if (mag_y + size > self->widget.allocation.height) + mag_y = self->widget.allocation.height - size; + } + + cairo_save (cr); { + /* bottom right */ + cairo_rectangle (cr, mag_x, mag_y, size, size); + cairo_stroke_preserve (cr); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_fill_preserve (cr); + cairo_clip (cr); + + /* compute roi in extents */ + cairo_translate (cr, mag_x + size/2, mag_y + size/2); + + cairo_save (cr); { + for (contour = self->contours; contour; contour = contour->next) { + if (contour->num_points == 0) + continue; + + cairo_save (cr); { + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + switch (contour->direction) { + case -1: + cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); + break; + case 0: + cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); + break; + case 1: + cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); + break; + } + { + const point_t *p = &contour->points[0]; + cairo_arc (cr, p->x, p->y, 4/zoom, 0, 2 * M_PI); + cairo_save (cr); + cairo_identity_matrix (cr); + cairo_stroke (cr); + cairo_restore (cr); + } + for (n = 0; n < contour->num_points; n++) { + const point_t *p = &contour->points[n]; + cairo_arc (cr, p->x, p->y, 2/zoom, 0, 2 * M_PI); + cairo_fill (cr); + } + for (n = 0; n < contour->num_points; n++) { + const point_t *p = &contour->points[n]; + cairo_line_to (cr, p->x, p->y); + } + } cairo_restore (cr); + + switch (contour->direction) { + case -1: + cairo_set_source_rgb (cr, 0.3, 0.3, 0.9); + break; + case 0: + cairo_set_source_rgb (cr, 0.3, 0.9, 0.3); + break; + case 1: + cairo_set_source_rgb (cr, 0.9, 0.3, 0.3); + break; + } + cairo_stroke (cr); + } + } cairo_restore (cr); + + /* grid */ + cairo_save (cr); { + int i; + + cairo_translate (cr, + -zoom*fmod (self->px/sf + x0, 1.), + -zoom*fmod (self->py/sf + y0, 1.)); + zoom /= 2; + for (i = -size/2/zoom; i <= size/2/zoom + 1; i+=2) { + cairo_move_to (cr, zoom*i, -size/2); + cairo_line_to (cr, zoom*i, size/2 + zoom); + cairo_move_to (cr, -size/2, zoom*i); + cairo_line_to (cr, size/2 + zoom, zoom*i); + } + zoom *= 2; + cairo_set_source_rgba (cr, .7, .7, .7, .5); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + + for (i = -size/2/zoom - 1; i <= size/2/zoom + 1; i++) { + cairo_move_to (cr, zoom*i, -size/2); + cairo_line_to (cr, zoom*i, size/2 + zoom); + cairo_move_to (cr, -size/2, zoom*i); + cairo_line_to (cr, size/2 + zoom, zoom*i); + } + cairo_set_source_rgba (cr, .1, .1, .1, .5); + cairo_set_line_width (cr, 2.); + cairo_stroke (cr); + } cairo_restore (cr); + + } cairo_restore (cr); + } +} + + +static gdouble +edge_length (const point_t *p1, const point_t *p2) +{ + return hypot (p2->x - p1->x, p2->y - p1->y); +} + +static gdouble +contour_compute_total_length (const contour_t *contour) +{ + int n; + gdouble len = 0.; + for (n = 1; n < contour->num_points; n++) + len += edge_length (&contour->points[n-1], &contour->points[n]); + return len; +} + +static void +trap_view_draw_labels (TrapView *self, cairo_t *cr) +{ + contour_t *contour; + int y = 12; + + for (contour = self->contours; contour; contour = contour->next) { + double total_length = contour_compute_total_length (contour) / 256.; + PangoLayout *layout; + gint width, height; + GString *string; + gchar *str; + + if (contour->num_points == 0) + continue; + + string = g_string_new (NULL); + g_string_append_printf (string, + "Number of points:\t%d\n" + "Total length of contour: \t%.2f", + contour->num_points, + total_length); + + str = g_string_free (string, FALSE); + layout = gtk_widget_create_pango_layout (&self->widget, str); + g_free (str); + + pango_layout_get_pixel_size (layout, &width, &height); + + switch (contour->direction) { + case -1: + cairo_set_source_rgb (cr, 0.9, 0.3, 0.3); + break; + case 0: + cairo_set_source_rgb (cr, 0.3, 0.9, 0.3); + break; + case 1: + cairo_set_source_rgb (cr, 0.3, 0.3, 0.9); + break; + } + + cairo_move_to (cr, 10, y); + pango_cairo_show_layout (cr, layout); + g_object_unref (layout); + + y += height + 4; + } +} + +static gboolean +trap_view_expose (GtkWidget *w, GdkEventExpose *ev) +{ + TrapView *self = (TrapView *) w; + cairo_t *cr; + + cr = gdk_cairo_create (w->window); + gdk_cairo_region (cr, ev->region); + cairo_clip (cr); + + trap_view_draw (self, cr); + trap_view_draw_labels (self, cr); + + cairo_destroy (cr); + return FALSE; +} + +static gboolean +trap_view_key_press (GtkWidget *w, GdkEventKey *ev) +{ + switch (ev->keyval) { + case GDK_Escape: + case GDK_Q: + gtk_main_quit (); + break; + } + + return FALSE; +} + +static gboolean +trap_view_button_press (GtkWidget *w, GdkEventButton *ev) +{ + TrapView *self = (TrapView *) w; + + if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + } + else + { + self->in_mag_drag = TRUE; + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } + + return FALSE; +} + +static gboolean +trap_view_button_release (GtkWidget *w, GdkEventButton *ev) +{ + TrapView *self = (TrapView *) w; + + self->in_mag_drag = FALSE; + + return FALSE; +} + +static void +trap_view_update_mouse (TrapView *self, GdkEventMotion *ev) +{ + self->px = ev->x; + self->py = ev->y; + + gtk_widget_queue_draw (&self->widget); +} + +static void +trap_view_update_magnifier (TrapView *self, gint *xy) +{ + self->mag_x = xy[0]; + self->mag_y = xy[1]; + + gtk_widget_queue_draw (&self->widget); +} + +static gboolean +trap_view_motion (GtkWidget *w, GdkEventMotion *ev) +{ + TrapView *self = (TrapView *) w; + + if (self->in_mag_drag) { + int xy[2]; + + xy[0] = self->mag_x + ev->x - self->mag_drag_x; + xy[1] = self->mag_y + ev->y - self->mag_drag_y; + + trap_view_update_magnifier (self, xy); + + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } else if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + trap_view_update_mouse (self, ev); + } + + return FALSE; +} + +static void +trap_view_realize (GtkWidget *widget) +{ + GdkWindowAttr attributes; + + GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.visual = gtk_widget_get_visual (widget); + attributes.colormap = gtk_widget_get_colormap (widget); + attributes.event_mask = gtk_widget_get_events (widget) | + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_KEY_PRESS_MASK | + GDK_KEY_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_MOTION_MASK | + GDK_EXPOSURE_MASK; + + widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), + &attributes, + GDK_WA_X | GDK_WA_Y | + GDK_WA_VISUAL | GDK_WA_COLORMAP); + gdk_window_set_user_data (widget->window, widget); + + widget->style = gtk_style_attach (widget->style, widget->window); + gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); +} + +static void +trap_view_size_allocate (GtkWidget *w, GdkRectangle *r) +{ + TrapView *self = (TrapView *) w; + + GTK_WIDGET_CLASS (trap_view_parent_class)->size_allocate (w, r); + + self->mag_x = w->allocation.width - self->mag_size - 10; + self->mag_y = w->allocation.height - self->mag_size - 10; +} + +static void +trap_view_finalize (GObject *obj) +{ + G_OBJECT_CLASS (trap_view_parent_class)->finalize (obj); +} + +static void +trap_view_class_init (TrapViewClass *klass) +{ + GObjectClass *object_class = (GObjectClass *) klass; + GtkWidgetClass *widget_class = (GtkWidgetClass *) klass; + + object_class->finalize = trap_view_finalize; + + widget_class->realize = trap_view_realize; + widget_class->size_allocate = trap_view_size_allocate; + widget_class->expose_event = trap_view_expose; + widget_class->key_press_event = trap_view_key_press; + widget_class->button_press_event = trap_view_button_press; + widget_class->button_release_event = trap_view_button_release; + widget_class->motion_notify_event = trap_view_motion; +} + +static void +trap_view_init (TrapView *self) +{ + self->mag_zoom = 64; + self->mag_size = 200; + + self->extents.p1.x = G_MAXDOUBLE; + self->extents.p1.y = G_MAXDOUBLE; + self->extents.p2.x = -G_MAXDOUBLE; + self->extents.p2.y = -G_MAXDOUBLE; + + GTK_WIDGET_SET_FLAGS (self, GTK_CAN_FOCUS); +} + +static contour_t * +_contour_add_point (TrapView *tv, contour_t *contour, point_t *p) +{ + if (contour == NULL) + return NULL; + + if (p->y < tv->extents.p1.y) + tv->extents.p1.y = p->y; + if (p->y > tv->extents.p2.y) + tv->extents.p2.y = p->y; + + if (p->x < tv->extents.p1.x) + tv->extents.p1.x = p->x; + if (p->x > tv->extents.p2.x) + tv->extents.p2.x = p->x; + + if (contour->num_points == contour->size) { + int newsize = 2 * contour->size; + void *newcontour; + + newcontour = g_realloc (contour, + sizeof (contour_t) + newsize * sizeof (point_t)); + if (newcontour == NULL) + return contour; + + contour = newcontour; + contour->size = newsize; + + if (contour->next != NULL) + contour->next->prev = newcontour; + if (contour->prev != NULL) + contour->prev->next = newcontour; + else + tv->contours = newcontour; + } + + contour->points[contour->num_points++] = *p; + + return contour; +} + +static contour_t * +contour_new (TrapView *tv, int direction) +{ + contour_t *t; + + t = g_malloc (sizeof (contour_t) + 128 * sizeof (point_t)); + t->direction = direction; + t->prev = NULL; + t->next = tv->contours; + if (tv->contours) + tv->contours->prev = t; + tv->contours = t; + + t->size = 128; + t->num_points = 0; + + return t; +} + +int +main (int argc, char **argv) +{ + TrapView *tv; + contour_t *contour = NULL; + GtkWidget *window; + FILE *file; + char *line = NULL; + size_t len = 0; + + gtk_init (&argc, &argv); + + tv = g_object_new (trap_view_get_type (), NULL); + + file = fopen (argv[1], "r"); + if (file != NULL) { + while (getline (&line, &len, file) != -1) { + point_t p; + int direction; + + if (sscanf (line, "contour: direction=%d", &direction)) { + if (contour) + g_print ("read %d contour\n", contour->num_points); + + contour = contour_new (tv, direction); + } else if (sscanf (line, " [%*d] = (%lf, %lf)", &p.x, &p.y) == 2) { + contour = _contour_add_point (tv, contour, &p); + } + } + + if (contour) + g_print ("read %d contour\n", contour->num_points); + + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + tv->extents.p1.x, tv->extents.p1.y, + tv->extents.p2.x, tv->extents.p2.y); + fclose (file); + } + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + g_signal_connect (window, "delete-event", + G_CALLBACK (gtk_main_quit), NULL); + gtk_widget_set_size_request (window, 800, 800); + gtk_container_add (GTK_CONTAINER (window), &tv->widget); + gtk_widget_show_all (window); + + gtk_main (); + return 0; +} diff --git a/libs/cairo-1.16.0/util/show-edges.c b/libs/cairo-1.16.0/util/show-edges.c new file mode 100644 index 0000000..a85ad5f --- /dev/null +++ b/libs/cairo-1.16.0/util/show-edges.c @@ -0,0 +1,1221 @@ +#define _GNU_SOURCE +#include <gtk/gtk.h> +#include <stdlib.h> +#include <stdio.h> +#include <gdk/gdkkeysyms.h> +#include <math.h> + +typedef struct _point { + gdouble x, y; +} point_t; +typedef struct _box { + point_t p1, p2; +} box_t; +typedef struct _line { + point_t p1, p2; +} line_t; +typedef struct _trapezoid { + gdouble top, bottom; + line_t left, right; +} trapezoid_t; +typedef struct _traps { + struct _traps *next, *prev; + box_t extents; + int num_traps; + int size; + trapezoid_t traps[0]; +} traps_t; + +typedef struct _edge { + line_t line; + gdouble top, bottom; + point_t p1, p2; + int dir; +} edge_t; +typedef struct _edges { + struct _edges *next, *prev; + box_t extents; + int num_edges; + int size; + edge_t edges[0]; +} edges_t; + +typedef struct _TrapView { + GtkWidget widget; + + struct _TrapView *group_head; + struct _TrapView *group_next; + struct _TrapView *group_prev; + + traps_t *traps_list; + traps_t *current_traps; + + edges_t *edges_list; + edges_t *current_edges; + + double px, py; + + gint mag_x, mag_y; + gint mag_size; + gdouble mag_zoom; + gboolean in_mag_drag; + gint mag_drag_x, mag_drag_y; +} TrapView; + +typedef struct _TrapViewClass { + GtkWidgetClass parent_class; +} TrapViewClass; + +G_DEFINE_TYPE (TrapView, trap_view, GTK_TYPE_WIDGET) + +static gdouble +_compute_intersection_x_for_y (const line_t *line, + gdouble y) +{ + gdouble dx = line->p2.x - line->p1.x; + gdouble dy = line->p2.y - line->p1.y; + gdouble x; + + if (y == line->p1.y) + return line->p1.x; + if (y == line->p2.y) + return line->p2.x; + + x = line->p1.x; + if (dy != 0) + x += (y - line->p1.y)*dx/dy; + return x; +} + +static void +_compute_intersection_point (const line_t *line, + gdouble y, + point_t *p) +{ + p->x = _compute_intersection_x_for_y (line, p->y = y); +} + +static void +trap_view_draw (TrapView *self, cairo_t *cr) +{ + traps_t *traps; + edges_t *edges; + gdouble sf_x, sf_y, sf; + gdouble mid, dim; + gdouble x0, x1, y0, y1; + double dash[2] = {8, 8}; + double dots[2] = {0., 1.}; + int n; + box_t extents; + point_t p; + + cairo_save (cr); + cairo_save (cr); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + cairo_restore (cr); + + traps = self->current_traps; + edges = self->current_edges; + if (traps == NULL && edges == NULL) + return; + + if (traps != NULL) { + extents = traps->extents; + if (edges != NULL) { + if (edges->extents.p1.x < extents.p1.x) + extents.p1.x = edges->extents.p1.x; + if (edges->extents.p1.y < extents.p1.y) + extents.p1.y = edges->extents.p1.y; + if (edges->extents.p2.x > extents.p2.x) + extents.p2.x = edges->extents.p2.x; + if (edges->extents.p2.y > extents.p2.y) + extents.p2.y = edges->extents.p2.y; + } + } else + extents = edges->extents; + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = (extents.p2.x - extents.p1.x) / 2. * 1.25; + sf_x = self->widget.allocation.width / dim / 2; + + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = (extents.p2.y - extents.p1.y) / 2. * 1.25; + sf_y = self->widget.allocation.height / dim / 2; + + sf = MIN (sf_x, sf_y); + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = sf_x / sf * (extents.p2.x - extents.p1.x) / 2. * 1.25; + x0 = mid - dim; + x1 = mid + dim; + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = sf_y / sf * (extents.p2.y - extents.p1.y) / 2. * 1.25; + y0 = mid - dim; + y1 = mid + dim; + + if (traps != NULL) { + cairo_save (cr); + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + cairo_set_source_rgba (cr, 0, 1, 0, .2); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->top, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + cairo_close_path (cr); + cairo_fill (cr); + } + cairo_restore (cr); + } + + if (edges == NULL) { + cairo_save (cr); + + /* top, bottom */ + cairo_save (cr); { + cairo_matrix_t m; + cairo_matrix_init_scale (&m, sf, sf); + cairo_matrix_translate (&m, -x0, -y0); + + cairo_set_line_width (cr, 1.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + + _compute_intersection_point (&t->left, t->top, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_move_to (cr, floor (p.x), floor (p.y) + .5); + cairo_set_dash (cr, dash, 2, fmod (floor (p.x), dash[0] + dash[1])); + + _compute_intersection_point (&t->right, t->top, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_line_to (cr, ceil (p.x), floor (p.y) + .5); + cairo_stroke (cr); + + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_move_to (cr, floor (p.x), floor (p.y) + .5); + cairo_set_dash (cr, dash, 2, fmod (floor (p.x), dash[0] + dash[1])); + + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_line_to (cr, ceil (p.x), floor (p.y) + .5); + cairo_stroke (cr); + } + } cairo_restore (cr); + + /* left extents */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + cairo_move_to (cr, t->left.p1.x, t->left.p1.y); + cairo_line_to (cr, t->left.p2.x, t->left.p2.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_set_line_width (cr, 1.); + cairo_set_dash (cr, dash, 2, 0.); + cairo_stroke (cr); + } cairo_restore (cr); + + /* left line */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_stroke (cr); + } cairo_restore (cr); + + /* right extents */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + cairo_move_to (cr, t->right.p1.x, t->right.p1.y); + cairo_line_to (cr, t->right.p2.x, t->right.p2.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_set_line_width (cr, 1.); + cairo_set_dash (cr, dash, 2, 0.); + cairo_stroke (cr); + } cairo_restore (cr); + + /* right line */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->right, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_stroke (cr); + } cairo_restore (cr); + } + + /* end-points */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->right, t->top, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_dash (cr, dots, 2, 0.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); + cairo_set_line_width (cr, 4.); + cairo_stroke (cr); + } cairo_restore (cr); + + cairo_restore (cr); + } else { + cairo_save (cr); + + for (n = 0; n < edges->num_edges; n++) { + const edge_t *e = &edges->edges[n]; + + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + cairo_move_to (cr, e->p1.x, e->p1.y); + cairo_line_to (cr, e->p2.x, e->p2.y); + } cairo_restore (cr); + + if (e->dir < 0) { + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_set_dash (cr, dash, 2, dash[0]); + } else { + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_set_dash (cr, dash, 2, 0.); + } + + cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + cairo_move_to (cr, e->p1.x, e->p1.y); + cairo_close_path (cr); + cairo_move_to (cr, e->p2.x, e->p2.y); + cairo_close_path (cr); + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_dash (cr, dots, 2, 0.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); + cairo_set_line_width (cr, 4.); + cairo_stroke (cr); + } + + cairo_restore (cr); + } + + /* draw a zoom view of the area around the mouse */ + { + cairo_save (cr); + double zoom = self->mag_zoom; + int size = self->mag_size; + + /* bottom right */ + cairo_rectangle (cr, self->mag_x, self->mag_y, size, size); + cairo_stroke_preserve (cr); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_fill_preserve (cr); + cairo_clip (cr); + + /* compute roi in extents */ + cairo_translate (cr, self->mag_x + size/2, self->mag_y + size/2); + + if (traps != NULL) { + cairo_save (cr); + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->top, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + cairo_close_path (cr); + cairo_set_source_rgba (cr, 0, 1, 0, .2); + cairo_fill (cr); + } + cairo_restore (cr); + } + + if (edges == NULL) { + cairo_save (cr); { + cairo_matrix_t m; + cairo_matrix_init_scale (&m, zoom, zoom); + cairo_matrix_translate (&m, -(self->px / sf + x0), -(self->py /sf + y0)); + + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_line_width (cr, 1.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + + _compute_intersection_point (&t->left, t->top, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_move_to (cr, floor (p.x), floor (p.y) + .5); + cairo_set_dash (cr, dash, 2, fmod (floor (p.x), dash[0] + dash[1])); + + _compute_intersection_point (&t->right, t->top, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_line_to (cr, ceil (p.x), floor (p.y) + .5); + cairo_stroke (cr); + + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_move_to (cr, floor (p.x), floor (p.y) + .5); + cairo_set_dash (cr, dash, 2, fmod (floor (p.x), dash[0] + dash[1])); + + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_line_to (cr, ceil (p.x), floor (p.y) + .5); + cairo_stroke (cr); + } + } cairo_restore (cr); + + cairo_save (cr); { /* left extents */ + cairo_save (cr); { + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + cairo_move_to (cr, t->left.p1.x, t->left.p1.y); + cairo_line_to (cr, t->left.p2.x, t->left.p2.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_set_line_width (cr, .5); + cairo_set_dash (cr, dash, 2, 0.); + cairo_stroke (cr); + } cairo_restore (cr); + cairo_save (cr); { /* right extents */ + cairo_save (cr); { + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + cairo_move_to (cr, t->right.p1.x, t->right.p1.y); + cairo_line_to (cr, t->right.p2.x, t->right.p2.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_set_line_width (cr, .5); + cairo_set_dash (cr, dash, 2, 0.); + cairo_stroke (cr); + } cairo_restore (cr); + + cairo_save (cr); { /* left lines */ + cairo_save (cr); + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + } + cairo_restore (cr); + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_stroke (cr); + } cairo_restore (cr); + cairo_save (cr); { /* right lines */ + cairo_save (cr); + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->right, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + } + cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_stroke (cr); + } cairo_restore (cr); + + /* end-points */ + cairo_save (cr); { + double dots[2] = {0., 1.}; + + cairo_save (cr); + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->right, t->top, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + } + cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_dash (cr, dots, 2, 0.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); + cairo_set_line_width (cr, 4.); + cairo_stroke (cr); + } cairo_restore (cr); + } else { + cairo_save (cr); + + for (n = 0; n < edges->num_edges; n++) { + const edge_t *e = &edges->edges[n]; + + cairo_save (cr); { + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + cairo_move_to (cr, e->p1.x, e->p1.y); + cairo_line_to (cr, e->p2.x, e->p2.y); + } cairo_restore (cr); + + if (e->dir < 0) { + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_set_dash (cr, dash, 2, dash[0]); + } else { + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_set_dash (cr, dash, 2, 0.); + } + + cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + + cairo_save (cr); { + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + cairo_move_to (cr, e->p1.x, e->p1.y); + cairo_close_path (cr); + cairo_move_to (cr, e->p2.x, e->p2.y); + cairo_close_path (cr); + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_dash (cr, dots, 2, 0.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); + cairo_set_line_width (cr, 4.); + cairo_stroke (cr); + } + + cairo_restore (cr); + } + + /* grid */ + cairo_save (cr); { + int i; + + cairo_translate (cr, + -zoom*fmod (self->px/sf + x0, 1.), + -zoom*fmod (self->py/sf + y0, 1.)); + for (i = -size/2/zoom - 1; i <= size/2/zoom + 1; i++) { + cairo_move_to (cr, zoom*i, -size/2); + cairo_line_to (cr, zoom*i, size/2 + zoom); + cairo_move_to (cr, -size/2, zoom*i); + cairo_line_to (cr, size/2 + zoom, zoom*i); + } + cairo_set_source_rgba (cr, .7, .7, .7, .5); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + } cairo_restore (cr); + } + + cairo_restore (cr); +} + + +static gdouble +edge_length (const edge_t *e) +{ + return hypot (e->p2.x - e->p1.x, e->p2.y - e->p1.y); +} + +static gdouble +edges_compute_total_length (const edges_t *edges) +{ + int n; + gdouble len = 0.; + for (n = 0; n < edges->num_edges; n++) + len += edge_length (&edges->edges[n]); + return len; +} + +static gdouble +trapezoid_area (const trapezoid_t *t) +{ + gdouble inner_left, inner_right; + gdouble outer_left, outer_right; + gdouble height; + gdouble area; + + /* split into 3 sections: a rectangle with a pair of triangular bookends */ + inner_left = _compute_intersection_x_for_y (&t->left, t->top); + outer_left = _compute_intersection_x_for_y (&t->left, t->bottom); + if (outer_left > inner_left) { + gdouble t = outer_left; + outer_left = inner_left; + inner_left = t; + } + + inner_right = _compute_intersection_x_for_y (&t->right, t->top); + outer_right = _compute_intersection_x_for_y (&t->right, t->bottom); + if (outer_right > inner_right) { + gdouble t = outer_right; + outer_right = inner_right; + inner_right = t; + } + + if (outer_left > outer_right) { /* reverse */ + gdouble t; + + t = outer_left; + outer_left = inner_right; + inner_right = t; + + t = inner_left; + inner_left = outer_right; + outer_right = t; + } + + height = t->bottom - t->top; + area = (inner_left - outer_left) * height / 2; + area += (outer_right - inner_right) * height / 2; + area += (inner_right - inner_left) * height; + + return area; +} + +static gdouble +traps_compute_total_area (const traps_t *traps) +{ + int n; + gdouble area = 0.; + for (n = 0; n < traps->num_traps; n++) + area += trapezoid_area (&traps->traps[n]); + return area; +} + +static void +trap_view_draw_labels (TrapView *self, cairo_t *cr) +{ + PangoLayout *layout; + gint width, height; + GString *string; + gchar *str; + traps_t *traps; + edges_t *edges; + + string = g_string_new (NULL); + + traps = self->current_traps; + if (traps != NULL) { + /* convert total area from fixed-point (assuming 24.8) */ + gdouble total_area = traps_compute_total_area (traps) / (256. * 256.); + g_string_append_printf (string, + "Number of trapezoids:\t%d\n" + "Total area of trapezoids:\t%.2f\n", + traps->num_traps, + total_area); + } + + edges = self->current_edges; + if (edges != NULL) { + double total_length = edges_compute_total_length (edges) / 256.; + g_string_append_printf (string, + "Number of edges:\t%d\n" + "Total length of edges: \t%.2f\n", + edges->num_edges, + total_length); + } + + str = g_string_free (string, FALSE); + layout = gtk_widget_create_pango_layout (&self->widget, str); + g_free (str); + + pango_layout_get_pixel_size (layout, &width, &height); + + cairo_move_to (cr, 10, 40); + pango_cairo_show_layout (cr, layout); + g_object_unref (layout); +} + +static gboolean +trap_view_expose (GtkWidget *w, GdkEventExpose *ev) +{ + TrapView *self = (TrapView *) w; + cairo_t *cr; + + cr = gdk_cairo_create (w->window); + gdk_cairo_region (cr, ev->region); + cairo_clip (cr); + + trap_view_draw (self, cr); + trap_view_draw_labels (self, cr); + + cairo_destroy (cr); + return FALSE; +} + +static void +trap_view_advance (TrapView *self) +{ + if (self->current_traps && self->current_traps->prev) + self->current_traps = self->current_traps->prev; + if (self->current_edges && self->current_edges->prev) + self->current_edges = self->current_edges->prev; + gtk_widget_queue_draw (&self->widget); +} + +static void +trap_view_back (TrapView *self) +{ + if (self->current_traps && self->current_traps->next) + self->current_traps = self->current_traps->next; + if (self->current_edges && self->current_edges->next) + self->current_edges = self->current_edges->next; + gtk_widget_queue_draw (&self->widget); +} + +static void +trap_view_group_foreach (TrapView *group, GFunc func, gpointer data) +{ + while (group) { + func (group, data); + group = group->group_next; + } +} + +static gboolean +trap_view_key_press (GtkWidget *w, GdkEventKey *ev) +{ + TrapView *self = (TrapView *) w; + + switch (ev->keyval) { + case GDK_BackSpace: + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_back, + NULL); + break; + + case GDK_space: + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_advance, + NULL); + break; + + case GDK_Return: + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_advance, + NULL); + break; + + case GDK_Escape: + case GDK_Q: + gtk_main_quit (); + break; + } + + return FALSE; +} + +static gboolean +trap_view_button_press (GtkWidget *w, GdkEventButton *ev) +{ + TrapView *self = (TrapView *) w; + + if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + if (ev->type == GDK_BUTTON_PRESS) { + if (self->current_traps == NULL) + return FALSE; + + if (ev->button == 1) { + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_advance, + NULL); + } else if (ev->button == 3) { + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_back, + NULL); + } + } + } + else + { + self->in_mag_drag = TRUE; + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } + + return FALSE; +} + +static gboolean +trap_view_button_release (GtkWidget *w, GdkEventButton *ev) +{ + TrapView *self = (TrapView *) w; + + self->in_mag_drag = FALSE; + + return FALSE; +} + +static void +trap_view_update_mouse (TrapView *self, GdkEventMotion *ev) +{ + self->px = ev->x; + self->py = ev->y; + + gtk_widget_queue_draw (&self->widget); +} + +static void +trap_view_update_magnifier (TrapView *self, gint *xy) +{ + self->mag_x = xy[0]; + self->mag_y = xy[1]; + + gtk_widget_queue_draw (&self->widget); +} + +static gboolean +trap_view_motion (GtkWidget *w, GdkEventMotion *ev) +{ + TrapView *self = (TrapView *) w; + + if (self->in_mag_drag) { + int xy[2]; + + xy[0] = self->mag_x + ev->x - self->mag_drag_x; + xy[1] = self->mag_y + ev->y - self->mag_drag_y; + + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_update_magnifier, + xy); + + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } else if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_update_mouse, + ev); + } + + return FALSE; +} + +static void +trap_view_realize (GtkWidget *widget) +{ + GdkWindowAttr attributes; + + GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.visual = gtk_widget_get_visual (widget); + attributes.colormap = gtk_widget_get_colormap (widget); + attributes.event_mask = gtk_widget_get_events (widget) | + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_KEY_PRESS_MASK | + GDK_KEY_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_MOTION_MASK | + GDK_EXPOSURE_MASK; + + widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), + &attributes, + GDK_WA_X | GDK_WA_Y | + GDK_WA_VISUAL | GDK_WA_COLORMAP); + gdk_window_set_user_data (widget->window, widget); + + widget->style = gtk_style_attach (widget->style, widget->window); + gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); +} + +static void +trap_view_size_allocate (GtkWidget *w, GdkRectangle *r) +{ + TrapView *self = (TrapView *) w; + + GTK_WIDGET_CLASS (trap_view_parent_class)->size_allocate (w, r); + + self->mag_x = w->allocation.width - self->mag_size - 10; + self->mag_y = w->allocation.height - self->mag_size - 10; +} + +static void +trap_view_finalize (GObject *obj) +{ + G_OBJECT_CLASS (trap_view_parent_class)->finalize (obj); +} + +static void +trap_view_class_init (TrapViewClass *klass) +{ + GObjectClass *object_class = (GObjectClass *) klass; + GtkWidgetClass *widget_class = (GtkWidgetClass *) klass; + + object_class->finalize = trap_view_finalize; + + widget_class->realize = trap_view_realize; + widget_class->size_allocate = trap_view_size_allocate; + widget_class->expose_event = trap_view_expose; + widget_class->key_press_event = trap_view_key_press; + widget_class->button_press_event = trap_view_button_press; + widget_class->button_release_event = trap_view_button_release; + widget_class->motion_notify_event = trap_view_motion; +} + +static void +trap_view_init (TrapView *self) +{ + self->mag_zoom = 10; + self->mag_size = 200; + + GTK_WIDGET_SET_FLAGS (self, GTK_CAN_FOCUS); +} + +static traps_t * +_traps_add_trapezoid (TrapView *tv, traps_t *traps, const trapezoid_t *trap) +{ + if (trap->top < traps->extents.p1.y) + traps->extents.p1.y = trap->top; + if (trap->bottom > traps->extents.p2.y) + traps->extents.p2.y = trap->bottom; + + if (trap->left.p1.x < traps->extents.p1.x) + traps->extents.p1.x = trap->left.p1.x; + if (trap->left.p2.x < traps->extents.p1.x) + traps->extents.p1.x = trap->left.p2.x; + + if (trap->right.p1.x > traps->extents.p2.x) + traps->extents.p2.x = trap->right.p1.x; + if (trap->right.p2.x > traps->extents.p2.x) + traps->extents.p2.x = trap->right.p2.x; + + if (traps->num_traps == traps->size) { + int newsize = 2 * traps->size; + void *newtraps; + + newtraps = g_realloc (traps, + sizeof (traps_t) + newsize * sizeof (trapezoid_t)); + if (newtraps == NULL) + return traps; + + if (tv->current_traps == traps) + tv->current_traps = newtraps; + + traps = newtraps; + traps->size = newsize; + + if (traps->next != NULL) + traps->next->prev = newtraps; + if (traps->prev != NULL) + traps->prev->next = newtraps; + else + tv->traps_list = newtraps; + } + + traps->traps[traps->num_traps++] = *trap; + + return traps; +} + +static traps_t * +traps_new (TrapView *tv) +{ + traps_t *t; + + t = g_malloc (sizeof (traps_t) + 16 * sizeof (trapezoid_t)); + t->prev = NULL; + t->next = tv->traps_list; + if (tv->traps_list) + tv->traps_list->prev = t; + tv->traps_list = t; + + if (tv->current_traps == NULL) + tv->current_traps = t; + + t->size = 16; + t->num_traps = 0; + t->extents.p1.x = G_MAXDOUBLE; + t->extents.p1.y = G_MAXDOUBLE; + t->extents.p2.x = -G_MAXDOUBLE; + t->extents.p2.y = -G_MAXDOUBLE; + + return t; +} + +static edges_t * +_edges_add_edge (TrapView *tv, edges_t *edges, edge_t *e) +{ + if (e->top < edges->extents.p1.y) + edges->extents.p1.y = e->top; + if (e->bottom > edges->extents.p2.y) + edges->extents.p2.y = e->bottom; + + _compute_intersection_point (&e->line, e->top, &e->p1); + _compute_intersection_point (&e->line, e->bottom, &e->p2); + + if (e->p1.x < edges->extents.p1.x) + edges->extents.p1.x = e->p1.x; + if (e->p2.x < edges->extents.p1.x) + edges->extents.p1.x = e->p2.x; + + if (e->p1.x > edges->extents.p2.x) + edges->extents.p2.x = e->p1.x; + if (e->p2.x > edges->extents.p2.x) + edges->extents.p2.x = e->p2.x; + + if (edges->num_edges == edges->size) { + int newsize = 2 * edges->size; + void *newedges; + + newedges = g_realloc (edges, + sizeof (edges_t) + newsize * sizeof (edge_t)); + if (newedges == NULL) + return edges; + + if (tv->current_edges == edges) + tv->current_edges = newedges; + + edges = newedges; + edges->size = newsize; + + if (edges->next != NULL) + edges->next->prev = newedges; + if (edges->prev != NULL) + edges->prev->next = newedges; + else + tv->edges_list = newedges; + } + + edges->edges[edges->num_edges++] = *e; + + return edges; +} + +static edges_t * +edges_new (TrapView *tv) +{ + edges_t *t; + + t = g_malloc (sizeof (edges_t) + 16 * sizeof (edge_t)); + t->prev = NULL; + t->next = tv->edges_list; + if (tv->edges_list) + tv->edges_list->prev = t; + tv->edges_list = t; + + if (tv->current_edges == NULL) + tv->current_edges = t; + + t->size = 16; + t->num_edges = 0; + t->extents.p1.x = G_MAXDOUBLE; + t->extents.p1.y = G_MAXDOUBLE; + t->extents.p2.x = -G_MAXDOUBLE; + t->extents.p2.y = -G_MAXDOUBLE; + + return t; +} + +int +main (int argc, char **argv) +{ + TrapView *tv, *tv2, *group_head = NULL, *group_prev = NULL; + traps_t *traps; + edges_t *edges; + GtkWidget *window, *hbox; + FILE *file; + char *line = NULL; + size_t len = 0; + + gtk_init (&argc, &argv); + + hbox = gtk_hbox_new (TRUE, 0); + + tv = g_object_new (trap_view_get_type (), NULL); + gtk_box_pack_start (GTK_BOX (hbox), &tv->widget, TRUE, TRUE, 0); + gtk_widget_show (&tv->widget); + + tv->group_prev = group_prev; + tv->group_next = NULL; + if (group_prev) + group_prev->group_next = tv; + group_prev = tv; + if (group_head == NULL) + group_head = tv; + tv->group_head = group_head; + + file = fopen (argv[1], "r"); + if (file != NULL) { + edges = edges_new (tv); + while (getline (&line, &len, file) != -1) { + edge_t e; + + if (sscanf (line, + "(%lf, %lf), (%lf, %lf) %lf %lf %d", + &e.line.p1.x, &e.line.p1.y, + &e.line.p2.x, &e.line.p2.y, + &e.top, &e.bottom, + &e.dir) == 7) { + edges = _edges_add_edge (tv, edges, &e); + } else { + if (edges->num_edges) { + g_print ("read %d edges\n", edges->num_edges); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + edges->extents.p1.x, edges->extents.p1.y, + edges->extents.p2.x, edges->extents.p2.y); + edges = edges_new (tv); + } + } + } + + if (edges->num_edges) { + g_print ("read %d edges\n", edges->num_edges); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + edges->extents.p1.x, edges->extents.p1.y, + edges->extents.p2.x, edges->extents.p2.y); + } + + fclose (file); + } + + file = fopen (argv[2], "r"); + if (file != NULL) { + traps = traps_new (tv); + while (getline (&line, &len, file) != -1) { + trapezoid_t t; + + if (sscanf (line, + "%lf %lf L:(%lf, %lf), (%lf, %lf) R:(%lf, %lf), (%lf, %lf)", + &t.top, &t.bottom, + &t.left.p1.x, &t.left.p1.y, + &t.left.p2.x, &t.left.p2.y, + &t.right.p1.x, &t.right.p1.y, + &t.right.p2.x, &t.right.p2.y) == 10) { + traps = _traps_add_trapezoid (tv, traps, &t); + } else { + if (traps->num_traps) { + g_print ("read %d trapezoids\n", traps->num_traps); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + traps->extents.p1.x, traps->extents.p1.y, + traps->extents.p2.x, traps->extents.p2.y); + traps = traps_new (tv); + } + } + } + + if (traps->num_traps) { + g_print ("read %d trapezoids\n", traps->num_traps); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + traps->extents.p1.x, traps->extents.p1.y, + traps->extents.p2.x, traps->extents.p2.y); + } + + fclose (file); + } + + free (line); + + tv2 = g_object_new (trap_view_get_type (), NULL); + gtk_box_pack_start (GTK_BOX (hbox), &tv2->widget, TRUE, TRUE, 0); + gtk_widget_show (&tv2->widget); + + tv2->traps_list = tv->traps_list; + tv2->current_traps = tv->current_traps; + + tv2->group_prev = group_prev; + tv2->group_next = NULL; + group_prev->group_next = tv2; + group_prev = tv2; + tv2->group_head = group_head; + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + g_signal_connect (window, "delete-event", + G_CALLBACK (gtk_main_quit), NULL); + gtk_widget_set_size_request (window, 800, 800); + gtk_container_add (GTK_CONTAINER (window), hbox); + gtk_widget_show (hbox); + gtk_widget_show (window); + + gtk_main (); + return 0; +} diff --git a/libs/cairo-1.16.0/util/show-events.c b/libs/cairo-1.16.0/util/show-events.c new file mode 100644 index 0000000..8bff3ef --- /dev/null +++ b/libs/cairo-1.16.0/util/show-events.c @@ -0,0 +1,845 @@ +#define _GNU_SOURCE +#include <gtk/gtk.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <gdk/gdkkeysyms.h> +#include <math.h> + +typedef struct _point { + gdouble x, y; +} point_t; +typedef struct _box { + point_t p1, p2; +} box_t; +typedef struct _line { + point_t p1, p2; +} line_t; + +typedef struct _edge { + gulong id; + line_t line; + gdouble top, bottom; + point_t p1, p2; + int dir; +} edge_t; +typedef struct _trapezoid { + gdouble top, bottom; + const edge_t *left, *right; +} trapezoid_t; +typedef struct _traps { + int num_traps; + int size; + trapezoid_t traps[0]; +} traps_t; + +typedef struct _edges { + GHashTable *ht; + + int num_edges; + int size; + edge_t edges[0]; +} edges_t; + +typedef struct _event { + enum { + START_EDGE, + END_EDGE, + INTERSECTION, + START_TRAP, + END_TRAP, + } type; + + int x, y; /* (top, bottom) for trap */ + long e1, e2; +} event_t; + +typedef struct _events { + struct _events *prev, *next; + + box_t extents; + edges_t *edges; + traps_t *prototraps; + traps_t *traps; + + int current_event; + int num_events; + int size_events; + event_t *events; +} events_t; + +typedef struct _EventView { + GtkWidget widget; + + events_t *events_list; + events_t *current_events; + + double px, py; + + gint mag_x, mag_y; + gint mag_size; + gdouble mag_zoom; + gboolean in_mag_drag; + gint mag_drag_x, mag_drag_y; +} EventView; + +typedef struct _EventViewClass { + GtkWidgetClass parent_class; +} EventViewClass; + +G_DEFINE_TYPE (EventView, event_view, GTK_TYPE_WIDGET) + +static edge_t * +edges_lookup (edges_t *edges, gulong id) +{ + return &edges->edges[GPOINTER_TO_UINT(g_hash_table_lookup (edges->ht, + GUINT_TO_POINTER + (id)))]; +} + +static gdouble +_compute_intersection_x_for_y (const line_t *line, + gdouble y) +{ + gdouble dx = line->p2.x - line->p1.x; + gdouble dy = line->p2.y - line->p1.y; + gdouble x; + + if (y == line->p1.y) + return line->p1.x; + if (y == line->p2.y) + return line->p2.x; + + x = line->p1.x; + if (dy != 0) + x += (y - line->p1.y)*dx/dy; + return x; +} + +static void +_compute_intersection_point (const line_t *line, + gdouble y, + point_t *p) +{ + p->x = _compute_intersection_x_for_y (line, p->y = y); +} + +static void +_edge_path (cairo_t *cr, const cairo_matrix_t *m, const edge_t *e) +{ + double x, y; + + x = e->p1.x; y = e->p1.y; + cairo_matrix_transform_point (m, &x, &y); + cairo_move_to (cr, x, y); + + x = e->p2.x; y = e->p2.y; + cairo_matrix_transform_point (m, &x, &y); + cairo_line_to (cr, x, y); + + if (e->dir < 0) { + cairo_set_source_rgb (cr, 0, 0, 1); + } else { + cairo_set_source_rgb (cr, 1, 0, 0); + } +} + +static void +_events_draw (events_t *events, cairo_t *cr, cairo_matrix_t *m) +{ + double dash[2] = {8, 8}; + point_t p; + int n; + + /* first the existing and proto-traps */ + cairo_save (cr); { + cairo_set_matrix (cr, m); + + cairo_set_source_rgba (cr, 1, 0, 0, .15); + for (n = 0; n < events->prototraps->num_traps; n++) { + const trapezoid_t *t = &events->prototraps->traps[n]; + + _compute_intersection_point (&t->left->line, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right->line, t->top, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->right->line, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->left->line, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + cairo_close_path (cr); + cairo_fill (cr); + } + + cairo_set_source_rgba (cr, 0, 1, 0, .2); + for (n = 0; n < events->traps->num_traps; n++) { + const trapezoid_t *t = &events->traps->traps[n]; + + _compute_intersection_point (&t->left->line, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right->line, t->top, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->right->line, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->left->line, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + cairo_close_path (cr); + cairo_fill (cr); + } + } cairo_restore (cr); + + /* known edges */ + cairo_save (cr); + cairo_set_line_width (cr, 1.); + for (n = 0; n < events->edges->num_edges; n++) { + const edge_t *e = &events->edges->edges[n]; + double x, y; + + x = e->p1.x; y = e->p1.y; + cairo_matrix_transform_point (m, &x, &y); + cairo_move_to (cr, x, y); + + x = e->p2.x; y = e->p2.y; + cairo_matrix_transform_point (m, &x, &y); + cairo_line_to (cr, x, y); + + if (e->dir < 0) { + cairo_set_source_rgba (cr, 0, 0, 1., .4); + cairo_set_dash (cr, dash, 2, fmod (e->p1.x, dash[0]+dash[1]) + dash[0]); + } else { + cairo_set_source_rgba (cr, 1, 0, 0., 4); + cairo_set_dash (cr, dash, 2, fmod (e->p1.x, dash[0]+dash[1])); + } + + cairo_stroke (cr); + + x = e->p1.x; y = e->p1.y; + cairo_matrix_transform_point (m, &x, &y); + cairo_arc (cr, x, y, 2., 0, 2 * G_PI); + + x = e->p2.x; y = e->p2.y; + cairo_matrix_transform_point (m, &x, &y); + cairo_arc (cr, x, y, 2., 0, 2 * G_PI); + + cairo_fill (cr); + } + cairo_restore (cr); + + /* event time */ + cairo_save (cr); { + event_t *e; + double x, y; + + e = &events->events[events->current_event]; + + cairo_set_line_width (cr, 2.); + cairo_set_matrix (cr, m); + cairo_move_to (cr, + events->extents.p1.x, + e->y); + cairo_line_to (cr, + events->extents.p2.x, + e->y); + cairo_identity_matrix (cr); + cairo_stroke (cr); + + x = e->x; y = e->y; + cairo_matrix_transform_point (m, &x, &y); + switch (e->type) { + case START_EDGE: + case END_EDGE: + case INTERSECTION: + cairo_arc (cr, x, y, 4., 0, 2 * G_PI); + break; + case START_TRAP: + case END_TRAP: + break; + } + switch (e->type) { + case START_EDGE: + cairo_set_source_rgb (cr, 1, 0, 0); + break; + case END_EDGE: + cairo_set_source_rgb (cr, 0, 0, 1); + break; + case INTERSECTION: + cairo_set_source_rgb (cr, 1, 0, 1); + break; + case START_TRAP: + case END_TRAP: + break; + } + cairo_fill (cr); + + cairo_set_line_width (cr, 1.); + switch (e->type) { + case START_EDGE: + _edge_path (cr, m, edges_lookup (events->edges, e->e1)); + cairo_stroke (cr); + break; + case END_EDGE: + _edge_path (cr, m, edges_lookup (events->edges, e->e1)); + cairo_stroke (cr); + break; + case INTERSECTION: + _edge_path (cr, m, edges_lookup (events->edges, e->e1)); + cairo_stroke (cr); + _edge_path (cr, m, edges_lookup (events->edges, e->e2)); + cairo_stroke (cr); + break; + } + } cairo_restore (cr); +} + +static void +event_view_draw (EventView *self, cairo_t *cr) +{ + events_t *events; + gdouble sf_x, sf_y, sf; + gdouble mid, dim; + gdouble x0, x1, y0, y1; + cairo_matrix_t m; + + cairo_save (cr); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + cairo_restore (cr); + + events = self->current_events; + if (events == NULL) + return; + + mid = (events->extents.p2.x + events->extents.p1.x) / 2.; + dim = (events->extents.p2.x - events->extents.p1.x) / 2. * 1.2; + sf_x = self->widget.allocation.width / dim / 2; + + mid = (events->extents.p2.y + events->extents.p1.y) / 2.; + dim = (events->extents.p2.y - events->extents.p1.y) / 2. * 1.2; + sf_y = self->widget.allocation.height / dim / 2; + + sf = MIN (sf_x, sf_y); + + mid = (events->extents.p2.x + events->extents.p1.x) / 2.; + dim = sf_x / sf * (events->extents.p2.x - events->extents.p1.x) / 2. * 1.2; + x0 = mid - dim; + x1 = mid + dim; + mid = (events->extents.p2.y + events->extents.p1.y) / 2.; + dim = sf_y / sf * (events->extents.p2.y - events->extents.p1.y) / 2. * 1.2; + y0 = mid - dim; + y1 = mid + dim; + + cairo_matrix_init_scale (&m, sf, sf); + cairo_matrix_translate (&m, -x0, -y0); + _events_draw (events, cr, &m); + + /* draw a zoom view of the area around the mouse */ + cairo_save (cr); { + double zoom = self->mag_zoom; + int size = self->mag_size; + + /* bottom right */ + cairo_rectangle (cr, self->mag_x, self->mag_y, size, size); + cairo_stroke_preserve (cr); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_fill_preserve (cr); + cairo_clip (cr); + + /* compute roi in extents */ + cairo_translate (cr, self->mag_x + size/2, self->mag_y + size/2); + + cairo_matrix_init_scale (&m, zoom, zoom); + cairo_matrix_translate (&m, -(self->px / sf + x0), -(self->py /sf + y0)); + _events_draw (events, cr, &m); + + /* grid */ + cairo_save (cr); { + int i; + + cairo_translate (cr, + -zoom*fmod (self->px/sf + x0, 1.), + -zoom*fmod (self->py/sf + y0, 1.)); + for (i = -size/2/zoom - 1; i <= size/2/zoom + 1; i++) { + cairo_move_to (cr, zoom*i, -size/2); + cairo_line_to (cr, zoom*i, size/2 + zoom); + cairo_move_to (cr, -size/2, zoom*i); + cairo_line_to (cr, size/2 + zoom, zoom*i); + } + cairo_set_source_rgba (cr, .7, .7, .7, .5); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + } cairo_restore (cr); + } cairo_restore (cr); +} + +static void +event_view_draw_labels (EventView *self, cairo_t *cr) +{ + events_t *events; + + events = self->current_events; + if (events == NULL) + return; + +} + +static gboolean +event_view_expose (GtkWidget *w, GdkEventExpose *ev) +{ + EventView *self = (EventView *) w; + cairo_t *cr; + + cr = gdk_cairo_create (w->window); + gdk_cairo_region (cr, ev->region); + cairo_clip (cr); + + event_view_draw (self, cr); + event_view_draw_labels (self, cr); + + cairo_destroy (cr); + return FALSE; +} + +static void +traps_clear (traps_t *traps) +{ + traps->num_traps = 0; +} + +static traps_t * +traps_add (traps_t *traps, int top, int bot, const edge_t *e1, const edge_t *e2) +{ + trapezoid_t *t; + + if (traps->num_traps == traps->size) { + traps->size *= 2; + traps = g_realloc (traps, + sizeof (traps_t) + traps->size*sizeof (trapezoid_t)); + } + + t = &traps->traps[traps->num_traps++]; + t->top = top; + if (bot > e1->bottom) + bot = e1->bottom; + if (bot > e2->bottom) + bot = e2->bottom; + t->bottom = bot; + + t->left = e1; + t->right = e2; + + return traps; +} + +static void +traps_remove (traps_t *traps, int top, const edge_t *e1, const edge_t *e2) +{ + int n; + + for (n = 0; n < traps->num_traps; n++) { + trapezoid_t *t = &traps->traps[n]; + if (t->top == top && t->left == e1 && t->right == e2) + break; + } + if (n < traps->num_traps) { + g_memmove (&traps->traps[n], + &traps->traps[n+1], + (traps->num_traps-n+1) * sizeof (trapezoid_t)); + traps->num_traps--; + } +} + +static void +event_next (EventView *self) +{ + events_t *events; + event_t *e; + + events = self->current_events; + if (++events->current_event == events->num_events) { + return; + } else if (events->current_event >= events->num_events) { + traps_clear (events->prototraps); + traps_clear (events->traps); + events->current_event = 0; + + self->current_events = events->next; + if (self->current_events == NULL) + self->current_events = self->events_list; + events = self->current_events; + } + + e = &events->events[events->current_event]; + switch (e->type) { + case START_TRAP: + events->prototraps = traps_add (events->prototraps, + e->x, G_MAXINT, + edges_lookup (events->edges, e->e1), + edges_lookup (events->edges, e->e2)); + break; + case END_TRAP: + traps_remove (events->prototraps, + e->x, + edges_lookup (events->edges, e->e1), + edges_lookup (events->edges, e->e2)); + events->traps = traps_add (events->traps, + e->x, e->y, + edges_lookup (events->edges, e->e1), + edges_lookup (events->edges, e->e2)); + break; + } +} + +static gboolean +event_view_button_press (GtkWidget *w, GdkEventButton *ev) +{ + EventView *self = (EventView *) w; + + if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + if (ev->type == GDK_BUTTON_PRESS) { + event_next (self); + gtk_widget_queue_draw (w); + } + } + else + { + self->in_mag_drag = TRUE; + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } + + return FALSE; +} + +static gboolean +event_view_button_release (GtkWidget *w, GdkEventButton *ev) +{ + EventView *self = (EventView *) w; + + self->in_mag_drag = FALSE; + + return FALSE; +} + +static gboolean +event_view_motion (GtkWidget *w, GdkEventMotion *ev) +{ + EventView *self = (EventView *) w; + + if (self->in_mag_drag) { + self->mag_x += ev->x - self->mag_drag_x; + self->mag_y += ev->y - self->mag_drag_y; + + gtk_widget_queue_draw (&self->widget); + + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } else if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + self->px = ev->x; + self->py = ev->y; + + gtk_widget_queue_draw (&self->widget); + } + + return FALSE; +} + +static void +event_view_realize (GtkWidget *widget) +{ + GdkWindowAttr attributes; + + GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.visual = gtk_widget_get_visual (widget); + attributes.colormap = gtk_widget_get_colormap (widget); + attributes.event_mask = gtk_widget_get_events (widget) | + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_KEY_PRESS_MASK | + GDK_KEY_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_MOTION_MASK | + GDK_EXPOSURE_MASK; + + widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), + &attributes, + GDK_WA_X | GDK_WA_Y | + GDK_WA_VISUAL | GDK_WA_COLORMAP); + gdk_window_set_user_data (widget->window, widget); + + widget->style = gtk_style_attach (widget->style, widget->window); + gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); +} + +static void +event_view_size_allocate (GtkWidget *w, GdkRectangle *r) +{ + EventView *self = (EventView *) w; + + GTK_WIDGET_CLASS (event_view_parent_class)->size_allocate (w, r); + + self->mag_x = w->allocation.width - self->mag_size - 10; + self->mag_y = w->allocation.height - self->mag_size - 10; +} + +static void +event_view_finalize (GObject *obj) +{ + G_OBJECT_CLASS (event_view_parent_class)->finalize (obj); +} + +static void +event_view_class_init (EventViewClass *klass) +{ + GObjectClass *object_class = (GObjectClass *) klass; + GtkWidgetClass *widget_class = (GtkWidgetClass *) klass; + + object_class->finalize = event_view_finalize; + + widget_class->realize = event_view_realize; + widget_class->size_allocate = event_view_size_allocate; + widget_class->expose_event = event_view_expose; + widget_class->button_press_event = event_view_button_press; + widget_class->button_release_event = event_view_button_release; + widget_class->motion_notify_event = event_view_motion; +} + +static void +event_view_init (EventView *self) +{ + self->mag_zoom = 10; + self->mag_size = 200; +} + +static traps_t * +traps_new (void) +{ + traps_t *t; + + t = g_malloc (sizeof (traps_t) + 16 * sizeof (trapezoid_t)); + + t->size = 16; + t->num_traps = 0; + + return t; +} + +static edges_t * +_edges_add_edge (edges_t *edges, edge_t *e, box_t *extents) +{ + if (e->top < extents->p1.y) + extents->p1.y = e->top; + if (e->bottom > extents->p2.y) + extents->p2.y = e->bottom; + + _compute_intersection_point (&e->line, e->top, &e->p1); + _compute_intersection_point (&e->line, e->bottom, &e->p2); + + if (e->p1.x < extents->p1.x) + extents->p1.x = e->p1.x; + if (e->p2.x < extents->p1.x) + extents->p1.x = e->p2.x; + + if (e->p1.x > extents->p2.x) + extents->p2.x = e->p1.x; + if (e->p2.x > extents->p2.x) + extents->p2.x = e->p2.x; + + if (edges->num_edges == edges->size) { + edges->size *= 2; + edges = g_realloc (edges, + sizeof (edges_t) + edges->size * sizeof (edge_t)); + } + + g_hash_table_insert (edges->ht, + GUINT_TO_POINTER (e->id), + GUINT_TO_POINTER (edges->num_edges)); + edges->edges[edges->num_edges++] = *e; + + return edges; +} + +static void +_events_add_event (events_t *events, + int type, + int x, int y, + gulong e1, gulong e2) +{ + event_t *e; + + if (events->num_events == events->size_events) { + int newsize = 2 * events->size_events; + void *newevents; + + newevents = g_renew (event_t, events->events, newsize); + events->events = newevents; + events->size_events = newsize; + } + + e = &events->events[events->num_events++]; + e->type = type; + e->x = x; + e->y = y; + e->e1 = e1; + e->e2 = e2; +} + +static edges_t * +edges_new (void) +{ + edges_t *t; + + t = g_malloc (sizeof (edges_t) + 16 * sizeof (edge_t)); + t->ht = g_hash_table_new (NULL, NULL); + t->size = 16; + t->num_edges = 0; + + return t; +} + +static events_t * +events_new (void) +{ + events_t *events; + + events = g_malloc (sizeof (events_t)); + + events->next = NULL; + events->prev = NULL; + + events->events = g_new (event_t, 16); + events->size_events = 16; + events->num_events = 0; + events->current_event = 0; + + events->edges = edges_new (); + events->prototraps = traps_new (); + events->traps = traps_new (); + + events->extents.p1.x = G_MAXDOUBLE; + events->extents.p1.y = G_MAXDOUBLE; + events->extents.p2.x = -G_MAXDOUBLE; + events->extents.p2.y = -G_MAXDOUBLE; + + return events; +} + +static void +events_read (EventView *ev, const char *filename) +{ + FILE *file; + + file = fopen (filename, "r"); + if (file != NULL) { + char *line = NULL; + size_t len = 0; + events_t *events; + + events = ev->events_list = events_new (); + while (getline (&line, &len, file) != -1) { + line = g_strstrip (line); + if (*line == '\0') { + events->next = events_new (); + events->next->prev = events; + events = events->next; + } else if (g_str_has_prefix (line, "edge:")) { + edge_t edge; + + sscanf (line, "edge: %lu (%lf, %lf) (%lf, %lf) (%lf, %lf) %d", + &edge.id, + &edge.line.p1.x, + &edge.line.p1.y, + &edge.line.p2.x, + &edge.line.p2.y, + &edge.top, + &edge.bottom, + &edge.dir); + + events->edges = _edges_add_edge (events->edges, + &edge, + &events->extents); + } else if (g_str_has_prefix (line, "event:")) { + int type; + int x,y; + gulong e1, e2; + + sscanf (line, "event: %d (%d, %d) %lu %lu", + &type, &x, &y, + &e1, &e2); + + _events_add_event (events, type, x, y, e1, e2); + } else if (g_str_has_prefix (line, "begin trap:")) { + int top; + gulong e1, e2; + + sscanf (line, "begin trap: %lu %lu %u", &e1, &e2, &top); + + _events_add_event (events, START_TRAP, top, 0, e1, e2); + } else if (g_str_has_prefix (line, "end trap:")) { + int top, bottom; + gulong e1, e2; + + sscanf (line, "end trap: %lu %lu %d %d", + &e1, &e2, &top, &bottom); + + _events_add_event (events, END_TRAP, top, bottom, e1, e2); + } + } + + ev->current_events = ev->events_list; + + free (line); + fclose (file); + } +} + +static gboolean +timeout_advance (EventView *self) +{ + event_next (self); + gtk_widget_queue_draw (&self->widget); + return TRUE; +} + +int +main (int argc, char **argv) +{ + EventView *ev; + GtkWidget *window, *hbox; + + gtk_init (&argc, &argv); + + hbox = gtk_hbox_new (TRUE, 0); + + ev = g_object_new (event_view_get_type (), NULL); + gtk_box_pack_start (GTK_BOX (hbox), &ev->widget, TRUE, TRUE, 0); + gtk_widget_show (&ev->widget); + + events_read (ev, argv[1]); + g_timeout_add (750, (GSourceFunc) timeout_advance, ev); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request (window, 800, 800); + g_signal_connect (window, "delete-event", + G_CALLBACK (gtk_main_quit), NULL); + gtk_container_add (GTK_CONTAINER (window), hbox); + gtk_widget_show (hbox); + gtk_widget_show (window); + + gtk_main (); + return 0; +} diff --git a/libs/cairo-1.16.0/util/show-polygon.c b/libs/cairo-1.16.0/util/show-polygon.c new file mode 100644 index 0000000..35c0014 --- /dev/null +++ b/libs/cairo-1.16.0/util/show-polygon.c @@ -0,0 +1,646 @@ +#define _GNU_SOURCE +#include <gtk/gtk.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <gdk/gdkkeysyms.h> +#include <math.h> + +typedef struct _point { + gdouble x, y; +} point_t; +typedef struct _edge { + point_t p1, p2; + gdouble top, bot; + int dir; +} edge_t; +typedef struct _box { + point_t p1, p2; +} box_t; + +typedef struct _polygon { + struct _polygon *next, *prev; + int num_edges; + int size; + edge_t edges[0]; +} polygon_t; + +typedef struct _PolygonView { + GtkWidget widget; + + cairo_surface_t *pixmap; + int pixmap_width, pixmap_height; + + box_t extents; + polygon_t *polygons; + + double px, py; + + gint mag_x, mag_y; + gint mag_size; + gdouble mag_zoom; + gboolean in_mag_drag; + gint mag_drag_x, mag_drag_y; +} PolygonView; + +typedef struct _PolygonViewClass { + GtkWidgetClass parent_class; +} PolygonViewClass; + +G_DEFINE_TYPE (PolygonView, polygon_view, GTK_TYPE_WIDGET) + +double highlight = -1; + +static void draw_edges (cairo_t *cr, polygon_t *p, gdouble sf, int dir) +{ + int n; + + if (dir < 0) + cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); + else + cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); + + for (n = 0; n < p->num_edges; n++) { + const edge_t *e = &p->edges[n]; + double dx, dy; + double x1, x2; + + if (e->dir != dir) + continue; + + dx = e->p2.x - e->p1.x; + dy = e->p2.y - e->p1.y; + + x1 = e->p1.x + (e->top - e->p1.y) / dy * dx; + x2 = e->p1.x + (e->bot - e->p1.y) / dy * dx; + + cairo_arc (cr, x1, e->top, 2/sf, 0, 2*M_PI); + cairo_arc (cr, x2, e->bot, 2/sf, 0, 2*M_PI); + cairo_fill (cr); + } + + if (dir < 0) + cairo_set_source_rgba (cr, 0.0, 0.0, 1.0, 0.5); + else + cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 0.5); + + for (n = 0; n < p->num_edges; n++) { + const edge_t *e = &p->edges[n]; + + if (e->dir != dir) + continue; + + cairo_move_to (cr, e->p1.x, e->p1.y); + cairo_line_to (cr, e->p2.x, e->p2.y); + } + cairo_save (cr); { + cairo_identity_matrix (cr); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + } cairo_restore (cr); + + if (dir < 0) + cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); + else + cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); + + for (n = 0; n < p->num_edges; n++) { + const edge_t *e = &p->edges[n]; + double dx, dy; + double x1, x2; + + if (e->dir != dir) + continue; + + dx = e->p2.x - e->p1.x; + dy = e->p2.y - e->p1.y; + + x1 = e->p1.x + (e->top - e->p1.y) / dy * dx; + x2 = e->p1.x + (e->bot - e->p1.y) / dy * dx; + + cairo_move_to (cr, x1, e->top); + cairo_line_to (cr, x2, e->bot); + } + cairo_save (cr); { + cairo_identity_matrix (cr); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + } cairo_restore (cr); +} + +static void draw_polygon (cairo_t *cr, polygon_t *p, gdouble sf) +{ + draw_edges (cr, p, sf, -1); + + draw_edges (cr, p, sf, +1); +} + +static cairo_surface_t * +pixmap_create (PolygonView *self, cairo_surface_t *target) +{ + cairo_surface_t *surface = + cairo_surface_create_similar (target, CAIRO_CONTENT_COLOR, + self->widget.allocation.width, + self->widget.allocation.height); + cairo_t *cr = cairo_create (surface); + polygon_t *polygon; + gdouble sf_x, sf_y, sf; + gdouble mid, dim; + gdouble x0, y0; + box_t extents; + + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + if (self->polygons == NULL) { + cairo_destroy(cr); + return surface; + } + + extents = self->extents; + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = (extents.p2.x - extents.p1.x) / 2. * 1.25; + sf_x = self->widget.allocation.width / dim / 2; + + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = (extents.p2.y - extents.p1.y) / 2. * 1.25; + sf_y = self->widget.allocation.height / dim / 2; + + sf = MIN (sf_x, sf_y); + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = sf_x / sf * (extents.p2.x - extents.p1.x) / 2. * 1.25; + x0 = mid - dim; + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = sf_y / sf * (extents.p2.y - extents.p1.y) / 2. * 1.25; + y0 = mid - dim; + + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (polygon = self->polygons; polygon; polygon = polygon->next) { + if (polygon->num_edges == 0) + continue; + + draw_polygon (cr, polygon, sf); + } + + if (highlight != -1) { + cairo_move_to (cr, extents.p1.x, highlight); + cairo_line_to (cr, extents.p2.x, highlight); + cairo_set_source_rgb (cr, 0, .7, 0); + cairo_save (cr); + cairo_identity_matrix (cr); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + cairo_restore (cr); + } + } cairo_restore (cr); + + cairo_destroy (cr); + return surface; +} + +static void +polygon_view_draw (PolygonView *self, cairo_t *cr) +{ + polygon_t *polygon; + gdouble sf_x, sf_y, sf; + gdouble mid, dim; + gdouble x0, y0; + box_t extents; + + extents = self->extents; + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = (extents.p2.x - extents.p1.x) / 2. * 1.25; + sf_x = self->widget.allocation.width / dim / 2; + + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = (extents.p2.y - extents.p1.y) / 2. * 1.25; + sf_y = self->widget.allocation.height / dim / 2; + + sf = MIN (sf_x, sf_y); + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = sf_x / sf * (extents.p2.x - extents.p1.x) / 2. * 1.25; + x0 = mid - dim; + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = sf_y / sf * (extents.p2.y - extents.p1.y) / 2. * 1.25; + y0 = mid - dim; + + if (self->pixmap_width != self->widget.allocation.width || + self->pixmap_height != self->widget.allocation.height) + { + cairo_surface_destroy (self->pixmap); + self->pixmap = pixmap_create (self, cairo_get_target (cr)); + self->pixmap_width = self->widget.allocation.width; + self->pixmap_height = self->widget.allocation.height; + } + + cairo_set_source_surface (cr, self->pixmap, 0, 0); + cairo_paint (cr); + + if (self->polygons == NULL) + return; + + /* draw a zoom view of the area around the mouse */ + if (1) { + double zoom = self->mag_zoom; + int size = self->mag_size; + int mag_x = self->mag_x; + int mag_y = self->mag_y; + + if (1) { + if (self->px + size < self->widget.allocation.width/2) + mag_x = self->px + size/4; + else + mag_x = self->px - size/4 - size; + mag_y = self->py - size/2; + if (mag_y < 0) + mag_y = 0; + if (mag_y + size > self->widget.allocation.height) + mag_y = self->widget.allocation.height - size; + } + + cairo_save (cr); { + /* bottom right */ + cairo_rectangle (cr, mag_x, mag_y, size, size); + cairo_stroke_preserve (cr); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_fill_preserve (cr); + cairo_clip (cr); + + /* compute roi in extents */ + cairo_translate (cr, mag_x + size/2, mag_y + size/2); + + cairo_save (cr); { + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (polygon = self->polygons; polygon; polygon = polygon->next) { + if (polygon->num_edges == 0) + continue; + + draw_polygon (cr, polygon, zoom); + } + + if (highlight != -1) { + cairo_move_to (cr, extents.p1.x, highlight); + cairo_line_to (cr, extents.p2.x, highlight); + cairo_set_source_rgb (cr, 0, .7, 0); + cairo_save (cr); + cairo_identity_matrix (cr); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + cairo_restore (cr); + } + } cairo_restore (cr); + + /* grid */ + cairo_save (cr); { + int i; + + cairo_translate (cr, + -zoom*fmod (self->px/sf + x0, 1.), + -zoom*fmod (self->py/sf + y0, 1.)); + zoom /= 2; + for (i = -size/2/zoom; i <= size/2/zoom + 1; i+=2) { + cairo_move_to (cr, zoom*i, -size/2); + cairo_line_to (cr, zoom*i, size/2 + zoom); + cairo_move_to (cr, -size/2, zoom*i); + cairo_line_to (cr, size/2 + zoom, zoom*i); + } + zoom *= 2; + cairo_set_source_rgba (cr, .7, .7, .7, .5); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + + for (i = -size/2/zoom - 1; i <= size/2/zoom + 1; i++) { + cairo_move_to (cr, zoom*i, -size/2); + cairo_line_to (cr, zoom*i, size/2 + zoom); + cairo_move_to (cr, -size/2, zoom*i); + cairo_line_to (cr, size/2 + zoom, zoom*i); + } + cairo_set_source_rgba (cr, .1, .1, .1, .5); + cairo_set_line_width (cr, 2.); + cairo_stroke (cr); + } cairo_restore (cr); + + } cairo_restore (cr); + } +} + +static gboolean +polygon_view_expose (GtkWidget *w, GdkEventExpose *ev) +{ + PolygonView *self = (PolygonView *) w; + cairo_t *cr; + + cr = gdk_cairo_create (w->window); + gdk_cairo_region (cr, ev->region); + cairo_clip (cr); + + polygon_view_draw (self, cr); + + cairo_destroy (cr); + return FALSE; +} + +static gboolean +polygon_view_key_press (GtkWidget *w, GdkEventKey *ev) +{ + switch (ev->keyval) { + case GDK_Escape: + case GDK_Q: + gtk_main_quit (); + break; + } + + return FALSE; +} + +static gboolean +polygon_view_button_press (GtkWidget *w, GdkEventButton *ev) +{ + PolygonView *self = (PolygonView *) w; + + if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + } + else + { + self->in_mag_drag = TRUE; + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } + + return FALSE; +} + +static gboolean +polygon_view_button_release (GtkWidget *w, GdkEventButton *ev) +{ + PolygonView *self = (PolygonView *) w; + + self->in_mag_drag = FALSE; + + return FALSE; +} + +static void +polygon_view_update_mouse (PolygonView *self, GdkEventMotion *ev) +{ + self->px = ev->x; + self->py = ev->y; + + gtk_widget_queue_draw (&self->widget); +} + +static void +polygon_view_update_magnifier (PolygonView *self, gint *xy) +{ + self->mag_x = xy[0]; + self->mag_y = xy[1]; + + gtk_widget_queue_draw (&self->widget); +} + +static gboolean +polygon_view_motion (GtkWidget *w, GdkEventMotion *ev) +{ + PolygonView *self = (PolygonView *) w; + + if (self->in_mag_drag) { + int xy[2]; + + xy[0] = self->mag_x + ev->x - self->mag_drag_x; + xy[1] = self->mag_y + ev->y - self->mag_drag_y; + + polygon_view_update_magnifier (self, xy); + + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } else if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + polygon_view_update_mouse (self, ev); + } + + return FALSE; +} + +static void +polygon_view_realize (GtkWidget *widget) +{ + GdkWindowAttr attributes; + + GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.visual = gtk_widget_get_visual (widget); + attributes.colormap = gtk_widget_get_colormap (widget); + attributes.event_mask = gtk_widget_get_events (widget) | + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_KEY_PRESS_MASK | + GDK_KEY_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_MOTION_MASK | + GDK_EXPOSURE_MASK; + + widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), + &attributes, + GDK_WA_X | GDK_WA_Y | + GDK_WA_VISUAL | GDK_WA_COLORMAP); + gdk_window_set_user_data (widget->window, widget); + + widget->style = gtk_style_attach (widget->style, widget->window); + gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); +} + +static void +polygon_view_size_allocate (GtkWidget *w, GdkRectangle *r) +{ + PolygonView *self = (PolygonView *) w; + + GTK_WIDGET_CLASS (polygon_view_parent_class)->size_allocate (w, r); + + self->mag_x = w->allocation.width - self->mag_size - 10; + self->mag_y = w->allocation.height - self->mag_size - 10; +} + +static void +polygon_view_finalize (GObject *obj) +{ + G_OBJECT_CLASS (polygon_view_parent_class)->finalize (obj); +} + +static void +polygon_view_class_init (PolygonViewClass *klass) +{ + GObjectClass *object_class = (GObjectClass *) klass; + GtkWidgetClass *widget_class = (GtkWidgetClass *) klass; + + object_class->finalize = polygon_view_finalize; + + widget_class->realize = polygon_view_realize; + widget_class->size_allocate = polygon_view_size_allocate; + widget_class->expose_event = polygon_view_expose; + widget_class->key_press_event = polygon_view_key_press; + widget_class->button_press_event = polygon_view_button_press; + widget_class->button_release_event = polygon_view_button_release; + widget_class->motion_notify_event = polygon_view_motion; +} + +static void +polygon_view_init (PolygonView *self) +{ + self->mag_zoom = 64; + self->mag_size = 200; + + self->extents.p1.x = G_MAXDOUBLE; + self->extents.p1.y = G_MAXDOUBLE; + self->extents.p2.x = -G_MAXDOUBLE; + self->extents.p2.y = -G_MAXDOUBLE; + + GTK_WIDGET_SET_FLAGS (self, GTK_CAN_FOCUS); +} + +static polygon_t * +_polygon_add_edge (PolygonView *view, polygon_t *polygon, + point_t *p1, point_t *p2, + gdouble top, gdouble bot, int dir) +{ + if (polygon == NULL) + return NULL; + + if (top < view->extents.p1.y) + view->extents.p1.y = top; + if (bot > view->extents.p2.y) + view->extents.p2.y = bot; + + if (p1->x < view->extents.p1.x) + view->extents.p1.x = p1->x; + if (p1->x > view->extents.p2.x) + view->extents.p2.x = p1->x; + if (p2->x < view->extents.p1.x) + view->extents.p1.x = p2->x; + if (p2->x > view->extents.p2.x) + view->extents.p2.x = p2->x; + + if (polygon->num_edges == polygon->size) { + int newsize = 2 * polygon->size; + void *newpolygon; + + newpolygon = g_realloc (polygon, + sizeof (polygon_t) + newsize * sizeof (edge_t)); + if (newpolygon == NULL) + return polygon; + + polygon = newpolygon; + polygon->size = newsize; + + if (polygon->next != NULL) + polygon->next->prev = newpolygon; + if (polygon->prev != NULL) + polygon->prev->next = newpolygon; + else + view->polygons = newpolygon; + } + + polygon->edges[polygon->num_edges].p1 = *p1; + polygon->edges[polygon->num_edges].p2 = *p2; + polygon->edges[polygon->num_edges].top = top; + polygon->edges[polygon->num_edges].bot = bot; + polygon->edges[polygon->num_edges].dir = dir; + polygon->num_edges++; + + return polygon; +} + +static polygon_t * +polygon_new (PolygonView *view) +{ + polygon_t *t; + + t = g_malloc (sizeof (polygon_t) + 128 * sizeof (edge_t)); + t->prev = NULL; + t->next = view->polygons; + if (view->polygons) + view->polygons->prev = t; + view->polygons = t; + + t->size = 128; + t->num_edges = 0; + + return t; +} + +int +main (int argc, char **argv) +{ + PolygonView *view; + polygon_t *polygon = NULL; + GtkWidget *window; + FILE *file; + char *line = NULL; + size_t len = 0; + + gtk_init (&argc, &argv); + + view = g_object_new (polygon_view_get_type (), NULL); + + file = fopen (argv[1], "r"); + if (file != NULL) { + while (getline (&line, &len, file) != -1) { + point_t p1, p2; + double top, bottom; + int dir; + + if (strncmp (line, "polygon: ", sizeof("polygon: ")-1) == 0) { + if (polygon && polygon->num_edges) { + g_print ("read polygon with %d edges\n", polygon->num_edges); + + polygon = polygon_new (view); + } else if (polygon == NULL) + polygon = polygon_new (view); + } else if (sscanf (line, " [%*d] = [(%lf, %lf), (%lf, %lf)], top=%lf, bottom=%lf, dir=%d", &p1.x, &p1.y, &p2.x, &p2.y, &top, &bottom, &dir) == 7) { + polygon = _polygon_add_edge (view, polygon, &p1, &p2, + top, bottom, dir); + } + } + + if (polygon && polygon->num_edges) + g_print ("read polygon with %d edges\n", polygon->num_edges); + + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + view->extents.p1.x, view->extents.p1.y, + view->extents.p2.x, view->extents.p2.y); + fclose (file); + } + + if (argc > 2) + highlight = atof (argv[2]); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + g_signal_connect (window, "delete-event", + G_CALLBACK (gtk_main_quit), NULL); + gtk_widget_set_size_request (window, 800, 800); + gtk_container_add (GTK_CONTAINER (window), &view->widget); + gtk_widget_show_all (window); + + gtk_main (); + return 0; +} diff --git a/libs/cairo-1.16.0/util/show-traps.c b/libs/cairo-1.16.0/util/show-traps.c new file mode 100644 index 0000000..f46c8b0 --- /dev/null +++ b/libs/cairo-1.16.0/util/show-traps.c @@ -0,0 +1,1311 @@ +#define _GNU_SOURCE +#include <gtk/gtk.h> +#include <stdlib.h> +#include <stdio.h> +#include <gdk/gdkkeysyms.h> +#include <math.h> + +typedef struct _point { + gdouble x, y; +} point_t; +typedef struct _box { + point_t p1, p2; +} box_t; +typedef struct _line { + point_t p1, p2; +} line_t; +typedef struct _trapezoid { + gdouble top, bottom; + line_t left, right; +} trapezoid_t; +typedef struct _traps { + struct _traps *next, *prev; + box_t extents; + int num_traps; + int size; + trapezoid_t traps[0]; +} traps_t; + +typedef struct _edge { + line_t line; + gdouble top, bottom; + point_t p1, p2; + int dir; +} edge_t; +typedef struct _edges { + struct _edges *next, *prev; + box_t extents; + int num_edges; + int size; + edge_t edges[0]; +} edges_t; + +typedef struct _TrapView { + GtkWidget widget; + + struct _TrapView *group_head; + struct _TrapView *group_next; + struct _TrapView *group_prev; + + cairo_surface_t *pixmap; + int pixmap_width, pixmap_height; + + traps_t *traps_list; + traps_t *current_traps; + + edges_t *edges_list; + edges_t *current_edges; + + double px, py; + + gint mag_x, mag_y; + gint mag_size; + gdouble mag_zoom; + gboolean in_mag_drag; + gint mag_drag_x, mag_drag_y; +} TrapView; + +typedef struct _TrapViewClass { + GtkWidgetClass parent_class; +} TrapViewClass; + +G_DEFINE_TYPE (TrapView, trap_view, GTK_TYPE_WIDGET) + +static gdouble +_compute_intersection_x_for_y (const line_t *line, + gdouble y) +{ + gdouble dx = line->p2.x - line->p1.x; + gdouble dy = line->p2.y - line->p1.y; + gdouble x; + + if (y == line->p1.y) + return line->p1.x; + if (y == line->p2.y) + return line->p2.x; + + x = line->p1.x; + if (dy != 0) + x += (y - line->p1.y)*dx/dy; + return x; +} + +static void +_compute_intersection_point (const line_t *line, + gdouble y, + point_t *p) +{ + p->x = _compute_intersection_x_for_y (line, p->y = y); +} + +static cairo_surface_t * +pixmap_create (TrapView *self, cairo_surface_t *target) +{ + cairo_surface_t *surface = cairo_surface_create_similar (target, CAIRO_CONTENT_COLOR, + self->widget.allocation.width, + self->widget.allocation.height); + cairo_t *cr; + traps_t *traps; + edges_t *edges; + gdouble sf_x, sf_y, sf; + gdouble mid, dim; + gdouble x0, y0; + double dash[2] = {8, 8}; + double dots[2] = {0., 1.}; + int n; + box_t extents; + point_t p; + + traps = self->current_traps; + if (traps == NULL) + return surface; + edges = self->current_edges; + + extents = traps->extents; + if (edges != NULL) { + if (edges->extents.p1.x < extents.p1.x) + extents.p1.x = edges->extents.p1.x; + if (edges->extents.p1.y < extents.p1.y) + extents.p1.y = edges->extents.p1.y; + if (edges->extents.p2.x > extents.p2.x) + extents.p2.x = edges->extents.p2.x; + if (edges->extents.p2.y > extents.p2.y) + extents.p2.y = edges->extents.p2.y; + } + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = (extents.p2.x - extents.p1.x) / 2. * 1.25; + sf_x = self->widget.allocation.width / dim / 2; + + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = (extents.p2.y - extents.p1.y) / 2. * 1.25; + sf_y = self->widget.allocation.height / dim / 2; + + sf = MIN (sf_x, sf_y); + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = sf_x / sf * (extents.p2.x - extents.p1.x) / 2. * 1.25; + x0 = mid - dim; + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = sf_y / sf * (extents.p2.y - extents.p1.y) / 2. * 1.25; + y0 = mid - dim; + + cr = cairo_create (surface); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + cairo_save (cr); + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + cairo_set_source_rgba (cr, 0, 1, 0, .2); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->top, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + cairo_close_path (cr); + cairo_fill (cr); + } + cairo_restore (cr); + + if (edges == NULL) { + cairo_save (cr); + + /* top, bottom */ + cairo_save (cr); { + cairo_matrix_t m; + cairo_matrix_init_scale (&m, sf, sf); + cairo_matrix_translate (&m, -x0, -y0); + + cairo_set_line_width (cr, 1.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + + _compute_intersection_point (&t->left, t->top, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_move_to (cr, floor (p.x), floor (p.y) + .5); + cairo_set_dash (cr, dash, 2, fmod (floor (p.x), dash[0] + dash[1])); + + _compute_intersection_point (&t->right, t->top, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_line_to (cr, ceil (p.x), floor (p.y) + .5); + cairo_stroke (cr); + + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_move_to (cr, floor (p.x), floor (p.y) + .5); + cairo_set_dash (cr, dash, 2, fmod (floor (p.x), dash[0] + dash[1])); + + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_line_to (cr, ceil (p.x), floor (p.y) + .5); + cairo_stroke (cr); + } + } cairo_restore (cr); + + /* left extents */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + cairo_move_to (cr, t->left.p1.x, t->left.p1.y); + cairo_line_to (cr, t->left.p2.x, t->left.p2.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_set_line_width (cr, 1.); + cairo_set_dash (cr, dash, 2, 0.); + cairo_stroke (cr); + } cairo_restore (cr); + + /* left line */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_stroke (cr); + } cairo_restore (cr); + + /* right extents */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + cairo_move_to (cr, t->right.p1.x, t->right.p1.y); + cairo_line_to (cr, t->right.p2.x, t->right.p2.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_set_line_width (cr, 1.); + cairo_set_dash (cr, dash, 2, 0.); + cairo_stroke (cr); + } cairo_restore (cr); + + /* right line */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->right, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_stroke (cr); + } cairo_restore (cr); + } + + /* end-points */ + cairo_save (cr); { + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->right, t->top, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_dash (cr, dots, 2, 0.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); + cairo_set_line_width (cr, 4.); + cairo_stroke (cr); + } cairo_restore (cr); + + cairo_restore (cr); + } else { + cairo_save (cr); + + for (n = 0; n < edges->num_edges; n++) { + const edge_t *e = &edges->edges[n]; + + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + cairo_move_to (cr, e->p1.x, e->p1.y); + cairo_line_to (cr, e->p2.x, e->p2.y); + } cairo_restore (cr); + + if (e->dir < 0) { + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_set_dash (cr, dash, 2, dash[0]); + } else { + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_set_dash (cr, dash, 2, 0.); + } + + cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + + cairo_save (cr); { + cairo_scale (cr, sf, sf); + cairo_translate (cr, -x0, -y0); + cairo_move_to (cr, e->p1.x, e->p1.y); + cairo_close_path (cr); + cairo_move_to (cr, e->p2.x, e->p2.y); + cairo_close_path (cr); + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_dash (cr, dots, 2, 0.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); + cairo_set_line_width (cr, 4.); + cairo_stroke (cr); + } + + cairo_restore (cr); + } + + cairo_destroy (cr); + return surface; +} + +static void +trap_view_draw (TrapView *self, cairo_t *cr) +{ + traps_t *traps; + edges_t *edges; + gdouble sf_x, sf_y, sf; + gdouble mid, dim; + gdouble x0, y0; + double dash[2] = {8, 8}; + int n; + box_t extents; + point_t p; + + if (self->pixmap_width != self->widget.allocation.width || + self->pixmap_height != self->widget.allocation.height) + { + cairo_surface_destroy (self->pixmap); + self->pixmap = pixmap_create (self, cairo_get_target (cr)); + self->pixmap_width = self->widget.allocation.width; + self->pixmap_height = self->widget.allocation.height; + } + + cairo_save (cr); + cairo_set_source_surface (cr, self->pixmap, 0, 0); + cairo_paint (cr); + cairo_restore (cr); + + traps = self->current_traps; + if (traps == NULL) + return; + + extents = traps->extents; + edges = self->current_edges; + if (edges != NULL) { + if (edges->extents.p1.x < extents.p1.x) + extents.p1.x = edges->extents.p1.x; + if (edges->extents.p1.y < extents.p1.y) + extents.p1.y = edges->extents.p1.y; + if (edges->extents.p2.x > extents.p2.x) + extents.p2.x = edges->extents.p2.x; + if (edges->extents.p2.y > extents.p2.y) + extents.p2.y = edges->extents.p2.y; + } + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = (extents.p2.x - extents.p1.x) / 2. * 1.25; + sf_x = self->widget.allocation.width / dim / 2; + + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = (extents.p2.y - extents.p1.y) / 2. * 1.25; + sf_y = self->widget.allocation.height / dim / 2; + + sf = MIN (sf_x, sf_y); + + mid = (extents.p2.x + extents.p1.x) / 2.; + dim = sf_x / sf * (extents.p2.x - extents.p1.x) / 2. * 1.25; + x0 = mid - dim; + mid = (extents.p2.y + extents.p1.y) / 2.; + dim = sf_y / sf * (extents.p2.y - extents.p1.y) / 2. * 1.25; + y0 = mid - dim; + + cairo_save (cr); + + /* draw a zoom view of the area around the mouse */ + { + double zoom = self->mag_zoom; + int size = self->mag_size; + + cairo_save (cr); + + /* bottom right */ + cairo_rectangle (cr, self->mag_x, self->mag_y, size, size); + cairo_stroke_preserve (cr); + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_fill_preserve (cr); + cairo_clip (cr); + + /* compute roi in extents */ + cairo_translate (cr, self->mag_x + size/2, self->mag_y + size/2); + + cairo_save (cr); + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->top, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + cairo_close_path (cr); + cairo_set_source_rgba (cr, 0, 1, 0, .2); + cairo_fill (cr); + } + cairo_restore (cr); + + cairo_save (cr); { + cairo_matrix_t m; + cairo_matrix_init_scale (&m, zoom, zoom); + cairo_matrix_translate (&m, -(self->px / sf + x0), -(self->py /sf + y0)); + + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_line_width (cr, 1.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + + _compute_intersection_point (&t->left, t->top, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_move_to (cr, floor (p.x), floor (p.y) + .5); + cairo_set_dash (cr, dash, 2, fmod (floor (p.x), dash[0] + dash[1])); + + _compute_intersection_point (&t->right, t->top, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_line_to (cr, ceil (p.x), floor (p.y) + .5); + cairo_stroke (cr); + + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_move_to (cr, floor (p.x), floor (p.y) + .5); + cairo_set_dash (cr, dash, 2, fmod (floor (p.x), dash[0] + dash[1])); + + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_matrix_transform_point (&m, &p.x, &p.y); + cairo_line_to (cr, ceil (p.x), floor (p.y) + .5); + cairo_stroke (cr); + } + } cairo_restore (cr); + + cairo_save (cr); { /* left extents */ + cairo_save (cr); { + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + cairo_move_to (cr, t->left.p1.x, t->left.p1.y); + cairo_line_to (cr, t->left.p2.x, t->left.p2.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_set_line_width (cr, .5); + cairo_set_dash (cr, dash, 2, 0.); + cairo_stroke (cr); + } cairo_restore (cr); + cairo_save (cr); { /* right extents */ + cairo_save (cr); { + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + cairo_move_to (cr, t->right.p1.x, t->right.p1.y); + cairo_line_to (cr, t->right.p2.x, t->right.p2.y); + } + } cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_set_line_width (cr, .5); + cairo_set_dash (cr, dash, 2, 0.); + cairo_stroke (cr); + } cairo_restore (cr); + + cairo_save (cr); { /* left lines */ + cairo_save (cr); + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + } + cairo_restore (cr); + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_stroke (cr); + } cairo_restore (cr); + cairo_save (cr); { /* right lines */ + cairo_save (cr); + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->right, t->top, &p); + cairo_move_to (cr, p.x, p.y); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_line_to (cr, p.x, p.y); + } + cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_stroke (cr); + } cairo_restore (cr); + + /* end-points */ + cairo_save (cr); { + double dots[2] = {0., 1.}; + + cairo_save (cr); + cairo_scale (cr, zoom, zoom); + cairo_translate (cr, -(self->px / sf + x0), -(self->py /sf + y0)); + for (n = 0; n < traps->num_traps; n++) { + const trapezoid_t *t = &traps->traps[n]; + _compute_intersection_point (&t->left, t->top, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->left, t->bottom, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->right, t->top, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + _compute_intersection_point (&t->right, t->bottom, &p); + cairo_move_to (cr, p.x, p.y); + cairo_close_path (cr); + } + cairo_restore (cr); + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_dash (cr, dots, 2, 0.); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); + cairo_set_line_width (cr, 4.); + cairo_stroke (cr); + } cairo_restore (cr); + + /* grid */ + cairo_save (cr); { + int i; + + cairo_translate (cr, + -zoom*fmod (self->px/sf + x0, 1.), + -zoom*fmod (self->py/sf + y0, 1.)); + for (i = -size/2/zoom - 1; i <= size/2/zoom + 1; i++) { + cairo_move_to (cr, zoom*i, -size/2); + cairo_line_to (cr, zoom*i, size/2 + zoom); + cairo_move_to (cr, -size/2, zoom*i); + cairo_line_to (cr, size/2 + zoom, zoom*i); + } + cairo_set_source_rgba (cr, .7, .7, .7, .5); + cairo_set_line_width (cr, 1.); + cairo_stroke (cr); + } cairo_restore (cr); + } + + cairo_restore (cr); +} + +static gdouble +trapezoid_area (const trapezoid_t *t) +{ + gdouble inner_left, inner_right; + gdouble outer_left, outer_right; + gdouble height; + gdouble area; + + /* split into 3 sections: a rectangle with a pair of triangular bookends */ + inner_left = _compute_intersection_x_for_y (&t->left, t->top); + outer_left = _compute_intersection_x_for_y (&t->left, t->bottom); + if (outer_left > inner_left) { + gdouble t = outer_left; + outer_left = inner_left; + inner_left = t; + } + + inner_right = _compute_intersection_x_for_y (&t->right, t->top); + outer_right = _compute_intersection_x_for_y (&t->right, t->bottom); + if (outer_right > inner_right) { + gdouble t = outer_right; + outer_right = inner_right; + inner_right = t; + } + + if (outer_left > outer_right) { /* reverse */ + gdouble t; + + t = outer_left; + outer_left = inner_right; + inner_right = t; + + t = inner_left; + inner_left = outer_right; + outer_right = t; + } + + height = t->bottom - t->top; + area = (inner_left - outer_left) * height / 2; + area += (outer_right - inner_right) * height / 2; + area += (inner_right - inner_left) * height; + + return area; +} + +static gdouble +traps_compute_total_area (const traps_t *traps) +{ + int n; + gdouble area = 0.; + for (n = 0; n < traps->num_traps; n++) + area += trapezoid_area (&traps->traps[n]); + return area; +} + +static void +trap_view_draw_labels (TrapView *self, cairo_t *cr) +{ + PangoLayout *layout; + gint width, height; + gdouble total_area; + gchar *str; + traps_t *traps; + + traps = self->current_traps; + if (traps == NULL) + return; + + /* convert total area from fixed-point (assuming 24.8) */ + total_area = traps_compute_total_area (traps) / (256. * 256.); + str = g_strdup_printf ("Number of trapezoids:\t%d\n" + "Total area of trapezoids:\t%.2f", + traps->num_traps, + total_area); + layout = gtk_widget_create_pango_layout (&self->widget, str); + g_free (str); + + pango_layout_get_pixel_size (layout, &width, &height); + + cairo_move_to (cr, 10, 10 + height); + pango_cairo_show_layout (cr, layout); + g_object_unref (layout); +} + +static gboolean +trap_view_expose (GtkWidget *w, GdkEventExpose *ev) +{ + TrapView *self = (TrapView *) w; + cairo_t *cr; + + cr = gdk_cairo_create (w->window); + gdk_cairo_region (cr, ev->region); + cairo_clip (cr); + + trap_view_draw (self, cr); + trap_view_draw_labels (self, cr); + + cairo_destroy (cr); + return FALSE; +} + +static void +trap_view_advance (TrapView *self) +{ + if (self->current_traps && self->current_traps->prev) + self->current_traps = self->current_traps->prev; + if (self->current_edges && self->current_edges->prev) + self->current_edges = self->current_edges->prev; + self->pixmap_width = self->pixmap_height = 0; + gtk_widget_queue_draw (&self->widget); +} + +static void +trap_view_back (TrapView *self) +{ + if (self->current_traps && self->current_traps->next) + self->current_traps = self->current_traps->next; + if (self->current_edges && self->current_edges->next) + self->current_edges = self->current_edges->next; + self->pixmap_width = self->pixmap_height = 0; + gtk_widget_queue_draw (&self->widget); +} + +static void +trap_view_group_foreach (TrapView *group, GFunc func, gpointer data) +{ + while (group) { + func (group, data); + group = group->group_next; + } +} + +static gboolean +trap_view_key_press (GtkWidget *w, GdkEventKey *ev) +{ + TrapView *self = (TrapView *) w; + + switch (ev->keyval) { + case GDK_BackSpace: + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_back, + NULL); + break; + + case GDK_space: + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_advance, + NULL); + break; + + case GDK_Return: + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_advance, + NULL); + break; + + case GDK_Escape: + case GDK_Q: + gtk_main_quit (); + break; + } + + return FALSE; +} + +static gboolean +trap_view_button_press (GtkWidget *w, GdkEventButton *ev) +{ + TrapView *self = (TrapView *) w; + + if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + if (ev->type == GDK_BUTTON_PRESS) { + if (self->current_traps == NULL) + return FALSE; + + if (ev->button == 1) { + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_advance, + NULL); + } else if (ev->button == 3) { + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_back, + NULL); + } + } + } + else + { + self->in_mag_drag = TRUE; + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } + + return FALSE; +} + +static gboolean +trap_view_button_release (GtkWidget *w, GdkEventButton *ev) +{ + TrapView *self = (TrapView *) w; + + self->in_mag_drag = FALSE; + + return FALSE; +} + +static void +trap_view_update_mouse (TrapView *self, GdkEventMotion *ev) +{ + self->px = ev->x; + self->py = ev->y; + + gtk_widget_queue_draw (&self->widget); +} + +static void +trap_view_update_magnifier (TrapView *self, gint *xy) +{ + self->mag_x = xy[0]; + self->mag_y = xy[1]; + + gtk_widget_queue_draw (&self->widget); +} + +static gboolean +trap_view_motion (GtkWidget *w, GdkEventMotion *ev) +{ + TrapView *self = (TrapView *) w; + + if (self->in_mag_drag) { + int xy[2]; + + xy[0] = self->mag_x + ev->x - self->mag_drag_x; + xy[1] = self->mag_y + ev->y - self->mag_drag_y; + + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_update_magnifier, + xy); + + self->mag_drag_x = ev->x; + self->mag_drag_y = ev->y; + } else if (ev->x < self->mag_x || + ev->y < self->mag_y || + ev->x > self->mag_x + self->mag_size || + ev->y > self->mag_y + self->mag_size) + { + trap_view_group_foreach (self->group_head, + (GFunc) trap_view_update_mouse, + ev); + } + + return FALSE; +} + +static void +trap_view_realize (GtkWidget *widget) +{ + GdkWindowAttr attributes; + + GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.visual = gtk_widget_get_visual (widget); + attributes.colormap = gtk_widget_get_colormap (widget); + attributes.event_mask = gtk_widget_get_events (widget) | + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_KEY_PRESS_MASK | + GDK_KEY_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_MOTION_MASK | + GDK_EXPOSURE_MASK; + + widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), + &attributes, + GDK_WA_X | GDK_WA_Y | + GDK_WA_VISUAL | GDK_WA_COLORMAP); + gdk_window_set_user_data (widget->window, widget); + + widget->style = gtk_style_attach (widget->style, widget->window); + gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); +} + +static void +trap_view_size_allocate (GtkWidget *w, GdkRectangle *r) +{ + TrapView *self = (TrapView *) w; + + GTK_WIDGET_CLASS (trap_view_parent_class)->size_allocate (w, r); + + self->mag_x = w->allocation.width - self->mag_size - 10; + self->mag_y = w->allocation.height - self->mag_size - 10; +} + +static void +trap_view_finalize (GObject *obj) +{ + G_OBJECT_CLASS (trap_view_parent_class)->finalize (obj); +} + +static void +trap_view_class_init (TrapViewClass *klass) +{ + GObjectClass *object_class = (GObjectClass *) klass; + GtkWidgetClass *widget_class = (GtkWidgetClass *) klass; + + object_class->finalize = trap_view_finalize; + + widget_class->realize = trap_view_realize; + widget_class->size_allocate = trap_view_size_allocate; + widget_class->expose_event = trap_view_expose; + widget_class->key_press_event = trap_view_key_press; + widget_class->button_press_event = trap_view_button_press; + widget_class->button_release_event = trap_view_button_release; + widget_class->motion_notify_event = trap_view_motion; +} + +static void +trap_view_init (TrapView *self) +{ + self->mag_zoom = 10; + self->mag_size = 200; + + GTK_WIDGET_SET_FLAGS (self, GTK_CAN_FOCUS); +} + +static traps_t * +_traps_add_trapezoid (TrapView *tv, traps_t *traps, const trapezoid_t *trap) +{ + if (trap->top < traps->extents.p1.y) + traps->extents.p1.y = trap->top; + if (trap->bottom > traps->extents.p2.y) + traps->extents.p2.y = trap->bottom; + + if (trap->left.p1.x < traps->extents.p1.x) + traps->extents.p1.x = trap->left.p1.x; + if (trap->left.p2.x < traps->extents.p1.x) + traps->extents.p1.x = trap->left.p2.x; + + if (trap->right.p1.x > traps->extents.p2.x) + traps->extents.p2.x = trap->right.p1.x; + if (trap->right.p2.x > traps->extents.p2.x) + traps->extents.p2.x = trap->right.p2.x; + + if (traps->num_traps == traps->size) { + int newsize = 2 * traps->size; + void *newtraps; + + newtraps = g_realloc (traps, + sizeof (traps_t) + newsize * sizeof (trapezoid_t)); + if (newtraps == NULL) + return traps; + + if (tv->current_traps == traps) + tv->current_traps = newtraps; + + traps = newtraps; + traps->size = newsize; + + if (traps->next != NULL) + traps->next->prev = newtraps; + if (traps->prev != NULL) + traps->prev->next = newtraps; + else + tv->traps_list = newtraps; + } + + traps->traps[traps->num_traps++] = *trap; + + return traps; +} + +static traps_t * +traps_new (TrapView *tv) +{ + traps_t *t; + + t = g_malloc (sizeof (traps_t) + 16 * sizeof (trapezoid_t)); + t->prev = NULL; + t->next = tv->traps_list; + if (tv->traps_list) + tv->traps_list->prev = t; + tv->traps_list = t; + + if (tv->current_traps == NULL) + tv->current_traps = t; + + t->size = 16; + t->num_traps = 0; + t->extents.p1.x = G_MAXDOUBLE; + t->extents.p1.y = G_MAXDOUBLE; + t->extents.p2.x = -G_MAXDOUBLE; + t->extents.p2.y = -G_MAXDOUBLE; + + return t; +} + +static edges_t * +_edges_add_edge (TrapView *tv, edges_t *edges, edge_t *e) +{ + if (e->top < edges->extents.p1.y) + edges->extents.p1.y = e->top; + if (e->bottom > edges->extents.p2.y) + edges->extents.p2.y = e->bottom; + + _compute_intersection_point (&e->line, e->top, &e->p1); + _compute_intersection_point (&e->line, e->bottom, &e->p2); + + if (e->p1.x < edges->extents.p1.x) + edges->extents.p1.x = e->p1.x; + if (e->p2.x < edges->extents.p1.x) + edges->extents.p1.x = e->p2.x; + + if (e->p1.x > edges->extents.p2.x) + edges->extents.p2.x = e->p1.x; + if (e->p2.x > edges->extents.p2.x) + edges->extents.p2.x = e->p2.x; + + if (edges->num_edges == edges->size) { + int newsize = 2 * edges->size; + void *newedges; + + newedges = g_realloc (edges, + sizeof (edges_t) + newsize * sizeof (edge_t)); + if (newedges == NULL) + return edges; + + if (tv->current_edges == edges) + tv->current_edges = newedges; + + edges = newedges; + edges->size = newsize; + + if (edges->next != NULL) + edges->next->prev = newedges; + if (edges->prev != NULL) + edges->prev->next = newedges; + else + tv->edges_list = newedges; + } + + edges->edges[edges->num_edges++] = *e; + + return edges; +} + +static edges_t * +edges_new (TrapView *tv) +{ + edges_t *t; + + t = g_malloc (sizeof (edges_t) + 16 * sizeof (edge_t)); + t->prev = NULL; + t->next = tv->edges_list; + if (tv->edges_list) + tv->edges_list->prev = t; + tv->edges_list = t; + + if (tv->current_edges == NULL) + tv->current_edges = t; + + t->size = 16; + t->num_edges = 0; + t->extents.p1.x = G_MAXDOUBLE; + t->extents.p1.y = G_MAXDOUBLE; + t->extents.p2.x = -G_MAXDOUBLE; + t->extents.p2.y = -G_MAXDOUBLE; + + return t; +} + +int +main (int argc, char **argv) +{ + TrapView *tv, *group_head = NULL, *group_prev = NULL; + GtkWidget *window, *hbox; + FILE *file; + + gtk_init (&argc, &argv); + + hbox = gtk_hbox_new (TRUE, 0); + + file = fopen (argv[1], "r"); + if (file != NULL) { + char *line = NULL; + size_t len = 0; + traps_t *traps; + + tv = g_object_new (trap_view_get_type (), NULL); + gtk_box_pack_start (GTK_BOX (hbox), &tv->widget, TRUE, TRUE, 0); + gtk_widget_show (&tv->widget); + + tv->group_prev = group_prev; + tv->group_next = NULL; + if (group_prev) + group_prev->group_next = tv; + group_prev = tv; + if (group_head == NULL) + group_head = tv; + tv->group_head = group_head; + + traps = traps_new (tv); + while (getline (&line, &len, file) != -1) { + trapezoid_t t; + + if (sscanf (line, + "%lf %lf L:(%lf, %lf), (%lf, %lf) R:(%lf, %lf), (%lf, %lf)", + &t.top, &t.bottom, + &t.left.p1.x, &t.left.p1.y, + &t.left.p2.x, &t.left.p2.y, + &t.right.p1.x, &t.right.p1.y, + &t.right.p2.x, &t.right.p2.y) == 10) { + traps = _traps_add_trapezoid (tv, traps, &t); + } else { + if (traps->num_traps) { + g_print ("read %d trapezoids\n", traps->num_traps); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + traps->extents.p1.x, traps->extents.p1.y, + traps->extents.p2.x, traps->extents.p2.y); + traps = traps_new (tv); + } + } + } + free (line); + fclose (file); + + if (traps->num_traps) { + g_print ("read %d trapezoids\n", traps->num_traps); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + traps->extents.p1.x, traps->extents.p1.y, + traps->extents.p2.x, traps->extents.p2.y); + } + } + + file = fopen (argv[2], "r"); + if (file != NULL) { + char *line = NULL; + size_t len = 0; + traps_t *traps; + + tv = g_object_new (trap_view_get_type (), NULL); + gtk_box_pack_start (GTK_BOX (hbox), &tv->widget, TRUE, TRUE, 0); + gtk_widget_show (&tv->widget); + + tv->group_prev = group_prev; + tv->group_next = NULL; + if (group_prev) + group_prev->group_next = tv; + group_prev = tv; + if (group_head == NULL) + group_head = tv; + tv->group_head = group_head; + + traps = traps_new (tv); + while (getline (&line, &len, file) != -1) { + trapezoid_t t; + + if (sscanf (line, + "%lf %lf L:(%lf, %lf), (%lf, %lf) R:(%lf, %lf), (%lf, %lf)", + &t.top, &t.bottom, + &t.left.p1.x, &t.left.p1.y, + &t.left.p2.x, &t.left.p2.y, + &t.right.p1.x, &t.right.p1.y, + &t.right.p2.x, &t.right.p2.y) == 10) { + traps = _traps_add_trapezoid (tv, traps, &t); + } else { + if (traps->num_traps) { + g_print ("read %d trapezoids\n", traps->num_traps); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + traps->extents.p1.x, traps->extents.p1.y, + traps->extents.p2.x, traps->extents.p2.y); + traps = traps_new (tv); + } + } + } + free (line); + fclose (file); + + if (traps->num_traps) { + g_print ("read %d trapezoids\n", traps->num_traps); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + traps->extents.p1.x, traps->extents.p1.y, + traps->extents.p2.x, traps->extents.p2.y); + } + } + +#if 1 + if (argc >=4) { + file = fopen (argv[3], "r"); + if (file != NULL) { + char *line = NULL; + size_t len = 0; + edges_t *edges; + + edges = edges_new (tv); + while (getline (&line, &len, file) != -1) { + edge_t e; + + if (sscanf (line, + "(%lf, %lf), (%lf, %lf) %lf %lf %d", + &e.line.p1.x, &e.line.p1.y, + &e.line.p2.x, &e.line.p2.y, + &e.top, &e.bottom, + &e.dir) == 7) { + edges = _edges_add_edge (tv, edges, &e); + } else { + if (edges->num_edges) { + g_print ("read %d edges\n", edges->num_edges); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + edges->extents.p1.x, edges->extents.p1.y, + edges->extents.p2.x, edges->extents.p2.y); + edges = edges_new (tv); + } + } + } + free (line); + fclose (file); + + if (edges->num_edges) { + g_print ("read %d edges\n", edges->num_edges); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + edges->extents.p1.x, edges->extents.p1.y, + edges->extents.p2.x, edges->extents.p2.y); + } + } + } +#else + if (argc >= 4) { + file = fopen (argv[3], "r"); + if (file != NULL) { + char *line = NULL; + size_t len = 0; + traps_t *traps; + + tv = g_object_new (trap_view_get_type (), NULL); + gtk_box_pack_start (GTK_BOX (hbox), &tv->widget, TRUE, TRUE, 0); + gtk_widget_show (&tv->widget); + + tv->group_prev = group_prev; + tv->group_next = NULL; + if (group_prev) + group_prev->group_next = tv; + group_prev = tv; + if (group_head == NULL) + group_head = tv; + tv->group_head = group_head; + + traps = traps_new (tv); + while (getline (&line, &len, file) != -1) { + trapezoid_t t; + + if (sscanf (line, + "%lf %lf L:(%lf, %lf), (%lf, %lf) R:(%lf, %lf), (%lf, %lf)", + &t.top, &t.bottom, + &t.left.p1.x, &t.left.p1.y, + &t.left.p2.x, &t.left.p2.y, + &t.right.p1.x, &t.right.p1.y, + &t.right.p2.x, &t.right.p2.y) == 10) { + traps = _traps_add_trapezoid (tv, traps, &t); + } else { + if (traps->num_traps) { + g_print ("read %d trapezoids\n", traps->num_traps); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + traps->extents.p1.x, traps->extents.p1.y, + traps->extents.p2.x, traps->extents.p2.y); + traps = traps_new (tv); + } + } + } + free (line); + fclose (file); + + if (traps->num_traps) { + g_print ("read %d trapezoids\n", traps->num_traps); + g_print ("extents=(%lg, %lg), (%lg, %lg)\n", + traps->extents.p1.x, traps->extents.p1.y, + traps->extents.p2.x, traps->extents.p2.y); + } + } + } +#endif + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + g_signal_connect (window, "delete-event", + G_CALLBACK (gtk_main_quit), NULL); + gtk_widget_set_size_request (window, 512, 512); + gtk_container_add (GTK_CONTAINER (window), hbox); + gtk_widget_show (hbox); + gtk_widget_show (window); + + gtk_main (); + return 0; +} diff --git a/libs/cairo-1.16.0/util/trace-to-xml.c b/libs/cairo-1.16.0/util/trace-to-xml.c new file mode 100644 index 0000000..a0f03cc --- /dev/null +++ b/libs/cairo-1.16.0/util/trace-to-xml.c @@ -0,0 +1,78 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <cairo-xml.h> +#include <cairo-script-interpreter.h> + +#include <stdio.h> +#include <string.h> + +static cairo_surface_t * +_surface_create (void *_closure, + cairo_content_t content, + double width, double height, + long uid) +{ + cairo_surface_t **closure = _closure; + cairo_surface_t *surface; + cairo_rectangle_t extents; + + extents.x = extents.y = 0; + extents.width = width; + extents.height = height; + surface = cairo_recording_surface_create (content, &extents); + if (*closure == NULL) + *closure = cairo_surface_reference (surface); + + return surface; +} + +static cairo_status_t +stdio_write (void *closure, const unsigned char *data, unsigned len) +{ + if (fwrite (data, len, 1, closure) == 1) + return CAIRO_STATUS_SUCCESS; + else + return CAIRO_STATUS_WRITE_ERROR; +} + +int +main (int argc, char **argv) +{ + cairo_surface_t *surface = NULL; + const cairo_script_interpreter_hooks_t hooks = { + .closure = &surface, + .surface_create = _surface_create, + }; + cairo_script_interpreter_t *csi; + FILE *in = stdin, *out = stdout; + + if (argc >= 2 && strcmp (argv[1], "-")) + in = fopen (argv[1], "r"); + if (argc >= 3 && strcmp (argv[2], "-")) + out = fopen (argv[2], "w"); + + csi = cairo_script_interpreter_create (); + cairo_script_interpreter_install_hooks (csi, &hooks); + cairo_script_interpreter_feed_stream (csi, in); + cairo_script_interpreter_finish (csi); + cairo_script_interpreter_destroy (csi); + + if (surface != NULL) { + cairo_device_t *xml; + + xml = cairo_xml_create_for_stream (stdio_write, out); + cairo_xml_for_recording_surface (xml, surface); + cairo_device_destroy (xml); + + cairo_surface_destroy (surface); + } + + if (in != stdin) + fclose (in); + if (out != stdout) + fclose (out); + + return 0; +} diff --git a/libs/cairo-1.16.0/util/waterfall b/libs/cairo-1.16.0/util/waterfall new file mode 100755 index 0000000..5a683c5 --- /dev/null +++ b/libs/cairo-1.16.0/util/waterfall @@ -0,0 +1,97 @@ +#!/usr/bin/python + +import sys +import cairo +import pygtk +pygtk.require('2.0') +import gtk +import gtk.gdk +import pango +import gobject + +class CairoView(gtk.Window): + def __init__(self, family="", slant=0, weight=0, size=18, text="the quick brown fox jumps over the lazy dog! THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG?"): + gtk.Widget.__init__ (self) + + self.family = family + if slant == "italic": + self.slant = cairo.FONT_SLANT_ITALIC + elif slant == "oblique": + self.slant = cairo.FONT_SLANT_OBLIQUE + else: + self.slant = cairo.FONT_SLANT_NORMAL + if weight == "bold": + self.weight = cairo.FONT_WEIGHT_BOLD + else: + self.weight = cairo.FONT_WEIGHT_NORMAL + self.size = float (size) + self.text = text + + def do_realize(self): + self.set_flags(self.flags() | gtk.REALIZED) + + self.window = gtk.gdk.Window( + self.get_parent_window(), + width=self.allocation.width, + height=self.allocation.height, + window_type=gtk.gdk.WINDOW_CHILD, + wclass=gtk.gdk.INPUT_OUTPUT, + event_mask=self.get_events() | gtk.gdk.EXPOSURE_MASK) + + self.window.set_user_data(self) + + self.style.attach(self.window) + + self.style.set_background(self.window, gtk.STATE_NORMAL) + + self.window.move_resize(0, 0, 1000, 1000) + + def do_unrealize(self): + self.window.destroy() + + def do_expose_event(self, event): + self.draw (event) + + return False + + def draw(self, event = None): + + cr = self.window.cairo_create() + if event: + cr.rectangle(event.area.x, event.area.y, + event.area.width, event.area.height) + cr.clip() + + cr.set_source_rgb (1, 1, 1) + cr.paint () + cr.set_source_rgb (0, 0, 0) + + cr.select_font_face (self.family, self.slant, self.weight) + + for size in range (1, 60): + cr.set_font_size (size) + extents = cr.text_extents (self.text) + cr.move_to (-extents[0], -extents[1]) + cr.show_text (self.text) + cr.translate (0, extents[3]) + + def run(self): + + self.props.allow_shrink = True + self.connect("destroy", gtk.main_quit) + self.show() + + gtk.main() + +gobject.type_register(CairoView) + +def main(args): + + if len (args) == 1: + print "usage: cairo-view family [slant [weight [size [text]]]]" + sys.exit (1) + cv= CairoView (*args[1:]) + cv.run() + +if __name__ == "__main__": + main(sys.argv) diff --git a/libs/cairo-1.16.0/util/xml-to-trace.c b/libs/cairo-1.16.0/util/xml-to-trace.c new file mode 100644 index 0000000..13b7e57 --- /dev/null +++ b/libs/cairo-1.16.0/util/xml-to-trace.c @@ -0,0 +1,263 @@ +#include <stdio.h> +#include <string.h> +#include <expat.h> +#include <assert.h> + +struct trace { + FILE *stream; + char tail_buf[80]; + const char *tail; + int surface_depth; +}; + +static void +start_element (void *closure, + const char *element, + const char **attr) +{ + struct trace *trace = closure; + + if (strcmp (element, "surface") == 0) { + const char *content = "COLOR_ALPHA"; + const char *width = NULL; + const char *height = NULL; + + while (*attr) { + if (strcmp (*attr, "content") == 0) { + content = *++attr; + } else if (strcmp (*attr, "width") == 0) { + width = *++attr; + } else if (strcmp (*attr, "height") == 0) { + height = *++attr; + } else { + fprintf (stderr, "unknown surface attribute '%s'\n", *attr); + attr++; + } + attr++; + } + + fprintf (trace->stream, "<< /content //%s", content); + if (width != NULL && height != NULL) { + fprintf (trace->stream, + " /width %s /height %s", + width, height); + } + if (trace->surface_depth++ == 0) + fprintf (trace->stream, " >> surface context\n"); + else + fprintf (trace->stream, " >> surface dup context\n"); + } else if (strcmp (element, "image") == 0) { + const char *format = "ARGB24"; + const char *width = NULL; + const char *height = NULL; + + while (*attr) { + if (strcmp (*attr, "format") == 0) { + format = *++attr; + } else if (strcmp (*attr, "width") == 0) { + width = *++attr; + } else if (strcmp (*attr, "height") == 0) { + height = *++attr; + } else { + fprintf (stderr, "unknown image attribute '%s'\n", *attr); + attr++; + } + attr++; + } + + fprintf (trace->stream, + "<< /format //%s /width %s /height %s /mime-type (image/png) /source <{", + format, width, height); + assert (trace->tail == NULL); + trace->tail = "}> >> image pattern\n"; + } else if (strcmp (element, "solid") == 0) { + trace->tail = " rgba\n"; + } else if (strcmp (element, "linear") == 0) { + const char *x1 = NULL; + const char *x2 = NULL; + const char *y1 = NULL; + const char *y2 = NULL; + + while (*attr) { + if (strcmp (*attr, "x1") == 0) { + x1 = *++attr; + } else if (strcmp (*attr, "x2") == 0) { + x2 = *++attr; + } else if (strcmp (*attr, "y1") == 0) { + y1 = *++attr; + } else if (strcmp (*attr, "y2") == 0) { + y2 = *++attr; + } else { + fprintf (stderr, "unknown linear attribute '%s'\n", *attr); + attr++; + } + attr++; + } + + fprintf (trace->stream, "%s %s %s %s linear\n", x1, y1, x2, y2); + } else if (strcmp (element, "radial") == 0) { + const char *x1 = NULL; + const char *y1 = NULL; + const char *r1 = NULL; + const char *y2 = NULL; + const char *x2 = NULL; + const char *r2 = NULL; + + while (*attr) { + if (strcmp (*attr, "x1") == 0) { + x1 = *++attr; + } else if (strcmp (*attr, "y1") == 0) { + y1 = *++attr; + } else if (strcmp (*attr, "r1") == 0) { + r1 = *++attr; + } else if (strcmp (*attr, "x2") == 0) { + x2 = *++attr; + } else if (strcmp (*attr, "y2") == 0) { + y2 = *++attr; + } else if (strcmp (*attr, "r2") == 0) { + r2 = *++attr; + } else { + fprintf (stderr, "unknown radial attribute '%s'\n", *attr); + attr++; + } + attr++; + } + + fprintf (trace->stream, + "%s %s %s %s %s %s radial\n", + x1, y1, r1, x2, y2, r2); + } else if (strcmp (element, "matrix") == 0) { + fprintf (trace->stream, "[ "); + trace->tail = " ] set-matrix\n"; + } else if (strcmp (element, "extend") == 0) { + trace->tail = " set-extend\n"; + } else if (strcmp (element, "filter") == 0) { + trace->tail = " set-filter\n"; + } else if (strcmp (element, "operator") == 0) { + trace->tail = " set-operator\n"; + } else if (strcmp (element, "tolerance") == 0) { + trace->tail = " set-tolerance\n"; + } else if (strcmp (element, "fill-rule") == 0) { + trace->tail = " set-fill-rule\n"; + } else if (strcmp (element, "line-cap") == 0) { + trace->tail = " set-line-cap\n"; + } else if (strcmp (element, "line-join") == 0) { + trace->tail = " set-line-join\n"; + } else if (strcmp (element, "line-width") == 0) { + trace->tail = " set-line-width\n"; + } else if (strcmp (element, "miter-limit") == 0) { + trace->tail = " set-miter-limit\n"; + } else if (strcmp (element, "antialias") == 0) { + trace->tail = " set-antialias\n"; + } else if (strcmp (element, "color-stop") == 0) { + trace->tail = " add-color-stop\n"; + } else if (strcmp (element, "path") == 0) { + /* need to reset the matrix to identity before the path */ + fprintf (trace->stream, "identity set-matrix "); + trace->tail = "\n"; + } else if (strcmp (element, "dash") == 0) { + const char *offset = "0"; + + while (*attr) { + if (strcmp (*attr, "offset") == 0) { + offset = *++attr; + } + attr++; + } + + fprintf (trace->stream, "["); + sprintf (trace->tail_buf, "] %s set-dash\n", offset); + trace->tail = trace->tail_buf; + } else { + } +} + +static void +cdata (void *closure, + const XML_Char *s, + int len) +{ + struct trace *trace = closure; + + if (trace->tail) + fwrite (s, len, 1, trace->stream); +} + +static void +end_element (void *closure, + const char *element) +{ + struct trace *trace = closure; + + if (trace->tail) { + fprintf (trace->stream, "%s", trace->tail); + trace->tail = NULL; + } + + if (strcmp (element, "paint") == 0) { + fprintf (trace->stream, "paint\n"); + } else if (strcmp (element, "mask") == 0) { + fprintf (trace->stream, "mask\n"); + } else if (strcmp (element, "stroke") == 0) { + fprintf (trace->stream, "stroke\n"); + } else if (strcmp (element, "fill") == 0) { + fprintf (trace->stream, "fill\n"); + } else if (strcmp (element, "glyphs") == 0) { + fprintf (trace->stream, "show-glyphs\n"); + } else if (strcmp (element, "clip") == 0) { + fprintf (trace->stream, "clip\n"); + } else if (strcmp (element, "source-pattern") == 0) { + fprintf (trace->stream, "set-source\n"); + } else if (strcmp (element, "mask-pattern") == 0) { + } else if (strcmp (element, "surface") == 0) { + if (--trace->surface_depth == 0) + fprintf (trace->stream, "pop\n"); + else + fprintf (trace->stream, "pop pattern\n"); + } +} + +int +main (int argc, char **argv) +{ + struct trace trace; + XML_Parser p; + char buf[8192]; + int done = 0; + FILE *in = stdin; + + trace.stream = stdout; + trace.tail = NULL; + trace.surface_depth = 0; + + if (argc >= 2 && strcmp (argv[1], "-")) + in = fopen (argv[1], "r"); + if (argc >= 3 && strcmp (argv[2], "-")) + trace.stream = fopen (argv[2], "w"); + + p = XML_ParserCreate (NULL); + XML_SetUserData (p, &trace); + XML_SetElementHandler (p, start_element, end_element); + XML_SetCharacterDataHandler (p, cdata); + do { + int len; + + len = fread (buf, 1, sizeof (buf), in); + done = feof (stdin); + + if (XML_Parse (p, buf, len, done) == XML_STATUS_ERROR) { + fprintf (stderr, "Parse error at line %ld:\n%s\n", + XML_GetCurrentLineNumber (p), + XML_ErrorString (XML_GetErrorCode (p))); + exit (-1); + } + } while (! done); + XML_ParserFree (p); + + if (in != stdin) + fclose (in); + if (trace.stream != stdout) + fclose (trace.stream); + + return 0; +} diff --git a/libs/cairo-1.16.0/util/xr2cairo b/libs/cairo-1.16.0/util/xr2cairo new file mode 100755 index 0000000..c749aa4 --- /dev/null +++ b/libs/cairo-1.16.0/util/xr2cairo @@ -0,0 +1,49 @@ +#!/bin/sh +set -e + +if [ $# -lt 1 ]; then + argv0=`basename $0` + echo "$argv0: Convert source code written for Xr to use Cairo instead." >&2 + echo "" >&2 + echo "Usage: $argv0 file [...]" >&2 + exit 1 +fi + +xr2cairo() { + file=$1 + backup=$file.xr + + if [ -e $backup ]; then + echo "Warning: Backup file $backup already exists --- not backing up this time." >&2 + else + cp $file $backup + fi + sed -e ' + s/\(Xr[a-zA-Z]*\)RGB/\1Rgb/g + s/\(Xr[a-zA-Z]*\)NextTo/\1Similar/g + + s/Xr\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z]\+\)/\Lcairo_\1_\2_\3_\4_\5\E/g + s/Xr\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z]\+\)/\Lcairo_\1_\2_\3_\4\E/g + s/Xr\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z]\+\)/\Lcairo_\1_\2_\3\E/g + s/Xr\([A-Z]\+[a-z]\+\)\([A-Z]\+[a-z0-9]\+\)/\Lcairo_\1_\2\E/g + s/Xr\([A-Z]\+[a-z]\+\)/\Lcairo_\1\E/g + + s/\(cairo_\(operator\|status\|fill_rule\|line_cap\|line_join\|filter\|format\)_[a-z0-9_]\{2,\}\)/\U\1/g + + s/cairo_\(fill_rule\|line_cap\|line_join\|format\|operator\|status\|filter\|surface\|matrix\)$/cairo_\1_t/g + s/cairo_\(fill_rule\|line_cap\|line_join\|format\|operator\|status\|filter\|surface\|matrix\)\([^_]\)/cairo_\1_t\2/g + s/_cairo_\(fill_rule\|line_cap\|line_join\|format\|operator\|status\|filter\|surface\|matrix\)_t/cairo_\1/g + s/cairo_state/cairo_t/g + s/_cairo_t\([^a-zA-Z0-9_]\)/cairo\1/g + + s/Xr\.h/cairo.h/g + + ' $backup > $file +} + +while [ $# -gt 0 ]; do + file=$1 + shift + xr2cairo $file +done + |